PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo-PWM mit Tiny25/45



TKalbe
14.01.2007, 00:01
Hallo,

ich versuche momentan mit dem Tiny 25 einen Servo anzusteuern.
Die PWM vom Timer0 bekomme ich überhaupt nicht ans laufen, keine Ahnung warum.

Die PWM vom Timer1 habe ich eingestellt bekommen. Es wird ein Signal vom 20ms erzeugt. Wenn ich davon 1-2ms high setze kann ich den Servo von einem Endanschlag zum anderen drehen lassen.
Leider ist die Auflösung von einem Teilschritt zum anderen viel zu klein, also der Servo macht Riesenschritte. Liegt das an dem 8-bit Timer, weil dadurch einfach zu wenig Schritte in der PWM möglich sind ?

So habe ich den Timer eingestellt:

TCCR1 = (1<<COM1A1)|(1<<COM1A0)|(1<<CS10)|(1<<CS11)|(1<<CS13)|(1<<PWM1A);
OCR1A = 148;
OCR1C = 155;

OCR1A lasse ich von 139 bis 148 laufen.
Die Prozessorfrequenz beträgt 8mHz.

Wenn es mit dem Timer 0 besser zu machen ist, oder ich den Timer 1 anders einstellen muß, bin ich für reden Rat dankbar !!

Gruß
Torsten

linux_80
14.01.2007, 02:38
Hallo,
die grobe Auflösung liegt sehr wahrscheinlich an dem, das der Timer nur 8 Bit hat.
Für die 20ms muss der Timer bis auf 255 zählen, 10% davon für den Impuls von max. 2ms, sind ca. 25. also kann man von 0-25 den Servo Positionieren.

Da der Tiny25 nur 8Bit Timer hat, geht es auf diese Weise nicht.
Du kannst aber ein Software-PWM bauen, dann geht das mit den 8Bit-Timern auch wieder.
Überlicherweise wird der Timer auf ca. 10µs eingestellt, und eine ISR aufgerufen die alles verwaltet, dort lässt man einen weiteren Zähler (Variable) mitlaufen.
Je nach Wert des Zählers(Variable) wird dann der Ausgang gesetzt oder gelöscht, so kommt dann das Software-PWM zustande.

TKalbe
14.01.2007, 10:30
Hy,

ja, so habe ich das jetzt auch gelöst. Da sind die Schritte schon einiges feiner, das werde ich dann auch bei der Software-PWM belassen.

Allerdings suche ich immernoch nach einem Einstellbeispiel für die PWM des Timer0.

Gruß
Torsten