Hallo,
ich habe noch nie etwas mit Servos gemacht und habe mir entsprechend das
günstigste Servo gekauft, welches ich finden konnte. Vermutlich war das
bereits ein Fehler ;).
Ich erzeuge mit einem Mega8 eine 64 Hz PWM. Über ein Poti, welches ich
mit dem ADC einlese erzeuge ich den Duty Cycle von der PWM.
Wenn ich das Servo von Hand auf "0" drehe und anschließend anfange das
Potentiometer zu drehen, fängt das Servo bei ca. 1ms an wie erwartet,
sich zu drehen. Kurz vor 2ms hört es auf und klackert nur noch vor sich
hin. Kein Zittern, rein akustisch.
Drehe ich das Potentiometer wieder runter passiert nichts. Ich muss das
Servo von Hand wieder auf "0" drehen, damit es wieder auf die PWM
reagiert.
Zusätzlich hat es bei diesen 1-2ms nur einen Drehbereich von ca. 15°.
Das soll so bestimmt nicht sein. Irgendwelche tips?
Servo: https://www.ripmax.de/ripmax-sb09-servo-9g-1-6kg.html
Danke, aber das kenne ich bereits. Ich habe meine PWM, das Servo an 5V
und es bewegt sich doch auch hin und her.
Nur gibt es einen auffällig kleinen Wendekreis und einen Point of no
return, nachdessen PWM Wert ich das Servo von hand zurückdrehen muss.
Verhalten sich hier digitale Servos besser?
>Ich erzeuge mit einem Mega8 eine 64 Hz PWM. Über ein Poti, welches ich>mit dem ADC einlese erzeuge ich den Duty Cycle von der PWM.
Wird ein Servo nicht üblicherweise mit 400Hz angesteuert?
>Verhalten sich hier digitale Servos besser?
Nö. Warum auch Hat ja nix mit analog/digital zu tun, sondern entweder
mit Deiner ansteuerung, oder vielleicht doch eine Eigenart Deines Servos
(falls es nicht an der Frequenz liegen sollte)
Jens G. schrieb:> Wird ein Servo nicht üblicherweise mit 400Hz angesteuert?
Üblich sind 50 Hz.
> TCCR2 = (1<<COM21) | (0<<COM20) |> (1<<WGM21) | (1<<WGM20) |> (1<<CS22) | (0<<CS21) | (0<<CS20);
Timer 2 ( 8 bjt)
Fast PWM, TOP=0xFF
Clear OC2 on compare match
Clock Prescaler 64
Dein Systemtakt ist 1 MHz, das durch 64 geteilt ergibt 15625 Hz, bzw.
eine Schrittweite von 1/15625 = 64 µs
Da der Timer immer bis 255 zählt, erzeugt er eine PWM Frequenz von
15625/256 = 61 Hz.
Für 1 ms Pulse brauchst du in OCR den Wert 1 ms/64 µs = 16
Für 1,5 ms Pulse brauchst du in OCR den Wert 1,5 ms/64 µs = 23
Für 2 ms Pulse brauchst du in OCR den Wert 2 ms/64 µs = 32
Ich vermute, dass dein ADC Werte von 0 bis 1023 liefert. Rechnen wir mal
nach, was deine Berechnung bei mittlerer Potistellung ergibt:
> OCR2 = F_CPU 64 ((uint32_t)ADC * 4000 / 1024);
512 * 4000 = 2048000
2048000 / 1024 = 2000
1000000 / 64 = 15625
15625 / 2000 = 7,8
Hier liegt der Fehler. Das ist schon weit unterhalb des richtigen
Wertebereiches.
Ich würde die Berechnung anders angehen:
16 ergibt die kleinste Pulsbreite, kann man als Konstante hinschreiben.
Bei maximaler Potistellung (ADC 1023) willst du weitere 16 dazu
addieren. 1023/16 = 64. Daraus ergibt sich:
OCR2 = ADC/64+16
Bersonders attraktiv finde ich bei diesem Ansatz, dass die teure 32bit
Multiplikation entfällt.
Falls ich mich nicht irre. Probiere es aus.
Ich muss das Poti ganz langsam drehen, dann geht der Servo auch voll
rum. Wenn ich zu schnell drehe (was heißt nicht in zeitlupe zu drehen),
kommt der aus dem Trott und macht einfach klackendes Geräusch.
Dann muss ich das Poti wieder an die Position fahren, wo der Servo sich
aufgehört hat zu drehen und wieder ganz ganz langsam weiter drehen (das
Poti).
Vielleicht ist das Poti im Servo defekt oder verdreckt, so dass die
Rückkopplung fehlerhaft ist.
Ideal wäre eine Schlitzscheibe mit optischem Encoder (etwa wie bei den
alten Computermäusen) direkt am Motor, das wäre dann auch genauer.
Arno M. schrieb:> Vielleicht zieht der Servo auch einfach nur zu viel Strom und der> Prozessor geht durch den Reset. Was hast du für eine Versorgung?
Kann ich mal prüfen, aber:
Wolfgang schrieb:> Hast du das nachgemessen?
die PWM sieht am Oszilloskop nun sehr sauber aus. Per Poti auf 1-2ms
einstellbar bei 64Hz.
Das Verhalten ist absolut nicht normal!
Aber was erwartest Du anderes, wenn die 50Hz nicht stimmen?!
Ausserdem muss die Speisung gut abgeblockt und dem Strom entsprechend
ausgelegt werden! Mach mal Kondensatoren rein!
Gruss Chregu
Christian M. schrieb:> Aber was erwartest Du anderes, wenn die 50Hz nicht stimmen?!
Eigentlich benötigt der Servo doch nur ab und zu einen Rechteckimpuls
der 1-2ms breit ist und dazu eine gewisse Ruhepause.
Die Periode war glaube ich 25ms lang. Bei den
Kanal-Multiplex-Schaltungen hat man in der Zeit etwa 8 Kanäle übertragen
können.
> Ausserdem muss die Speisung gut abgeblockt und dem Strom entsprechend> ausgelegt werden! Mach mal Kondensatoren rein!
Ich hatte einen Tiefpass gebaut, 100µF Kondensator direkt an den Motor
und der wurde über einen kleinen Widerstand (10 Ohm) mit 5V (mit 1000µF
nach Masse) gespeist. Zur Platine gingen die 5V über eine Diode zu einem
100µF Kondensator und dann zum 3,3V Spannungsregler.
Ich konnte die Spannungsversorgung zum Motor per Transistor abschalten
wenn ich die Position erreicht hatte. Diese kleinen, blauen 9g-Servos
hatten genügend Getriebewiderstand, so dass ich keine zusätzliche
Energie benötigte um sie auf Position zu halten.
Die größeren, stärkeren Servos mit Metall-Getriebe hatten hingegen einen
geringeren Getriebewiderstand, das war in meinem Fall ungünstig.
Christian M. schrieb:> Aber was erwartest Du anderes, wenn die 50Hz nicht stimmen?!
Der übliche Pulsabstand von 20ms ist einem Modellbauservo gewöhnlich
ziemlich egal. Die Sollposition ist ausschließlich in der Dauer des
(meist) positiven Pulsteils kodiert.
Moin,
Ich habe von Empfängern schon von 30-60Hz alles Mögliche gesehen. Das
interessiert die Servos nicht.
Ich tippe auch auf Stromversorgung.
Auch ein 9g Servo zerrt mal gerne mit 1-2A beim Anlauf.
Wenn die Servosignale sauber aussehen, liegt es zu 99% an der
Versorgung.
Gruß,
Norbert
Noch ein Problem: Wenn ich mit dem Poti nun regle, fährt es in die
gewünschte Position. Soweit ok.
Mache ich in Software einen sofortigen Sprung um 180° fährt das Servo
nur ganz langsam klackernd in seine Position :(.
Mike J. schrieb:> Ich hatte einen Tiefpass gebaut, 100µF Kondensator direkt an den Motor> und der wurde über einen kleinen Widerstand (10 Ohm) mit 5V (mit 1000µF> nach Masse) gespeist.
Bei einem Anlaufstrom von 1A hast du an dem "kleinen" Widerstand einen
Spannungsabfall von 10V. Wenn der Widerstand sein muss, sitzt der 1000µF
Kondensator zumindestens auf der falschen Seite. Der muss die Lastspitze
durch den Motor direkt abpuffern können ;-)
Albert schrieb:> Ich brauchte einfach mehr uF.. ;)
Hat die Elektronik im Servo keine genügende Abblockung um solche
Spannungseinbrüche bei plötzlicher Belastung des Motors mal kurz
abfangen zu können?
Mike J. schrieb:> Hat die Elektronik im Servo keine genügende Abblockung um solche> Spannungseinbrüche bei plötzlicher Belastung des Motors mal kurz> abfangen zu können?
Für den normalen Einsatz reicht der sicher. Hier vermute ich, ist das
dem Aufbau (Breadboard, Krokoklemmen,...?) geschuldet.
Teo D. schrieb:> Für den normalen Einsatz reicht der sicher. Hier vermute ich, ist das> dem Aufbau (Breadboard, Krokoklemmen,...?) geschuldet.
Ne, Prototyp auf Lochraster gelötet :). Erst 220uF parallel, dann konnte
ich mit Poti die Position regeln. mit nun 440uf funktionieren auch
plötzliche Sprünge von einem zum anderen Ende.
Albert schrieb:> Ich brauchte einfach mehr uF.. ;)
Nein, du brauchst eine stärkere Stromversorgung für den Servo.
Albert schrieb:> Mache ich in Software einen sofortigen Sprung um 180° fährt das Servo> nur ganz langsam klackernd in seine Position :(.
Weil die Stromversorgung zusammenbricht und damit die interne
Servoregelung resettet oder (falls rein analog) spinnt.
Mike J. schrieb:> Hat die Elektronik im Servo keine genügende Abblockung um solche> Spannungseinbrüche bei plötzlicher Belastung des Motors mal kurz> abfangen zu können?
Wofür? Die Servos werden normalerweise von Akkus gespeist. Warum sollte
man also in so einen Servo einen Elko packen der den Bauraum für die
Elektronik mal schnell verdoppelt?
Albert schrieb:> Teo D. schrieb:>> Für den normalen Einsatz reicht der sicher. Hier vermute ich, ist das>> dem Aufbau (Breadboard, Krokoklemmen,...?) geschuldet.>> Ne, Prototyp auf Lochraster gelötet :).
Ne...? Zeig mal, inkl. Stromversorgung, Zuleitungen, etc.
Model u. Marke des Servos, wäre auch interessant. Wenns nicht daran
liegt, weiß man wenigsten, wovon man die Finger lassen sollte. :)
Teo D. schrieb:> Hier vermute ich, ist das> dem Aufbau (Breadboard, Krokoklemmen,...?) geschuldet.
Wohl eher, dem "kleinen" Widerstand
Mike J. schrieb:> Ich hatte einen Tiefpass gebaut, 100µF Kondensator direkt an den Motor> und der wurde über einen kleinen Widerstand (10 Ohm) mit 5V ... gespeist.
Christian M. schrieb:> Aber was erwartest Du anderes, wenn die 50Hz nicht stimmen?!
Das wird nicht die Problemursache sein. Alle mir bekannten Servos
funktionieren auch mit wesentlich mehr als 50Hz und auch mit etwas
weniger.
> Ausserdem muss die Speisung gut abgeblockt und dem Strom entsprechend> ausgelegt werden! Mach mal Kondensatoren rein!
Ja. Ich würde sogar erst mal eine separate Stromversorgung für die
Servos verwenden. Gerne 4 Mignon Zellen.
Vom TO:
"Ich hatte einen Tiefpass gebaut, 100µF Kondensator direkt an den Motor
und der wurde über einen kleinen Widerstand (10 Ohm) mit 5V (mit 1000µF
nach Masse) gespeist."
Du solltest die Servos direkt speisen, OHNE diesen Widerstand! Warum
hast Du diesen "Tiefpass" überhaupt gebaut? Der Controller hat doch
sowieso seinen eigenen Spannungsregler.
Nimm doch diesen 10 Ohm Widerstand einfach raus. Er kann im Extremfall
sogar durchbrennen, da dort viel Leistung verbraten wird.
Wenn Du für irgendeinen Schaltungsteil eine geglättete Spannung
brauchst, kannst Du diesen Teil ja separat versorgen mit einem Tiefpass,
wobei eine Induktivität (L/C Kombination) wohl besser wäre als eine R/C
Kombination.
Markus M. schrieb:> Vom TO:
Der TO ist Albert. Mein Aufbau hat gut funktioniert und sollte auch
vornehmlich die Störungen nicht zurück in die Versorgung speisen, also
daher ein Tiefpass erster oder zweiter Ordnung.
Markus M. schrieb:> Er kann im Extremfall> sogar durchbrennen, da dort viel Leistung verbraten wird.
Dann dient er als billige Sicherung. Solche Strombegrenzungen sollte man
eigentlich überall einbauen wo Fehler absehbar sind. Zum Beispiel beim
Aufbau von Prototypen oder bei Versuchsaufbauten. Es ist besser wenn die
Bauteile in der Versorgung abrauchen (und nur so kaputt gehen können
dass die Versorgung einfach nur ausfällt) als die davon gespeiste
Schaltung.
Der eine Teil lässt sich leicht ersetzen und der andere eben nur mit
viel Mühe/Kosten/Zeit.
Widerstände (0 Ohm) kann man auch gerne mal aus Schaltungen entnehmen
und damit dann bestimmt Schaltungsteile abtrennen.
Irgend eine Entstörung muss man ja dem Servo spendieren, das Ding ohne
Entstörung zu betreiben wäre nicht sehr weise.
Mike J. schrieb:> Der TO ist Albert. Mein Aufbau hat gut funktioniert und sollte auch> vornehmlich die Störungen nicht zurück in die Versorgung speisen, also> daher ein Tiefpass erster oder zweiter Ordnung.
Ah ok, sorry :)
Aber einen Widerstand in die Servostromversorgung ist nicht sinnvoll.
Die Dinger haben die Angewohnheit hohe Spitzenströme zu erzeugen und man
möchte sie deshalb so niederohmig wie möglich an die Versorgungsspannung
anbinden.
Davon können Dir die RC Jungs ein Lied singen ;-)
Warum es bei Albert so schlecht funktioniert ist allerdings unklar. Es
kann eigentlich nur an einer mangelhaften Spannungsversorgung liegen.
Die Servos sind normalerweise ziemlich tolerant was die
Wiederholfrequenz angeht, alles von wenigen Hz bis zu 50..60 Hz sollte
wohl i.O. sein.
Das so große Pufferkondensatoren benötigt werden ist zumindest sehr
seltsam...
Jens G. schrieb:> Wird ein Servo nicht üblicherweise mit 400Hz angesteuert?
Ne, die alte Technik war 20ms von Impuls zu Impuls, also 50Hz. Die 400Hz
sind für moderne Servos. Wobei die Frequenz als solche ziemlich
unkritisch ist. Ich hab die 20ms auch schon auf Werte gedrückt, das ich
so gerade die Pulslänge für Vollanschlag unterbringen konnte. Einige
Servos halten sich auch nicht an die 1-2ms. Mein extremster ging von
0.7-2.4ms.
Manchmal hat man die Scheuklappen auf und merkt es gar nicht!
Ein Oszilloskop scheint ja vorhanden zu sein, die Idee es an die
Versorgungsspannung zu klemmen lässt wohl noch auf sich warten.
Albert schrieb im Beitrag #5817979 um 09:49
> Erst 220uF parallel, dann konnte> ich mit Poti die Position regeln. mit nun 440uf funktionieren auch> plötzliche Sprünge von einem zum anderen Ende.
11 Beiträge, und keiner hat gemerkt, dass das Problem längst gelöst
ist...
Marvin M. schrieb:> Albert schrieb im Beitrag #5817979 um 09:49>> Erst 220uF parallel, dann konnte>> ich mit Poti die Position regeln. mit nun 440uf funktionieren auch>> plötzliche Sprünge von einem zum anderen Ende.>> 11 Beiträge, und keiner hat gemerkt, dass das Problem längst gelöst> ist...
Doch doch, aber bei µC.net steigt man eben nicht von toten Pferden ab,
hier wird bis zum bitteren Ende weiter geritten.
Und in 6 Monaten bis 8 Jahren wird der Thread dann wieder von irgend
einem Nekromanten ausgebuddelt der dann munter lustig weitere
Leichenschändung betreibt...