PWM就是脉冲宽度调制,也就是占空比可变的脉冲波形。PWM控制技术就是对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。
51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。
一般可以使用两个定时器来实现,如果单片机是S51的话使用T0和T1,如果是S52的话建议使用T0和T2,因为定时器在工作方式2的八位重装模式下定时比较准确,这里我们使用T0和T1
用T0定时器完成PWM输出,脉宽固定,T1来决定高平的宽带来进行PWM调制具体程序如下:其中晶振12M,载波频率20KHZ,直接用P0.1来驱动直流电机,直流电机正极接电源正,单片机低平驱动,这样灌电流大。
基于51单片机输出pwm波程序#include 《 reg51.h 》
#include 《 intrins.h 》
sbit K1 =P1^4 ; //增加键
sbit K2 =P1^5 ; //减少键
sbit P00 =P0^1;
sbit BEEP =P3^7 ; //蜂鸣器
unsigned char PWM=0xe7; //赋初值
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/
void main()
{
P1=0xff;
TMOD=0x21 ;
TH0=0xff ; //50us延时常数
TL0=0xce ; //频率调节
TH1=PWM ; //脉宽调节
TL1=0 ;
EA=1;
ET0=1;
ET1=1;
TR0=1 ;
while(1)
{
do{
if(PWM!=0xff)
{PWM++ ;delayms(10);}
else Beep() ;
}
while(K1==0);
do{
if(PWM!=0xce)
{PWM-- ;delayms(10);}
else Beep() ;
}
while(K2==0);
}
}
void TImer0() interrupt 1
{
TR1=0 ;
TH0=0xff ;
TL0=0xce ;
TH1=PWM ;
TR1=1 ;
P00=0 ; //启动输出
}
void TImer1() interrupt 3
{
TR1=0 ;
P00=1 ; //结束输出
}
/*********************************************************/
//蜂鸣器子程序
/*********************************************************/
void Beep()
{
unsigned char i ;
for (i=0 ;i《100 ;i++)
{
delay(100) ;
BEEP=!BEEP ; //Beep取反
}
BEEP=1 ; //关闭蜂鸣器
delayms(100);
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delay(unsigned char t)
{
while(t--) ;
}
/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)
{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i 《 120 ; i++) ;
}
}
/*********************************************************/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)