Hallo,
das ist bestimmt das hundertste mal, dass jmd wegen einer
Servoansteuerung fragt, aber mir ist es wirklich schleierhaft was hier
passiert. Versuche im Fastpwm-modus einen servo anzusteuern.
Ich nutze einen Mega32 mit 8MHz Clock. Der Prescaler ist 8 was bei
ICR1=20000 und OCR1A=1500 eine 20ms Pwm mit 1,5ms High-Puls ergeben
sollte. Mein Oszi taugt nicht wirklich zum Messen, was man aber daraus
erkennen kann ist, dass alles wesentlich länger ist. Der Servo schlägt
auch immer an. Der Takt sollte eigentlich passen, da ich noch eine
serielle Verbindung (zum Starten der PWM) laufen hab, die wie
eingestellt funktioniert.
Hier der Code für die PWM
1 | void startServoPwm() //Startet PWM mit 20ms länge
|
2 | {
|
3 | DDRD= (1<<PD5) | (1<<PD4); //PORTD5 wird als Ausgang def.
|
4 | TCCR1A= (1<<COM1A1) | (1<<WGM11) | (WGM10); //Initialisierung Fast PWM 16bit
|
5 | TCCR1B= (1<<WGM12) | (1<<WGM13) | (1<<CS11) | (1<<OCR1A);
|
6 | ICR1=20000; //Gesamtlänge der PWM
|
7 | OCR1A=1500; //Verhältnislänge der PWM
|
8 | }
|
Für Hilfe wäre ich enorm dankbar!