PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo verhält sich nicht normal



jagdfalke
28.11.2005, 07:42
Hi,
Wie ihr wisst laufen mittlerweile meine Servos unter C *schulterklopf* :D
Ich habe einige Teste gemacht und die Servos immer von 0 bis 255 und zurücklaufen lassen. Allerding zucken die Servos einmale ziemlich heftig, wenn sie auf 0 sein sollten. Also der Servo geht runter auf 0 und zuckt dann ein paar Grad wieder nach oben und bleibt dann da stehen.
Ich benutze dern Servotreiber rns1.

Weiß jemand woran das liegent könnte? Ich poste das hier ins C-Forum, weil sie das unter Bascom nicht gemacht haben. Ich schätze mal, dass es dann mit C bzw mit meinem Code zu tun hat.



void servo_move(int servo, int pos)
{
loop_until_bit_is_set(UCSRA, UDRE);
UDR = '#';
loop_until_bit_is_set(UCSRA, UDRE);
UDR = 's';
loop_until_bit_is_set(UCSRA, UDRE);
UDR = servo;
loop_until_bit_is_set(UCSRA, UDRE);
UDR = pos;
}

...
for(i=127; i>=0; i--) {
servo_move(4, i);
_delay_ms(20);
}
...



mfg
jagdfalke

Kjion
28.11.2005, 08:19
Die Position Null gibt es bei dem RNS1 Programm nicht (ist dort soweit ich weiß zum "ausschalten" des Ausgangs gedacht). Lass dein Programm einfach nicht bis Null laufen, dann sollte das funktionieren.

Alternativ kannst du auch einen anderen Servotreiber Code verwenden. Ich hatte auch mal einen dazu geschrieben:
http://www.kreatives-chaos.com/index.php?seite=rnkc10
Wenn du nur die Ansteuerung per UART brauchst kannst du im Prinzip alle Unterprogramme bis auf init() und die Interruptroutinen und den Inhalt der while Schleife im Hauptprogramm auskommentieren/löschen. Sollte aber natürlich auch so funktionieren :-)

MfG Kjion

jagdfalke
28.11.2005, 16:06
Ok, danke für die Antwort.
Ich schätze mal, dass man die Servos dann bis 256 steuern kann, wenn die 0 wegfällt.

mfg
jagdfalke

Kjion
29.11.2005, 17:23
Ich schätze mal, dass man die Servos dann bis 256 steuern kann, wenn die 0 wegfällt.

Wie soll den das gehen wenn man die Position mit einem Byte angibt ?? Mehr als als 256 (0 bis 255) verschiedene Zustände kann man damit einfach nicht kodieren ... 256 wäre wieder durch eine Überlauf wieder eine Null ;-)

MfG Kjion

jagdfalke
29.11.2005, 18:43
Ich dachte 0 wäre "Ausschalten", hast du doch gerader aben gesagt. Das sagt dann halt dem Treiber, dass er kein Signal mehr hinschicken sollte, dachte ich. Wenn dann wieder nur Positionen von 1 bis 255 hat ist ja die Auflösung kleiner als sie sein könnte.

mfg
jagdfalke