新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 利用51单片机PWM信号进行舵机控制

利用51单片机PWM信号进行舵机控制

作者:时间:2011-11-21来源:网络收藏

为保证软件在定时中断里采集其他信号,并且使发生的程序不影响中断程序的运行(如果这些程序所占用时间过长,有可能会发生中断程序还未结束,下次中断又到来的后果),所以需要将采集信号的函数放在长定时中断过程中执行,也就是说每经过两次中断执行一次这些程序,执行的周期还是20ms。软件流程如图2所示。

利用51单片机PWM信号进行舵机控制

如图2 产生的软件流程

如果系统中需要控制几个舵机的准确转动,可以用和计数器进行脉冲计数产生

脉冲计数可以利用51的内部计数器来实现,但是从软件系统的稳定性和程序结构的合理性看,宜使用外部的计数器,还可以提高CPU的工作效率。实验后从精度上考虑,对于FUTABA系列的接收机,当采用1MHz的外部晶振时,其控制电压幅值的变化为0.6mV,而且不会出现误差积累,可以满足控制舵机的要求。最后考虑数字系统的离散误差,经估算误差的范围在±0.3%内,所以采用和8253、8254这样的计数器芯片的PWM信号产生电路是可靠的。图3是硬件连接图。

利用51单片机PWM信号进行舵机控制
图3 PWA信号的计数和输出电路

基于8253产生PWM信号的程序主要包括三方面内容:一是定义8253寄存器的地址,二是控制字的写入,三是数据的写入。软件流程如图4所示,具体代码如下。
//关键程序及注释:
//定时器T0中断,向8253发送控制字和数据
void T0Int() interrupt 1
{
TH0 = 0xB1;
TL0 = 0xE0; //20ms的时钟基准
//先写入控制字,再写入计数值
SERVO0 = 0x30; //选择计数器0,写入控制字
PWM0 = BUF0L; //先写低,后写高
PWM0 = BUF0H;
SERVO1 = 0x70; //选择计数器1,写入控制字
PWM1 = BUF1L;
PWM1 = BUF1H;
SERVO2 = 0xB0; //选择计数器2,写入控制字
PWM2 = BUF2L;
PWM2 = BUF2H;
}

pwm相关文章:pwm是什么


51单片机相关文章:51单片机教程


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理


pwm相关文章:pwm原理


尘埃粒子计数器相关文章:尘埃粒子计数器原理
晶振相关文章:晶振原理


评论


相关推荐

技术专区

关闭