Hallo zusammen,
ich habe eine Auswerteeinheit zur Ultraschalllaufzeitmessung (mit einem MSP430 realisiert) via USB an den Pi (RPi 3B+, Stretch) angeschlossen.
Vom MSP430 wird alle 2ms ein Datenpaket von 50 Byte an den Pi gesendet, der diese dann verrechnen und das Ergebnis auf einem Display darstellen soll.
Bereinigter Code in Python:
import serial
serialUltraschall = None
serialUltraschallPort = '/dev/ttyACM0'
serialUltraschallBaudrate = 115200
DATA_LENGTH = 50
serialUltraschall = serial.Serial(serialUltraschallPort, serialUltraschallBaudrate)
while True:
state = serialUltraschall.read(DATA_LENGTH)
Alles anzeigen
Den Codeteil habe ich jetzt nicht im Detail getestet, ist direkt aus dem Projekt entnommen.
Prinzipiell funktioniert das, es gibt aber einen kleinen Haken.
Wenn ich mir das Ganze auf dem Oszilloskop anschaue, werden die Daten nicht immer direkt dann übertragen wenn sie anstehen.
Hier gibt es kleine Verzögerungen von bis zu 2 Millisekunden. Wenn ich in der Zeit, in der die Übertragung stattfindet dann eine Laufzeitmesung mit dem Ultraschallsensor mache, wird die Übertragung u.U. gestört/verfälscht. Daher ist es zwingend notwendig, dass die Übertragung abgeschlossen ist bevor ich erneut messe. Das kollidiert dann aber mit dem Wunsch, jede Millisekunde eine Messung durchführen zu wollen und somit eine möglichst hohe Abtastrate zu erreichen.
Lange Rede kurzer Sinn: Es sieht so aus als wenn der Interrupt (?) des USB zeitliche Schwankungen aufweist bzw. andere Interrupts höhere Prioritäten haben und mir damit Probleme bereiten.
Wenn ich die Daten an einem PC abrufe (USB direkt am MSP430, mit Terminal virtuellen COMPort öffnen und die anstehenden Daten lesen) gibt es nahezu keine Verzögerungen (<10µs).
Ebenfalls ist die Verzögerung unter freeBSD (<50µs) deutlich geringer als bei Stretch oder Buster (letzteres ebenfalls getestet, da ich mir Verbesserung erhofft hatte).
Ein Problem seitens des MSP430 schließe ich damit aus, es scheint ein Problem des Pi, bzw. von Stretch und Buster zu sein.
Hat hier irgendjemand eine Idee wie ich diese minimalen, im Normalfall vermutlich zu vernachlässigenden Verzögerungen in den Griff bekommen kann?
Bzw. hat mir jemand einen Ansprechpartner, der sich in diesen Details auskennt?
Viele Grüße
Jürgen