Forum: Mikrocontroller und Digitale Elektronik PWM


PWM
von Matthias (Gast)


Lesenswert?

Hallo.
Ich habe einen AT MEGA 644 zur Verfügung. Der hat laut Datenblatt 6 PWM 
Kanäle. Heißt das, dass ich auf jedem Kanal eine eigene PWM Frequenz 
ausgeben kann? Also 6 verschiedene PWM Frequenzen ausgeben kann?

Konkret:
Ich will LEDs über einen entsprechenden Treiber in ihrer Helligkeit 
regulieren. Dafür brauch ich min 4 PWM Signale,(da ich 4 verschiedene 
Farben habe) die ich unabhängig voneinander einstellen kann.

Gruß Matthias

von Mike R. (thesealion)


Lesenswert?

Ob du verschiedene Frequenzen einstellen kannst, weiß ich gerade nicht. 
Ist aber auch egal, da bei einer PWM nicht die Frequenz (sonst hieße es 
ja FWM :-) sondern die Pulsbreite variiert wird.

Und die unterschiedlichen Compareregister kannst du auf jeden Fall 
getrennt steuern.

von johnny.m (Gast)


Lesenswert?

Da die 6 PWM-Kanäle an drei Timern hängen (je zwei PWM-Kanäle pro Timer) 
kannst Du bis zu drei unterschiedliche Frequenzen (eine pro Timer) 
realisieren.

von Matthias (Gast)


Lesenswert?

Ja, aber das PWM Signal wird ja über die Timer gesteurt, davon habe ich 
ja aber nur einen 16- und einen 8 bit Timer. Daher stellt sich mir die 
Frage, wie ich mit 2 Timern 6 PWM Kanäle in ihrer Pulsbreite steuern 
kann?
Läuft das dann so dass der Timer zählt und wenn er Kompare A erreicht 
den einen Pin toggelt dann weiter zählt und bei Compare B einen anderen 
Pin toggelt? Oder wie soll ich mir das vorstellen?

von Matthias (Gast)


Lesenswert?

@johnny.m:
Das heißt ich kann nur 3 verschiedene PWM Signale erzeugen. Das ist 
blöd, denn ich brauch 4.

von johnny.m (Gast)


Lesenswert?

Der Mega644 hat drei Timer (Timer 0, Timer 1 und Timer 2). Jeder Timer 
hat zwei Compare-Units (OC0A, OC0B, OC1A, OC1B, OC2A und OC2B). Das 
macht 6 PWM-Kanäle an drei Timern...

von johnny.m (Gast)


Lesenswert?

Die Output-Pins musst Du entsprechend konfigurieren. Jede 
Compare-Einheit hat einen fest verdrahteten Ausgangspin (Namen siehe 
mein letztes Posting), der bei entsprechender Konfiguration getoggelt 
werden kann, wenn das dazugehörige Compare-Ereignis eintritt. Bis auf 
die Tatsache, dass je zwei PWM-Kanäle am selben Timer hängen, sind die 
Compare-Einheiten A und B jeweils völlig unabhängig voneinander 
steuerbar. Sie laufen nur eben mit der selben Frequnez...

Bist Du sicher, dass Du wirklich vier unterschiedliche Frequenzen 
brauchst?

von Matthias (Gast)


Lesenswert?

Heißt dass jetzt, dass ich mit den 3 Timern 6 unterschiedliche PWM 
Signale gleichzeitig erzeugen kann?
Oder dass ich 6 Kanäle habe, von denen aber je 2 die gleiche Pulsbreite 
haben?

von Matthias (Gast)


Lesenswert?

Also das hab ich falsch geschrieben, ich brauch nur eine Frequenz. Die 
muss ich auch nie verändern.
Was ich ändern will ist die Pulsbreite und die unabhängig voneinander.
Wenn ich dich richtig verstanden habe, kann ich 6 unterschiedliche 
Pulsbreiten erzeugen.

von johnny.m (Gast)


Lesenswert?

> Läuft das dann so dass der Timer zählt und wenn er Kompare A
> erreicht den einen Pin toggelt dann weiter zählt und bei
> Compare B einen anderen Pin toggelt? Oder wie soll ich mir
> das vorstellen?

Normalerweise geht man bei einer PWM so vor:
a) Fast PWM: Der Timer zählt hoch, bei erreichen des Compare-Wertes in 
einem der Compare-Register wird der dazugehörige Pin entweder 
ausgeschaltet (nichtinvertierte PWM, Tastverhältnis ist proportional zum 
Compare-Wert) oder eingeschaltet (invertierte PWM, Tastverhältnis ist 
umgekehrt proportional zum Compare-Wert). Bei erreichen des 
eingestellten Maximalwertes (TOP) der PWM wird dann jeweils die 
entgegengesetzte Aktion durchgeführt und der Timer (Register TCNTx) wird 
auf null zurückgesetzt.

b) symmetrische (phasenrichtige oder phase correct) PWM: Der Timer zählt 
hoch, bei erreichen eines Compare-Wertes wird (je nachdem, ob 
invertierte oder nichtinvertierte PWM) der Pin gesetzt oder gelöscht, 
siehe oben. Bei erreichen des Maximalwertes (TOP) wird die Zählrichtung 
umgekehrt und bei erneutem Erreichen des Compare-Wertes (diesmal von 
oben) wird der Pin wieder in den ursprünglichen Zustand geschaltet. Bei 
null wird die Zählrichtung des Timers dann wieder umgekehrt und das 
Spiel geht von vorne los.

> Wenn ich dich richtig verstanden habe, kann ich 6 unterschiedliche
> Pulsbreiten erzeugen.

Genau!
Wenn alle drei Timer mit dem selben TOP-Wert und Prescaler laufen (z.B. 
8-Bit-PWM), dann hast Du 6 PWM-Kanäle mit derselben PWM-Frequenz, aber 
unabhängig voneinander einstellbaren Tastverhältnissen zur Verfügung.

von Mike R. (thesealion)


Lesenswert?

Richtig verstanden.
Die Pulsbreite eines jeden Ausgang kann frei und unabhängig eingestellt 
werden.

von Matthias (Gast)


Lesenswert?

ok, danke. Das habe ich wissen wollen

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.