PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo zappelt !!



Jigger
20.04.2007, 16:57
Hallo zusammen,
Ich habe mir ein paar von den billigen Servos von Conrad bestellt, die für 5 €. Jetzt habe ich diese mal an mein Controllerboard angeschlossen und auf den Mega16 das Programm aud dem Wiki zur Servoansteuerung übertragen. Aber dann fängt der Servo nur an wild hin und her zu zappeln.
Ist da vielleicht ein Fehler im Programm ?


Config servos = 6, Servo1 = portd.2, .... usw... , Reload = 10
Config portd = output

Enable Interrupts

Do
Servo(1) = 50
waitms 500
Servo(1) = 150
waitms 500
loop

End



Und dann noch eine Frage: Wofür steht "Reload = 10" im Config Befehl ??

mfg
Jigger

radbruch
20.04.2007, 17:52
Hallo

Diese Mini-Servos verwende ich auch:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=29865

Gruß

mic

Jigger
20.04.2007, 17:58
Und funktionieren die bei dir richtig ?? Wie sieht dein Ansteuerungsprogramm aus ?

mfg

Jon
20.04.2007, 20:10
Ich habe mir ein paar von den billigen Servos von Conrad bestellt, die für 5 €.
Verwende ich auch bei meinem Arm.


Ist da vielleicht ein Fehler im Programm ?
Nein!


Und dann noch eine Frage: Wofür steht "Reload = 10" im Config Befehl ??
Klick mal auf Servo. Da wird das beschrieben.

Experimentiere mal mit den Reload-Wert rum. Bei mir funktioniert 10 sehr gut. Probiere einfach mal alle Werte zw. 25 und 5.
Oder liegt es daran, dass du eine zu hohe Last heben willst. Wenn die Last zu hoch ist, dann wackeln die Servos sehr stark.

jon

Jigger
20.04.2007, 22:31
Ihc habe noch gar nicht an die Servos geschraubt. Und egal welchen wert ich den Servos zuweise, sie drehen sich immer ruckeld bis zu einem Anschlag.

Manf
21.04.2007, 06:52
Sieh Dir mal die Spanungsversorgung für die Servos an. Du solltest sie einmal mit einem großen Elko stabilisieren, um zu erkennen ob es daran liegt.
Manfred

Jon
21.04.2007, 07:07
Die Servos zappeln auch extrem stark, wenn du versuchst über den Anschlag hinaus zu steuern. Versuche also auch mal den Servo dazu zu kriegen, dass er bei der Mittelstellung stehen beleibt.

jon

Jigger
21.04.2007, 09:37
ja das heißt ich muss mit den Werten experimentieren, denn wie ich das hier so mitbekommenhabe (auch in anderen Threads), sind die immer sehr unterschiedlich ?! Hat den vielleicht einer von euch genau diese Servos von Conrad für 5 € und hat schon passende Werte gefunden??

mfg
Jigger

plusminus
21.04.2007, 10:00
ausprobieren heißt das stichwort ;)

am besten über konsolen-input

mfg
plusminus

Lenox
21.04.2007, 10:24
Also ich hab damal auch alles ausprobiert, bei mir haben sie immer gezappelt.
An deiner Stelle würd ich mir ordentliche Digitalservos kaufen.

Jon
21.04.2007, 11:00
Bei mir ist die Mitte 19. Schwankt aber auch zw. den Servos.
Welchen Servo genau hast du? Es gibt bei Conrad zwei verschiedene für 5€.

@Lenox: Aber wie steuert man Digitalservos mit einem ATMaga an? Konnte noch niemand hier im Forum beantworten.

jon

Andree-HB
21.04.2007, 11:16
Ich habe mal mit so einem Servo unter Bascom mit den Werten "herumgespielt" :

http://www.pixelklecks.de/pictures/servo.jpg

- grösster Ausschlag also mit Reload 10, im Bereich von 45ms - 200ms

Andree-HB
21.04.2007, 11:31
Aber dann fängt der Servo nur an wild hin und her zu zappeln.


Übrigens -> laut deinem obigen Code zappelt das Servo natürlich herum, da Du es alle halbe Sekunde mit der Maximalstellgeschwindigkeit über einen ziemlich grossen Stellweg herumwirbelst.

Lenox
21.04.2007, 11:32
@Jon
Werden die nicht wie die anderen auch angesteuert?

@Andree-HB
Hm ist ja mal interessant

Jon
21.04.2007, 11:55
@Jon
Werden die nicht wie die anderen auch angesteuert?
Weiß ich ja nicht. Ich habe noch nie Infos gefunden, wie ich Digitlaservos ansteuer. Die Position wird, vermute ich mal, auch über PWM "mitgeteilt". Aber der Servo gibt ja sehr viele Infos über Position, Kraft usw. heraus. Wie werte ich das aus??

