專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AVR 定時器快速PWM模式使用

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2013年02月01日   【字體:

PWM很常用,AVR自帶內(nèi)部PWM功能,分為快速PWM模式和相位修正PWM模式。

我們這里選擇方式15 ,由OCR1A保存上限值,由OCR1B保存匹配值,所以輸出管腳 OCR1A不能輸PWM,只能有OCR1B輸出PWM信號。

如果用方式 5,6,7模式 上限值是固定的,所以我們就可以用OCR1A和OCR1B保存匹配值

OCR1A和OCR1B都可以輸出PWM信號。

                                                           快速PWM時序圖

                                 根據(jù)此公式計(jì)算出OCR1A和OCR1B的數(shù)值

OCR1A:
1,11059200 / 100 /64 = 1728                         // 11.0592MHz晶振系數(shù) / 100Hz頻率 / 64分頻
2,1728 - 1 = 1727                                        //得到上限值,賦值給OCR1A

OCR1B:
1,1727 / 5   =    345.4    ( 取值為345 )          //得到匹配值,設(shè)定為2ms,賦值給OCR1B

                  100Hz表示每秒震動100次,所以周期是1s / 100 = 0.01s 即10ms
                  100Hz周期是10ms,要定時2ms即用 1727 / 5 =345.4 取值為345
                  所以也可以知道產(chǎn)生的是占空比為20%的PWM信號

測試代碼:

#include <iom16.h>

void FastPWM(void)
{
DDRD_Bit4 = 1; //    OC1B 管腳設(shè)置為輸出
DDRD_Bit5 = 1; //    OC1A 管腳設(shè)置為輸出

TCCR1A=(0<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(0<<COM1B0)|(1<<WGM11)|(1<<WGM10);
                 // OC1A 作為上限值 電平取反   OC1B 作為比較值 比較匹配時清零,到達(dá)上限值是置1
                 // TCCR1A ==> COM1A1 , COM1A0 , COM1B1 , COM1B0 , FOC1A , FOC1B , WGM11 , WGM10
                 //               0        1        1        0       無關(guān)    無關(guān)     1       1
TCCR1B=(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);            
                // 波形產(chǎn)生模式15 , 64分頻
                 // TCCR1B ==> ICNC1 , ICES1 , - , WGM13 , WGM12 , CS12 , CS11 , CS10
                 //             無關(guān)    無關(guān)          1       1      0      1      1

OCR1A=1727;   // 晶振頻率 11.0592MHz , 設(shè)定 100Hz PWM信號 , 64分頻
OCR1B=345;     // 為2ms的高電平持續(xù)時間
}

void main(void)
{
FastPWM();
}

關(guān)閉窗口

相關(guān)文章