Ultraschall-Objekterkennung mit TI PGA460 – Teil 6

5

09.11.2019 von plaintron

Im sechsten Teil dieser Serie betrachten wir die Eingabemasken „Diagnostics“, „Test Mode“ und „Interface Mode“ des PGA460 EVM GUI-Tools sowie die zugehörigen UART-Datenübertragungen.

Diagnostics

Diagnostics

System Diagnostics: Get System Diagonstics
55 08 F7 // run System Diagnostics (8), returns 2 bytes. 
// Byte1: Transducer frequency, Byte2: Decay period time

System Diagnostics: Get System Diagnostics with Burst and Listen
55 0A 40 80 35 // write regsiter 40 (EE_CNTRL), set DATADUMP_EN to 1
55 00 01 FE // run Burst and Listen P1 (0), 1 object to detect
55 07 F8 // run Transducer Echo Data Dump (7)
55 0A 40 00 B5 // write register 40 (EE_CNTRL), set DATADUMP_EN to 0
55 09 4C AA // read register 4C (DEV_STAT0)
55 09 4D A9 // read register 4D (DEV_STAT1) 
55 09 1F D7 // read register 4D (DEV_STAT1) 
55 08 F7 // run System Diagnostics (8)

System Diagnostics: Set UART System Diagnostic Bits
55 09 1E D8 // read register 1E (PULSE_P1)
55 0A 1E 5F 78 // write register 1E (PULSE_P1), set Bit6 (UART_DIAG UART)

Temperature/Noise: Trigger & Read Temp amd Noise
55 04 00 FB // run Temperature and noise-level (4), measure Temperature
55 06 F9 // run Temperature and noise level result (6) 
55 04 01 FA // run Temperature and noise-level (4), measure Noise level
55 06 F9 // run Temperature and noise level result (6) 
55 06 F9 // run Temperature and noise level result (6) again?

Temperature/Noise: Temp Only
55 04 00 FB // run Temperature and noise-level (4), measure Temperature 
55 06 F9 // run Temperature and noise level result (6)

Temperature/Noise: Noise Only
55 04 01 FA // run Temperature and noise-level (4), measure Noise level
55 06 F9 // run Temperature and noise level result (6) 
55 06 F9 // run Temperature and noise level result (6) again?

Frequency Diagnostic: Window Length (Periods)
55 09 23 D3 // read register 23 (FREQ_DIAG)
55 0A 23 11 C1 // write register 23 (FREQ_DIAG), set Bit4-Bit7 (FDIAG_LEN)

Frequency Diagnostic: Start Time (us)
55 09 23 D3 // read register 23 (FREQ_DIAG)
55 0A 23 11 C1 // write register 23 (FREQ_DIAG), set Bit0-Bit3 (FDIAG_START)

Frequency Diagnostic: Error Time Threshold +/-(us)
55 09 24 D2 // read register 24 (SAT_FDIAG_TH)
55 0A 24 23 AE // write register 24 (SAT_FDIAG_TH), set Bit5-Bit7 (FDIAG_ERR_TH)

Voltage Diagnostic: Error Threshold
55 09 25 D1 // read register 25 (FVOLT_DEC) 
55 0A 25 6F 61 // write register 25 (FVOLT_DEC), set Bit0-Bit2 (FVOLT_ERR_TH)

Decay Diagnostic: Saturation Diagnostic Threshold Level (LSB)
55 09 24 D2 // read register 24 (SAT_FDIAG_TH) 
55 0A 24 23 AE // write register 24 (SAT_FDIAG_TH), set Bit1-Bit4 (SAT_TH)

Power Saving: Low Power Mode Enter Time(s)
55 09 25 D1 // read register 25 (FVOLT_DEC)
55 0A 25 6F 61 // write register 25 (FVOLT_DEC), set Bit3-Bit4 (LPM_TMR)

