<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> 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波形圖,波形還不錯。


         

          


         

         


         

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