Archiv verlassen und diese Seite im Standarddesign anzeigen : Modellbauservo -> Reload-Wert
Andree-HB
23.01.2005, 14:47
Kann mir vielleicht Jemand erklären, warum bei "config servos" der Reload-Wert den gesamten Verfahrbereich eines Servos verschiebt ?
Ich dachte immer, der dafür benutzte Timer 0 ist lediglich dafür da, wie oft die Impulswerte upgedatet und zum Servo geschickt werden.
Bei dessen Änderung verschiebt sich aber wie gesagt bei mir der Winkelbereich des Servo (5er-Conrad).
Durch herumexperimentieren kann ich zwar den max. Drehbereich von etwa 200° ansprechen aber halt nur teilweise nutzen.
Ich dachte immer, der dafür benutzte Timer 0 ist lediglich dafür da, wie oft die Impulswerte upgedatet und zum Servo geschickt werden.
Den Beispielcode in der Bascom Hilfe würde ich eigentlich eher so interpretieren, dass die Impulsdauer und somit die Stellung des Servos als vielfaches des Reload-Intervalls angegeben wird.
"10µS Resolution" hört sich für mich eindeutig danach an.
Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
'we use 2 servos with 10 uS resolution
'finally we must turn on the global interrupt
Enable Interrupts
'the servo() array is created automatic. You can used it to set the
'time the servo must be on
Servo(1) = 100 '1000 uS on
Servo(2) = 200 ' 2000 uS on
Ich habe keine Ahnung wie MCS das in der Servo-Library gelöst hat. Wenn ich eine Servo-Routine schreiben würde, würde ich auch einen Timerintervall definieren und dann sowohl Periodendauer als auch Impulsdauer als Vielfaches dieses Timerintervalls definieren.
Ich wüsste nicht, wie man das mit einem einzelnen Timer anders lösen könnte und 2 Timer zu benutzen wäre nicht besonders elegant.
Teste doch mal, ob Relaod = 10 und Servo(1)=150 die gleiche Position hat wie: Reload = 15 und Servo 1 = 100.
MFG Moritz
Andree-HB
23.01.2005, 19:24
Ich habe mal ein Bild gemacht, wie sich das Servo bei den Unterschiedlichen Werten verhält :
http://www.pixelklecks.de/images/servo.jpg
pebisoft
23.01.2005, 19:27
hallo, es liegt an den billigservo von canrad. bei hochwertigen servos hast du eine genaue festlegung der stellung, ich benutze für genaue positionen nicht den billig-conrad-servo.
mfg pebisoft
Hm... das ist natürlich nciht ganz optimal!
200/R5 und 100/R10 sollten eignetlich den gleichen Wert haben, da sie ja beide 1000uS on sind.
Was auch ein wenig stört, ist, dass scheinbar nicht 1 ms zwischen den beiden End-anschlägen liegt, sondern mehr, wie man gut an Rot erkenne kann. Vielleicht liegt es daran, dass es eben billiege Conrad-Servos sind. Wäre super, wenn man auch mal das Ausgangssignel mit einem Oszi messen könnte, dann könnte mamn genau sagen,w as was erzeugt und ob es am Controller oder Servo liegt.
MFG Moritz
hallo, es liegt an den billigservo von canrad. bei hochwertigen servos hast du eine genaue festlegung der stellung, ich benutze für genaue positionen nicht den billig-conrad-servo.
Das liegt ganz sicher nicht an den Billig Servos von Conrad, denn dann würde der Servo ja auch wenn man ihn konstant mit derselben Impuls-Länge ansteuert hin- und herflattern.
200/R5 und 100/R10 sollten eignetlich den gleichen Wert haben, da sie ja beide 1000uS on sind.
Wenn bei beiden Einstellungen wirklich derselbe Impuls am Servo ankäme, müsste der Servo eigentlich auch bei konstanter Ansteuerung mit einem von den Werten zwischen beiden Stellungen hin- und her driften.
Ich könnte mir vorstellen, dass der Controller bei 5µS nicht mehr richtig mitkommt. Bei z.B. einem 4 MHz Quarz hat der Controller zwischen den Intervallen gerade mal 20 Takte Zeit die Routinen dazwischen auszuführen. Bei den Interruots gibt es glaube ich auch noch einen "NOSAVE" Parameter, wenn der nicht aktiviert ist, werden schon reichlich Takte für das Speichern von Registerwerten verbraucht.
Vielleicht ist es aber auch ein Fehler in Bascom.
Ich könnte mir vorstellen, dass der Controller bei 5µS nicht mehr richtig mitkommt.
Das würde auch erklären, warum 200/R5 rechts von 100/R10 liegt.
Vielecht könnte man mal eine 2. Versuchsreihe machen, in denen der Servo immer 1000 us kriegt also z.B.
500/R2
200/R5
143/R7
125/R8
100/R10
67/R15
50/R20
40/R25
Besonders die ersten 5 sollten aufschluss über rcycles vermutung geben.
MFG Moritz
Andree-HB
23.01.2005, 20:43
..hmm, der benutzte Atmega32 läuft mit 16MHz, sollte also eigentlich keine Probleme machen.
Ich denke, ohne Messung mit einem Oszi wird das alles nix und regt doch eher zu Hypothesen an. Werde mir die Tage mal eines leihen...
...dennoch hier der "Test" :
http://www.pixelklecks.de/images/servo2.jpg
incertius
28.01.2005, 00:37
Hallo zusammen!
Ich hätte da noch ne Anfänger-Frage: Anscheinend wird die Position durch Servo(x) = und Reload = festgelegt. Was hat es denn mit
Do
For I = 0 To 100 <-- mit diesen Zahlen auf sich?? was bewirken die??
Servo(1) = I
Waitms 1000
Next
Danke im Voraus!!
Andree-HB
28.01.2005, 07:50
...es wird in einer Schleife die Impulslänge für das Servo hochgezählt/verlängert.
Die Servoachse dreht sich also mit einer linearen Bewegung bis der Zähler 100 erreicht und bleibt an der Stelle stehen.
[ähmm, durch "Waitms 1000" in einer stufigen Bewegung in eine Richtung]
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.