基于STC89C52单片机的体操机器人系统设计
方法一:使用一个定时器加软件延时实现。
使用一个定时器定时20ms的舵机周期。每一路舵机所需的0.5ms至2.5ms的正脉宽则不用定时器来实现,而是用延时程序来实现。给每一路舵机定义一个无符号整型数来表征舵机不同的转角。每一次进20ms中断时先将所有端口置“1”,然后开始计数,当计数值与舵机的给定值相等时就把对应的端口输出置“0”。这样改变给定值就能改变PWM波的占空比,从而控制舵机的转动。这种方法只用到了一个定时器,节约资源,用整型数代替舵机不同的转角,便于程序的编写。
void timer0() interrupt 1 using 1 //20ms到一次中断,定时中断T0
{
TH0=0x70;
TL0=0x00;
P0=0xFF;
P1=0xFF;
PWM();
}
void PWM()
{
uint counter = 0;
while(counter 130)
{
if(counter == num[0])
P10 = 0;
if(counter == num[1])
P11 = 0;
......
if(counter == num[9])
P07 = 0;
counter++;
}
}
方法二:使用两个定时器实现。
上一种方法的优点是程序简单,占用资源少。但是软件延时的时间与单片机的晶振频率和循环程序中语句的条数有关,即同一个数值代表的舵机转角并不是确定的。第二种方法用一个定时器定时20ms周期,另一个定时器定时100us(可以更改),来代替循环定时程序。从而增强了程序的通用性。
void timer1()interrupt3 using 2
{
static count;
count = count%25;
Count++;
if(count == num[0])
P00 = 0;
......
if(counter == num[9])
P07 = 0;
}
舵机控制程序采用模块化设计方式,增强了程序的可读性和可移植性,程序流程图如图6所示。
5 结束语
在本文的体操机器人系统设计中,使用了STC89C52单片机小系统。该小系统具有通用性强,价格低廉,工作稳定的特点。通过编写改进的脉宽差法控制程序可对10路舵机进行控制,在2011年兰州举行的中国机器人大赛暨Robocup公开赛中,该型机器人发挥稳定,获得了体操机器人组全国一等奖。
参考文献:
[1] 王志良,竞赛机器人制作技术[M].北京:机械工业出版社,2007.5.
[2] 王立权,机器人创新设计与制作[M].北京:清华大学出版社,2007.6.
[3] 张涛,机器人引论[M].北京:机械工业出版社,2010.4
[4] 熊有伦,机器人技术基础[M].武汉:华中理工大学出版社,1996.8.
[5] 刘广瑞,机器人创新制作[M].西安:西北工业大学出版社,2007.2.
评论