www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik langsame PWM - max 500Hz


Autor: Horrible (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horrible schrieb:
> Der Controller (ein Mega644P) soll weiterhin auf 9,6 MHz laufen. Den
> kann ich also nicht langsamer takten.
9.6MHz / 1024 / 65536 / 2 = 0,07Hz
Ist das nicht langsam genug?


Peter

Autor: Gast321 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Horrible (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: der kleine Niels (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ^^

Autor: Horrible (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, also zusammenfassend:
// Phase corrected PWM
f = XTAL / Prescaler / 2^TimerBits-1 / 2;
// Fast PWM
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.

Autor: Volker Schulz (volkerschulz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horrible schrieb:
> Okay, also zusammenfassend:
>
>
> // Phase corrected PWM
> f = XTAL / Prescaler / 2^TimerBits-1 / 2;
> 
>
>
> // Fast PWM
> 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.

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.