Titelbild Mikrocontroller

12.11.3. Fast PWM Modus

Der Fast PWM Modus (WGM13 bis WGM10 = 5, 6, 7, 14 oder 15) bietet eine hochfrequente Ausgangswelle. Der Fast PWM Modus unterscheidet sich von den anderen PWM Modi durch seine einfache Impulsflanke. Der Zähler zählt vom BOTTOM Wert bis zum TOP Wert und beginnt danach wieder mit dem BOTTOM Wert. Im nicht invertierenden Compare Output Mode wird der Output Compare (OC1x) gesetzt, wenn eine Vergleichsübereinstimmung zwischen dem TCNT1 und OCR1x auftritt und wird gelöscht, wenn der TOP Wert erreicht ist. Im invertierenden Output Compare Modus ist es genau umgekehrt. Durch die einfache Impulsflanke kann die Frequenz im Fast PWM Modus doppelt so hoch sein wie in den anderen PWM Modi, die mit einer doppelten Impulsflanke arbeiten. Die hohe Frequenz des PWM Signals ist günstig bei der Verwendung als Spannungsregulierung, Gleichrichtung und ähnlichen Digital-Analogwandler Anwendungen. Hohe Frequenzen erlauben kleine externe Komponenten (Spulen, Kondensatoren) wodurch die Systemkosten reduziert werden können.

Die PWM Auflösung im Fast PWM Modus kann fest eingestellt werden auf 8-, 9- oder 10-bit, oder durch das ICR1 oder OCR1A festgelegt werden. Die minimale Auflösung beträgt 2 Bit (ICR1 oder OCR1A auf 0003 eingestellt), die maximale Auflösung beträgt 16 Bit (ICR1 oder OCR1A auf MAX eingestellt). Die Auflösung der PWM in Bits kann mit folgender Formel berechnet werden:
Auflösung der PWM

Auflösung der PWM


Im Fast PWM Modus wird der Zähler so lange inkrementiert, bis der Zähler entweder einen der festen Werte 00FFh, 01FFh oder 03FFh (WGM13 bis WGM10 = 5, 6, oder 7) oder den Wert des ICR1 (WGM13 bis WGM10 = 14) bzw. den Wert des OCR1A (WGM13 bis WGM10 = 15) erreicht. Der Zähler wird dann mit dem folgenden Zyklus des Timertaktes gelöscht. Das Zeitdiagramm des Fast PWM Modus ist im nachfolgenden Bild zu sehen. Es zeigt den Fall, in dem ICR1 bzw. OCR1A den TOP Wert vorgeben. Der Wert des TCNT1 ist als Histogramm dargestellt, um die einfache Impulsflanke darzustellen. Auch der invertierende und der nicht invertierende Ausgang sind dargestellt. Die kleinen horizontalen Linien an der TCNT1 Flanke kennzeichnen die Vergleichsübereinstimmung zwischen OCR1x und TCNT1. Das OC1x Interrupt Flag wird gesetzt, wenn eine Vergleichsübereinstimmung auftritt.
Zeitdiagramm Fast PWM Modus

Zeitdiagramm Fast PWM Modus


Das Timer/Counter Overflow Flag (TOV1) wird jedes Mal gesetzt, wenn der Zähler seinen TOP Wert erreicht. Zusätzlich werden auch das OCF1A bzw. das ICF1 Flag gesetzt, wenn das OCR1A oder das ICR1 Register den TOP Wert bestimmen. Wenn einer der Interrupts freigegeben ist, kann die Interruptroutine dazu verwendet werden, die TOP und Vergleichswerte zu aktualisieren.

Wenn der TOP Wert geändert wird, muss das Programm sicherstellen, dass der neue TOP Wert größer oder gleich dem Wert aller Vergleichsregister ist. Ist der neue TOP Wert kleiner, so kann keine Vergleichsübereinstimmung zwischen TCNT1 und OCR1x auftreten. Wenn die festen TOP Werte verwendet werden, werden die ungenutzten Bits mit 0 maskiert wenn eines der OCR1x Register beschrieben wird.

