Titelbild Mikrocontroller

12.11.5. Phasen- und Frequenzkorrekter PWM Modus

Der Phase and Frequency Correct PWM Modus (WGM13 bis WGM10 = 8 oder 9) bietet eine phasen- und frequenzkorrekte Ausgangswelle mit hoher Auflösung. Der Phase and Frequency correct PWM Modus basiert, wie der phase correct PWM Modus, auf einer zweifachen Impulsflanke. Der Zähler zählt vom BOTTOM Wert (0000) bis zum TOP Wert und wieder zurück vom TOP zum BOTTOM Wert. Im nicht invertierenden Compare Output Mode wird der Output Compare (OC1x) gelöscht, wenn beim Hochzählen eine Vergleichsübereinstimmung zwischen dem TCNT1 und OCR1x auftritt und wird gesetzt wenn beim Runterzählen eine Vergleichsübereinstimmung auftritt. Im invertierenden Output Compare Modus ist es genau umgekehrt. Durch die zweifache Impulsflanke ist die Frequenz im phase and Frequency correct PWM Modus niedriger als in den PWM Modi, die mit einer einfachen Impulsflanke arbeiten. Wegen der symmetrischen Eigenschaften der PWM Modi mit zweifacher Impulsflanke eigenen sich diese besonders für die Steierung von Motoren.

Der wesentliche Unterschied zwischen dem phasenkorrekten und dem phasen- und frequenzkorrekten PWM Modus ist der Augenblick, in dem das OCR1x Register mit dem Wert aus dem OCR1x Buffer-Register aktualisiert wird.

Die PWM Auflösung im Phase and Frequency PWM Modus kann durch das ICR1 oder das 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:
PWM Auflösung im Phase and Frequency PWM Modus

PWM Auflösung im Phase and Frequency PWM Modus


Im Phase and Frequency Correct PWM Modus wird der Zähler so lange inkrementiert, bis der Zähler den Wert des ICR1 (WGM13 bis WGM10 = 8) bzw. den Wert des OCR1A (WGM13 bis WGM10 = 9) erreicht. Der Zähler hat dann den TOP Wert erreicht und ändert daraufhin seine Zählrichtung. Der Wert von TCNT1 wird für einen Takt lang gleich dem ausgewählten TOP Wert sein. Das Zeitdiagramm des Phase and Frequency Correct 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 um die zweifache 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 Phase and Frequency PWM Modus

Zeitdiagramm Phase and Frequency PWM Modus


Das Timer/Counter Overflow Flag (TOV1) wird jedes Mal gesetzt, wenn das OCR1x Register mit dem Wert aus dem Buffer aktualisiert wird (beim BOTTOM Wert). Wenn das OCR1A oder das ICR1 Register den TOP Wert bestimmen werden dementsprechend auch das OCF1A bzw. das ICF1 Flag gesetzt wenn TCNT1 den TOP Wert erreicht hat. Die Interrupt Flags können genutzt werden, um einen Interrupt bei jedem Erreichen des TOP oder BOTTOM Wertes durch den Zähler auszulösen.

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 niemals eine Vergleichsübereinstimmung zwischen TCNT1 und OCR1x auftreten.

Die Abbildung zeigt, dass der Ausgang im Gegensatz zum phasenCorrecten PWM Modus in allen Perioden symmetrisch ist. Weil das OCR1x Register aktualisiert wird, wenn BOTTOM erreicht ist, ist die Länge der fallenden und der steigenden Impulsflanke immer gleich. Daraus ergibt sich eine symmetrische Ausgangswelle, die immer frequenzkorrekt ist.

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 Phase and Frequency correct 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 beim Hochzählen eine Vergleichsübereinstimmung zwischen OCR1x und TCNT1 besteht und das OC1x Register gelöscht (gesetzt) wird, wenn beim Runterzählen eine Vergleichsübereinstimmung zwischen OCR1x und TCNT1 besteht.

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 Phase and frequency correct PWM Modus dar. Wenn ein OCR1x Register auf den gleichen Wert wie BOTTOM eingestellt wird, bleibt der Ausgang permanent auf Low-Pegel Das Setzen des OCR1x Registers auf den TOP Wert wird zu einem konstanten High-Pegel am Ausgang führen (beim invertierenden Modus ist es dann genau anders herum).

Wenn das OCR1A verwendet wird, um den TOP Wert festzulegen (WGM13 bis WGM10 = 9) und COM1A1 und COM1A0 auf 1 sind, dann wechselt der OC1A Ausgang mit einem Tastverhältnis von 50%.
Impressum