jon

Lenox
21.04.2007, 12:04
Jo geht
http://www.rclineforum.de/forum/thread.php?threadid=107700&page=3&sid=2f98f5c96cb3ea2f8821be04f0865a84
Strg + F dann "digi" ca. Mitte ist ein Post von "Mario"

Jon
21.04.2007, 12:10
Gut. Ist also relativ einfach möglich. wie ist es aber mit den Daten, die der servo sendet?

jon

Lenox
21.04.2007, 12:13
Hm sorry da kann ich dir nicht weiterhelfen, hab selber noch keinen angesteuert.
Sicher das die überhaupt Daten zurückliefern?
Dann bräucht man Im RC-Modellbau komplett neue Emfänger bzw einen Sender, das glaub ich kaum.

Jon
21.04.2007, 12:20
Mit wurde hier im Forum mal erzählt, weil ich eine Möglichkeit gesucht habe die Position vom Servo herauszubekommen, dass Digitalservos diese und andere Infos herausgeben.

jon

Jigger
23.04.2007, 15:13
joa also ich habe nun bei mienen Servos mal die Spannung etwas stabilisiert und nun zappeln sie auch nicht mehr. Trotzdem bleibt folgendes Problem:
Egal welchen wert ich den Servos zuweise(0,12,24,50,100,150,200), sie drehen sich immer zum gleichen Anschlag!?
Kann mir da einer weiterhelfen?
mfg
Jigger

Andree-HB
23.04.2007, 15:44
...kann es vielleicht sein, dass im Header die falsche Taktfrequenz (als tatsächlich aktiviert/beschaltet) eingetragen ist - dann werden natürlich auch die Zeiten der Impulse komplett "falsch" berechnet und würden sich wie bei Dir auswirken.

Manf
23.04.2007, 16:34
Sieh Dir mal die Spanungsversorgung für die Servos an. Du solltest sie einmal mit einem großen Elko stabilisieren, um zu erkennen ob es daran liegt.
Manfred
Das ist ein Problem, dass regelmäßig bei Servos auftritt. Wenn die Typen nicht gehen würden dann gäbe es deutlich mehr Beschwerden.
Manfred

Jigger
09.05.2007, 19:29
hallo nochmal,
also ich habe die Frequenz des Controllers noch einnmal überprüft- die stimmt.
Mein Problem ist weiterhin, dass sich der Servo,egal welchen Wert ich eingebe (hab 0,1,12,24,50,100,150,200,sogar mal 1000 ausprobiert bei reload = 10), immer zum gleichen Anschlag dreht.
Das kann doch nicht sein oder ?

mfg

radbruch
09.05.2007, 20:02
Hallo,

den Thread hatte ich ganz aus den Augen verloren. Mein Servo (ich habe erst einen ausgepackt) zappelt nicht und läst sich auf dem gesamten Drehbereich positionieren. Ich steuere ihn per Optokoppler mit einem ATMega8(asuro):

https://www.roboternetz.de/phpBB2/viewtopic.php?t=29902


Gruß

mic

Jigger
10.05.2007, 13:54
Warum hast du das denn mit nem Optokoppler gemacht ?

Also hier ist mal mein Code, vllt ist da ja ein Fehler drin ?!


$regfile = "m16def.dat"
$crystal = 16000000

Config Servos = 1 , Servo1 = Portd.2 , Reload = 10
Config Pord.2 = Output

Enable Interrupts

Do
Servo(1) = 100
Loop

End

( Wenn ich die Do-Loop Schleife weglasse, passiert gar nichts !!! )

Wie schreibt ihr eure Programme für Servos ?
Ich wäre froh, wenn ich meine langsam mal zu laufen bekäme.#

mfg

Jon
10.05.2007, 14:20
Mir fällt gerade nur auf, dass du "Config Pord.2 = Output" geschrieben hast. Da fehlt noch ein "t". Also so müsste es sein "Config Portd.2 = Output"

jon

Jigger
10.05.2007, 15:05
ne das ar hier nur n Tippfehler ^^.
Mir ist aber gerade noch etwas aufgefallen: Ich weiß zwar nicht ob das überhaupt so richtig ist, aber ich habe an dem entsprechenden Port die Frquenz gemessen; Ich hab da immer 38,76 Hz, egal welchen Wert ich im Programm eingegeben habe.

radbruch
10.05.2007, 17:29
Warum hast du das denn mit nem Optokoppler gemacht ?
Weil ich so an meinem asuro nicht löten muss und die Servos mit eigener Spannungsversorgung betreiben kann. Wenn ich mal einen Greifer oder Plotter oder sonstwas mit Servos basteln möchte, kann ich meinen asuro als "Kontroller" verwenden indem ich ihn einfach neben das Projekt in eine Art optische Koppelstation stelle.