Das Vorgehen bei der Aktualisierung des ICR1 Registers unterscheidet sich von der Aktualisierung des OCR1A Registers, wenn diese dazu verwendet werden, den TOP Wert festzulegen. Das ICR1 Register ist nicht zweifach gebuffert. Das bedeutet, dass, wenn das ICR1 in einen kleinen Wert verändert wird und der Zähler mit keinem oder einen kleinen Vorteiler betrieben wird, ein Risiko besteht, dass der neue ICR1 Wert kleiner ist als der aktuelle Wert von TCNT1. Das Ergebnis wird sein, dass der Zähler keine Vergleichsübereinstimmung erreicht bevor er den TOP Wert erreicht. Der Zähler wird dann bis zum maximalen Wert FFFF laufen, überlaufen und bei 0000 neu beginnen, bevor eine Vergleichsübereinstimmung auftritt. Das OCR1A Register hingegen ist zweifach gebuffert. Diese Eigenschaft erlaubt es das OCR1A Register jederzeit zu beschreiben. Der neue Wert des OCR1A wird zunächst in das Buffer Register geschrieben und erst mit dem Taktzyklus in das OCR1A Vergleichsregister übernommen, der auf das Erreichen des TOP Wertes durch den TCNT1 folgt. Die Übernahme des neuen Wertes erfolgt im gleichen Augenblick in dem das TCNT1 gelöscht und das TOV1 Flag gesetzt wird.

Das ICR1 Register für das Definieren des TOP Wertes zu verwenden ist ähnlich sinnvoll wie das Arbeiten mit den festen Werten. Wenn das ICR1 Register für den TOP Wert verwendet wird, steht das OCR1A Register zur Verfügung um den PWM Ausgang an OC1A zu generieren. Wann immer die Basisfrequenz des PWM Signals während des laufenden Betriebes verändert werden soll, so ist es besser das OCR1A Register als TOP Wert zu verwenden, da es zweifach gebuffert ist.

Im Fast PWM Modus erlauben die Vergleichseinheiten das Erzeugen von PWM Signalen an den OC1x Pins. Durch Setzen der COM1x1 und COM1x0 Bits auf 2 wird ein nicht invertiertes PWM-Signal erzeugt. Ein invertiertes PWM-Signal kann erzeugt werden, indem COM1x1 und COM1x0 auf 3 gesetzt werden. Um das PWM Signal am Port Pin sichtbar zu machen muss dieser als Ausgang konfiguriert werden (DDR_OC1X = 1). Das PWM Signal wird erzeugt indem das OC1x Register gesetzt (gelöscht) wird, wenn eine Vergleichsübereinstimmung zwischen OCR1x und TCNT1 besteht und das OC1x Register in dem Taktzyklus gelöscht (gesetzt) wird, in dem der Zähler durch den Wechsel von TOP zu BOTTOM gelöscht wird.

Die Frequenz des Ausgangssignals kann mit folgender Formel berechnet werden:
Frequenz des Ausgangssignals

Frequenz des Ausgangssignals


Die Variable N steht für den Faktor des Vorteilers (1, 8, 64, 256 oder 1024).

Extreme Werte der OCR1x Register stellen spezielle Fälle bei der Erzeugung des PWM Signals im Fast PWM Modus dar. Wenn ein OCR1x Register auf den gleichen Wert wie BOTTOM (also 0000) eingestellt wird, wird eine schmale Spitze am Ausgang erzeugt, die mit jedem TOP+1 Takt auftritt. Das Setzen des OCR1x Registers auf den TOP Wert wird zu einem konstanten Low- oder High-Pegel am Ausgang führen (abhängig ob invertierender oder nicht invertierender Ausgang eingestellt).

Eine Frequenz mit einem Tastverhältnis von 50% kann im Fast PWM Modus dadurch erreicht werden, indem man OC1A so einstellt, dass es seinen Pegel bei jeder Vergleichsübereinstimmung wechselt (COM1x1 und COM1x0 Bits auf 1). Das kann aber nur erreicht werden, wenn OCR1A zum definieren des TOP Wertes verwendet wird. Die erzeugte Ausgangswelle kann eine maximale Frequenz von fOC1A = fclk_I/O/2 haben, wenn OCR1A auf 0000 gesetzt wird. Diese Eigenschaft ist gleich dem OC1A Toggel im CTC Modus, mit der Ausnahme, dass die zweifach gebufferte Output Compare Einheit im Fast PWM Modus zur Verfügung steht.
Impressum