Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage integrierte PWM


von flyingwolf (Gast)


Lesenswert?

Eine Verständnisfrage zum integrierten PWM-Counter bei den
AVR-Prozessoren

Der Counter inkrementiert und dekrementiert den Zählerwert bis zum
eingestellten Max solange der Counter aktiv ist.

Beim erreichen des Wertes im Compare Register wechselt der zugehörige
Port automatisch von H nach L oder umgekehrt.
Entstehen dadurch Unterbrechnungen / Verzögerungen im Hauptprogramm
oder kann man diesen Counter als autark betrachten.

Muss der Zähler unterbrochen werden um den Wert im Compare-Register zu
verändern oder kann das während des laufenden Zählers erfolgen?

von schlumpf (Gast)


Lesenswert?

Ein Hardware PWM Generator läuft völlig autark mit der eingestellten
Periode und dem Dutycycle, solange, bis er von dem Programm gestoppt
wird. Es entsteht keine Prozessorlast

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Muss der Zähler unterbrochen werden um den Wert im Compare-Register >zu
verändern oder kann das während des laufenden Zählers erfolgen?

Nein. Allerdings kann es zu interessanten Effekten kommen, wenn der
neue Vergleichswert schon überschritten wurde.

von skragan (Gast)


Lesenswert?

"interessante Effekte" können z.b. das abrauchen von endstufen sein
:o)

von Qwerty (Gast)


Lesenswert?

Laut Datenblatt wird der OCR-Wert aber doch gelatcht und dann
synchronisiert übernommen, oder? Zitat:

"Note that in the PWM mode, the 10 least significant OCR1A bits, when
written, are transferred to a temporary location. They are latched when
Timer/Counter1 reaches TOP. This prevents the occurrence of odd-length
PWM pulses (glitches) in the event of an unsynchronized OCR1A write."

von Karl heinz B. (kbucheg)


Lesenswert?

> Laut Datenblatt wird der OCR-Wert aber doch gelatcht

Schon, aber das beseitigt nicht alle Probleme.
Wenn du den OCR Wert kleiner machst und der aktuelle Counter Stand
aber schon größer als der neue OCR Wert ist, dann zählt der
Counter munter bis zum Overflow weiter.

von flyingwolf (Gast)


Lesenswert?

< munter bis zum Overflow weiter. >
und von da dann wider zurück?

Was färe dann falsch? Der Impuls sollte in diesem Fall ja länger
werden, und so wird er etwas länger als der vorhergehende und nicht
ganz so lang wie der nächste? oder verstehe ich was falsch?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Das kommt auf den PWM-Modus an:
Beim CTC- und OC-Modus würde der Timer komplett durchlaufen und erst
nach einem Überlauf auf den neuen Wert reagieren.
Beim Phase-Correct-Mode vermutlich auch.
Die damit zusammenhängenden Probleme sind aber auch im Datenblatt
beschrieben (PWM-Modi...).

von johnny.m (Gast)


Lesenswert?

In den PWM-Betriebsarten sollte so was eigentlich gar nicht passieren
können (es sei denn, ich habe im Datenblatt etwas falsch verstanden
oder übersehen). Das Compare-Register und der TOP-Wert (unabhängig
davon, wo der steht) wird beim Erreichen von TOP aktualisiert, d.h. in
dem Moment, in dem entweder (Betriebsart Fast PWM) das Zählregister auf
Null zurückgesetzt wird oder (Betriebsart Phase Correct PWM) der Zähler
seine Zählrichtung umkehrt. Probleme kann es eigentlich nur dann geben,
wenn man im CTC-Modus arbeitet.

von Karl heinz B. (kbucheg)


Lesenswert?

> Was färe dann falsch? Der Impuls sollte in diesem Fall ja länger
> werden, und so wird er etwas länger als der vorhergehende und nicht
> ganz so lang wie der nächste?

Ich sag mal so:

Wenn ich eine 16 bit PWM laufen habe und ich verringere
den Wert von 800 auf 400 und als Folge davon generiert
mir die Hardware einen Puls der Länge 65936, dann könnte
ich mir schon vorstellen, dass das je nach Anwendung der
PWM zu Problemen führen kann. Das ist immerhin eine
Überschreitung um das 164-fache.

von flyingwolf (Gast)


Lesenswert?

???
Ich habe das so verstanden, das es 2 Register gibt die beschrieben
werden müssen.
Das eine als oberer Grenzwert bis zu dem der Zähler zählt um dann
wieder umzukehren und zu 0 zurückzuzählen
Das zweite ist das Compare register an dem der Port von L nach H oder
umgekehrt schaltet?
Um die Impulslänge zu verändern werde ich doch in der Regel nur den
Wert des Compare-Registers ändern, also den Zeitpunkt der Umschaltung,
nicht Würde ich den Wert den oberen Grenzwertes ändern, wäre ja neben
der Impulsbreite auch die Frequenz verändert und das ist doch nicht
Sinn der Sache oder?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

@Johnny: Hast mal wieder Recht.

von johnny.m (Gast)


Lesenswert?

@Rahul:
Net ganz. Habe grad noch mal genauer nachgelesen: Wenn man einen
PWM-Modus benutzt, der das Capture-Register ICRx als TOP-Value nutzt,
kann es schief gehen, weil das nicht gepuffert wird! Das ist aber
anscheinend die einzige Ausnahme...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Das eine als oberer Grenzwert bis zu dem der Zähler zählt um dann
>wieder umzukehren und zu 0 zurückzuzählen
>Das zweite ist das Compare register an dem der Port von L nach H oder
>umgekehrt schaltet?

Das nennt Atmel "Phase-Correct-Mode".
Die o.g. Probleme gibt es beim CTC-Mode oder wie Johnny schon meinte,
wenn man das ungepufferte ICP-Register als TOP benutzt.
Allerdings ändert man die Grenzwerte ja eher selten, wenn man mit einer
konstanten PWM-Frequenz arbeitet, die ja durch TOP und BOTTOM festgelegt
wird.

von johnny.m (Gast)


Lesenswert?

@flyingwolf:
Richtig, es gibt in einigen PWM-Modi (nämlich in denen, die keinen
festen TOP-Wert haben) zwei Werte, die man setzen muss. Allerdings wird
man in den meisten Anwendungsfällen (mal abgesehen von
Audio-Anwendungen) die PWM-Frequenz (und damit den TOP-Wert) konstant
lassen. Dann braucht man sich nur noch um das Tastverhältnis zu
kümmern, das mit dem entsprechenden Compare-Register eingestellt wird.
Und wie oben schon angedeutet, kann das weiter oben beschriebene
Problem mit dem Überlauf dann auftreten, wenn der TOP-Wert im
(ungepufferten) ICR-Register steht. Wenn man einen PWM-Modus mit festem
TOP-Wert (also 8-, 9- oder 10-Bit-PWM) oder einen mit OCRxy als TOP
nutzt, dann kann das Problem prinzipiell nicht auftreten.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>mal abgesehen von Audio-Anwendungen

Wo finde ich was zu dem Thema?

von johnny.m (Gast)


Lesenswert?

Hab hier in letzter Zeit mehrere Threads gesehen, wo Leute (anscheinend)
irgendwelche Audiosignale per PWM generieren wollen. Dabei könnte ich
mir zumindest vorstellen, dass es u.U. Sinn macht, während der
laufenden Anwendung Änderungen an der Frequenz vorzunehmen... (nur so
ne Vermutung)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.