Pfad: Home ==> Mikrobeginner ==> 5. LED mit PWM     This page in English (external): Flag EN
ATtiny13

Lektion 5: Eine LED über eine PWM einstellen


Bis jetzt war Blinken mit der LED angesagt. Jetzt geht das Geblinke weiter, aber mit einer sehr hohen Frequenz. Dafür verändern wir jetzt die LED-Helligkeit von ganz schwach bis ganz hell. Und zwar echt linear und nicht mit einem nichtlinearen Strom.

5.0 Übersicht

  1. Einführung in den PWM-Modus des Timers
  2. Hardware, Bauteile, Aufbau
  3. Timer im Fast-PWM-Modus
  4. Timer im phasenkorrekten PWM-Modus

5.1 Einführung in den PWM-Modus des Timers

5.1.1 8-Bit-PWM

Pulsweiten-Modulation PWM heißt Puls-Weiten-Modulation. Dazu setzt der Timer beim Neustart einen Ausgang (OCA, OCB) und wechselt bei Erreichen der Vergleicherwerte (OCRA, OCRB) dessen Polarität. Mit Erreichen des höchsten Wertes (255) und mit dessen Überschreitung wird wieder der Ausgangswert am Pin hergestellt.

Je später im Zählbereich der Vergleich eintritt, desto länger wird die erste Phase und desto kürzer wird die zweite Phase mit umgekehrter Polarität. Dieses Verhalten kann dazu dienen, mit dem Ausgangssignal Antriebsleistungen von Motoren oder eben auch LED-Helligkeiten zu regeln.

Fast-PWM-Ausgangssteuerung Die Bits COM0A1 und COM0A0 im Port TCCR0A legen fest, wie sich der Ausgang OC0A verhält. Mit 10 wird der Ausgang zu Beginn auf Eins gesetzt, mit 11 auf Null. Analog kontrollieren COM0B1 und COM0B0 den Ausgang OC0B.

Fast PWM Dies hier zeigt die Impulsfolge am Ausgang OC0A, die sich bei Fast-PWM mit TOP=255 bei einem Vergleicherwert von 100 ergibt.

Bei Fast PWM kann durch die Wahl des Timer-Vorteilers die PWM-Frequenz beeinflusst werden. Bei den folgenden Taktfrequenzen ergeben sich bei den verschiedenen Vorteilern die folgenden PWM-Frequenzen.
TaktP=1P=8P=64P=256P=1.024
9,6 MHz37,5 kHz4,69 kHz586 Hz146,5 Hz36,6 Hz
1,2 MHz4,69 kHz586 Hz73,2 Hz18,3 Hz4,6 Hz
128 kHz500 Hz62,5 Hz7,8 Hz1,95 Hz0,49 Hz

Bei 1,2 MHz liegen alle PWM-Frequenzen im hörbaren Bereich (bei Motorsteuerungen wegen der Nebengeräusche wichtig). Ein Takt von 128 kHz kommt für PWM kaum in Frage.

5.1.2 Phasenkorrekte 8-Bit-PWM

Phasenkorrekt Das ist der Signalverlauf bei einer phasenkorrekten PWM. Hier zählt der Zähler auf- und abwärts, jeweils bei Erreichen des Vergleichswerts erfolgt das Umschalten des Ausgangssignals. Das bedingt eine Halbierung der PWM-Frequenz.

Die phasenkorrekte PWM-Version kommt dann zum Einsatz, wenn sich der Vergleichswert sehr häufig und in großen Beträgen verändert. Dann zittert das Signal deutlich weniger als im Fast-Modus.

5.1.3 PWM mit unterschiedlicher Auflösung

Mit einer Kombination des PWM-Modus mit der CTC-Steuerung des Timers lassen sich niedriger auflösende PWM einstellen. So ist z. B. für eine Motorsteuerung eine PWM mit acht Bit Auflösung (256 Stufen, 0,39% Genauigkeit) meistens überkandidelt. Um die PWM-Frequenz zu steigern, könnte eine verkürzte Zykluszeit gewählt werden. Setzt der Timer bei 16 zurück, erhält man eine 4-Bit-PWM, die sich in 16 Stufen verstellen lässt (6,25% Genauigkeit).

Da bei einem 16-Bit-Timer der Vergleicher A für die CTC verwendet wird, kann nur der Vergleicher B für PWM verwendet werden. Hat der AVR auch einen 16-Bit-Timer, dann ist PWM wegen der extrem langen Zyklen (65.536 Takte, 0,0015% Genauigkeit) nur sinnvoll, wenn dessen Auflösung auf die Anwendung sinnvoll verringert wird. Bei 16-bittigen Timern ist daher ein weiterer Vergleicher verfügbar (ICR), mit dem der CTC-Modus gesteuert werden kann, so dass die beiden Kanäle A und B für PWM-Signalerzeugung frei sind. Der ATtiny13 hat keinen 16-Bit-Timer.
TaktP=1P=8P=64P=256P=1.024
9,6 MHz37,5 kHz4,69 kHz586 Hz146,5 Hz36,6 Hz
1,2 MHz4,69 kHz586 Hz73,2 Hz18,3 Hz4,6 Hz
128 kHz500 Hz62,5 Hz7,8 Hz1,95 Hz0,49 Hz

5.2 Hardware, Bauteile und Aufbau