Power Saving: VPWR OV Threshold Select(V)
55 09 25 D1 // read register 25 (FVOLT_DEC) 
55 0A 25 6F 61 // write register 25 (FVOLT_DEC), set Bit5-Bit6 (VPWR_OV_TH)

Power Saving: Low Power Mode Enabled
55 09 26 D0 // read register 26 (DECPL_TEMP) 
55 0A 26 6F 60 // write register 25 (DECPL_TEMP), set Bit5 (LPM_EN)

Um während der Entwicklung als auch im laufenden Betrieb Informationen über den Zustand des PGA460 und der zugehörigen Schaltung gewinnen zu können, lassen sich entsprechende Werte abrufen und Tests durchführen.

Ein Klick auf den Button „Get System Diagnostics“ führt den Befehl 8 aus. Das PGA460 antwortet mit 2 Bytes für Transducer-Frequenz fT und Decay-Zeit tD.

Der Beispielcode von TI zur Umrechnung der Frequenz sieht so aus:

diagReturn = (1 / (freq * 0.0000005)) / 1000;

Einfacher dargestellt lautet die Rechnung also fT = 2000/freq.

In meinem Setup bedeutet das, ein Wert von dec 35 entspricht einer Transducer-Frequenz von 57,1 kHz.

Die Decay-Zeit wird folgendermaßen berechnet:

diagReturn = decay * 16;

Liegt dieser Wert unter 3000 us, deutet das zumindest bei dem von mir verwendeten Transducer auf eine mechanische Bedämpfung hin, die zu einer fehlerhaften Messung führt.

Ein wichtiger Punkt: Die Diagnostic-Funktion (8) bezieht sich immer auf die letzte Burst&Listen-Messung. Fand vor Verwendung der Funktion keine Messung statt, wird zwar ein Ergebnis zurückgegeben, aber sinnvolle Werte stehen nicht darin.

Rechts neben den Elementen des Formulars „System Diagnostics“ befinden sich Checkboxen mit der Beschriftung „Datalog“. Die oberste Checkbox (Burst+Listen) sorgt dafür, dass vor der Diagnostic-Abfrage eine Burst+Listen-Abfrage mit aktiviertem Data-Dump-Flag durchgeführt wird. Ohne dieses Flag würde es ebenso funktionieren.

Die weiteren Checkboxen sorgen dafür, dass Rückgabewerte in der ganz rechten Spalte des Fensters im Tab „Utilities“ angezeigt werden. Bei der untersten Checkbox wird außerdem bei Aktivierung die UART-Diagnostic-Page auf „System Diagnostics“ umgeschaltet, wie auch oben im Code zu sehen ist.

Weiter geht es mit dem Button „Trigger & Read Temp amd Noise“. Hier werden zwei Funktionen nacheinander aufgerufen: „Temperature and noise-level“ (4) erwartet einen Parameter, der bestimmt, ob Temperatur oder Noise gemessen werden. Anschließend wird mit „Temperature and noise-level result“ (6) das Ergebnis ausgelesen. Dieser Vorgang wird also zwei mal durchgeführt, erst für Temp, dann für Noise. Auch hier beobachten wir wieder eine Nachlässigkeit des Programmierers, da Funktion 6 doppelt ausgeführt wird.

Die darunter liegenden Buttons führen nur eine Temp- oder Noise-Messung durch (Noise wieder grundlos doppelt).

Im Bereich „Frequency Diagnostic“ werden die Parameter für die Messung der Transducer-Frequenz (oben beschrieben) festgelegt. Das Manual erklärt diese Werte folgendermaßen:

To measure the transducer frequency, a start parameter, FDIAG_START, and a window length parameter, FDIAG_LEN, are defined in EEPROM memory. The start parameter, FDIAG_START, defines the time when the frequency measurement starts relative to the end of the burst time. The diagnostic window length parameter, FDIAG_LEN, sets the time width of the diagnostic window in terms of signal periods captured.

