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

PWM的單片機產(chǎn)生

作者:竹園電科技   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年03月18日   【字體:

     在上次說的直流電機調(diào)速的項目中,用了S52單片機的T2定時器產(chǎn)生PWM波信號,用于控制直流電機的轉(zhuǎn)速,雖然電機的平均速度與占空比不是嚴格的線性關(guān)系,但是在調(diào)節(jié)占空比可以明顯的看出電機轉(zhuǎn)速發(fā)生了改變,也算是滿足了課題的要求。下面復(fù)習(xí)一下PWM的知識吧。


 

        PWM—脈沖寬度調(diào)制(Pulse Width Modulation),是一種周期一定而高低電平可調(diào)的方波信號。當(dāng)輸出脈沖的頻率一定時,輸出脈沖的占空比越大,相對應(yīng)的輸出有效電壓越大。PWM可以應(yīng)用在許多方面,如電機調(diào)速、溫度控制、壓力控制等。


 


 

圖1 PWM波示意圖


 

 


 

        如上圖所示T1為脈沖寬度(就是導(dǎo)通時間),周期為T,則輸出電壓的平均值為U=VCC*T1/T=a*VCC,a是占空比,變化范圍為0≤a≤1。VCC為電源電壓。


 

        所以當(dāng)電源電壓不變的情況下,輸出電壓的平均值U取決于占空比a的大小,改變a的大小就可以改變輸出電壓的平均值,這就是PWM的工作原理。采用T2定時器產(chǎn)生PWM脈沖極其精確,誤差只在幾個us。


 

 


 

上PWM程序


 

// 文件名: T2PWM.c
// 功能:  用T2定時器產(chǎn)生PWM波,頻率實調(diào)1khz


 

// 說明:  單片機AT89S52,晶振12MHZ;
// 日期:   2011年4月6日


 

 


 

#include "reg52.h"


 

#define uint unsigned int


 

#define uchar unsigned char


 

 


 

sbit PWM = P1^1;


 

uchar pluse;  //占空比寄存器


 

 


 

void Timer2() interrupt 5


 

{


 

        static uchar time;


 

        TF2=0;


 

        if(++time==pluse) PWM=0; //達到脈寬設(shè)定值時,輸出PWM低電平


 

        else if(time==40) //PWM的頻率為1khz左右


 

{


 

         time=0;


 

         PWM=1;


 

}


 

 


 

}


 

 


 

 void InitTimer2(void) //初始化函數(shù)


 

{


 

        RCAP2H = 0xff ;//定時25us初值


 

        RCAP2L = 0x0e7;// 


 

         ET2=1;


 

         EA=1;


 

         TR2=1;


 

}


 

void main(void)


 

{  


 

        InitTimer2();


 

        while(1)


 

{


 

        pluse=20;


 

}


 

}


 

 


 

        我把PWM波的周期定為1ms,占空比分40級可調(diào)(即每級差2.5%),這樣定時器T2每25us產(chǎn)生一個定時中斷,每40次中斷后進入下一個PWM波的周期。在程序中,pluse=20,即占空比為50%,輸出的平均電壓為12*50%=6V。


 

        PWM產(chǎn)生的過程是這樣的,開始時PWM為1,當(dāng)計時到達pluse時(即到達了設(shè)定的脈寬寬度時間)PWM=0,隨后到達PWM周期時間后PWM=1,此時下一個PWM周期重新開始。為了便于理解,波形在定時中斷的產(chǎn)生時序示意圖如下所示。


 


 

 圖2 PWM產(chǎn)生時序圖


 

這是用示波器截下的PWM波形圖,波形還不錯。


 

  


 

 


 

關(guān)閉窗口

相關(guān)文章