A8_PWM1 - impulzus szélesség moduláció

2014-08-21

 

Az impulzus szélesség modulációt (rövidítve PWM) általában teljesítmény szabályozásra használjuk. Egyszerűen arról van szó, hogy be/ki kapcsolgatjuk az áramot és ennek arányával tudjuk szabályozni a terhelésre jutó teljesítményt. A kapcsoló üzemű szabályozás nagy előnye az analóggal szemben a sokkal jobb hatásfok. Míg analóg esetben a teljesítményt megosszuk a terhelés és a szabályozó elem között, addig a kapcsolón normálisan nem esik jelentős teljesítmény. Minél nagyobb frekvenciát alkalmazunk, annál kisebb járulékos alkatrészek szükségesek (kondenzátor, tekercs). Viszont nagyobb frekvenciáknál fellépnek olyan hatások, amelyek miatt nem célszerű annak határtalan növelése.

Illusztrálásképpen néhány telefonos fotó az oszcilloszkópom képernyőjéről.





ATmega8 uC esetében három számláló áll rendelkezésünkre: T0, T1 és T2. T0 és T2 8 bites, T1 16 bites. T1 és T2 rendelkezik olyan kiegészítő regiszterekkel, amelyek szükségesek a PWM üzemmódhoz (OCR1A, OCR1B, OCR2). A uC leírása alapján mindenféle furmányos beállítást lehet elkövetni. Alapesetben a kiválasztott számláló 0-255 között számol. Ha értéke az OCRx regiszterét meghaladja, a hozzá tartozó OCx lábat 1-be állítja, majd 0-nál visszaállítja 0-ba. Tehát OCRx regiszterbe írt kisebb értéknél hosszabb impulzusokat, nagyobb értéknél rövidebbeket kapunk. Ahhoz, hogy ez működjön, a kiválasztott OCx lábat ki kell jelöljük kimenetnek, és a vezérlését a számláló PWM logikájára kell kapcsoljuk.

Az LCDT01-nél alkalmazott kapcsolást használtam, ezért külön rajzot nem készítettem (az áramkör nagy része most nem is érdekes). Ebben az esetben OC1A kimenetet választottam, erre 220R-on keresztül egy LED-et kötöttem a tápfesz felé. A T1 számlálót 8 bit-es PWM üzemmódba állítottam. Órajelnek a processzor órajelének (jelen esetben 4MHz) 1/8-át választottam, ez közel 2kHz-es ismétlődési frekvenciát eredményez (4MHz/8/256). OC1A lábat kijelöltem PWM kimenetnek. A program fő ciklusában OCR1A regiszter értékét 20msec-ként 1..254..1..254.. között ciklikusan állítom. A LED fénye ennek megfelelően erősödik és halványul.

/*******************************************************************************
*   Author       -  Kiraly Tibor
*                   http://www.tkiraaly.hu
*   Date         -  2014.08.21.
*   Chip         -  Atmel ATmega8
*   Compiler     -  avr-gcc (WinAVR)
*
*   PWM1 - LED fenye felerosodik, elhalvanyul...
*   
********************************************************************************
*   PonyProg Configuration and Security Bits (bepipalva):
*
*   CKSEL3, CKSEL2, CKSEL1, CKSEL0
*   P       P       -       -       0011  Calibrated Internal RC Oscillator 4MHz
*
*   Calibrated Internal RC Oscillator
*   SUT1  SUT0
*   -     P         Slowly rising power
*   
********************************************************************************
*
*    Programozo fej:
*     1 RST            - AVR NRES - 1
*     2 X
*     3 SCK            - AVR SCK  - 19
*     4 MISO           - AVR MISO - 18
*     5 MOSI           - AVR MOSI - 17
*     6 GND
*
*    Egyeb:
*     LED              - AVR OC1A - 15
*
*******************************************************************************/

#define F_CPU                _4MHZ




#include "tkiraaly_atmega8.h"
#include <util/delay.h>




int main( void)
{
   U8 i= 0;
   T1_PWM;
   T1_FP_8; 
   OC1A_ENABLE;
   for(;;)
   {
      while( ++i < 255)
      {
         OCR1A= i;
         _delay_ms( 20);
      }
      while( --i > 0)
      {
         OCR1A= i;
         _delay_ms( 20);
      }
   }
   return 0;
}

A "tkiraaly_atmega8.h"-t és a "tkiraaly_attiny2313.h"-t jelentősen átdolgoztam. Egyrészt a fejrészénél kiegészítettem olyan információkkal, amelyek segítik a tervezést és a PonyProg letöltő program beállítását. Másrészt főleg a számlálók kezelését alapvetően átgondoltam, megváltoztattam. A korábbi programjaim nem fognak ezekkel a header file-kkal lefordulni, viszont így egyszerűbb a két uC programozása. A számlálóknak csak az érdekesebb üzemmódjaihoz készítettem makrókat.

Itt a vége, fuss el véle, legyetek az én vendégeim, innen letölthetitek a hozzávalókat összecsomagolva.