Das ist ein Problem, dass regelmäßig bei Servos auftritt. Wenn die Typen nicht gehen würden dann gäbe es deutlich mehr Beschwerden.Zitat von Manf
Manfred
...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.
Das ist ein Problem, dass regelmäßig bei Servos auftritt. Wenn die Typen nicht gehen würden dann gäbe es deutlich mehr Beschwerden.Zitat von Manf
Manfred
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
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
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Warum hast du das denn mit nem Optokoppler gemacht ?
Also hier ist mal mein Code, vllt ist da ja ein Fehler drin ?!
( Wenn ich die Do-Loop Schleife weglasse, passiert gar nichts !!! )Code:$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
Wie schreibt ihr eure Programme für Servos ?
Ich wäre froh, wenn ich meine langsam mal zu laufen bekäme.#
mfg
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
Nice to be back after two years
www.roboterfreak.de
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.
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.Warum hast du das denn mit nem Optokoppler gemacht ?
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.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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
Meinste das so ?
Und wie bekommt man dann die richtige Reloadzeit raus ??Code: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
mfg
Lesezeichen