Použití pulsně-šířkové modulace PWM
Pulsně-šířková modulace PWM (pulse width modulation) umožňuje plynulou změnu výkonu na zátěži, otáček DC motoru nebo svitu LED diod při malých ztrátách na výkonovém spínacím prvku. Principem je změna šířky spínacího impulsu při konstantní periodě (frekvenci) budícího signálu. Výstup mikropočítače, který nabývá jen úrovně 0V nebo 5V, tak může plynule řídit střední hodnotu výstupního napětí. Poměr šířky pulsu k šířce mezery se nazývá střída.
Mikropočítače ATmega umožňují generovat PWM signál pomocí vnitřního čítače/časovače, který je potřebné nastavit do režimu generování. Střída generovaného signálu je nastavena hodnotami v registru OCR1, kam je potřebné je zapsat. Výstupy s PWM signálem jsou u ATmegy8 pouze tři, a to na PB1, PB2 a PB3.
Použití PWM signálu a parametrizaci časovače Timer1 si ukážeme na jednoduchém příkladu, kdy přes tranzistor zapojený na výstup mikropočítače PB1 budeme měnit otáčky malého elektromotoru. Elektromotor je v našem pokusu napájen přímo z napětí 5V, pro jiné napájecí napětí motoru bychom museli jeho horní přívod s katodou ochranné diody připojit na kladný pól druhého zdroje a mínusové póly obou zdrojů propojit.
Obr. 1: Schéma zapojení úlohy
Obr. 2: Realizace úlohy
’-----------------------------------------------------------------------------------------------
’ PROGRAM PWM-MOTOR-1.bas Použití pulsně-šířkové modulace pro řízení otáčem motoru.
’ Program, kterým podle stisku tlačítka řídíme velikost otáček motoru.
’ Použitá je osmibitová pulsně-šířková modulace se změnou střídy výstupního signálu.
’----------------------------------------------------------------------------------------------
$regfile = “m8def.dat” ‘Soubor s deklaracemi
$crystal = 12000000 ‘Kmitočet krystalu v Hz
Config Portb.0 = Input ‘Definování vstupu pro tlačítko
Portb.0 = 1 ‘Zapnutí pull-up rezistoru
Defbyte B ‘Definování proměnné B
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1024 , Compare A Pwm = Clear Up
‘Nastavení časovače pro PWM, viz níže
’----------------------------- HLAVNI PROGRAM --------------------------------------
Do
If Pinb.0 = 0 Then ‘Je-li tlačítko stlačeno, má výstupní signál na PB1
B = 60 'střídu 60/196 - motor se točí rychleji.
Else 'Není-li tlačítko stlačeno, má výstupní signál na PB1
B = 20 'střídu 20/236 - motor se točí pomalu.
End If
Pwm1a = B
Loop
’--------------------------- KONEC HLAVNIHO PROGRAMU ---------------------------
End
‘Řízení střední hodnoty výstupního signálu pomocí pulsně-šířkové modulace
‘se provádí změnou proměnné Pwm1a, kdy se mění poměr impuls/mezera.
‘Maximální hodnota Pwm1a je 255.
‘Při Pwma1 = 1 je poměr 1/255
‘Při Pwma1 = 2 je poměr 2/254
‘Při Pwma1 = 10 je poměr 10/246 atd
‘Nastavení časovače Timer1 pro PWM:
‘Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Up
‘Pwm = 8 - osmibitová PWM (Pwm1a = 1 až 255)
‘Prescale = 1 - opak.kmit = 23437 Hz (při oscilátoru 12 MHz)
‘Prescale = 8 - opak.kmit = 2930 Hz (při oscilátoru 12 MHz)
‘Prescale = 1024 - opak.kmit = 23 Hz (při oscilátoru 12 MHz)
‘Compare A Pwm = Clear Down - polarita výstupních impulsů je opačná než při Clear Up.
Časové průběhy výstupního signálu z mikropočítače, který přes spínací tranzistor řídí otáčky motoru, jsou na následujících obrázcích. Další dva obrázky pak zachycují změnu průběhů při nastavení parametru na Clear Down. Pokud nemáme zrovna po ruce vhodný elektromotorek, můžeme si pulsně-šířkovou modulaci vyzkoušet na obyčejné LED, kterou připojíme jako při našich prvních pokusech přímo na výstup mikropočítače. Se změnou střídy výstupního signálu a parametru Compare se bude měnit svit LEDky.
Obr. 3: Změna šířky výstupního impulsu při nastavení Compare A Pwm=Clear Up
Obr. 4: Změna šířky výstupního impulsu při nastavení Compare A Pwm=Clear Up
Obr. 5: Změna šířky výstupního impulsu při nastavení Compare A Pwm=Clear Down
Obr. 6: Změna šířky výstupního impulsu při nastavení Compare A Pwm=Clear Down