langsame PWM - max 500Hz

Gast #1581842
Lesenswert?

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.
#1581847
Lesenswert?

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
Gast #1581892
Lesenswert?

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?
Gast #1581910
Lesenswert?

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
#1581953
Lesenswert?

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
#1581958
Lesenswert?

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
Gast #1581978
Lesenswert?

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 ^^
Gast #1582013
Lesenswert?

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.
#1582058
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren