Ultraschall-Objekterkennung mit TI PGA460 – Teil 4

5

06.11.2019 von plaintron

In den vorherigen Teilen dieses Beitrags habe ich gezeigt, wie die Hardware des PGA460 aufgebaut ist und mit welchen Befehlen sie sich steuern lässt. Um ein System vollständig zu verstehen, ist ein wenig Reverse-Engineering nützlich. Mit der EVM-GUI lassen sich alle Steuerbefehle erzeugen, die das PGA460 unterstützt. Die Kommunikation zwischen PC und IC lässt sich mit einem TTL-USB-Wandler abgreifen und sichtbar machen.

In diesem Beitrag  möchte ich alle GUI-Funktionen auf Byte-Ebene betrachten und erklären.

Es geht los mit der Maske „General“, Eingabebereich Transmit:

General

Transmit: Drive & Receive Frequency (58)
55 09 1C DA 	 // read register 1C (FRQUENCY)
55 0A 1C 8C 4D 	 // write register 1C (FREQUENCY) to 140 = 58kHz

Transmit: Enable Burst Frequency Range Shift
55 09 1A DC 	 // read register 1A (TVGAIN6)
55 0A 1A FD DD 	 // write register 1A (TVGAIN6), set Bit0 (FREQ_SHIFT) to 1
55 09 1C DA 	 // read register 1C (FREQUENCY)
55 0A 1C 8C 4D 	 // write register 1C (FREQUENCY) to 140 = 58kHz
55 0A 41 4D 67 	 // write register 41 (BPF_A2_MSB)
55 0A 42 33 80 	 // write register 42 (BPF_A2_LSB)
55 0A 43 F9 B8 	 // write register 43 (BPF_A3_MSB)
55 0A 44 A5 0C 	 // write register 44 (BPF_A3_LSB)
55 0A 45 03 AD 	 // write register 45 (BPF_B1_MSB)
55 0A 46 2D 82 	 // write register 46 (BPF_B1_LSB)

Transmit: Disable Burst Frequency Range Shift
55 09 1A DC 	 // read register 1A (TVGAIN6)
55 0A 1A FC DE 	 // write register 1A (TVGAIN), set Bit0 (FREQ_SHIFT) to 0
55 09 1C DA 	 // read register 1C (FREQUENCY)
55 0A 1C 8C 4D 	 // write register 1C (FREQUENCY) to 140 = 58kHz

Transmit: Deadtime (ns)
55 09 1D D9 		 // read register 1D (DEADTIME)
55 0A 1D FF D8 	 // write register 1D (DEADTIME), set Bit0-Bit3 (PULSE_DT)

Wie zuvor beschrieben, beginnt jede Transaktion mit 0x55 als Sync-Byte. Am Ende der Transaktion steht hier immer die Prüfsumme, die aber nur bei Befehlen mit einer Länge von mehr als einem Byte notwendig ist. Zur Ermittlung der Prüfsumme werden alle Bytes nach dem Sync-Byte addiert, der Übertrag jeweils mit in die nächste Addition übenommen und abschließend das 1-Byte-Ergebnis invertiert.

Die Transducer-Frequenz FRQUENCY wird eingestellt, indem das zuständige Register direkt beschrieben wird. Das wird auch für alle folgenden Einstellungen gelten. Bevor ein Register beschrieben wird, liest die GUI-Software das jeweilige Register, um garantiert den aktuellen Wert zu verwenden. Ansonsten könnte etwa durch eine Unterbrechung der Kommunikation eine Abweichung zwischen GUI und IC entstehen.

Das PGA460 hat zwei Frequenzbereiche. Im unteren Frequenzbereich werden alle Filtereinstellungen automatisch gesetzt, ihm hohen Bereich FREQ_SHIFT müssen diese manuell berechnet und übertragen werden.

Wie oben zu sehen ist, werden die BPF-Koeffizienten (Bandpass) nur gesetzt, wenn in den hohen Freqzuenzbereich geschaltet wird. Für die manuelle Koeffizienten-Berechnung steht in der GUI-Software ein Rechner zur Verfügung.

DEADTIME ist ein Zeitwert, der bestimmt, ob die Gegentakt-Endstufe am Ausgang direkt von der positiven auf die negative Welle schaltet, oder dazwischen eine kurze Pause auf der Nulllinie einlegt. Bei Verwendung eines Transformators sollte die DEADTIME 0 sein.

Receive:

