Hallo, ich hoffe ihr könnt mir weiterhelfen. Verwendet wird ein Modellbauservo (MG996r) an einem Atmega8 mit einem 8MHz-Quarz. Eingesetzt wird der Timer1 mit 16bit. Beim Timer_Overflow_Interrupt wird der Timer mit einem Wert vorgeladen um die 50Hz (20ms) zu erreichen und der Ausgang auf High gesetzt. Mittels Compare A Match Interrupt wird der Port wieder auf low gesetzt. Ich habe mit dem Oszilloskop sehr genau 50Hz (20ms) gemessen und kann die Zeit wunderbar zwischen 1ms und 2ms variieren. Servo läuft auch sauber verschiedene Positionen an und zuckt beim erriechen der Position nicht. Nun möchte ich den Servo sehr langsam um 180grad bewegen. Hierfür stehen wir 2000Schritte von A nach B zur Verfügung. Alle paar ms erhöhe ich meinen Positionswert um eine Stelle. Auf einem LCD-Display zählt der Wert langsam nach oben und auf meinem Oszilloskop sieht man sehr schön wie der Balken (High-Time) sehr langsam immer breiter wird. Allerdings läuft mein Servo nicht sehr langsam und geschmeidig von A nach B sondern macht immer ziemlich rucklige Schritte. Er bewegt sich in gewissen "Stößen" weiter. Wenn ich den Servo mit der Hand etwas belaste läuft er viel geschmeidiger. Ich würde die 180grad gerne sehr geschmeidig über 1-20sek erreichen. Das Ganze soll mal eine Schwenkvorrichtung für Videoaufnahmen werden. Ist die rucklige Bewegung vom Servo bedingt? Habe testweise einen mikroservo probiert, dieser macht aber ebenfalls die ruckligen Bewegungen... Viele Grüße, Peter
Peter schrieb: > Ist die rucklige Bewegung vom Servo bedingt? Jo, ist es. 2k Schritte kann der niemals auflösen. Sieh Dir mal an, wie die Analogdinger funktionieren. Da gibts aber sicher präzisiere, als diese normalen für Spielzeug.
Peter schrieb: > Das Ganze soll mal eine Schwenkvorrichtung für Videoaufnahmen werden. Dafür sind Modellbauservos nicht gut genug. Peter schrieb: > Allerdings läuft mein Servo nicht sehr langsam und geschmeidig von A > nach B sondern macht immer ziemlich rucklige Schritte. Er bewegt sich in > gewissen "Stößen" weiter. Nur der Servo oder auch irgendeine Mechanik für die Kamera?
Das Ruckelproblem hatte ich damals auch bei Servos an Atmega. Das Problem, war, dass das Interrupt für das LC-Display das Timing versaut hatte. Nach Abschalten des Displays lief dann alles wieder ruckelfrei und sauber, die Servobewegungen waren absolut smooth.
Hallo Teo Derix, das habe ich mir schon fast gedacht. Natürlich kann ich die Schrittweite erhöhen. Jedoch sollte der Servo sehr geschmeidig und ziemlich langsam (innerhalb 1-20sek) von A nach B laufen. Mit größeren schritten läuft der Servo ja nicht geschmeidiger (außer er läuft zu schnell). Eine Schwenkung bei Videoaufnahmen soll ja nicht ruckelig sein. Welche Servo ist den zu empfehlen? Oder ist meine Idee mit dem Servo ein falscher Ansatz? Grüße Peter
Peter schrieb: > Nun möchte ich den Servo sehr langsam um 180grad bewegen. Hierfür stehen > wir 2000Schritte von A nach B zur Verfügung. Das ist wirklich "übersportlich"! Das kann ein normaler Servo nicht. Versuch es mal mit einem Drehteller, der von einem Schrittmotor gesteuert wird. Die Übersetzung (am besten per Zahnriemen, würde ich vorschlagen) muss dann entsprechend angepasst werden PS: große Zahnriemen für den Drehteller und den Zahnscheibenaufsatz für den Schrittmotor gibt es günstig im Modellhubschrauber-Zubehör. PPS: nimm am besten einen Steppertreiber, der auch Mikroschritte kann, dann ruckelt es quasi gar nicht mehr.
So wie beschrieben, dürfte der Timer im nicht-PWM Modus betrieben werden, die Compare-Register sind da nicht doppel-gepuffert. Beim Hochzählen/Verlängern des Impulses dürfte das eigentlich nichts machen, beim Runterzählen kann's zum Verfehlen des Matches führen. Für nur ein Servo kann das der Timer komplett in Hardware erledigen, PWM, Mode 15, OCR1A als Top für die 20ms und OCR1B für die Erzeugung des Servopulses, doppel-gepuffert ist's dann auch. Solltest Du das nicht wollen, verändere in der Main-loop nur eine Variable, die Du beim Overflow nach OCR1A übernimmst, das ist dann auch ein Doppelpuffer. Allerdings musst Du das Beschreiben der Variable in Main dann atomar machen. Einfacher und sauberer ist's im Mode 15.
Danke für die schnellen Antwortem. @Rolf Magnus: Vorerst sollte einfach eine Kamera direkt auf den Servo montiert werden. Ich wollte in Zukunft mit Rampen etc arbeiten. Jedoch möchte der Servo einfach nicht langsam geschmeidig (ohne rickbewegungen) von A nach B laufen (innerhalb mehrerer Sekunden). @GR: Habe die Anzeige des auf dem Display auch schon aus meinem Code genommen. Jedoch läuft der Servo immernoch ruckweise vorwärts. Ich habe das Gefühl ein Servo kann keine so langsamen Bewegungen? Grüße Peter
Einen Drehteller aus Multiplex kann man am Rand direkt mit einer Führung und den Fräsungen für den Zahnriemen versehen, wenn man halbwegs geschickt ist. Der Drehteller sollte kugelgelagert oder besser walzengelagert sein.
Peter schrieb: > Jedoch läuft der Servo immernoch ruckweise vorwärts. Ich habe das Gefühl > ein Servo kann keine so langsamen Bewegungen? Wahrscheinlich kann er nicht so kleine Schrittweiten?!?
Peter schrieb: > Habe die Anzeige des auf dem Display auch schon aus meinem Code > genommen. > Jedoch läuft der Servo immernoch ruckweise vorwärts. Ich habe das Gefühl > ein Servo kann keine so langsamen Bewegungen? wenn du sicher gehen willst, benutzt hardware-PWM, das ist unanfällig für Timing-probleme. hat der controller einen 16-bit-timer? wenn ja, nimm den für die hardware-PWM.
Kann auch sein, dass der Referenzpoti im Servo leichte Unlinearitäten/Verschmutzungen besitzt. Dann bringt sein eigenes Feedback ihn zum zittern. Eventuell Servo öffnen und Kohlebahn/Schleifer von dem Referenzpoti säubern. Vorher würde ich Hardware-PWM testen, um software-Probleme auszuschließen. Noch besser ist die Idee mit dem Schrittmotor und der Übersetzung per Zahnriemen!!!
Peter schrieb: > an einem Atmega8 mit einem 8MHz-Quarz. Wird der Quarz auch benutzt oder läuft der Atmega8 mit irgendwelchen 1MHz aus dem RC-Oszillator?
Peter schrieb: > Jedoch läuft der Servo immernoch ruckweise vorwärts. Ich habe das Gefühl > ein Servo kann keine so langsamen Bewegungen? doch, ein servo kann normalerweise auch langsame bewegungen ohne zu ruckeln!
Wolfgang schrieb: > Peter schrieb: >> an einem Atmega8 mit einem 8MHz-Quarz. > > Wird der Quarz auch benutzt oder läuft der Atmega8 mit irgendwelchen > 1MHz aus dem RC-Oszillator? und sind das überhaupt 50Hz, die da aus dem AtMi kommen oder irgendwo beim Programmieren verrechnet?
Fuses richtig gesetzt? Insb. die Oszillator-einstellung Extern Quarzoszillator und die CLKDIV-Fuse auf OFF!?
Je nach Qualität der Servos haben alle Modellbauservos einen mehr oder weniger grossen Totbereich, genau das dürfte hier das Problem sein. Strom steht im Modell nicht unbegrenzt zur Verfügung, und ein um seine Nullage minimal zitterndes Servo braucht ordentlich Saft. Mit guten Servos (das heisst spielarmes Getriebe und hochwertiges Poti) ist es aber machbar.
Peter schrieb: > Allerdings läuft mein Servo nicht sehr langsam und geschmeidig von A > nach B sondern macht immer ziemlich rucklige Schritte. Wie "groß" sind die Ruckelschritte? 10° - 20 ° ? oder Kleiner? größer? > Er bewegt sich in > gewissen "Stößen" weiter. Wenn ich den Servo mit der Hand etwas belaste > läuft er viel geschmeidiger. Ich würde die 180grad gerne sehr > geschmeidig über 1-20sek erreichen. Ist schon sehr langsam. Mal ne andere Frage, was heisst bei dir "Servo"? Ist das eine Synchronmaschine/ Drehstrommotor mit Permanentmagneten? Wenn ja dann wieviel polig ist die Maschine? Oder ist das ein Schrittmotor?
Werner schrieb: > Kann auch sein, dass der Referenzpoti im Servo leichte > Unlinearitäten/Verschmutzungen besitzt. Eventuell sind da Digitale besser (hab ich noch nie in der Hand gehabt). Wende Dich mit Deinem Problem, doch mal an ein Modellbau-Forum. Die sollten da wohl mehr Ahnung haben.
Frank The Tank schrieb: > Mal ne andere Frage, was heisst bei dir "Servo"? Was ist daran unklar? Peter schrieb: > Verwendet wird ein Modellbauservo (MG996r) Das ist ein normales mit DC-Motor und Brückenansteuerung - vermutlich eines der vielen mit M51660L o.ä. Oft erlaubt das Controller IC eine Einstellung der Totzeit, das hat allerdings nur dann Sinn, wenn die Mechanik und die Auflösung des Potis das hergibt. Gute Erfahrungen mit grossem Schwenkbereich und Auflösung habe ich mit den Graupner C5XX Servos gemacht, für einen Gimbal würde ich aber trotzdem auf BLDC setzen.
Peter schrieb: > Nun möchte ich den Servo sehr langsam um 180grad bewegen. Hierfür stehen > wir 2000Schritte von A nach B zur Verfügung. Alle paar ms erhöhe ich > meinen Positionswert um eine Stelle. Alle paar ms macht keinen Sinn, du kannst ja nur alle 20ms einen neuen Wert vorgeben. > Auf einem LCD-Display zählt der > Wert langsam nach oben und auf meinem Oszilloskop sieht man sehr schön > wie der Balken (High-Time) sehr langsam immer breiter wird. > > Allerdings läuft mein Servo nicht sehr langsam und geschmeidig von A > nach B sondern macht immer ziemlich rucklige Schritte. Er bewegt sich in > gewissen "Stößen" weiter. Wenn ich den Servo mit der Hand etwas belaste > läuft er viel geschmeidiger. Ich würde die 180grad gerne sehr > geschmeidig über 1-20sek erreichen. Also, ein (analoges) Servo hat ein Deadband von ca. 5µs bezogen auf die Pulsdauer. Wenn sich dein Servopuls um weniger ändert, bewegt sich das Servo garnicht. Irgendwann überschreitest du diesen Wert, das Servo dreht sich ein klein wenig. Das ist aber längst abgeschlossen, bevor du einen neuen Wert lieferst, der wieder aus dem Deadband herauskommt. Wenn du jetzt mechanisch bremst, dreht das Servo langsamer und das Ruckeln wird nicht so deutlich. Ich würd es mal mit einer kürzeren Periodendauer probieren. Viele Servos kommen auch mit 10ms klar, digitale häufig auch mit 3-4ms. Ob das dann "geschmeidig" genug wird, kA. Außergem würde ich die Spannung für das Servo so klein wie möglich wählen, die laufen ab 4V. Ob dann die Kraft noch reicht, ebenfall kA MfG Klaus
Matthias Sch. schrieb: > Frank The Tank schrieb: >> Mal ne andere Frage, was heisst bei dir "Servo"? > Was ist daran unklar? Weil es einige Unterschiedliche Motorentypen gibts die als Servo gelten. > Peter schrieb: >> Verwendet wird ein Modellbauservo (MG996r) > Das ist ein normales mit DC-Motor und Brückenansteuerung - vermutlich > eines der vielen mit M51660L o.ä. Habe das oben nicht gelesen...
Frank The Tank schrieb: > Habe das oben nicht gelesen... ähhh, warum Antwortest Du auf eine Frage, die Du nicht gelesen hast?
flo schrieb: > Peter schrieb: > Jedoch läuft der Servo immernoch ruckweise vorwärts. Ich habe das Gefühl > ein Servo kann keine so langsamen Bewegungen? > > doch, ein servo kann normalerweise auch langsame bewegungen ohne zu > ruckeln! Nein, normale analoge Servos haben einen Totbereich in dem sie nicht reagieren. Erst wenn die Abweichung gross genug ist, läuft der Servo an und wenn er die Zielposition erreicht stoppt er wieder. Das kann 100 Schritte ergeben. Erst besondere Präzisionsservos lösen beispielsweise 2000 Schritte auf, bei üblich gestörtem Eingangssignal sind die aber immer am zittern und verbrsuchen Strom.
Ich bin immer noch der Meinung, daß ein Modellbauservo nicht ruhig genug läuft für eine geschmeidige Kamerafahrt. Schon das Getriebe hat zuviel Spiel und zuviel Reibung. Einfache Gleichstrommotoren intern auch. Deshalb werden für solche Systeme typischerweise bürstenlose Direktantriebe verwendet.
Hallo, danke für die zahlreichen Antworten. Habe das ganze eben mal mit Hardware-PWM probiert (Mode15 etc). Mit dem Oszi ein wunderbares Singla erzeugt. Bei sehr langsamen Bewegungen wieder das gleiche Ergebnis. Liegt wohl wirklich am Servo... Habe mal ein Video aufgenommen und lade es gerade in Youtube hoch. (Link kommt wenn hochgeladen) Vielleicht hilft es weiter und man sieht meine Problematik. Ich habe mittlerweile das Gefühl meine Idee mit dem Servo ist einfach der falsche Ansatz. :( Grüße
Peter schrieb: > Ich habe mittlerweile das Gefühl meine Idee mit dem Servo ist einfach > der falsche Ansatz. :( Auf Position geregelte Antriebe mit relativ großer Hystere und eher mäßiger Mechanik können das nun mal nicht. Die Hystere spart zwar Strom, ist aber hinderlich für einen gleichmäßigen Lauf. Und natürlich ist es sinnlos, den Sollwert häufiger zu ändern, als die Sollposition zum Servo übertragen wird.
Peter schrieb: > Habe mal ein Video aufgenommen und lade es gerade in Youtube hoch. (Link > kommt wenn hochgeladen) Wie lange braucht das denn zum hochladen?
Hallo, endlich ist das Video hochgeladen: https://www.youtube.com/watch?v=TS-UFWhlguE Ich mach mich mal an eine neue Antriebsart für meinen Schwenkkopf... Grüße
Peter schrieb: > Nun möchte ich den Servo sehr langsam um 180grad bewegen. Hierfür stehen > wir 2000Schritte von A nach B zur Verfügung. Alle paar ms erhöhe ich > meinen Positionswert um eine Stelle. Auf einem LCD-Display zählt der > Wert langsam nach oben und auf meinem Oszilloskop sieht man sehr schön > wie der Balken (High-Time) sehr langsam immer breiter wird. Wenn dein Atmega8 den Servo steuert und gleichzeitig das Display, kann es über das Display-Interrupt zu timingproblemen in der Servosteuerung kommen. Schalte das Display mal softwaremäßig ab, schau, ob es noch ruckelt und berichte.
Leo schrieb: > Wenn dein Atmega8 den Servo steuert und gleichzeitig das Display, kann > es über das Display-Interrupt zu timingproblemen in der Servosteuerung > kommen. Wieso verrät dir deine Glaskugel, dass das Display Interrupts benutzt, die den Timer stören und meine nicht?
Wolfgang schrieb: > Wieso verrät dir deine Glaskugel, dass das Display Interrupts benutzt, > die den Timer stören und meine nicht? Wird wohl ein Unterschied in der Bezugsquelle sein - nicht jede Glaskugel gleicht der anderen. Das LCD isses aber nicht, hat der TE schon ausprobiert, wie o. a. Es ist sehr abhängig von der Qualität der Servos. Ich habe letztes Jahr zwei Graupner Servos dazu benutzt, ferngesteuert Fokus und Blende einer EB (Steady-)Cam zu ziehen und das läuft sehr sauber, geräuschlos und ruckelfrei. Allerdings musste ich schon aus einer Handvoll dieser Servos mir die besten raussuchen. Graupner musste es wegen der Bauform mit dem Ring unterm Servohorn sein. Zum Schluss gewann ein C515 und ein C505, wimre.
Peter schrieb: > endlich ist das Video hochgeladen: > Youtube-Video "Atmega8 + Servo = Problem" Wenn du einen Video zum Hochladen auf Youtube aufzeichnest, wäre es gut, sich vorher zu überlegen, dass mein bei 16:9 und Querformat etwa drei mal mehr Bildschirmfläche zur Verfügung hätte. Insbesondere in der Totalen, in der gerade mal 11% des Bildes relevante Bildbereiche enthalten, bleiben sonst nur knapp 4% des Videobildes für Information - das könnte man bei vernünftiger Aufteilung besser auf einer Briefmarke unterbringen. -1
Guten Morgen, Display wurde schon komplett aus dem Code entfernt. Genauso wurde der Servo schon per Hardware-PWM angesteuert und der Servo machte dieselben Bewegungen. Ich glaub es ist wirklich die Hardware (Billigservo)... Ich schau mal was ein besseres Servo kostet. Das Video ist mit dem iPhone aufgenommen und direkt hochgeladen. An den PC habe ich dabei nicht gedacht... Sorry! Grüße
Peter schrieb: > Das Video ist mit dem iPhone aufgenommen und direkt hochgeladen. Auch ein iPhone sollte sich doch quer halten lassen. Welec DSO und Servo so nebeneinander anzuordnen, dass Display und Servo das Bild halbwegs ausfüllen, sollte so schwierig auch nicht sein :-(
Ich denke, in der 40..50€-Preisklasse wirst du was brauchbares finden. Und nimm gleich ein sog. Digitalservo.
10 Gang poti direkt an deine Drehachse dann hast du schon mal kein Poti Problem. Die meisten servos haben ne Auflösung von 512 bei analog Servos neuere1024 digital Servos .
Matthias Sch. schrieb: > Ich habe letztes Jahr > zwei Graupner Servos dazu benutzt, ferngesteuert Fokus und Blende einer > EB (Steady-)Cam zu ziehen und das läuft sehr sauber, geräuschlos und > ruckelfrei. Es macht aber einen Unterschied, ob du die Blende einer Kamera damit verstellen willst oder die ganze Kamera drehen. mahwe schrieb: > Die meisten servos haben ne Auflösung von 512 bei analog Servos Analogservos haben gar keine Auflösung, da sie ... naja, eben analog sind.
Rolf Magnus schrieb: > Es macht aber einen Unterschied, ob du die Blende einer Kamera damit > verstellen willst oder die ganze Kamera drehen. Allerdings. Hier war es ein C-Mount Teleobjektiv der 400mm Klasse und einer benötigten Stellkraft bei Blende von etwa 30-40Ncm - schon etwas mehr Power. Der Fokusring braucht etwa 40-60Ncm. Soviel wirds bei einer kleinen Digicam nicht brauchen.
Ich meinte das eher im Bezug auf Genauigkeit und ruhigen Lauf.
Rolf Magnus schrieb: > Analogservos haben gar keine Auflösung, da sie ... naja, eben analog > sind. Na irgendwie doch. Alles was über Hysterese/Jitter hinaus geht, ist vergebene Liebesmühe und ist damit nicht zur gezielten Ansteuerung einer Position nutzbar. Somit ist die Auflösung auch für Analogservos begrenzt, durch zwar durch die stochastischen Positionsfehler.
Es gäbe noch'n Weg mit mehr Bastelei, indem man das RC-Servo in der Art eines Endlosservos umbaut. Bei diesem Umbau wird üblicherweise das Servopoti ausgebaut, der Endanschlag entfernt und das Poti durch zwei gleiche Festwiderstände ersetzt. Damit wird quasi eine fixe Mitte geschaffen. Abweichungen davon versucht das Servo mit Gegendrehung zu kompensieren, mangels mechanischem Feedback klappt natürlich nicht mehr, das Servo dreht dauernd. Mit der Differenz zum "Mitten"-Puls lässt sich die Drehgeschwindigkeit in gewissem Maß steuern, abhängig vom im Servo eingebauten Controller. Entfernt man das Servopoti nicht, sondern klemmt man es an den ADC des µC, so kann dieser die Regelung übernehmen und das Laufverhalten über die Abweichung zum Mitten-Puls steuern. Wie gut das letztendlich klappt, hängt vom steuerbaren Drehgeschwindigkeitsbereich ab.
mahwe schrieb: > 10 Gang poti direkt an deine Drehachse dann hast du schon mal kein Poti > Problem. Die Drehachse des Servos macht in der Regel 180° zwischen Anfang und Ende. Dort ein 10-Gang-Poti ran und das Poti bewegt sich gerade mal ein 20stel seines möglichen Weges. Ich finde, damit hast du erst recht ein Poti-Problem. Das interne Poti eines Servos nutzt den Drehwinkel fast vollständig aus, aber ein 10-Gang-Poti gerade mal zu 5%...
Wolfgang schrieb: > Somit ist die Auflösung auch für Analogservos begrenzt, durch zwar durch > die stochastischen Positionsfehler. Das ist nicht Auflösung, sondern Genauigkeit. MWS schrieb: > Mit der Differenz zum "Mitten"-Puls lässt sich die Drehgeschwindigkeit > in gewissem Maß steuern, abhängig vom im Servo eingebauten Controller. Das klappt aber nur bei Analogservos. Die digitalen geben auch bei sehr kleinen Abweichung ziemlich schnell Vollgas - zumindest die, die ich bisher im Einsatz hatte.
Ich benutze oft die billigsten Analogservos von Conrad - da ruckelt nie was (habe schon ca. 20 Stück verbaut). Die halten halt nur nicht ewig wegen der Plastikgetriebe. (das nur mal als Info am rand)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.