欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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


 

  


 

 


 

關閉窗口

相關文章