Hier werden also zwei Werte im Register FREQ_DIAG geändert: FDIAG_LEN und FDIAG_START. Mit dem Wert FDIAG_ERR_TH im Register SAT_FDIAG_TH wird ein Schwellwert für die Transducer-Frequenz festgelegt. Wird dieser unter- oder überschritten, lässt sich das an einem Flag im Diagnostic-Byte, welches vor jeder Datenübermittlung vom PGA460 an dem Master gesendet wird, erkennen.

Der letzte Wert zur Diagnostic-Einstellung ist SAT_TH im Register SAT_FDIAG_TH. Das Datenblatt beschreibt die Funktion wie folgt:

The decay period time is measured at the output of the digital data path. The measurement starts at the same time when the burst stage is completed and the decay period is measured as long as the echo level is higher than a saturation threshold level defined in the EEPROM by the SAT_TH parameter.

Es handelt sich hier also um einen Schwellwert für die Decay-Messung.

Ganz unten in der Diagnostic-Maske befindet sich der Bereich „Power Saving“. Mit LPM_TMR im Register FVOLT_DEC wird eingestellt, nach welcher Zeitspanne der Inaktivität das PGA460 in den Low-Power-Mode wechseln soll. Dieser Wert ist 2 Bit lang, ermöglicht also 4 verschiedene Einstellungen.

Ebenfalls 2 Bit lang ist der Wert VPWR_OV_TH, welcher den Wert der maximal zulässigen Betriebsspannung festlegt, bei dessen Überschreitung in Fehler-Bit im Diagnostic-Byte gesetzt werden soll.

Mit dem Bit LPM_EN im Register DECPL_TEMP wird der Low-Power-Mode aktiviert.

Test Mode

Test Mode

EEPROM: Program EEPROM
55 0A 40 68 4D // write register 40 (EE_CNTRL), set Bit3-Bit6 (EE_UNLCK) to 1101 = 0xD
55 0A 40 01 B4 // write register 40 (EE_CNTRL), set Bit0 (EE_PRGM) to 1
55 09 40 B6    // read register 40 (EE_CNTRL), get Bit2 (EE_PRGM_OK)
55 0A 40 00 B5 // write register 40 (EE_CNTRL), set Bit0 (EE_PRGM) to 0

EEPROM: Reload EEPROM
55 0A 40 02 B3 // write register 40 (EE_CNTRL), set Bit1 (EE_RLOAD) to 1
55 0A 40 00 B5 // write register 40 (EE_CNTRL), set Bit1 (EE_RLOAD) to 0

Test Modes and Signals: Multiplexer Output on the TEST Pin
55 09 4B AB    // read register 4B (TEST_MUX)
55 0A 4B 00 AA // write register 4B (TEST_MUX), set Bit5-Bit7 (TEST_MUX)

Test Modes and Signals: Data-Path Mux Select
55 09 4B AB    // read register 4B (TEST_MUX) 
55 0A 4B 01 A9 // write register 4B (TEST_MUX), set Bit0-Bit2 (DP_MUX)

Test Modes and Signals: Data-Path Sample Select
55 09 4B AB    // read register 4B (TEST_MUX)
55 0A 4B 09 A1 // write register 4B TEST_MUX), set Bit3 (SAMPLE_SEL)
55 09 4B AB    // again??
55 0A 4B 09 A1 // again??

Die Maske Text-Mode beginnt mit zwei prominenten Buttons für die EEPROM-Verwaltung. „Program EEPROM“ schreibt zunächst einen Unlock-Code in das Register EE_CNTRL. Anschließend wird der Brennvorgang gestartet, indem das Bit EE_PRGM gesetzt wird. Am Status des Bits EE_PRGRM_OK lässt sich dann erkennen, ob der Schreibvorgang erfolgreich war, woraufhin das EE_PRGM-Bit wieder zurückgesetzt wird.

