1
Pulsweitenmodulation (PWM)
●
Möglichkeit (fast) analoge Signale zu erzeugen
●
Schnelles Ein- Ausschalten eines Ausganges regelt die Energiezufuhr gegenüber eines
Verbrauchers
●
An dem Verbraucher stellt sich eine Spannung zwischen dem Maximalwert (5V) und 0V ein.
●
Nach Entkopplung /Verstärkung mit Transistoren können größere Lasten betrieben werden, oder die Spannung geglättet werden
●
PWM wird häufig mit Timern realisiert
●
Möglichkeit (fast) analoge Signale zu erzeugen
●
Schnelles Ein- Ausschalten eines Ausganges regelt die Energiezufuhr gegenüber eines
Verbrauchers
●
An dem Verbraucher stellt sich eine Spannung zwischen dem Maximalwert (5V) und 0V ein.
●
Nach Entkopplung /Verstärkung mit Transistoren können größere Lasten betrieben werden, oder die Spannung geglättet werden
●
PWM wird häufig mit Timern realisiert
PWM Grundlagen
http://www.mikrocontroller.net/articles/Pulsweitenmodulation
Begriffe:
Frequenz
Tastverhältnis (Duty circle DC) Mittelwert d. Spannung V
mU
einU
aust
eint
ausPeriode=t
ein+t
ausDC=t
ein/ (t
ein+t
aus) Begriffe:
Frequenz
Tastverhältnis (Duty circle DC) Mittelwert d. Spannung V
mU
einU
aust
eint
ausPeriode=t
ein+t
ausDC=t
ein/ (t
ein+t
aus)
PWM Berechnungsgrundlagen
Für U
aus=0V und U
ein=Vcc gilt dann Für U
aus=0V und U
ein=Vcc gilt dann
Tastverhältnis DC
Leistungsberechnung mit Ohmscher Last
Bei PWM berechnet sich die Leistung aus den Bestandteilen „aus“ und
„ein“, entsprechend der Zeiten in das rechte Verhältnis gesetzt:
.
Für Uaus=0V ergibt sich vereinfacht:
.
Die Anwendung von ergibt falsche Ergebnisse!
Bei PWM berechnet sich die Leistung aus den Bestandteilen „aus“ und
„ein“, entsprechend der Zeiten in das rechte Verhältnis gesetzt:
.
Für Uaus=0V ergibt sich vereinfacht:
.
Die Anwendung von ergibt falsche Ergebnisse!
PWM mit AVR
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#PWM_.28Pulsweitenmodulation.29
Invertierendce PWM: Je höher der Vergleichswert ist, desto geringer wird die Resultierende Spannung, weil sich die Einschaltzeit verringert.
Fast PWM
http://www.extremeelectronics.co.in/avrtutorials/images/pwm_wave_timer.gif
Kennwerte
Auflösung (Resolution, Stufung der Ausgangsspannung):
- Max (8,9,10 bit oder variabel)
Frequenz:
- Max
- Eingangsfrequenz (Vorteiler)
Ausgangsspannung:
- Lage des Comparewerts zwischen 0 und Maximalwert ergibt das Tastverhältnis
Auflösung (Resolution, Stufung der Ausgangsspannung):
- Max (8,9,10 bit oder variabel)
Frequenz:
- Max
- Eingangsfrequenz (Vorteiler)
Ausgangsspannung:
- Lage des Comparewerts zwischen 0 und
Maximalwert ergibt das Tastverhältnis
PWM, beispielhaft mit Timer1
Fast PWM – Phasecorrect PWM invertierend/nicht Invertierend
Fixe Auflösung 8bit (Max=255), 9 bit (511), 10 bit(1023) Variable Auflösung (Max in OCR1A oder ICR1)
Max in ICR1 verwenden, wenn der Max-Wert konstant bleibt
Max in OCR1A verwenden, wenn der Max Wert und damit die Frequenz veränderlich ist (Erzeugung verschiedener Töne), OCR1A steht in diesem Fall nicht als
Vergleichsregister zur Verfügung, Es kann nur OCR1B zum Vergleichen/Schalten genutzt werden
Ausgänge sind OC1A (PB1, Pin15) OC1B (PB2, Pin16) Fast PWM – Phasecorrect PWM
invertierend/nicht Invertierend
Fixe Auflösung 8bit (Max=255), 9 bit (511), 10 bit(1023) Variable Auflösung (Max in OCR1A oder ICR1)
Max in ICR1 verwenden, wenn der Max-Wert konstant bleibt
Max in OCR1A verwenden, wenn der Max Wert und damit die Frequenz veränderlich ist (Erzeugung verschiedener Töne), OCR1A steht in diesem Fall nicht als
Vergleichsregister zur Verfügung, Es kann nur OCR1B zum Vergleichen/Schalten genutzt werden
Ausgänge sind OC1A (PB1, Pin15) OC1B (PB2, Pin16)
Obergrenze (Max):
abhängig von der
Verarbeitungsbreite in SFR
TCCR1A
(PWM11,PWM10) Untergrenze 0
Vergleichswert in SFR OCR1A oder OCR1B
Ausgabe auf PIN OC1A oder OC1B
Obergrenze (Max):
abhängig von der
Verarbeitungsbreite in SFR
TCCR1A
(PWM11,PWM10) Untergrenze 0
Vergleichswert in SFR OCR1A oder OCR1B
Ausgabe auf PIN OC1A
oder OC1B Die Obergrenze MAX kann auch über die Register OCR1A oder ICR1 bestimmt werden
(max. 16-Bit)
Die Obergrenze MAX kann auch über die Register OCR1A oder ICR1 bestimmt werden
(max. 16-Bit)
PWM11 PWM10 Bedeutung
0 0 no PWM mode
0 1 8-Bit PWM
1 0 9-Bit PWM
1 1 10-Bit PWM
PWM11 PWM10 Bedeutung
0 0 no PWM mode
0 1 8-Bit PWM
1 0 9-Bit PWM
1 1 10-Bit PWM
Auflösung Obergrenze Frequenz
8 255 fTC1 / 510
9 511 fTC1 / 1022
10 1023 fTC1 / 2046
Auflösung Obergrenze Frequenz
8 255 fTC1 / 510
9 511 fTC1 / 1022
10 1023 fTC1 / 2046
WGM 13 12 11 10Timer/Counter Mode of Update TOV1 Flag
Mode Operation(1) TOP OCR1x Set on
0 0 0 0 0Normal 0xFFFF ImmediateMAX
1 0 0 0 1PWM,Phase Correct,8-bit 0x00FF TOP BOTTOM 2 0 0 1 0PWM,Phase Correct,9-bit 0x01FF TOP BOTTOM 3 0 0 1 1PWM,Phase Correct,10-bit 0x03FF TOP BOTTOM
4 0 1 0 0CTC OCR1A ImmediateMAX
5 0 1 0 1Fast PWM,8-bit 0x00FF TOP TOP 6 0 1 1 0Fast PWM,9-bit 0x01FF TOP TOP 7 0 1 1 1Fast PWM,10-bit 0x03FF TOP TOP
8 1 0 0 0PWM, Phase and Frequency CorrICR1 BOTTOM BOTTOM 9 1 0 0 1PWM, Phase and Frequency CorrOCR1A BOTTOM BOTTOM 10 1 0 1 0PWM, Phase Correct ICR1 TOP BOTTOM 11 1 0 1 1PWM, Phase Correct OCR1A TOP BOTTOM
12 1 1 0 0CTC ICR1 ImmediateMAX
13 1 1 0 1(Reserved) – – –
14 1 1 1 0Fast PWM ICR1 TOP TOP
15 1 1 1 1Fast PWM OCR1A TOP TOP
TOV1: Timer 1 Overflow Interrupt Flag in Timer/Counter Interrupt Register
WGM 1 3 1
2 1 1 1
0 Timer/Counter Mode of Update TOV1 Flag
Mode Operation(1) TOP OCR1x Set on
0 0 0 0 0 Normal 0xFFFF Immediate MAX
1 0 0 0 1 PWM,Phase Correct,8-bit 0x00FF TOP BOTTOM 2 0 0 1 0 PWM,Phase Correct,9-bit 0x01FF TOP BOTTOM 3 0 0 1 1 PWM,Phase Correct,10-bit 0x03FF TOP BOTTOM
4 0 1 0 0 CTC OCR1A Immediate MAX
5 0 1 0 1 Fast PWM,8-bit 0x00FF TOP TOP
6 0 1 1 0 Fast PWM,9-bit 0x01FF TOP TOP
7 0 1 1 1 Fast PWM,10-bit 0x03FF TOP TOP
8 1 0 0 0 PWM, Phase and Frequency Correct ICR1 BOTTOM BOTTOM 9 1 0 0 1 PWM, Phase and Frequency Correct OCR1A BOTTOM BOTTOM
10 1 0 1 0 PWM, Phase Correct ICR1 TOP BOTTOM
11 1 0 1 1 PWM, Phase Correct OCR1A TOP BOTTOM
12 1 1 0 0 CTC ICR1 Immediate MAX
13 1 1 0 1 (Reserved) – – –
14 1 1 1 0 Fast PWM ICR1 TOP TOP
15 1 1 1 1 Fast PWM OCR1A TOP TOP
WGM 1 3 1
2 1 1 1
0 Timer/Counter Mode of Update TOV1 Flag
Mode Operation(1) TOP OCR1x Set on
0 0 0 0 0 Normal 0xFFFF Immediate MAX
1 0 0 0 1 PWM,Phase Correct,8-bit 0x00FF TOP BOTTOM 2 0 0 1 0 PWM,Phase Correct,9-bit 0x01FF TOP BOTTOM 3 0 0 1 1 PWM,Phase Correct,10-bit 0x03FF TOP BOTTOM
4 0 1 0 0 CTC OCR1A Immediate MAX
5 0 1 0 1 Fast PWM,8-bit 0x00FF TOP TOP
6 0 1 1 0 Fast PWM,9-bit 0x01FF TOP TOP
7 0 1 1 1 Fast PWM,10-bit 0x03FF TOP TOP
8 1 0 0 0 PWM, Phase and Frequency Correct ICR1 BOTTOM BOTTOM 9 1 0 0 1 PWM, Phase and Frequency Correct OCR1A BOTTOM BOTTOM
10 1 0 1 0 PWM, Phase Correct ICR1 TOP BOTTOM
11 1 0 1 1 PWM, Phase Correct OCR1A TOP BOTTOM
12 1 1 0 0 CTC ICR1 Immediate MAX
13 1 1 0 1 (Reserved) – – –
14 1 1 1 0 Fast PWM ICR1 TOP TOP
15 1 1 1 1 Fast PWM OCR1A TOP TOP
Port Funktion Port-Adresse RAM-Adresse
TCCR1A Timer/Counter 1 Control Register A 0x2F 0x4F
7 6 5 4 3 2 1 0
COM1A1 COM1A0 COM1B1 COM1B0 FCO1A FCO1B WGM11 WGM10
Bit Name Bedeutung Möglichkeiten
7 COM1A1
Compare Ausgang A
00: OC1A/B nicht verbunden non PWM:
01: OC1A/B wechselt Polarität 10: OC1A/B match: 0
11: OC1A/B match: 1 Fast PWM:
01: toggle OC1A, OC1B disconnected(WGM:15)
10: match:0, top:1 11: match:1, top:0 Phase correct PWM :
01: toggle OC1A, OC1B disconnected(WGM:9,11)
10: match upcount :0, match downcount:1 11: match upcount :1, match downcount:0
6 COM1A0
5 COM1B1
Compare Ausgang B
4 COM1B0
3 FOC1A Force output compare match A Ausgang wir entspr. Konfiguration geschaltet, Interrupt wird nicht erzeugt
2 FOC1B Force output compare match B
1..0
WGM11 WGM10
Pulsweitengenerator
00: PWM aus (abh. von WGM12/13) 01: 8-Bit PWM
Manual:
14
Port Funktion Port-Adresse RAM-Adresse TCCR1B Timer/Counter 1 Control Register B 0x2E 0x4E
7 6 5 4 3 2 1 0
ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10
Bit Name Bedeutung Möglichkeiten
7 ICNC1 Noise Canceler am ICP-Pin
0: ausgeschaltet, erste Flanke löst Sampling aus 1: eingeschaltet, Mindestdauer vier Taktzyklen 6 ICES1 Flankenauswahl
bei Capture
0: fallende Flanke löst Capture aus 1: steigende Flanke löst Capture aus 5 reserved
4 WGM13 Wave Form Generation Mode
3 WGM12
(CTC)
Rücksetzen bei Compare Match A oder WGM
1: Zähler wird bei Gleichheit auf Null gesetzt oder
Wave Form Generation Mode
2..
0 CS12..CS10 Taktauswahl
000: Zähler anhalten 001: Clock
010: Clock / 8 011: Clock / 64 100: Clock / 256 101: Clock / 1024
110: fallende Flanke externer Pin T1 111: steigende Flanke externer Pin T1
Capture
/*
* --- * "THE BEER-WARE LICENSE" (Revision 42):
* <joerg@FreeBSD.ORG> wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Joerg Wunsch
* --- *
* Simple AVR demonstration. Controls a LED that can be directly * connected from OC1/OC1A to GND. The brightness of the LED is * controlled with the PWM. After each period of the PWM, the PWM * value is either incremented or decremented, that's all.
*
* $Id: group__demo__project.html,v 1.1.1.13 2007/05/15 05:13:11 joerg_wunsch Exp $ */
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/delay.h>
#define TIMER1_TOP 1023 enum { UP, DOWN };
ISR (TIMER1_OVF_vect) {
static uint16_t pwm;
static uint8_t direction;
switch (direction) {
case UP:
if (++pwm == TIMER1_TOP) direction = DOWN;
break;
case DOWN:
if (--pwm == 0) direction = UP;
break;
}
OCR1A = pwm;
}
#define TIMER1_TOP 1023 enum { UP, DOWN };
ISR (TIMER1_OVF_vect) {
static uint16_t pwm;
static uint8_t direction;
switch (direction) {
case UP:
if (++pwm == TIMER1_TOP) direction = DOWN;
break;
case DOWN:
if (--pwm == 0) direction = UP;
break;
}
OCR1A = pwm;
}
Funktionsweise:
●
Interrupt wird bei jedem Durchlauf (8/9/10 bit oder Erreichen von MAX) ausgelöst.
●
Ausgang OC1A / OC1B toggelt
jeweils beim Passieren des Wertes in OCR1A bzw. OCR1B.
●
Durch Änderung dieses Wertes kommt es zum Auf-/Abdimmen.
Funktionsweise:
●
Interrupt wird bei jedem Durchlauf (8/9/10 bit oder Erreichen von MAX) ausgelöst.
●
Ausgang OC1A / OC1B toggelt
jeweils beim Passieren des Wertes in OCR1A bzw. OCR1B.
●
Durch Änderung dieses Wertes
kommt es zum Auf-/Abdimmen.
void ioinit (void) {
/* Timer 1 is 10-bit PWM (8-bit PWM on some ATtinys). */
TCCR1A = (1<<WGM10)|(1<<WGM11)|(1<<COM1A1);
/*
* Start timer 1.
*
* NB: TCCR1A and TCCR1B could actually be the same register, so * take care to not clobber it.
*/
TCCR1B |= (1<<CS10);/*|(1<<CS11);*/
/* Set PWM value to 0. */
OCR1A = 0;
/* Enable OC1 as output. */
DDRB = _BV (DDB1);
/* Enable timer 1 overflow interrupt. */
TIMSK = _BV (TOIE1);
sei ();
}
void ioinit (void) {
/* Timer 1 is 10-bit PWM (8-bit PWM on some ATtinys). */
TCCR1A = (1<<WGM10)|(1<<WGM11)|(1<<COM1A1);
/*
* Start timer 1.
*
* NB: TCCR1A and TCCR1B could actually be the same register, so * take care to not clobber it.
*/
TCCR1B |= (1<<CS10);/*|(1<<CS11);*/
/* Set PWM value to 0. */
OCR1A = 0;
/* Enable OC1 as output. */
DDRB = _BV (DDB1);
/* Enable timer 1 overflow interrupt. */
TIMSK = _BV (TOIE1);
sei ();
}
int main (void) {
DDRB = _BV (DDB1);
PORTB=1<<PORTB1;
//delay_ms(500);
ioinit ();
/* loop forever, the interrupts are doing the rest
*/
for (;;) sleep_mode();
return (0);
}
int main (void) {
DDRB = _BV (DDB1);
PORTB=1<<PORTB1;
//delay_ms(500);
ioinit ();
/* loop forever, the interrupts are doing the rest
*/
for (;;) sleep_mode();
return (0);
}
Transistorschaltung zur
Lüftersteuerung
Power Mosfet
Schalten von Gleichspannung <48V
BTS555 schaltet Ströme über 300A bei geringen Verlusten (Wärmeentwicklung)
in
out Input direkt (Test)
Input über Transistor (µC)