Tja, wie steuere ich die Servos an. Ich schalte rythmisch eine LED ein und aus und erzeuge so über den "Optokoppler" das PWM-Signal. In der Bibliotek des asuro (der wird in c programmiert) befindet sich die Pausefunktion sleep() mit der man den Progammablauf im Millisekundenbereich verzögern kann. Da meine Eingangsschaltung für das Servo das Signal invertiert, schalte ich für den PWM-Impuls die LED aus, warte kurz, schalte sie wieder an und warte lange. Das wiederhole ich so lange bis das Servo genug Zeit hatte um sich auf die neue Position zu stellen.

Murus
10.05.2007, 21:04
Hallihallo, ich bin der "Mario" aus obigem Link :)

Ich hab auch bei den Reload-Werten einfach mal ausprobiert.
Meist trifft man mit Reload=10 schon einen Bereich, der dann passt.
Um mal etwas vernünftiges zu haben, hab ich alle 100ms von 0 bis 200 alle Werte für das Servo beim Reload = 10 durchlaufen lassen. Irgendwann ist man dann im grünen Bereich und das Ding steht still. Dann kann man experimentieren und den Reload-Wert anpassen, bis die ganze Sache passt.

Enorm wichtig sind dicke Elkos direkt an den Servo-Anschlüssen. Hab mir mal einen Wolf draus gemacht, weil der Controller durch die hohen Servoströme die Spannung verlor... also gut puffern.

Herzlichen Gruss
Mario

Jigger
11.05.2007, 14:22
Meinste das so ?



config servos = 1 , servo1 = portd.3
config portd.3 = outout
enable interrupts

dim I as Byte

for I = 0 to 200
servo(1) = I
waitms 100
next I

end

Und wie bekommt man dann die richtige Reloadzeit raus ??

mfg

Murus
11.05.2007, 20:05
Da muss man noch ne reload-Zeit im Code setzen.
Vorzugsweise dann den Wert "I" ausgeben, damit man sieht, wo es passt.
Falls man mit reload=10 o.Ä. einen Bereich festgelegt hat, kann man dann einfach mal verschiedene Reload-Zeiten ausprobieren.
So hab ichs gemacht, einfach durchgepröbelt

Jigger
11.05.2007, 22:23
und welche Werte sind das bei dir ??

Murus
12.05.2007, 00:11
Hängt vom Servo und von der Taktfrequenz ab.
Z.t. hab ichs auch so gemacht, dass ich das Servo an einen RC-Empfänger gehängt habe und mit der Funke dieses gesteuert habe. Dann hab ich am Oszi die Zeiten ausgemessen und versucht, durch Anpassung der Reload- und Servowerte ähnliche Zeiten herauszufahren.

Jigger
12.05.2007, 10:14
Das heißt dann wohl, dass am Ausprobieren nichts vorbeiführt oder ?
Aber kann man da dann vielleicht systematisch dran gehen?
Das Problem ist, dass ich kein Oszi habe. Kann man eigentlich mit nem Multimeter mit Frequenzmessung auch PWM-Signale messen ?

Jigger
12.05.2007, 17:23
Ich habe da mal was getestet:
Ich habe den Servo an nen RC-Empfänger angeschlossen. Da ging dann auch alles super, also habe ich die Frequenz am Singnalport gemessen --> 50,6 Hz.
Dann habe ich den Servo wieder an den µC gehangen und da an dem Singnalport die Frequenz gemessen --> 38,7 Hz ( mit Reload = 10).
Anschließend habe ich dann im Programm die Reloadzeit so lange verändert, bis ich auch 50,6 Hz am Singnalport hatte; das entsprach dann Reload = 7.
Klappte dann aber immer noch nicht, d.h. der Servo dreht immer noch bis zum mechanischen Anchlag.
Programm:


$regfile = "m16def.dat"
$crystal = 16000000

Config Servos = 1 , Servo1 = Portd.2 , Reload = 7
Config Portd.7 = Output

Enable Interrupts

Dim I as Byte
For I = 0 to 255
Servo(1) = I
waitms 20
next I

End


Wie gesagt, es klappte immer noch nicht.
Dann habe ich die Spannung an Pord.2 gemessen, da ich mir dachte, so, wie das Programm aussieht, musst diese in 20 Millisekundenabständen steigen; tat sie auch, allerdings nur von 0.1 mV auf 0,5 V.
Ist das normal??
Müsste sie nicht eigentlich auf 5 V steigen??
Also der Port ist in Ordnung, denn wen ich ihm normal auf High ziehe, liegen auch ca. 5V an .

mfg