PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo schnell und langsam laufen lassen



Dennis2006
26.03.2010, 23:00
Hi!

Ich arbeite zur Zeit mit BASCOM und einem ATMEGA8 sowie einem Standard-Servo. Dieses habe ich bereits mittels des BASCOM Servo Befehls erfolgreich angesteuert.

Leider fährt es jetzt immer nur mit voller Geschiwindigkeit in die jeweilige Position.



Wie muss ich den Code ändern, damit ich die Geschwindigkeit einstellen kann?

Vielen Dank!

Gruß

Dennis


Config Servos = 1 , Servo1 = Portc.0 , Reload = 10

Config Portc = Output

Enable Interrupts

Do
Servo(1) = 31
waitms 50
Servo(1) = 152
waitms 50
Loop

Sauerbruch
26.03.2010, 23:50
Leider fährt es jetzt immer nur mit voller Geschiwindigkeit in die jeweilige Position.

Das liegt in der Natur der Sache - normale Standardservos können nur ganz oder garnicht.

Du kannst mal versuchen es dahingehend zu überlisten, dass Du den Weg (also bei Dir von 31 bis 152) in viele kleine Teilwege unterteilst und Zeitverzögerungen einbaust. Also etwa so:




Config Servos = 1 , Servo1 = Portc.0 , Reload = 10

Config Portc = Output

Enable Interrupts

Dim Z as Byte

Do

For Z = 31 to 152
Servo(1) = Z
waitms 20
Next Z

...


Loop


So würde es 121*20 ms, also knapp 2,5 Sekunden dauern.

veit
27.03.2010, 08:29
und was ist daran überlisten? so macht man das doch? naja gut in c würde man halt die timervariable selbst verändern bei jedem aufruf ...

Sauerbruch
27.03.2010, 08:37
und was ist daran überlisten?

Na ja, ich denke, dass etliche Entwicklungsingenieure täglich ihr Hirnschmalz dafür einsetzen, Servos mit möglichst kurzen Stellzeiten zu entwickeln. Ob man aber von "überlisten" sprechen kann, wenn man die Stellzeit künstlich verlangsamt, darüber lässt sich natürlich trefflich diskutieren.


so macht man das doch?

Absolut Korrekt - aber Dennis2006 kannte diese Variante in B offensichtlich noch nicht :-)