Probleme PCA9685 Paralelle Servo Ansteuerung Asynchron

  • Guten Abend :)


    bei meinem Aktuellen Projekt stehe ich vor einer Hürde, welches mir das voranschreiten sehr erschwert.


    Zurzeit Steuere ich Vier bis Acht Servomotoren des Types RDS3115 über ein PCA9685.

    Diese Servos bewegen sich nicht zeitgleich. Wenn Sie von Anschlag zu Anschlag fahren,

    kommt es vor, dass sie aus dem "Takt" kommen.

    Nach einigen Zyklen sind die Servos wieder Parallel.


    Das Taktsignal konnte ich mit dem Oscilloscope abgreifen, welches keine Zeitlichen verschieben aufwies.

    Mein Netzteil liefert einigermassen Stabile 7.4V für die Servomotoren.

    Diese werden nicht über das Board bestrommt, da dieses nur für 6V ausgelegt ist.

    Das PCA 9685 Board wird über das Raspberry gespeist.


    Versuchte zeigten, dass es keinen unterschied machte, ob das Board + Servos über mein Netzteil vorsorgt wurden,

    oder die Servos und das Board getrennt.


    Mein Programm habe ich einfach aus dem Original Test Programm erweitert.

    Meine erste Vermutung ist, dass das Phyton Skript nicht ausreicht, um diese ganzen Servos parallel betreiben zu können.

    Die zweite wäre, dass die Servos einfach solch hohe Tolleranz aufweisen, das dies in Ihrer Natur liegt. Was ich mir aber nicht vorstellen kann.

    Das Servo Board sollte in Ordnung sein. Ich habe zwei von diesen Bestellt, bei beiden zeigt sich ein ähnliches Ergebnis.


    Könnt Ihr mir bitte einen Ratschlag geben?


    Falls Ihr möchtet, kann ich ggf. noch ein Video Hochladen, dort sollte es gut ersichtlich sein, wie Asynchron die Motoren laufen.


    Im Spoiler ist mein Skript.


    Vielen Dank :)


    Gruss

    Christian

  • Hallo,


    ich bin mir nicht sicher ob ich den Problem richtig verstehe, aber: das Programm wird - wie alle Programme - sequentiell abgearbeitet, ein Befehl nach dem anderen. Heißt, die Servos können gar nicht "gleichzeitig" los laufen. Außerdem bestimmt der Linux-Kernel, wann dein Programm Rechenzeit bekommt, wodurch es zu mehr oder minder großen Versätzen kommen kann.


    Anmerkung zum Code: du verwendest ja offensichtlich Python 2. Unter Python 2 ist `print` keine Funktion, sondern ein Statement. Heißt: du brauchst die Klammern nicht.


    Gruß, noisefloor

  • Hallo,


    Danke sehr, dann werde ich dies korrigieren.

    Das die Befehle Sequentiel abgearbeitet werden, und Serial über den I2C laufen, ist mir bekannt.

    Doch dürfte der Zeitliche Versatz nicht so extrem sein, oder?


    Wie kann ich das Definieren, dass meinem Programm mehr Rechenzeit bekommt?


    Danke :)


    Gruss, Christian

  • Hallo,


    Quote

    Doch dürfte der Zeitliche Versatz nicht so extrem sein, oder?

    Jein. Der Raspi ist nun mal keine "Rechenrakete" und es kommt halt drauf an, was noch gleichzeitig so auf dem Raspi läuft.


    Quote

    Wie kann ich das Definieren, dass meinem Programm mehr Rechenzeit bekommt?

    Du kannst du Priorität eines Prozesses mit `nice`: sudo nice -n -20 mein_skript.py startet mit einer Priorität von -20, das ist die höchste Priorität.

    Ob was bringt muss du testen.

    Vielleicht hängt das ja auch doch mit der Hardware zusammen - aber da gibt es hier kompetenter Leute als mich im Forum.


    Gruß, noisefloor

  • Servus HorseRobotic ,

    sicher ... beim RPi hast Du mit Linux als OS Latenzzeiten.

    Die dürften sich aber im Normalfall (also ohne grossartige Prozessor-Last) in einer Grössenordnung von max. 1 - 2 ms bewegen.

    Da das PWM Signal ja jetzt nicht vom RPi generiert sondern vom Treiber-Board generiert wird, kannst man imho diese Latenz - auch bei acht Servos - vernachlässigen.

    Was ich eher glaube ist, dass Deine Stromversorgung für die Servos nicht ausreicht.

    Dir ist bewusst, dass jeder einzelne dieser Servos bis zu 1500 mA ziehen kann ( -> https://www.autobotic.com.my/r…-digital-servo-180-degree ) ?


    //EDIT: obwohl ich Python ablehne ... evtl. reicht Dir schlicht die Wartezeit von 1 Sekunde nicht, um die Servos zwischen den Endpunkten zu bewegen. Sie drehen ja, im Gegensatz zu den "normalen" Servos, immerhin um 180°.


    cu,

    -ds-

  • Servus dreamshader


    mein Netzteil sollte eigentlich genügend Strom liefern, da die Servos nicht unter Last betrieben werden.

    Ich werde schnell ein kleines Video zusammen schneiden.

    Vielleicht erkennt Ihr etwas hieraus.


    (Beitrag wird noch mit Video editiert)


    Edit:


    Link zu meinem Video


    Im Video ist sehr gut zu sehen, wie schnell die Motoren aus Ihrem Takt kommen.

    Der Spannungsabfall und der Takt, gemessen zwischen Pin 0-3.

    Ich kann in nächster Zeit ein sauberes Video aufnehmen, doch meine Zusammenschnitte

    entstanden in der Werkstatt für die Ferndiagnose.


    Edit 2:


    Die Warte Zeit haben wir auf bis zu 3 Sekunden hoch geschraubt.

    Dies half, doch brachte keinen wirklich brauchbares Ergebnis.

    Im Letzten Teil des Videos, sollten die Servos mit einer längeren Pause laufen.


    Guten Abend


    Christian