控制/MCU
一、实验原理
1、舵机转动的原理(如下图所示)
1.根据上图我们可以得知,要想控制舵机转动指定的角度,必须要让它在一定的周期(20ms)中,获得一定时间(分别是0.5ms、1ms、1.5ms、2ms、2.5sm)的高电平,具体对应关系,上图中已给出。
2.现在我们要做的就是生成一个周期为20ms的PWM波,通过设定一个比较值(最大为20ms),用来控制我们的高电平时间,进而控制舵机转动指定角度。
2、生成PWM波的原理
1.用定时来实现,设定一个初始值,使其溢出时间为500us,再设定一个计数值,控制PWM波的周期,该值最大为40(500us*40=20 000us),如此便设定了周期为20ms;计数值会一直和比较值做比较,这样就可以实现高电平时间的控制。
2.通过上述三个值的调节,就可以实现舵机不同角度的转动。
二、关键代码
/*定时器0初始化函数*/
void Timer0_Init()
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x33; //设置定时初始值 晶振为11.0592M
TH0 = 0xFE; //设置定时初始值
ET0 = 1; //打开定时器0的中断
TF0 = 0; //清除溢出中断标志位
TR0 = 1; //定时器0开始计时
EA = 1; //开总中断
}
/*中断服务程序子函数*/
void Timer0() interrupt 1
{
TL0 = 0x33;
TH0 = 0xFE; //重新赋计数初值为500us
count++; //计次,每500us count+1
count%=40; //周期为20ms
if(count< PWM_count)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
}
注:若要实现不同角度的控制,只需要改变 PWM_count的值就好。
全部0条评论
快来发表一下你的评论吧 !