Verzögerungen bei USB-Kommunikation mit pyserial (vermutlich eher hardwarenahes Problem, Software aber in Python)

  • 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:

    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

  • Verzögerungen bei USB-Kommunikation mit pyserial (vermutlich eher hardwarenahes Problem, Software aber in Python)? Schau mal ob du hier fündig wirst!

  • Hast Du schon versucht, Dein Programm mit einem höheren Nice-Wert zu starten ? < man nice >

    Die meisten Programme werden mit demselben Nice Wert abgearbeitet, sodass jedem Prozess derselbe Time-Slot zugewiesen wird.


    Servus !

    RTFM = Read The Factory Manual, oder so

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!