Um den Inhalt des nichtflüchtigen EEPROM in den Shadow-Memory im RAM zu kopieren, wird das Bit EE_RLOAD gesetzt. Das PGA460 setzt diesen Wert nach dem Ladevorgang wieder zurück.

Mit den Test-Mode-Werten wird festgelegt, welches Signal am herausgeführten IO-Pin des PGA460 anliegen soll. Sample Select bestimmt, welche Auflösung diese haben sollen. Beim Umschaltbefehl zwischen 8- und 12 Bit wird das zugehörige Flag doppelt gesetzt, was wieder auf die Eventsteuerung der Windows-Software zurückzuführen und nicht beabsichtigt ist.

Interface Mode

Das Fenster „Interface Mode“ enthält keine relevanten Einstellungen, sondern dient in erster Linie dazu, Befehle zu testen und UART-Ausgaben zu erzeugen sowie Prüfsummen zu berechnen. Gerade im Entwicklungsstatium ist das eine wertvolle Hilfe, um erste Testbefehle mit dem eigenen Master-Controller an das PGA460 zu senden und Antworten zu analysieren. Zu beachten ist hier die eher ungewöhnliche UART-Konfiguration 8N2 mit zwei Stoppbits.

Für die SPI-Ansteuerung, die ich bisher nicht mit dem EVM-Programm testen konnte, muss eine Geschindigkeit von 2-8 Mhz, LSBFIRST und SPI_MODE2 eingestellt werden.

TCI-Tests sind in diesem Fenster ebenfalls möglich. Dort ist die Auswahl der Befehle gegenüber UART und SPI stark eingeschränkt.

Die auswählbaren Befehle beziehen ihre Daten immer aus den aktuellen Einstellungen der anderen Eingabefenster, also etwa Threshold- und TVG-Daten etc.

Weiterhin besteht in diesem Fenster die Möglichkeit, die UART-Adresse, auf der das PGA460 Befehle empfängt, zu ändern. Dazu wird der Button „Update Device to Selected Addr“ verwendet. Während die Befehle 0-16 addressiert werden müssen, funktionieren die Befehle 17-25 im Broadcast-Mode, werden allso auf allen Adressen empfangen.

Zum Schluss kommen wir zum wohl am häufigsten verwendeten Fenster der PGA460 EVM-Software: Data Monitor

Data Monitor

plot = 0, list = 0

55 0A 40 80 35 // set DATADUMP_EN in register EE_CNTRL
55 00 01 FE    // run burst listen P1 (0) for n objects
55 0A 40 00 B5 // unset DATADUMP_EN in register EE_CNTRL
55 09 4C AA    // read DEV_STAT0 
55 09 4D A9    // read DEV_STAT1 
55 09 1F D7    // read PULSE_P2


plot = 1, list = 0

55 0A 40 80 35 // set DATADUMP_EN in register EE_CNTRL 
55 00 01 FE    // run burst listen P1 (0) for n objects
55 07 F8       // run echo data dump (7)
55 0A 40 00 B5 // unset DATADUMP_EN in register EE_CNTRL 
55 09 4C AA    // read DEV_STAT0 
55 09 4D A9    // read DEV_STAT1 
55 09 1F D7    // read PULSE_P2


plot = 0, list = 1

55 0A 40 80 35 // set DATADUMP_EN in register EE_CNTRL 
55 00 01 FE    // run burst listen P1 for n objects
55 0A 40 00 B5 // unset DATADUMP_EN in register EE_CNTRL 
55 00 01 FE    // burst listen P1 for n objects
55 05 FA       // run ultrasonic measurement result (5)
55 0A 40 00 B5 // unset datadump en 
55 09 4C AA    // read DEV_STAT0 
55 09 4D A9    // read DEV_STAT1 
55 09 1F D7    // read PULSE_P2


plot = 1, list = 1

