占空比的说明
你可以理解为高低电平占总周期的百分比。也就是指电路被接通的时间占整个电路工作周期的百分比。
设计思路
我们先定义一个初始的占空比,然后当加速引脚信号发生变化时,占空比的值将会变大,反之减小。通过改变高电平的比例,调节电机的输出,以此达到速度的改变
定时器的说明
代码
在这里插入代码片
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar time;
double count=50; //定义占空比,并初始占空比为50%
sbit PWM=P2^0; //P2^0口输出PWM
sbit key_add=P3^4; //电机加速的按键 的I/O口
sbit key_dec=P3^5; //电机减速的按键 的I/O口
void delayxms(uint z); //延时
void dianji_add(); //电机加速,即增加占空比
void dianji_dec(); //电机减速,即减少占空比
void chenglu_init(); //定时器0初始化
void main()
{
chenglu_init();
delayxms(5);
while(1)
{
dianji_add();
dianji_dec();
}
}
void delayxms(uint z) //延时xms程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void dianji_add() //电机加速
{
if(key_add==0)
{
delayxms(2); //此处时间不能太长,否者会的中断产生冲突
if(key_add==0)
{
count+=5; //每按一次加速按键占空比加5
if(count>=80) //限定占空比上限
{
count=80;
}
}
while(!key_add);
}
}
void dianji_dec()//电机减速
{
if(key_dec==0)
{
delayxms(2);
if(key_dec==0)
{
count-=5; //每按一次减速按键占空比减5
if(count<=20) //限定占空比下限
{
count=20;
}
}
while(!key_dec);
}
}
void chenglu_init()
{
TMOD=0x01; //定时器0工作于方式1
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
ET0=1;
EA=1;
}
void chenglu_int() interrupt 1
{
TR0=0; //设置定时器初值期间,关闭定时器
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
time++;
if(time<count) //count为占空比
{
PWM=1; //输出高电平
}
else
PWM=0;
if(time>=100)
{
time=0;
}
}```