• 專注電子技術學習與研究
    當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

    PWM的單片機產生

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

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


     

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


     


     

    圖1 PWM波示意圖


     

     


     

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


     

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


     

     


     

    上PWM程序


     

    // 文件名: T2PWM.c
    // 功能:  用T2定時器產生PWM波,頻率實調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; //達到脈寬設定值時,輸出PWM低電平


     

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


     

    {


     

             time=0;


     

             PWM=1;


     

    }


     

     


     

    }


     

     


     

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


     

    {


     

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


     

            RCAP2L = 0x0e7;// 


     

             ET2=1;


     

             EA=1;


     

             TR2=1;


     

    }


     

    void main(void)


     

    {  


     

            InitTimer2();


     

            while(1)


     

    {


     

            pluse=20;


     

    }


     

    }


     

     


     

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


     

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


     


     

     圖2 PWM產生時序圖


     

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


     

      


     

     


     

    關閉窗口

    相關文章

    亚洲一区二区制服在线|在绩专区欧美自拍日韩|青春娱乐网97超碰人人射|在线观看国产网址你懂的