Forum: Mikrocontroller und Digitale Elektronik 3Phasen PWM mit Atmega48


von Holger K. (holgerkraehe)


Lesenswert?

Hallo zusammen

Ich würde gerne mit dem Atmega48 (Hardware ist gesetzt, da bereits 
vorhanden!) 3 Phasen PWM zur Dimmung von einer RGB Led erzeugen.

Leider hat der Mega nur einen Counter mit 16bit und dieser hat nur 2 
OutputCompares.

8bit PWM genügt mir leider nicht.
12bit wäre das minimum und 16bit wäre perfekt.

In Software könnte man dies ja mittels Intterupt machen.
PWM Frequenz: 100HZ = T = 10ms

Bei 16bit
10ms/65535 = 0.000152ms = 152nS = 6.57MHz ist für einen Interrupt viiiel 
zu schnell!

Bei 12bit
10ms/4096 = 0.00244ms = 2.44uS = 409kHz immer noch sehr schnell für 
einen Interrupt.

Die eigentlichen PWM Werte (DutyCycle) werden in der Anwendung 
kontinuierlich angepasst. Die LED soll ständig ändernde Farbverläufe 
anzeigen.

Wie würdet ihr dieses Problem lösen?
Danke schonmal!

: Bearbeitet durch User
von matrixstorm (Gast)


Lesenswert?

Musst du sonst noch iwas anderes in Software machen, oder kannst du 
busy-spinnen ?

von Holger K. (holgerkraehe)


Lesenswert?

matrixstorm schrieb:
> Musst du sonst noch iwas anderes in Software machen, oder kannst
> du
> busy-spinnen ?

Es gibt noch einen HW-Int (INT0) welcher die Fernbedienungssignale 
(Infrarot) auswerten soll.

Ansonsten nichts.

Der Mega soll nur die LED ansteuern.
Eventuell definierte Farbabläufe von einer Tabelle abarbeiten und R G 
und B mittels HUE berechnen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Holger K. schrieb:
> Wie würdet ihr dieses Problem lösen?

Mit binär gewichtetem PWM. Damit kommst du auf 8 parallel laufende 
Kanäle.
Beitrag "AVR: Fast-PWM (BAM) 12 Bit für 8 Kanäle"

von Jobst M. (jobstens-de)


Lesenswert?

Holger K. schrieb:
> Wie würdet ihr dieses Problem lösen?

PDM:
1
      Wert
2
       |
3
 ,->--(+)-[Carry]---> PDM
4
 |     |
5
 |  Register
6
 |     |
7
 '-----'



Gruß

Jobst

: Bearbeitet durch User
von Michael E. (Gast)


Lesenswert?

Wenn genug 8-Bit PWM vorhanden sind, würd ich die nehmen und die 
Zwischenwerte über eine Umschaltung der PWM-Werte machen. Dann musst Du 
nur alle 256 Zyklen in den Intterrupt. Gegenüber der reinen 16-Bit PWM 
hast Du sogar noch den Vorteil, daß das z.B. 16 MHz / 65536 = 244 Hz 
Flimmern nur noch 1/256 der Helligkeit beträgt. Und wenn Du es noch 
glatter brauchst, berechnest Du die Software-Bits nach dem 
Delta-Sigma-Prinzip.

von Praktiker (Gast)


Lesenswert?

Holger K. schrieb:
> Wie würdet ihr dieses Problem lösen?
Mit einem geeigneen uC mit 3x HW-PWM.

von Praktiker (Gast)


Lesenswert?

Holger K. schrieb:
> Bei 16bit
> 10ms/65535 = 0.000152ms = 152nS = 6.57MHz ist für einen Interrupt viiiel
> zu schnell!
>
> Bei 12bit
> 10ms/4096 = 0.00244ms = 2.44uS = 409kHz immer noch sehr schnell für
> einen Interrupt.

Ober, da du nur einen PWM-Kanal in Software machen musst, brauchst du 
nur 2 Interrupts pro Periode, eins fürs Ein- und das Andere fürs 
ausschalten und nich 2^16.

von max2 (Gast)


Lesenswert?

Timer 1 hat doch 2 Vergleichsregster und mit dem Tiner 2 sind 3 Kanäle 
vorhanden.

von Konrad S. (maybee)


Lesenswert?

Schau dir mal an, wie das Zabex mit seiner Sofabeleuchtung gelöst hat: 
http://www.zabex.de/site/sofabeleuchtung.html

von Holger K. (holgerkraehe)


Lesenswert?

max2 schrieb:
> t dem Tiner 2 sind 3 Kanäle
> vorhanden.

Timer2 ist nur 8bit

Sonst hätte das gepasst ja!

von Axel S. (a-za-z0-9)


Lesenswert?

Holger K. schrieb:
> Ich würde gerne mit dem Atmega48 (Hardware ist gesetzt, da bereits
> vorhanden!) 3 Phasen PWM zur Dimmung von einer RGB Led erzeugen.
> Leider hat der Mega nur einen Counter mit 16bit und dieser hat nur 2
> OutputCompares.
> 8bit PWM genügt mir leider nicht.
> 12bit wäre das minimum und 16bit wäre perfekt.

Für ein RGB-Moodlight reicht Soft-PWM mit ca. 12 Bit. Ca. deswegen, weil 
man sowieso keine lineare Auflösung braucht und die Dimmstufen besser 
gleich in exponentieller Abstufung auslegt. Wenn man noch mehr Auflösung 
braucht, dann BAM in Software.

> Wie würdet ihr dieses Problem lösen?

Hab schon: Beitrag "noch ein AVR Moodlight"

von Malte S. (maltest)


Lesenswert?

Wie oben schon erwähnt mit BAM und dann deutlich schneller als 100 Hz, 
denn die flimmern sehr deutlich, wenn sich Lichtquelle und/oder 
Betrachter bewegen.

von Konrad S. (maybee)


Lesenswert?


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.