55 0A 40 80 35 // set DATADUMP_EN in register EE_CNTRL
55 00 01 FE    // run burst listen P1 for n objects
55 07 F8       // run echo data dump (7)
55 0A 40 00 B5 // unset DATADUMP_EN in register EE_CNTRL
55 00 01 FE    // run burst listen P1 for n objects
55 05 FA       // run ultrasonic measurement result (5)
55 0A 40 80 35 // set DATADUMP_EN in register EE_CNTRL
55 0A 40 00 B5 // unset DATADUMP_EN in register EE_CNTRL
55 09 4C AA    // read DEV_STAT0
55 09 4D A9    // read DEV_STAT1
55 09 1F D7    // read PULSE_P2

Relevante Eingabe-Elemente sind hier der große „Start“-Button unter dem Diagramm sowie die beiden Checkboxen „Plot Data Dump“ und „List Measurement Results“.

Mit den Checkboxen lassen sich vier verschiedene Aktionen ausführen: Listen bzw. Burst + Listen ohne Rückgabe des Ergebnisses sowie jeweils Rückgabe von Data-Dump, separaten Messergebnissen oder beidem.

Die Befehle „Listen“ und „Burst + Listen“ erwarten einen Parameter, der angibt, wieviele Objekte erkannt werden sollen. Im Auswahlfehlt „# Objects to Detect“ wird das eingestellt. Ist die Checkbox „List Measurement Result“ aktiviert, werden hier für jedes erkannte Objekt die Entfernung, die zeitliche Breite und der Echopegel angegeben.

Ist „Plot Data Dump“ aktiviert, werden 128 Werte mit eine Auflösung von 256 Bit vom PGA460 zurückgegeben und in einer zeitabhängigen Kurve dargestellt.

Um einen aktuellen Data Dump zu erhalten, muss vor der Messung das Bit DATADUMP_EN  im Register EE_CNTRL gesetzt werden. Geschieht das nicht, wird kein aktueller Data Dump erzeugt und stattdessen ein altes Ergebnis ausgeliefert.

Im Code oben ist zu sehen, dass dieser Vorgang teilweise mehrmals hintereinander durchgeführt wurde. Das ist wie schon in anderen Fällen eine Nachlässigkeit bei der GUI-Programmierung und hat keine praktische Bedeutung.

Ein Punkt muss zum Schluss noch erwähnt werden: Manche Befehle benötigen zur Ausführung im PGA460 etwas Zeit. Bei Register-Schreibbefehlen sind das einige Mikrosekunden, bei Burst & Listen oder Listen und anderen Messaufgaben bis zu 100 Millisekunden. Das muss bei der Programmierung berücksichtigt werden, da das PGA460 sonst Fehler meldet oder überhaupt nicht auf eine Anfrage reagiert, während es noch mit einer anderen Aufgabe beschäftigt ist.

Damit haben wir alle Befehle zur Steuerung und Abfrage des PGA460 ausgiebig durchleuchtet und beenden diesen Teil der Diskussion. Im nächsten Teil dieser Serie wird es um die Programmierung eines Treibers für das PGA460 gehen, mit dem all diese Funktionen komfortabel ausgeführt werden können.

 

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

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

    Like

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

    Like

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

    Like

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

    Like

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

    Like

Kommentieren

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

Blogverzeichnis - Bloggerei.de

RSS Make:

  • Raspberry Pi mit 4-Zoll-Display für die Hosentasche
  • Raspberry Pi Connect: Einfacher Fernzugriff im Browser
  • DIY Digitallabor: Heute und gestern ein Spaß
  • 4fach-SSD-Shield für Raspberry Pi 5
  • 3D-Druck: Diese Räder reagieren auf ihre Umgebung
  • Blender Plugin: Platinen aus KiCAD photorealistisch rendern
  • Make E-Dossier Raspberry Pi (PDF) + Raspberry Pi 4 Model B (8GB RAM)
  • Makey Lötbausatz
  • French Cleat – das Ordnungssystem für die Heimwerkstatt
  • KI-Brille übersetzt Zeichensprache on the Fly