Hallo Leute. Ich brauch für eine Anwendung eine sehr langsame PWM. Die Frequenz darf maximal 500 Hz betragen. Ist das mit (oder ohne) Hilfsmittel mit der Hardware-PWM eines AVR machbar? Der Controller (ein Mega644P) soll weiterhin auf 9,6 MHz laufen. Den kann ich also nicht langsamer takten.
Horrible schrieb: > Hallo Leute. > Ich brauch für eine Anwendung eine sehr langsame PWM. Die Frequenz darf > maximal 500 Hz betragen. Ist das mit (oder ohne) Hilfsmittel mit der > Hardware-PWM eines AVR machbar? > > Der Controller (ein Mega644P) soll weiterhin auf 9,6 MHz laufen. Den > kann ich also nicht langsamer takten. Dafuer gibt es doch die Pre-Scaler. ;) Volker
Horrible schrieb: > Der Controller (ein Mega644P) soll weiterhin auf 9,6 MHz laufen. Den > kann ich also nicht langsamer takten.
1 | 9.6MHz / 1024 / 65536 / 2 = 0,07Hz |
Ist das nicht langsam genug? Peter
Ohne Angabe der Auflösung kann man zu der Frage keine vernünftige Aussage machen. Eine Auflösung von 24 Bit wäre beispielsweise absolut nicht machbar.
Peter Dannegger schrieb: > 9.6MHz 1024 65536 / 2 = 0,07Hz > Ist das nicht langsam genug? Ach ja, Denkfehler meinerseits. Ich hab nur 9,6MHz / 1024 gerechnet und bin damit auf irgendwas um 9kHz gekommen. Aber das ist ja nur die Frequenz in der das Timer-Register zählt... Nur eine Frage hab ich noch: Wieso wird das alles nochmal durch 2 dividiert?
Horrible schrieb: > Nur eine Frage hab ich noch: Wieso wird das alles nochmal durch 2 > dividiert? Weil Du im Interrupt den Pin nur einmal umschaltest. 1. Interrupt: AN->AUS 2. Interrupt: AUS->AN macht zusammen eine ganze Periode
Gast321 schrieb: > Ohne Angabe der Auflösung kann man zu der Frage keine vernünftige > Aussage machen. > > Eine Auflösung von 24 Bit wäre beispielsweise absolut nicht machbar. Erstens hat so ein ATMEGA64 nicht wirklich viele Hardware-PWM-Moeglichkeiten mit 24-Bit-Breite und zweitens sinkt die moegliche Frequenz mit der Aufloesung doch eher und er wollte eine moeglichst langsame PWM haben! Volker
123 schrieb: > Horrible schrieb: >> Nur eine Frage hab ich noch: Wieso wird das alles nochmal durch 2 >> dividiert? > > Weil Du im Interrupt den Pin nur einmal umschaltest. > > 1. Interrupt: AN->AUS > 2. Interrupt: AUS->AN > macht zusammen eine ganze Periode Hardware-PWM! Frequenz : Prescaler : Aufloesung. Nix durch 2 teilen... Volker
Volker Schulz schrieb:
> Frequenz : Prescaler : Aufloesung. Nix durch 2 teilen...
Für Phase Correct PWM schon. Da wird bei dem ersten Compare
eingeschaltet und beim zweiten aus.
Meine bescheidene Meinung dazu: Clock -> Prescaler -> 16BitCounter -> rauf- und runterzählen. Ergibt bei mir ebenfalls: 9,6MHz 1024 (65536 * 2) = 9,6MHz 1024 65536 / 2 = 0.07Hz Nich geprüft habe ich dabei den maximal möglichen Prescaler und ob wirklich ein 16bit-Counter vorliegt. Da vertraue ich euch ^^
Okay, also zusammenfassend:
1 | // Phase corrected PWM
|
2 | f = XTAL / Prescaler / 2^TimerBits-1 / 2; |
1 | // Fast PWM
|
2 | f = XTAL / Prescaler / 2^TimerBits-1; |
Hab ich das so richtig verstanden? Und durch das Setzen des TOP-Wertes (ist glaube ich möglich) kann ich auch noch den Wert "2^TimerBits-1" und damit meine Frequenz anpassen.
Horrible schrieb: > Okay, also zusammenfassend: > >
1 | > // Phase corrected PWM |
2 | > f = XTAL / Prescaler / 2^TimerBits-1 / 2; |
3 | >
|
> >
1 | > // Fast PWM |
2 | > f = XTAL / Prescaler / 2^TimerBits-1; |
3 | >
|
> > > Hab ich das so richtig verstanden? > > Und durch das Setzen des TOP-Wertes (ist glaube ich möglich) kann ich > auch noch den Wert "2^TimerBits-1" und damit meine Frequenz anpassen. Ich bin von der Fast PWM ausgegangen, ja. aber nicht 2^TimerBits-1... 2^TimerBits. 255 -> 0 (bei Beispiel 8-Bit) braucht auch noch einen Tick. Volker
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.