Für die PWM-Regelung kommt die gleiche Hardware zum Einsatz, wie wir sie schon in Lektion 2 aufgebaut haben.

Motorsteuerung Eine PWM-Anwendung für eine Motorsteuerung. Hier treibt der OC0B-Ausgang einen NPN-Transistor, der den 12V-Motor per PWM-Signal antreibt.


Home Top Einführung Hardware Fast-PWM Phasenkorrekter PWM-Modus

5.3 Fast PWM Modus

Mit den bisher dargestellten Funktionsweisen, Eigenschaften und Methoden lässt sich die PWM-Ansteuerung der LED leicht programmieren. Als Zyklusfrequenz wählen wir 1,2 MHz (Vorteiler = 1) geteilt durch 256 = 4,7 kHz. Das ist sowohl für das menschliche Auge als auch für handelsübliche Digitalkameras schnell genug.

5.3.1 Programm

Indem wir die Polarität der PWM umkehren, heben wir die Umkehr durch die LED (0 = aus, 1 = ein) wieder auf (Quellcode hier).

;
; *******************************************
; * PWM-Ansteuerung einer LED im Fast-Modus *
; * (C)2016 by www.gsc-elektronic.net       *
; *******************************************
;
.NOLIST
.INCLUDE "tn13def.inc"
.LIST
;
; -------- Register -------------------------
.def rmp = R16
;
; -------- Programm -------------------------
	; Ausgang OC0A initiieren
	sbi DDRB,DDB0 ; OC0A als Ausgang
	; PWM-Wert in Timer 0
	ldi rmp,20 * 256 / 100 ; 20% Helligkeit
	out OCR0A,rmp ; in Vergleichsregister A
	; Timer 0 in Fast PWM Modus, Output A zu Beginn Low
	ldi rmp,(1<<COM0A1)|(1<<COM0A0)|(1<<WGM01)|(1<<WGM00)
	out TCCR0A,rmp ; in Kontrollregister A
	; Timer 0 mit Vorteiler 1 starten
	ldi rmp,1<<CS00 ; Vorteiler auf 1
	out TCCR0B,rmp ; in Kontrollregister B
	; Schlafen ermoeglichen
	ldi rmp,1<<SE ; Sleep enable
	out MCUCR,rmp ; in Universal-Kontrollregister
Schleife:
	sleep ; schlafen legen
	nop ; Aufwachen
	rjmp Schleife ; wieder schlafen legen
;
; Ende Quellcode
;

5.3.2 Ergebnis

Das geht recht einfach. Und das hier ist das Ergebnis:
0%1%2%3%4%
0% 1% 2% 3% 4%
5%10%20%50%100%
5% 10% 20% 50% 100%

Die Unterschiede in der Helligkeit sind klar erkennbar.

Entscheidend ist, dass sich die PWM in Wirklichkeit nie auf Null drehen lässt: immer wird der erste Taktimpuls aktiviert, auch wenn das Vergleichsregister auf Null steht. Wer also tatsächlich ausschalten will, entkoppelt OC0A vom Timer und setzt den Portpin auf Null oder Eins.

Home Top Einführung Hardware Fast-PWM Phasenkorrekter PWM-Modus

5.3.3 Simulation des PWM-Modes

avr_sim kann dazu verwendet werden, um das Timing im PWM-Mode zu überprüfen.

Init im Fast PWM-Modus Timer/Counter 0 im Fast-PWM-Modus Nach 6,67 µs ist der Timer im Fast-PWM-Modus. Der Vergleichswert in A ist 51, Ausgangspin PB0 wird beim Vergleichswert auf Eins (LED aus) und zu Beginn auf Null (LED an) gesetzt.

Port beim Init im Fast-PWM-Modus Der Port B nach der Initiierung, Pin PB0 ist als Ausgang gesetzt. Das bedeutet, dass die LED über die ersten (51 + 1) Zyklen an ist und bis 256 (Null) aus, was 20,3% Einschaltdauer entspricht.

Erster Match im Fast-PWM-Modus Zeit bis zum ersten Match Das ist der Zähler, wenn der erste Match aufgetreten ist. Die bis dahin verbratenen 42,5 µs sind korrekt.

Erster Match und Port Das erste Vergleichsereignis setzt PORTB0 und schaltet damit die LED aus.

Fast PWM Timer Überlauf Fast PWM Timer Überlauf Timing Der erste Überlauf von 255 auf Null erfolgt nach 212,5 µs, was einer PWM-Frequenz von 1.200 / 256 = 4,7 kHz entspricht.

Fast PWM Overflow Port Der Überlauf hat das Portbit PORTB0 zurückgesetzt, die LED ist wieder an und der PWM-Zyklus beginnt erneut.

5.4 Timer im phasenkorrekten PWM-Modus

Den phasenkorrekten PWM-Modus kriegen wir, indem wir das WGM01-Bit im obigen Quellcode auf Null setzen (aus der zu setzenden Bitliste im Quellcode entfernen). Die PWM arbeitet dann mit der halben Frequenz, 2,34 kHz. Immer noch schnell genug für diese Anwendung, aber ein Motor dürfte jetzt deutlich hörbar summen.
Home Top Einführung Hardware Fast-PWM Phasenkorrekter PWM-Modus

©2016 by http://www.gsc-elektronic.net