PWM脈寬調(diào)制,是靠改變脈沖寬度來控制輸出電壓,通過改變周期來控制其輸出頻率
什么是脈沖: 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信號方法:硬件實(shí)現(xiàn):選擇帶PWM功能的單片機(jī)如STC12系列,內(nèi)部有PWM寄存器,通過程序配置這些寄存器,指定IO口就會輸出PWM信號優(yōu)點(diǎn)不占用CPU時(shí)間,缺點(diǎn)需掌握多個(gè)寄存器的配置。
軟件實(shí)現(xiàn):使用51單片機(jī)定時(shí)器與中斷實(shí)現(xiàn)。優(yōu)點(diǎn)編程簡單易于入門學(xué)習(xí),缺點(diǎn)占用CPU時(shí)間。
使用定時(shí)器中斷實(shí)現(xiàn)PWM電機(jī)調(diào)速
參閱STC 89C52芯片使用手冊定時(shí)器與中斷章節(jié)內(nèi)容頻率是根據(jù)周期決定的,而周期則是定時(shí)器溢出時(shí)間和占空比決定的。
周期=定時(shí)器溢出時(shí)間X占空比頻率公式: f=1/T
我們通過編程設(shè)置定時(shí)器溢出時(shí)間和周期來實(shí)現(xiàn)對PWM的頻率設(shè)定,再通過軟件設(shè)置驅(qū)動電機(jī)的高電平的占空比來實(shí)現(xiàn)調(diào)速。
課程實(shí)驗(yàn)-1使用PWM實(shí)現(xiàn)直流電機(jī)調(diào)速多級調(diào)速
1.以約100HZ的平率,占空比最大值256,使用定時(shí)器0產(chǎn)生PWM信號,分別調(diào)節(jié)小車左右兩輪的前進(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信號,調(diào)節(jié)開發(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,八位自動重裝模式
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;
}
}
|