PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM Frequenz Feineinstellung



RolandT
30.03.2008, 21:59
Kann mir jemand sagen, wie ich die PWM Frequenz fein einstellen kann?
Nach meinem Verständnis ergibt sich die Frequenz bzw. die Impulsdauer durch die folgenden Parameter.

1. Quarzfrequenz (z.B. 8Mhz)
2. Prescaler (Teiler)
3. Timergröße (8/16 Bit)
4. Compare Wert

Möchte ich z.B. für einen Servo 50Hz (bzw. 20ms) als PWM Frequenz einstellen und 1,5ms als Pulslänge, dann muss ich doch irgendwie auf die 50 Hz kommen. Mit den obigen Mitteln komme ich auf ca. 16ms statt 20ms oder halt viel mehr.

Es gibt doch noch einen Preloader, kann man mit dem die Timerauflösung noch bisschen ändern, wobei dieser ja immerwieder automatisch nachgeladen werden muss, oder wie geht das?

Feratu
30.03.2008, 23:43
Schau mal im RN Wissen Bereich da steht das unter Timer
mfg

Sauerbruch
31.03.2008, 10:21
Mit den obigen Mitteln komme ich auf ca. 16ms statt 20ms oder halt viel mehr.

Meine Erfahrung mit "normalen" Modellbau-Servos ist die, dass die eigentliche Frequenz des PWM-Signals ziemlich unkritisch ist. Ob der Impuls 50, 80 oder 30 mal pro Sekunde kommt ist zumindestens meinen Servos immer ziemlich egal gewesen :-). 16ms sollte daher überhaupt kein Problem sein.

Die Frequenz kannst Du so ausrechnen:

fPWM = Clock / (Prescaler * 2^(Bitbreite+1))

RolandT
31.03.2008, 16:33
Okay, danke für Eure Hilfe!
Mir kommt es nicht unbedingt nur auf das Servo Signal an, sondern auch ums Verständnis.

Um es auf den Punkt zu bringen:
Ich kann also die PWM Frequenz nur grob über die Software einstellen und muss, wenn ich z.B. eine 50Hz PWM Frequenz mit einstellbarer Pulsweite (über Compare Wert) möchte, den Quarz anpassen.

Bin schon ein bisschen enttäuscht, dass das nicht anders geht ....

Hätte mir vorgestellt, dass man auch den max. Timerwert (nicht die Bitbreite, sondern dezimal bzw. binär), an dem er wieder rückwärts zählt, fest einstellen kann. Wenn ich das über das Compare Register mache, dann ich ja die Pulsweite nicht variieren ...

Sauerbruch
01.04.2008, 15:45
Na ja, Du kannst etwas tricksen, wenn du noch einen Timer mit 2 Output-Compare-Registern frei hast (wie z.B. Timer 1 beim Mega8):

Du aktivierst beide Output-Compare-Interrupts. In der ISR des ersten Output-Compare (OCR1A) setzt Du einen Port auf 1, und in der ISR des zweiten (höheren!) Output-Compare (OCR1B) setzt Du den Port wieder auf 0 und resettest den Timer, der wieder von 0 anfängt zu zählen.

Damit kannst Du die Frequenz mit OCR1B puderfein einstellen, und das Tastverhältnis ergibt sich aus (OCR1B-OCR1A)/OCR1B.