Forum: Compiler & IDEs Servo Ansteuerung mit fastPWM


von ddink (Gast)


Lesenswert?

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!

von Stefan E. (sternst)


Lesenswert?

1
  TCCR1A= (1<<COM1A1) | (1<<WGM11) | (WGM10);
Fällt dir da nicht ein signifikanter Unterschied bei den hinteren beiden 
Klammern (WGM11 und WGM10) auf?
(Ist aber nicht dein eigentliches Problem, denn rein zufällig kommt das 
richtige dabei raus.)

1
  TCCR1B= (1<<WGM12) | (1<<WGM13) | (1<<CS11) | (1<<OCR1A);
Was soll denn das OCR1A darin bewirken?

von ddink (Gast)


Lesenswert?

Das (WGM10) ist nur ein Überbleibsel und wurde mittlerweile 
ordnungsgemäß dezimiert. Was ich mir bei dem OCR1A<<1 gedacht habe ist 
mir reichlich schleierhaft. Ob das das komische Verhalten verursacht hat 
werde ich, sobald ich wieder in Reichweite des Servos bin probieren.

Vielen Dank schon mal!

von ddink (Gast)


Lesenswert?

Danke, genau das war das Problem (ist mir immer noch ein Rätsel wie das 
dahin kam). Vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.