Servo über PWM - Unerklärliches Verhalten

  • Moin liebe Gemeinde,

    ich steuere mit einem Raspberry Pi 1 über PWM einen Servomotor an. Das hat bis vor kurzen auch ziemlich gut geklappt. Nur konnte ich jetzt ein seltsames Verhalten beobachten.

    Sobald ich dem Servo ein PWM-Signal sende, sehe ich folgendes Bild am Oszillator.:?:

    Der Servo beginnt dann zunächst sehr langsam sich in die Position zu drehen. Ist er kurz vor der Position angekommen macht der Servo einen Sprung mit der ursprünglich normalen Geschwindigkeit. Das PWM-Signal sieht danach wieder wie gewohnt und auch gewollt aus, also ohne den negativen Ausbruch. Während der Motor allerdings dreht bekomme ich eben dieses unerklärliche Bild. Ich bin kein Elektrotechniker und habe daher keine Ahnung, ob das normal ist oder nicht. Daher die Frage: Hat jemand eine Idee wieso das passiert und ob ich was dagegen tun kann? Oder ist der Motor gar hinüber?

    Ich verwende wie bereits erwähnt einen Raspberry Pi 1 mit wiringPi. Das 50Hz PWM-Signal wird über GPIO 18 (bzw. wiringPi Pin 1) geschickt.
    Für den Servo verwende ich eine externe 6V Stromversorgung.

    Auch die Stromversorgung des Pi ist über ein 2A 5V Netzteil sichergestellt.

    Es läuft gleichzeitig nichts anderes über den Pi.

    Die Software zur Ansteuerung ist getestet und fehlerfrei.

    Servo ist von Kuman -> Kuman KY-72

    Liebe Grüße:)

    Einmal editiert, zuletzt von Sc0rpe (10. Juni 2018 um 11:36)

  • Servus Sc0rpe ,

    ... ziemlich gut geklappt. ...

    Also hat das, nach meinem Verständnis, noch nie wirklich funktioniert, oder?

    wiringPi ist, erfahrungsgemäss, für PWM eher suboptimal ... besser wäre -> pigpio <- ...

    Generell ist Software-PWM unter Linux eher schwierig. Für einen Servo sollte es imho aber schon reichen.

    Wie genau (Skizze!) hast Du das verschaltet?

    Und poste mal den Sourcecode ...

    cu,

    -ds-

  • Servus Sc0rpe ,

    Also hat das, nach meinem Verständnis, noch nie wirklich funktioniert, oder?

    Doch, das war tatsächlich ernst gemeint. Hat alles gut funktioniert im Test. Dann habe ich den Servo an seiner Position befestigt, wo er hinsollte und die Leitungen verlegt und verlötet. An den Leitungen scheint es aber auch nicht zu liegen, da ich das PWM-Signal mit dem Oszi überprüft habe. Das sieht alles wunderbar aus. Schließe ich aber den Servo dazu noch an sieht das Signal eben wie oben skizziert aus :/ (Oszi hing übrigens direkt beim Servo dran, so dass es nicht an den Leitungen liegen sollte).

    An wiringPi hatte ich bisher noch nichts auszusetzen. Ich nutze ja auch extra den Pin 18 mit den "normalen" PWM-Funktionen (sprich: pwmSetMode, pwmSetRange, pwmSetClock und pwmWrite) und nicht die Software PWM von wiringPi.

    Verschaltet habe ich es folgendermaßen:

    Wie bereits gesagt, der Code hat bereits prima funktioniert und ich denke eher nicht, dass es daran liegt.

    Aber dennoch:

  • Der PWM-Pin des Pi wird für die Soundausgabe verwendet ... evtl. beisst sich da was?

    Hmm, danke erstmal für den Hinweis. Das wusste ich noch nicht.
    Seltsam ist dann aber immernoch, warum das PWM-Signal wieder normal wird, sobal der Motor seine Position eingenommen hat.

    Sound sollte der Pi ja außerdem auch gar nicht ausgeben, da ich ja nichts gemacht habe. Habe den Pi auch mehrmals rebootet zwischendrin.

    Ich kann mir eben einfach keinen Reim drauf machen, warum das Signal nur bei einer Positionsänderung des Motors gestört wird.

  • Aber das niedrigste Potential beim Pi ist 0 V, = Ground.

    Und das Oszi zeigt einen Zahn nach -5/-3 V.

    Also muss Ground kurzfristig -3/-5 V tief sein. (Wenn das Oszi selbst ordentlich geerdet ist.)

    Ursache: Fehler im Servo oder einem Netzgerät.

    Ein TTL-->RS232 (= V24) Konverter könnte auch mit seinen -12V Ground/ 0V kurtfristig ins negative Potential ziehen.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Unabhängig vom WiringPi oder irgendeinem anderen Programm zur Steuerung der GPIOs ist Linux kein Echtzeitsystem, kann also grundsätzlich kein sauberes PWM liefern. Es gibt verschiedenen Möglichkeiten das dadurch entstehende Jittern zu reduzieren, dabei packen das einige Programme besser als andere, aber es gibt kein Allheilmittel. Soweit ich das sehe, hast du aber derzeit kein Jittern dazwischen, oder?

    Dein Bild zeigt eigentlich die typische Kurve für eine Induktionsspannung. Also irgendwo eine Spule, die das auslöst. Was mich da wundert ist allerdings, dass das Rechtecksignal so sauber ist, denn auch da müsste die Induktion ja schon zuschlagen. Du könntest mal einen 100n Kondensator ganz dicht am Servo zwischen Vcc und GND oder eine Diode in Sperrichtung von PWM zu GND klemmen und mal schauen was passiert. Das wären so die ersten typischen Entstörmaßnahmen.

  • So ... wieder daheim ...

    Also mich irritiert dieser "Sägezahn" ins Negative, wie auch schon RTFM angemerkt hat.

    Neben dem Einsatz eines Levelshifters würde ich als erste Massnahme die pigpio-Library und einen anderen Pin verwenden.

    Wenn ich mich recht entsinne kann man in raspiconfig was mit Audio einstellen. Vllt. ist da was falsch ... deshalb wäre mein erste Wahl einen anderen Pin zu nehmen.

    Induktions-Wirkung wäre für mich nur dann eine Erklärung, wenn das Signal nach oben (plus) gehen würde. Ich wüsste jetzt ad hoc nicht, warum ein induziertes Signal im Minus-Bereich sein sollte :conf:

    cu,

    -ds-

  • Nachdem das Signal nur "verschliffen" ist, solange sich der Servo bewegt, vermute ich den Fehler in der Versorgungsspannung für den Servo. Solange er dreht ist der Strom höher. Wenn er seine Position erreicht hat, dann sinkt der Strom und alles ist gut. Auch das ungewöhnlich langsame Fahren des Servos deutet darauf hin.

    Belaste doch den Servo mal indem du drauf drückst, wenn er in seiner Position angekommen ist - vermutlich verschleift sich das Signal wieder? Hat er überhaupt die "normale" Haltekraft?

    Überprüfe doch mal die Versorgung des Servos.

    - Ist diese ausreichend dimensioniert und funktioniert diese noch? Es sind nicht wirklich Batterien wie oben skizziert, oder?

    - Gibt es irgendwo Kontaktprobleme?

    - Wie sind die Massen zwischen Pi und Servoversorgung verbunden - ist das ein langer weg?

    - Kannst Du die Versorungsspannung beim Servo mal mit dem Oszi ansehen?

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • Vielen vielen Dank an alle die geantwortet haben!

    Leider habe ich bis Montag keinen Zugriff mehr auf den Servo und kann daher erst am Montag eure vielen hilfreichen Tipps überprüfen.

    Aber das werde ich auf jeden Fall tun!

    Überprüfe doch mal die Versorgung des Servos.

    - Ist diese ausreichend dimensioniert und funktioniert diese noch? Es sind nicht wirklich Batterien wie oben skizziert, oder?

    Ja sie sollte eigentlich passen. Hat ja wie bereits gesagt mal wunderbar funktioniert. Laut Datenblatt arbeitet der Motor zwar im Bereich von 6,6V - 7,4V, ich habe aber 6V anliegen und damit hat er auch gut gearbeitet. Ich habe ein verstellbares Netzteil, dieses kann jedoch entweder 6V oder 7,5V. Aus Angst hab ich daher vorsichtshalber erstmal 6V genommen. Meint ihr ich soll mal mit 7,5V versuchen? Ist ja kein großer unterschied zu 7,4V.

    Es sind nicht wirklich Batterien wie oben skizziert, oder?

    Nein nein^^, hab auf die Schnelle in Fritzing nur nichts besseres gefunden.

    - Gibt es irgendwo Kontaktprobleme?

    Darauf habe ich auch schon untersucht. Sollte aber ja eigentlich nicht der Fall sein, der Oszi hängt an einer Stelle wonach keine Kontaktstellen mehr Fehler erzeugen könnte und ohne Motor sieht das Signal an der Stelle auch sauber aus.

    Soweit ich das sehe, hast du aber derzeit kein Jittern dazwischen, oder?

    Ein leichtes jittern war am Oszi zu erkennen, aber vorher hatte der Servo ja auch sehr gut reagiert. Da war das Signal also auch sauber genug.

    Was mich da wundert ist allerdings, dass das Rechtecksignal so sauber ist, denn auch da müsste die Induktion ja schon zuschlagen. Du könntest mal einen 100n Kondensator ganz dicht am Servo zwischen Vcc und GND oder eine Diode in Sperrichtung von PWM zu GND klemmen und mal schauen was passiert. Das wären so die ersten typischen Entstörmaßnahmen.

    Das Bild hab ich mit Photoshop nur skizziert, da ich leider kein Foto gemacht habe und gerade keinen Zugriff auf Servo und Oszi habe.

    Wie bereits erwähnt, werde ich allen Tipps ab Montag nachgehen. Das mit der Diode hab ich auch überlegt, auch das werde ich ggf. ausprobieren.

    Vielen Dank an alle.

  • Vielleicht solltest Du mal ne null-linie einfügen, ein x-y scaling und die timescale dranschreiben. Ich sehe jetzt nur schwarze Schleifspuren?

    VG

    Leroy

    Verzeih mir die ungenaue Skizze. Ich habe mal noch Achsen eingefügt, aber stell dir einfach ein PWM Signal mit 50Hz vor...nur eben mit dem seltsamen sägezahn an der Position die ich eingezeichnet habe vor. Meinen Tests zufolge scheint es auch unabhängig von der tatsächlichen Pulsweite zu sein. Solange der Servo die befohlene Position anfährt ist der Zahn da, danach verschwindet er.

    Morgen kann ich auch mal ein Foto vom Oszi machen.

  • Induktions-Wirkung wäre für mich nur dann eine Erklärung, wenn das Signal nach oben (plus) gehen würde. Ich wüsste jetzt ad hoc nicht, warum ein induziertes Signal im Minus-Bereich sein sollte

    Wenn ich eine Induktivität abschalte ist uL=L*(di/dt) und wenn der Strom abgeschalten wird ist di negativ, also durchaus plausibel das bild. Dort hängt doch alles davon an wie die Ansteuerschaltung des Servos ist, und wahrscheinlich gibts eine induktive Rückwirkung auf den Logikteil des Ansteuerkreises - wenn die mechanische Last Grösser wird wirds schlimmer.

    lg

    :danke_ATDE:

  • Danke für die Erklärung ... kann sein, glaub' ich aber trotzdem nicht so recht. Induktionen sind mir bei Servos im Modellbau-Bereich noch nicht untergekommen.

    Ich glaube aber, dass

    Belaste doch den Servo mal indem du drauf drückst, wenn er in seiner Position angekommen ist - vermutlich verschleift sich das Signal wieder? Hat er überhaupt die "normale" Haltekraft?

    VeryPrivat hier scheinbar eine Vermutung hat, die Du damit

    wenn die mechanische Last Grösser wird wirds schlimmer.

    imho bestätigst.

    //EDIT: ich habe gestern eine Weile gesucht und konnte leider keine Angaben zur Stromaufnahme des Servo finden. Die Dinger können ganz schön gierig sein ...

    cu,

    -ds-

  • Danke für die Erklärung ... kann sein, glaub' ich aber trotzdem nicht so recht. Induktionen sind mir bei Servos im Modellbau-Bereich noch nicht untergekommen.

    Wäre mir neu, bei billigen Servos ist die iduktive Rückwirkung nicht unerheblich. Mir hats schon zwei GPIO Ausgänge geschossen, jetzt steuere ich die Servos nur mehr über eine pipolare Gegentaktendstufe mit Freilaufdioden an, beim Raspi, weil dessen Ports relativ empfindlich sind. Aber Schutzdioden gegen negative Spannungsspitzen wären immer angesagt.

    :danke_ATDE:

  • Ok ... wahrscheinlich weil ich Servos mit EasyDriver ansteuere ...

    Möglicherweise gibt es da auch Unterschiede, denn wenn ich mir die Beispiele für z.B. den Arduino so anschaue, dann habe ich noch nie eine Freilaufdiode gesehen ...

    Wie gesagt ... wieder was dazugelernt. Sollte ich mal Probleme bekommen, weiss ich, wo ich gucken kann.

    cu,

    -ds-

  • den Arduino so anschaue

    dreamshader

    Ja bei den Atmega's brauchts die nicht, denn da sind welche in den Portschaltungen drin. Beim Pi hab ich leider noch nie eine Detailschaltung der Ports gesehen, würde mich aber interessieren. Ich hab Servos um € 1,8.- gekauft, da hab ich auf dem Steuereingang bis zu -50V Spitzen gemessen, und ich hab aber auch Servos wo nix ist. Als ich meinen Laserkanonenpanzer von Atmega auf Raspi umgerüstet habe hats mir sofort die beiden Ports für den Drehturm geschossen. Beim Atmega ist nix passiert.

    :danke_ATDE:

  • Meinst Du so was hier -> http://www.mosaic-industries.com/embedded-syste…-specifications ??

    Ist ziemlich schwierig Detail-Informationen zum Pi resp. dem SoC zu bekommen.

    Nun gut, ich behalt das mit der Induktionsspannung mal im Hinterkopf ...

    Kann ja nicht schaden.

    cu,

    -ds-

Jetzt mitmachen!

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