ATmega32 Fast PWM 16 bit - 25 kHz

Gast #1504902
Hallo!

Es gibt unzählige Themen zu PWM, ich habe Google benutzt, das 
Datenblatt, schlussendlich alle mir zur Verfügung stehenden grauen 
Zellen... genug der Verteidigung, hier meine Frage:

ToDo: PWM mit ~25 kHz zur Ansteuerung einer H-Brücke mit dem ATmega32

Annahmen:
16MHz Systemtakt, Prescaler 1, 16bit PWM

Frage:
Habe ich richtig gerechnet ?

aus Datanblatt:

Berechnung von TOP im FAST-PWM-Modus

f_soll = f_clk / (N*(1+TOP)  || f_soll = 25*10^3, f_clk = 16*10^6, N=1

=> TOP = 726,27
Also muss der Zähler nur bis 726 zählen, sprich irgendwo zwischen 8-bit 
und 9-bit-Modus , richtig ?

Weiterhin:

Resolution = log(TOP + 1) / log(2)

-> für TOP den Dezimalwert einsetzen?
-> kommt ~9 raus, was sagt mir eine Auflösung von " 9 " ?

Sonst noch irgendwelche "bösen" Denkfehler ? Teilweise kam es mir beim 
Lesen so vor als ob ich nur feste Frequenzen über den Prescaler 
einstellen kann, aber geht doch auch über TOP , oder ?

MfG Torsten
Gast
Ja. eine 16bit PWM mit 16MHz wird schwierig. Ich hab das jeweils so 
gemacht. 8bit PWM mit 64kHz, und dann jeweils den Zaehler so neu laden, 
dass man nochmals 8 bit bekommt.
Mit dem Prescaler stellst du ein, wie schnell der Timer zählt. Mit dem 
TOP Wert deine Periodendauer, hattest du ja auch schon mit

f_soll = f_clk / (N*(1+TOP)

berechnet.

TOP kann aber nur bestimmte Werte annehmen:
"In fast PWM mode the counter is incremented until the counter value 
matches either one of thefixed values 0x00FF, 0x01FF, or 0x03FF (WGM13:0 
= 5, 6, or 7), the value in ICR1 (WGM13:0 =14), or the value in OCR1A 
(WGM13:0 = 15)".

Wenn die fixed Values für deine gewünschte Frequenz zu ungenau sind, 
dann einfach TOP über ICR1 definieren und mit dem Wert in OCR1x deinen 
Duty-Cycle einstellen.

Die Auflösung von 9 bit sagt dir, wie genau sich der Duty-cycle 
einstellen läßt: kleinster Duty-cycle = 1/(2^9-1)
Gast
Ok, werd also folgendes probieren:

TOP auf 726 in ICR1 schreiben, in OCR1A schreib ich dann meinen 
Vergleichswert welcher mir dann das Tastverhältnis gibt, sprich bei 363 
hätte ich dann 50 % und varriieren kann ich das Ganze in 1/2^9-1 - 
Schritten ? Soweit richtig ?
Hallo,

f_soll = f_clk / (N*(1+TOP))  || f_soll = 25*10^3, f_clk = 16*10^6, N=1
N*(1+TOP) = f_clk /  f_soll
TOP = 640 - 1 = 639 und nicht sowas krummes wie 726,27
Nach 640 clk-ticks wird also wieder von 0 gezählt.
640 > 512 = 2^9 also etwas mehr als 9 Bit Auflösung des PWM Signals.

Das könnte man ja etwas verschlimmbessern, indem man den Wert in 
OCR1A+0/+1 in einem bestimmten Takt flattern lässt, eine Art überlagerte 
PWM.
Dazu addiert man beständig einen Wert, entsprechend dem Tastverhältnis 
und bei einem Überschriten einer Grenze wird RechenWert_OCR1A+1 genutz 
sonst RechenWert_OCR1A.
Sei die Grenze 128 und das Tastverhältnis 50% dann addiert man immer 64 
und bei Überlauf passt man OCR1A an
<c>
// ala Bresenham-Gerade
Grenze = 128
delta = int(Grenze * 0.50)
summe = delta / 2 ;

Jetzt im IRC1 Interrupt:
summe += delta;
if (summe>Grenze)
 {OCR1A mit RechenWert_OCR1A+1 belegen;
  summe -= Grenze;}
else
  {OCR1A mit RechenWert_OCR1A;}</c>

So könnte man über 128 ICR1 Überläufe gerechnet die PWM Auflösung um den 
Faktor 128= 2^7 erhöhen.
Dann erreicht man eine gepfuschte 640*128=81920==16.322 Bit Auflösung 
mit einer Frequenz von 25000/128 = 195,3125 Hz.

Gruß Horst

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.