Receive: AFE Gain Range (dB)
55 09 26 D0    // read register 26 (DECPL_TEMP)
55 0A 26 0F C0 // write register 260 (DECPL_TEMP), Bit 6-Bit 7 (AFE_GAIN_RNG) to b11
55 09 1B DB    // read register 1B (INIT GAIN)
55 0A 1B 40 9A // write register 1B (INIT_GAIN), set Bit0-Bit5 (GAIN_INIT)

Receive: Inital AFE Gain (dB)
55 09 1B DB    // read register 1B (INIT GAIN)
55 0A 1B 43 97 // write register 1B (INIT_GAIN), set Bit0-Bit5

Receive: Fixed Gain Level
55 09 1B DB    // read register 1B (INIT_GAIN)
55 0A 1B 7F 5B // write register 1B (INIT_GAIN), set Bit0-Bit5 to current value
55 0A 1A 00 DB // write register 1A (TVGAIN6), set Bit2-Bit7 (TVG_G5) 
55 0A 19 00 DC // write register 1A (TVGAIN6), set to min
55 0A 18 00 DD // write register 1A (TVGAIN6), set to min
55 0A 17 00 DE // write register 1A (TVGAIN6), set to min
55 0A 16 AA 35 // write register 1A (TVGAIN6), set to tMax
55 0A 15 AA 36 // write register 1A (TVGAIN6), set to tMax
55 0A 14 AA 37 // write register 1A (TVGAIN6), set to tMax

Receive: Band-Pass Filter Bandwidth (kHz)
55 09 1B DB    // read register 1B (INIT_GAIN)
55 0A 1B 07 D3 // write register 1B (INIT_GAIN), set Bit0-Bit1 (BPF_BW)

Receive: Low Pass Filter Cutoff (kHz)
55 09 21 D5    // read register 21 (CURR_LIM_P2) 
55 0A 21 F1 E2 // write register 21 (CURR_LIM_P2), set Bit6-Bit7 (LPF_CO)

Receive: Threshold Deglitch Time (us)
55 09 1D D9    // read register 1D (DEADTIME) 
55 0A 1D 00 D8 // write register 21 (DEADTIME), set Bit4-Bit7 (THR_CMP_DEGLTCH)

AFE_GAIN_RNG bestimmt den Verstärkungsbereich für das Analog Front End. In diesem Bereich lässt sich später die Verstärkungskurve anlegen. Der zugehörige Wert liegt im Register DECPL_TEMP. Anschließend muss GAIN_INIT auf einen Wert in diesem Bereich eingestellt werden. Das passiert hier automatisch durch die GUI-Software, kann aber, wie der folgende Abschnitt zeigt, auch manuell erledigt werden.

„Fixed Gain Level“ ist keine IC-Funktion, sondern eine Hilfsfunktion der Software, mit der alle zeitabhängigen Verstärkungspunkte auf den gleichen Pegel gesetzt werden.

Die Vorstufe des PGA460 verfügt über einen Bandpass-Filter und einen Tiefpass-Filter, um Störgeräusche zu minimieren. Mit den Werten BPF_BW und LPF_CO werden Bandbreite bzw. Grenzfrequenz eingestellt. Die Mittenfrequenz des Bandpass wird automatisch auf die Transducer-Frequenz gesetzt.

Deglitch ist eine Signal-Glättungsfunktion und wird mit dem Wert THR_CMP_DEGLTCH im Register DEADTIME eingestellt. Wie sich diese auswirkt, habe ich noch nicht getestet.

Non-Linear Scaling:

Non-Linear Scaling: Noise Level
55 09 27 CF      // read register 27 (DSP_SCALE) 
55 0A 27 00 CE 	 // write register 27 (DSP_SCALE), set Bit3-Bit7 (NOISE_LVL)

Non-Linear Scaling: Scaling Exponent
55 09 27 CF    // read register 27 (DSP_SCALE)
55 0A 27 0C C2 // write register 27 (DSP_SCALE), set Bit2 (SCALE_K)

Non-Linear Scaling: Time Offset Parameter
55 09 27 CF    // read register 27 (DSP_SCALE)
55 0A 27 0D C1 // write register 27 (DSP_SCALE), set Bit0-Bit12 (SCALE_N)

Non-Linear Scaling: Enable NLS P1
55 09 24 D2    // read register 24 (SAT_FDIAG_TH)
55 0A 24 22 AF // write register 24 (SAT_FDIAG_TH), set Bit0 (P1_NLS_EN)

