Du kommst nicht genau auf eine bestimmte Frequenz. Das ist auch nicht Sinn der PWM. Denn es soll ja nur bei einer _festen_ Frequenz, das Puls-Pause-Verhältnis eingestellt werden.
Ich versuche vergeblich eine genaue Frequenz für die PWM "einzustellen". Irgendwie hab ich da aber anscheinend noch nen Denkfehler es gelingt mir sehr gut die "ON" bzw "OFF" zeit einzustellen um so die resultierende Spannung zu ändern, das aber jeweils nur bei konstanter Frequenz. Dabei ergeben sich bei mir rein rechnerisch, je nach Einstellung, nur folgende Frequenzen:
Chiptakt 8 Mhz,
Prescaler 8 1Mhz,
Prescaler 64 125khz usw.
Je nach eingestellter Auflösung für die PWM ergeben sich dann ja wenn ich das richtig verstanden habe eintsprechende Frequenzen, welche ich mit meinem Frequenzzähler auch entsprechend "messen" konnte. Das passt alles soweit, allerdings hab ich so ja nur relativ grobe Abstufungen für die eingestellte Frequenz. Was ist jetzt z.b. wenn ich genau 5khz brauche? Wie muss ich das anstellen? Hab jetzt sicher 10mal im Datenblatt nachgelesen aber ich komme nicht auf eine Lösung. Vielleicht kann mir jemand einen kleinen Denkanstoß verpassen? Wäre sehr dankbar
Bis dahin, Tobias
Du kommst nicht genau auf eine bestimmte Frequenz. Das ist auch nicht Sinn der PWM. Denn es soll ja nur bei einer _festen_ Frequenz, das Puls-Pause-Verhältnis eingestellt werden.
Dahingehend gingen meine Gednaken inzwischen auch schon. Werd ich dann wohl über den Takt des AVR entsprechend in die gewünschte Richtung "schieben"
Danke für die schnelle Antwort
Du musst nicht nur durch den Prescaler teilen, sondern auch durch die Auflösung. Also z.B. bei einem 8Bit-PWM nochmal durch 256!
MK
Mkey hat für fast PWM recht. Im Datenblatt steht jeweils die PWM Frequenz jeweils als Formel drin (Bei Phase+Frequency correct PWM muss statt 256 durch 510 geteilt werden.)
Du meinst sicher diese Formel:
focnx... = fclk / 2*N*TOP
daraus würde ich mir ja nehmen, dass ich wenn ich das Softwaremäßig löse, letztendlich jede beliebige Frequenz bekommen könnte, fragt sich nur wie genau, aber das sei mal dahingestellt.
Jedenfalls erst mal vielen Dank für die schnellen Informationen.
Im groben teilen sich die PWM-Modi in 2 Klassen: solche, mit festem TOP von 0xff, 0x1ff, etc und solche mit einstellbarem TOP (via OCR1A oder ICR1).
Für Mode #8 etwa:
ICR1 = (unsigned short) ((unsigned long) F_CPU / PRESCALE / (2*PWM_FREQ)-1);
Bei 5kHz geht natürlich auch Soft-PWM, allerdings mit Jitter.
Disclaimer: none. Sue me.
Ich habs jetzt mal mit 7,5kHz probiert, geht eigentlich auch ganz gut. Mit der Soft PWM probier ich zur Zeit noch ein wenig herum mal schauen was ich letzendlich nehme.
Falls du den Timer nicht für sonst was brauchst, ist die Hard-PWM die bessere Wahl. Der Controller macht die "nebenher", ohne daß dafür Platz oder Zeit verbraucht wird und ist ausserdem genauer und einfacher einzustellen.
Disclaimer: none. Sue me.
Lesezeichen