3Phasen PWM mit Atmega48

OP #4250724
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!
Gast #4252472
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.
Gast #4252481
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.
#4254221
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"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren