Mikrokontroller mit PWM's für 13 Servos ?

Matthias Weingart <mwnews@pentax.boerde.de> schrieb im Beitrag <Xns9451DAD9D656AAlwLookOnTBrightSide@212.21.75.70>...
Sofern der Jitter durch die Interruptantwortzeiten nicht stört.
Da kommen schon einige ľs zusammen (unterschiedliche
Interruptresponsezeiten, je nachdem was der uC gerade so macht) .
Noe.

Die laufende Instruktion wird abgebrochen. Sie kann 1 oder 2 Takte
dauern. Also reden wir von einem Jitter von 0.025 Prozent. So was
ist Irrelevant. Da ist die Flanke des TTL-Servosteuersignals mit
groesserem Jitter behaftet.

Und den Interrupt darf man im Hauptprogramm auch nicht sperren,
Das allerdings nicht (wenn es laenger dauert), und wenn man es tun
muss, wartet man auf den Uebergang von Servo 12 auf Servo 0.
Aber gegen falsche Programmierung ist kein Kraut gewachsen (siehe
die weitgehend fehlerhaften Programme von Microsoft).

ansonsten
wirds noch wackliger. Alles in allem nur eine Lösung, wenn der uC
so gut wie nichts anderes machen soll.
Dann hast du ihn grob falsch programmiert. Davon ausgehend, das der
Servo-Interrupt keine 10 usec Bearbeitungszeit hat und weniger als
jede Millisekunde kommt, ist der Prozessor nicht mal zu 1 % belastet.
Da ist unendlich viel Zeit fuer 'richtige Arbeit' uebrig.
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
Moin moin,

chregu@tiscalinet.ch (Christian Müller) meinte am 14.12.03

Dann bekommst Du aber nur beim ersten Servo immer genau die 20ms
Zykluszeit hin, fragt sich, ob das bei den anderen stört...
das ist das, was ich mit Jitter meinte. Aber auch das ließe sich mit
demselben Timer umgehen, indem man halt die Pausen ebenfalls darüber
laufen läßt, so daß die folgenden Impulse ebenfalls fein im 20ms-
Abstand +/- ein paar ľs kommen.



t0 +------------------------------------------+
| |
----+ +-----------------....

t1 +---+ +-------+ +------+ +--+ +-----+ +-
| | | | | | | | | | |
----+ +------+ +--+ +----+ +---------+ +-----+ ...

^ ^ ^ ^ ^
# # # # #

bei den ^ einschaltzeit programmieren, bei den # die Pasuenzeit.

evtl. geht das auch mit Capture&Compare, aber da kenne ich mich nicht
so aus

Rainer

--
Viele die leben, verdienen den Tod. Und manche, die sterben,
verdienen das Leben. Kannst Du es ihnen geben? (JRRT)
 
Moin moin,

news@kurt-harders.de (Kurt Harders) meinte am 14.12.03

Ich verwende von einem PIC16F627 den 16-Bit-Zaehler und den
Vergleicher, der dann den Pin zuruecksetzt. Die 20ms sind nicht sooo
kritisch, aber bei 10ms haben schon einige Servos gestreikt. Bei
30ms habe schon Servos gezuckt. Das haengt stark von den Servos ab.
Naja, die 20ms sind ja eigentlich relativ leicht einzuhalten, Frage
ist, wie die Dinger reagieren, wenn die Zykluszeit je nach
Servostellungen nicht konstant bleibt.

Rainer

--
"Well, that is my great contribution to fantasy:
dwarves don't float."
(Joel Rosenberg in de.alt.fan.tolkien)
 
"MaWin" <me@privacy.net> wrote in
news:01c3c272$ac996460$0100007f@amdk6-300:

Braucht 0 (Zero, Null, keinen) PWM.
Sofern der Jitter durch die Interruptantwortzeiten nicht stört.
Da kommen schon einige ľs zusammen (unterschiedliche
Interruptresponsezeiten, je nachdem was der uC gerade so macht) . Und
den Interrupt darf man im Hauptprogramm auch nicht sperren, ansonsten
wirds noch wackliger. Alles in allem nur eine Lösung, wenn der uC
so gut wie nichts anderes machen soll.

M.
--
Bitte auf mwnews2@pentax.boerde.de antworten.
 
Kurt Harders wrote:
Ich habe bei Tests mit FS100, Carson-Servos und diversen anderen
Servos Totzeiten von maximal 5us gefunden. Wenn der Puls sich um 5us
veraendert, laeuft der Motor an.
Das heisst aber, je nach Servo, nicht, dass sich auch am Abtrieb/Poti
was tut. Genau dann fangen die Servos an zu brummen.
Ich hatte bei den Servos, die ich testete, den Eindruck, dass genau
wegen dieser mechanischen Hysterese auch eine elektrische Hysterese
eingebaut war, die verhindern sollten, dass der Motor bei so kleinen
Impulsdauer-Änderungen anläuft. Aber ich kann mich natürlich auch
getäuscht haben.
Zumindest hat sich nur dann etwas getan, wenn der Impuls sich um
mindestens 20us änderte - bei einer PWM-Auflösung von 8us und
langsamer Änderung der Pulsdauer hat das Servo dann ziemlich
geruckelt.
Kannst Du denn ein günstiges Servo empfehlen, welches mechanisch
hochauflösend und mit geringer mechanischer Hysterese behaftet ist?
Die Stellkräfte wären eher gering.