Non-Linear Scaling: Enable NLS P2
55 09 25 D1    // read register 25 (SAT_FDIAG_TH)
55 0A 25 EF E0 // write register 25 (SAT_FDIAG_TH), set Bit7 (P2_NLS_EN)ST)

Non-Linear Scaling beschreibt eine nichtlineare Verstärkung. Damit lässt sich der Dynamikbereich des AD-Wandlers sinnvoll vergrößern, der Abstand zwischen erkannten und nicht erkannten Objekten wird dadurch deutlicher.

Über den Noise Level lassen sich Störungen und unerwünschte Echos reduzieren.

Der Exponent für die nichtlineare Skalierung ist die Stärke der Nichtlinearität und kann in zwei Stufen eingestellt werden. Das NLS setzt erst ab einem bestimmten Zeitpunkt ein. Dieser wird mit dem Wert SCALE_N eingestellt und repräsentiert einen Punkt aus der Threshold-Einstellung (TH). Wird hier z.B. TH9 eingestellt, ist das NLS ab dem für TH9 eingestellten Zeitpunkt aktiv, davor wird linear verstärkt. Möchte man ab dem Beginn der Messung nichtlinear verstärken, müssen die TH-Zeitpunkte 1-8 auf 0 gesetzt werden, denn TH9 ist der kleinstmögliche Wert für SCALE_N.

Das NLS kann für jedes der beiden Presets separat aktiviert werden (P1_NLS_EN und P2_NLS_EN).

Digital Gain:

Digital Gain: P1 SR Gain
55 09 29 CD  	 // read register 29 (P1_GAIN_CTRL)  
55 0A 29 11 BB 	 // write register 29 (P1_GAIN_CTRL), set Bit0-Bit2 (P1_DIG_GAIN_SR)

Digital Gain: P1 LR Gain
55 09 29 CD  	 // read register 29 (P1_GAIN_CTRL)
55 0A 29 11 BB 	 // write register 29 (P1_GAIN_CTRL), set Bit3-Bit5 (P1_DIG_GAIN_LR)

Digital Gain: P1 LR Starting Threshold
55 09 29 CD  	 // read register 29 (P1_GAIN_CTRL) 
55 0A 29 11 BB 	 // write register 29 (P1_GAIN_CTRL), set Bit6-Bit7 (P1_DIG_GAIN_LR_ST)

Digital Gain: P2 SR Gain
55 09 2A CC 	 // read register 2A (P2_GAIN_CTRL)  
55 0A 2A 18 B3	 // write register 2A (P2_GAIN_CTRL), set Bit0-Bit2 (P2_DIG_GAIN_SR)

Digital Gain: P2 LR Gain
55 09 2A CC  	 // read register 29 (P2_GAIN_CTRL)
55 0A 2A 18 B3 	 // write register 29 (P2_GAIN_CTRL), set Bit3-Bit5 (P2_DIG_GAIN_LR)

Digital Gain: P2 LR Starting Threshold
55 09 2A CC  	 // read register 29 (P2_GAIN_CTRL) 
55 0A 2A 18 B3 	 // write register 29 (P2_GAIN_CTRL), set Bit6-Bit7 (P2_DIG_GAIN_LR_ST)

Die digitale Verstärkung findet im DSP statt und lässt sich für jedes Preset getrennt einstellen. Hier sind unterschiedliche Werte für zwei verschiedene Reichweiten möglich: Short-Range Px_DIG_GAIN_SR und Long-Range Px_DIG_GAIN_LR. Der Übergang vom nahen in den weiten Bereich findet an einem wählbaren Threshold-Zeitpunkt Px_DIG_GAIN_LR_ST statt, der zwischen TH9 und TH12 liegt. Soll nur eine Verstärkung für den gesamten Bereich gültig sein, müssen die Zeiten für TH1 bis TH8 auf den kleinsten Wert gesetzt oder TH9 an das Ende der Zeitskala verschoben werden.

Presets:

Presets: P1 Burst Pulses
55 09 1E D8    // read register 1E (PULSE_P1) 
55 0A 1E 1F B8 // write register 1E (PULSE_P1), set Bit0-Bit4 (P1_PULSE)

Presets: P1 Driver Current Limit
55 09 20 D6    // read register 20 (CURR_LIM_P1) 
55 0A 20 3F 96 // write register 20 (CURR_LIM_P1), set Bit0-Bit5 (CURR_LIM1)

Presets: P1 Record Time Length
55 09 22 D4    // read register 22 (REC_LENGTH) 
55 0A 22 79 5A // write register 20 (REC_LENGTH), set Bit4-Bit7 (P1_REC)

