標(biāo)題: 51單片機(jī)PWM調(diào)寬原理 [打印本頁(yè)]

作者: 朝朝1    時(shí)間: 2021-2-24 22:55
標(biāo)題: 51單片機(jī)PWM調(diào)寬原理
PWM脈寬調(diào)制,是靠改變脈沖寬度來(lái)控制輸出電壓,通過(guò)改變周期來(lái)控制其輸出頻率

什么是脈沖: 51 單片機(jī)IO口輸出一個(gè)脈沖,是指I0口發(fā)生-次高 低電平的變化


什么是占空比:是指一個(gè)脈沖時(shí)間內(nèi),高電平的時(shí)間與整個(gè)脈沖持續(xù)時(shí)間的比值。
占空比 = t / T


什么是頻率:物質(zhì)在1s內(nèi)完成周期性變化的次數(shù)叫做頻率,常用f表示。公式: f=1/T

實(shí)現(xiàn)輸出PWM信號(hào)方法:硬件實(shí)現(xiàn):選擇帶PWM功能的單片機(jī)如STC12系列,內(nèi)部有PWM寄存器,通過(guò)程序配置這些寄存器,指定IO口就會(huì)輸出PWM信號(hào)優(yōu)點(diǎn)不占用CPU時(shí)間,缺點(diǎn)需掌握多個(gè)寄存器的配置。

軟件實(shí)現(xiàn):使用51單片機(jī)定時(shí)器與中斷實(shí)現(xiàn)。優(yōu)點(diǎn)編程簡(jiǎn)單易于入門(mén)學(xué)習(xí),缺點(diǎn)占用CPU時(shí)間。

使用定時(shí)器中斷實(shí)現(xiàn)PWM電機(jī)調(diào)速

參閱STC 89C52芯片使用手冊(cè)定時(shí)器與中斷章節(jié)內(nèi)容頻率是根據(jù)周期決定的,而周期則是定時(shí)器溢出時(shí)間和占空比決定的。

周期=定時(shí)器溢出時(shí)間X占空比頻率公式: f=1/T

我們通過(guò)編程設(shè)置定時(shí)器溢出時(shí)間和周期來(lái)實(shí)現(xiàn)對(duì)PWM的頻率設(shè)定,再通過(guò)軟件設(shè)置驅(qū)動(dòng)電機(jī)的高電平的占空比來(lái)實(shí)現(xiàn)調(diào)速。


課程實(shí)驗(yàn)-1使用PWM實(shí)現(xiàn)直流電機(jī)調(diào)速多級(jí)調(diào)速

1.以約100HZ的平率,占空比最大值256,使用定時(shí)器0產(chǎn)生PWM信號(hào),分別調(diào)節(jié)小車(chē)左右兩輪的前進(jìn)速度。

占空比最大值為256 意思是一個(gè)周期分成256份

課程實(shí)驗(yàn)-2.使用PWM實(shí)現(xiàn)L ED燈亮度調(diào)節(jié)

1.以約2880HZ的平率,占空比最大值40, 使用定時(shí)器0產(chǎn)生PWM信號(hào),調(diào)節(jié)開(kāi)發(fā)板上P1口.上所有LED燈的亮度。按S2控制LED燈變暗,按S3控制LED燈變亮。

                                                          實(shí)驗(yàn)二

#include<reg52.h>
unsigned char  hz=2880; //頻率是一百
unsigned char T0RH,T0RL,pwm_led_va=0;
unsigned char pwm_t;
void count(unsigned char zkb)
{
  unsigned long tmp;
  tmp=1/hz;//算出每個(gè)周期的時(shí)間 這里其實(shí)就是1除以100赫茲,赫茲就是hz
  tmp=tmp/zkb;//定時(shí)器溢出時(shí)間 公式就是周期=定時(shí)器溢出時(shí)間*占空比
  tmp=tmp*1000000;//轉(zhuǎn)化成微妙
  tmp=tmp*1000/1085;//其實(shí)相當(dāng)于微妙除以機(jī)器周期,
  T0RH=(unsigned char)(tmp>>8);
  T0RL=(unsigned char) (tmp);
}
void main()
{
TMOD=0X02;        //設(shè)置定時(shí)器0,八位自動(dòng)重裝模式
TH0=T0RH;        //賦初值
TH0=T0RL;
TR0=1;
ET0=1;
EA=1;
while(1)
{
   count(40);

}
}
void timer0() interrupt 1//定時(shí)器0中斷方式1
{
pwm_t++;
if(pwm_t==40)
   {
           pwm_t=0;
           P1=0xff;
   }
      if(pwm_led_va==pwm_t)
          {
           P1=0;
          }


}







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1