Thomas.
 
Hallo Thomas,

Thomas Rehm schrieb:

Kannst Du denn ein günstiges Servo empfehlen, welches mechanisch
hochauflösend und mit geringer mechanischer Hysterese behaftet ist?
Die Stellkräfte wären eher gering.
Am besten ist immer noch vorspannen. Beim Einsatz fuer Bahnschranken war
eine Aufloesung von 4us schon als Ruckeln erkennbar. Mit einer
Aufloesung von 1us ist das mit teuren Servos, die ein metallgetriebe
haben und Kugellager, OK. Mit preiswerten Servos mit fettigen
Kunststoffgetrieben und Plastik-Gleitlagern hilft eben Vorpsannen.

Gruss, Kurt

--
PiN - Präsenz im Netz GITmbH
Kurt Harders
http://www.pin-gmbh.com
 
Hallo Rainer,

Rainer Knaepper schrieb:

evtl. geht das auch mit Capture&Compare, aber da kenne ich mich nicht
so aus
Es geht. Ich verwende die Moeglichkeit bei Gleichheit einen Pin zu auf 0
zu setzen. Das Ganze dann multiplexen, und fertig. Ob die
Interruptbehandlung von CCP ausreicht, haengt von den sonstigen
Interrupts ab. Bei mnir waren das alle 50us ein Interrupt, und das war
einfach zu viel.

Gruss, Kurt

--
PiN - Präsenz im Netz GITmbH
Kurt Harders
http://www.pin-gmbh.com
 
Philip <flupp@hispeed.ch> wrote in message news:<brgcil$geu$1@newshispeed.ch>...
Hallo zusammen

Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig ansteuern.
Das möchte ich mit Pulsweitenmodulatoren machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
(Der Microchip PIC18F8621 zwar schon, aber der Programmer und der C-Compiler ist mir viel zu teuer.)
Hallo Philip,
irgendwie verstehe ich Dein Problem nicht so ganz, denn für fast
beliebig viele Servos (6...7 müssten auf jeden Fall gehen)brauchst
Du nur einen digitalen Port, der alle Servos in Kette steuert;
schliesslich funktioniert eine normale Fernsteuerung auch nicht
anders. Die Pulsdauer gibt die Stellung des Servos vor; die Puls-
pause schaltet um aufs nächste Servo (z.B. mit einem 4017). Ein etwas
längerer Puls nullt den Zähler. Die typische Wiederholzeit bei
einer Fernsteuerung ist dann 20ms. Wie Du Deinen uC für ein solches
Pulsmuster programmieren musst weiss ich allerdings nicht, das sollte
aber für einen Kenner kein allzugrosses Problem sein.
Gruss
Harald
PS: 13 Servos würde ich sowieso nicht nehmen, das bringt Unglück.
War da nicht mal irgendwas mit Dornröschen?
 
Harald Wilhelms schrieb:

irgendwie verstehe ich Dein Problem nicht so ganz, denn für fast
beliebig viele Servos (6...7 müssten auf jeden Fall gehen)brauchst
Du nur einen digitalen Port, der alle Servos in Kette steuert;
schliesslich funktioniert eine normale Fernsteuerung auch nicht
anders. Die Pulsdauer gibt die Stellung des Servos vor; die Puls-
pause schaltet um aufs nächste Servo (z.B. mit einem 4017). Ein etwas
längerer Puls nullt den Zähler. Die typische Wiederholzeit bei
einer Fernsteuerung ist dann 20ms. Wie Du Deinen uC für ein solches
Pulsmuster programmieren musst weiss ich allerdings nicht, das sollte
aber für einen Kenner kein allzugrosses Problem sein.
Der uC ist heute unter Umständen schon günstiger als ein 4017 zu
bekommen, den man ja noch zusätzlich braucht.
Der Software ist es praktisch egal ob sie das Signal an 13 Ports
getrennt oder gemultiplexed an einen Port ausgibt.
Das Problem liegt darin, mit einer hinreichenden Auflösung
die bis zu 13 unterschidlichen Pulszeiten zu erzeugen und dabei
noch rechenzeit für andere Aufgaben zur Verfügung zu haben.


PS: 13 Servos würde ich sowieso nicht nehmen, das bringt Unglück.
War da nicht mal irgendwas mit Dornröschen?
War das nicht Schneewitchen mit den 7 Servos?
;-)
Gerald
 

Welcome to EDABoard.com

Sponsor

Back
Top