Presets: P2 Burst Pulses
55 09 1F D7    // read register 1F (PULSE_P2) 
55 0A 1F 1F B7 // write register 1F (PULSE_P2), set Bit0-Bit4 (P2_PULSE)

Presets: P2 Driver Current Limit
55 09 21 D5    // read register 21 (CURR_LIM_P2) 
55 0A 21 F1 E2 // write register 21 (CURR_LIM_P2), set Bit0-Bit5 (CURR_LIM2)

Presets: P2 Record Time Length
55 09 22 D4    // read register 22 (REC_LENGTH) 
55 0A 22 79 5A // write register 20 (REC_LENGTH), set Bit0-Bit3 (P2_REC)

Presets: P1&P2 Disable Current Limit
55 09 20 D6    // read register 20 (CURR_LIM_P1) 
55 0A 20 BF 16 // write register 20 (CURR_LIM_P1), set Bit7 (DIS_CL)

Die Anzahl der gesendeten Ultraschall-Impulse lässt sich mit P1_PULSE und P2_PULSE für jedes der beiden Presets separat einstellen. Je mehr Impulse gesendet werden, desto deutlicher ist das Echo, umso mehr werden aber auch Störungen und unerwünschte Reflexionen sichtbar, die sich auf das Messergebnis auswirken.

Mit CURR_LIM_P1 und CURR_LIM2 wird die Strombegrenzung für die Transformator-Primärwicklung eingestellt. Eine höhere Strombegrenzung führt zu lauteren Impulsen.

DIS_CL deaktiviert die Ausgangsstrombegrenzung für beide Presets.

Das Register REC_LENGTH enthält enthält die beiden Werte P1_REC und P2_REC, mit welchen die Dauer der Messung festgelegt wird. Die maximale Dauer liegt bei 65,5ms, was ca. 11,20 Meter entspricht.

Decouple:

Decouple: Decouple Time/Temperature
55 09 26 D0    // read register 26 (DECPL_TEMP)
55 0A 26 5F 70 // write register 26 (DECPL_TEMP), set Bit4 (DECPL_TEMP_SEL)
55 09 26 D0    // same again
55 0A 26 5F 70 // for no particular reason

Mit der Decouple-Funktion lässt sich unter bestimmten Bedingungen ein separat herausgeführter Decouple-Pin schalten. In der Position Time-Decouple wird dieser Pin nach einer festgelegten Zeit auf HIGH gelegt, um damit einen Transistor schalten zu können, der den Ground-Anschluss des Transformators frei schaltet. Dadurch entsteht eine geringere Dämpfung des empfangenen Echosignals, was besonders bei großen Entfernungen nützlich ist. Der Schaltvorgang löst leider einen deutlichen Peak aus, der vom PGA460 als Echo erkannt werden kann, sofern er nicht mit einer entsprechend konfigurierten Threshold-Kurve ausgeblendet wird.

Bei Temperature-Decoupling kann unterhalb einer bestimmten Temperatur ein Kompensations-Kondensator zu- oder abgeschaltet werden, um so temperaturabhängige Kapazitätsänderungen des Schallwandlers auszugleichen.

Warum wird dieser Befehl von der EVM-GUI doppelt gesendet? Offenbar liegt auf jedem der beiden Radio-Buttons ein Change-Event, das für jeden Button separat getriggert wird, wenn sich sein Zustand verändert. Das ist im Prinzip ein Fehler oder eine Nachlässigkeit, hat aber keine negativen Auswirkungen.

Weitere Funktionen werde ich im nächsten Beitrag analysieren.

5 Kommentare zu “Ultraschall-Objekterkennung mit TI PGA460 – Teil 4

  1. […] Ultraschall-Objekterkennung mit TI PGA460 – Teil 4 […]

    Liken

  2. […] Ultraschall-Objekterkennung mit TI PGA460 – Teil 4 […]

    Liken

  3. […] Ultraschall-Objekterkennung mit TI PGA460 – Teil 4 […]

    Liken

  4. […] Ultraschall-Objekterkennung mit TI PGA460 – Teil 4 […]

    Liken

  5. […] Ultraschall-Objekterkennung mit TI PGA460 – Teil 4 […]

    Liken

Kommentieren

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Blogverzeichnis - Bloggerei.de

RSS Make:

  • Werkstattberichte: Neues aus den Fablabs und der Makerszene
  • heise-Angebot: Finale bei Vimeo für den 3D-Kurs für Maker: Konstruieren mit Blender 2.8
%d Bloggern gefällt das: