Pulse Width Modulation脈沖寬度調(diào)制,簡稱PWM。
PWM(脈沖寬度調(diào)制)對模擬信號電平進行數(shù)字編碼的方法,計算機只能輸出0或5V的數(shù)字電壓值而不能輸出模擬電壓,而我們?nèi)绻氆@得一個模擬電壓值,則需通過使用高分辨率計數(shù)器,改變方波的占空比來對一個模擬信號的電平進行編碼。
仍輸出數(shù)字信號,因為滿幅值的直流供電只有5V(1)和0V(0)兩種。電壓是以一種連接(1)或斷開(0)的重復(fù)脈沖序列被夾到模擬負(fù)載上去的,連接即是直流供電輸出,斷開即是直流供電斷開。通過對連接和斷開時間的控制,只要帶寬足夠,可以輸出任意不大于最大電壓值的模擬電壓。
輸出電壓=(接通時間/脈沖時間)*最大電壓值
12
	
作者用的單片機是STC89C52,其內(nèi)部有3個16位Timer,分別為T/C0,T/C1,T/C2,通過配置相關(guān)寄存器即可實現(xiàn)Timer的功能控制。
控制PWM需要用到定時器來生成不同占空比的波形,采用定時器中斷的方式。
相關(guān)寄存器:
1.IE寄存器
	
2. TCON寄存器
	
3. TMOD寄存器
控制Timer0/1的工作方式
	
	
	TL14. Timer0/1計數(shù)寄存器
TL0
TH0
TH1
當(dāng)定時開啟后,TL0(TL1)自動跟隨機器周期加一。當(dāng)TL0(TL1)滿了后,自動清零同時向TH0(TH1)進一位,不需要手動操作.
而當(dāng)TL0(TL1)和TH0(TH1)都滿了以后,此時如果定時中斷和總中斷都已經(jīng)打開,那么就會發(fā)生溢出中斷,同時這兩個寄存器清零
三、運用PWM完成呼吸燈
1. 硬件電路
	
2. 軟件驅(qū)動
unsigned char PWM_COUNT; //計數(shù)
unsigned int HUXI_COUNT; //占空比更新時間
unsigned char PWM_VLAUE; //占空比比對值
bit direc_flag; //占空比更新方向
void timer0_init()
{
TMOD=0x02; //模式設(shè)置,00010000,定時器0,工作于模式2(M1=1,M0=0)
TH0=0x47; //定時器溢出值設(shè)置,每隔200us發(fā)起一次中斷。
TL0=0X47;
TR0=1; //定時器0開始計時
ET0=1; //開定時器0中斷
EA=1; //開總中斷
PWM_COUNT =0;
}
void time0() interrupt 1
{
PWM_COUNT++;
HUXI_COUNT++;
if(PWM_COUNT == PWM_VLAUE) //判斷是否到了點亮LED的時候
LED = 1; //點亮LED
if(PWM_COUNT == 10) //當(dāng)前周期結(jié)束
{
LED = 0; //熄滅LED
PWM_COUNT = 0; //重新計時
}
if((HUXI_COUNT == 600) && (direc_flag == 0))
{ //占空比增加10%
HUXI_COUNT = 0;
PWM_VLAUE++;
if(PWM_VLAUE == 9) //占空比更改方向
direc_flag = 1;
}
if((HUXI_COUNT == 600) && (direc_flag == 1))
{ //占空比減少10%
HUXI_COUNT = 0;
PWM_VLAUE--;
if(PWM_VLAUE == 1) //占空比更改方向
direc_flag = 0;
}
}
void main()
{
HUXI_COUNT = 0;
PWM_COUNT = 0;
PWM_VLAUE = 5;
direc_flag = 0;
LED = 1; //默認(rèn)LED熄滅
timer0_init(); //定時器0初始化
while(1);
}
- 
                                PWM
                                +關(guān)注
關(guān)注
116文章
5826瀏覽量
223222 - 
                                51單片機
                                +關(guān)注
關(guān)注
277文章
5713瀏覽量
131629 
原文標(biāo)題:51單片機PWM的控制(呼吸燈)
文章出處:【微信號:eet-china,微信公眾號:電子工程專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
51單片機呼吸燈程序設(shè)計
基于51單片機的呼吸燈怎樣設(shè)計
使用51單片機實現(xiàn)的呼吸燈工程文件免費下載
    
單片機(通過PWM調(diào)制模擬呼吸燈)源代碼
    
51單片機基于定時器的精準(zhǔn)呼吸燈
    
STC89C52_51單片機_例程3_PWM_呼吸燈
    
單片機呼吸燈的實現(xiàn)(可移植性強)
    
          
        
        
51單片機的Timer,運用PWM完成呼吸燈
                
 
    
           
            
            
                
            
評論