一、实验原理
PWM:即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效的获得所需要的模拟量,常用于电机调速,灯光亮度调节等。
该实验和之前LED呼吸灯(定时器实现),实验原理本质上是相同的,可以结合之前的文章进行理解学习,这里就不再赘述了。(下图引用LED呼吸灯实验)
二、关键代码
void Timer0_Routine() interrupt 1
{
TL0 = 0x66;
TH0 = 0xFF;
Counter++;
Counter%=100; //计数值变化范围限制到0~99
if(Counter< Compare) //计数值小于比较值
{
Motor=1; //输出1 马达转动 (ULN2003芯片是一个7路反向器电路,即当输入端为高电平时ULN2003输出端为低电平)
}
else //计数值大于比较值
{
Motor=0; //输出0 马达停止
}
sbit Motor=P1^0;
unsigned char Counter,Compare; //计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;
//主函数
void main()
{
Timer0_Init();
while(1)
{
KeyNum=Key();
if(KeyNum==1)
{
Speed++;
Speed%=4;
if(Speed==0){Compare=0;} //改变比较值,改变PWM占空比
if(Speed==1){Compare=60;}
if(Speed==2){Compare=75;}
if(Speed==3){Compare=100;}
}
}
}
通过定时器来实现一定周期的PWM波,再通过改变比较值Compare来改变高电平的占空比,进而改变电机的转速。