舵机在机器人技术中的应用及编程方法
作者:秦萍来源:原创日期:2013-12-07人气:2060
1 舵机结构及工作原理
舵机主要由舵盘、减速齿轮组、位置反馈电位器、直流电机、控制电路板组成,其工作原理(图1所示):控制电路接收信号源的控制脉冲,并驱动电机转动;齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或保持在目标角度。
2 舵机的控制方法
舵机的控制信号为周期为20ms的脉宽调制信号,该脉冲的高电平部分一般为0.5ms~2.5ms,对应的舵机转动角度为0~180°,理想情况下脉冲高电平宽度与舵机转动角度成正比。即舵机转动角度=180°×(脉冲高电平宽度-0.5)/2。可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,整个系统工作可靠。单片机控制系统对舵机输出转角的控制,分为两个步骤。第一步是产生基本的周期为20ms的PWM信号,第二步是PWM信号脉宽的确定,调整占空比。控制系统中实现一个舵机的控制,通常采用使用单片机的一个定时器来实现。根据PWM信号占空比,分别设定定时器中断的初值,将20ms分为两次中断执行,一次短时间中断和一次较长时间中断,控制输出信号的电平变换,产生要求的PWM信号。
3 应用举例及编程方法
我们采用宏晶STC12C5A60S2单片机,它是宏晶科技生产的高速、低功耗、超强抗干扰的新一代单片机,指令代码完全兼容传统8051,但速度快近十倍。制作的自动投球机器人,机器人每次携带6个小球,通过单片机控制两个舵机制作两个挡板,挡板配合动作,将小球投到指定位置。两个挡板初始位置为:下面的挡板1在“挡”位置、上面的挡板2在“缩”位置,开始向投球机器人装入小球。启动投球机器人后,挡板2运动到“挡”位置,按照规定的路线循迹运动,运动到指定位置后,投球机器人开始投球。具体动作为:挡板1“缩”,投下一个小球,然后挡板1“挡”,挡板2“缩”,第二个小球落到最下面的位置,然后挡板2“挡”,等待投球;依次类推,投入六个小球后,工作结束。
单片机晶振频率为12MHz,P36输出舵机1的PWM控制信号,P37作为输出舵机2的PWM控制信号,分别采用16位定时器T0、T1产生两路PWM信号P36、P37。
以舵机1控制为例,通过设定定时器T0工作在定时模式,定时时间到产生中断来产生PWM信号。特殊功能寄存器AUXR中的T0x12、T1x12位分别设定T0、T1对系统时钟进行12分频还是不分频计数定时,我们设定T0x12、T1x12为“0”,选择对系统时钟12分频计数定时,则定时器计一个数时间为1us,产生2ms时间需计数2000个。初始时舵机1带动挡板1运动到“挡”位置,根据挡板运动位置(舵机转动角度)确定脉宽的初始值a,即a=(2000/180)*舵机转动角度+500。然后设定定时器T0的初值TH0=-(65536-a)/256、TL0=-(65536-a)%256;并置输出P36为高电平,启动定时器T0,T0开始定时。当定时器计数溢出时,触发计数器溢出中断函数void timer0() interrupt 1 using 1,在子函数中,改变输出P36为反相(此时变为低电平),计算ci =20000-a,并重新设定定时器T0的初值,直到定时器再次产生溢出中断,重复上一过程。
参考程序(部分):
#define uchar unsigned char
#define uint unsigned int
sbit dj1=P3^6;
sbit dj2=P3^7;
uint a,bi,ci,d;
void timer0( ) interrupt 1 using 1
{
dj1=!dj1;
ci=20000-a;
TH0=(65536-ci)/256;
TL0=(65536-ci)%256;
TF0=0;
}
void djdang1()/*挡板1挡位置函数*/
{
dj1=1;
a=(2000/180)*130+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void djsuo1()/*挡板1缩位置函数*/
{
dj1=1;
a=(2000/180)*70+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void S_T() /*程序初始化*/
{
TMOD=0X11;
P3M1=0x00;
P3M0=0xff;
AUXR=0X00;
start_=1;
while(start_==1) //等待按键
{;}
}
void main() /*主函数*/
{
S_T();
djdang1();
djsuo2();
delay_ms(10000); /装入小球
djdang2();
delay_ms(900);
……… ;//运行到指定位置
djsuo1();
delay_ms(800);
djdang1();
delay_ms(850);
djsuo2();
delay_ms(800);
djdang2();//投入一个小球
……………
}
舵机主要由舵盘、减速齿轮组、位置反馈电位器、直流电机、控制电路板组成,其工作原理(图1所示):控制电路接收信号源的控制脉冲,并驱动电机转动;齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或保持在目标角度。
2 舵机的控制方法
舵机的控制信号为周期为20ms的脉宽调制信号,该脉冲的高电平部分一般为0.5ms~2.5ms,对应的舵机转动角度为0~180°,理想情况下脉冲高电平宽度与舵机转动角度成正比。即舵机转动角度=180°×(脉冲高电平宽度-0.5)/2。可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将计算结果转化为PWM信号输出到舵机,由于单片机系统是一个数字系统,整个系统工作可靠。单片机控制系统对舵机输出转角的控制,分为两个步骤。第一步是产生基本的周期为20ms的PWM信号,第二步是PWM信号脉宽的确定,调整占空比。控制系统中实现一个舵机的控制,通常采用使用单片机的一个定时器来实现。根据PWM信号占空比,分别设定定时器中断的初值,将20ms分为两次中断执行,一次短时间中断和一次较长时间中断,控制输出信号的电平变换,产生要求的PWM信号。
3 应用举例及编程方法
我们采用宏晶STC12C5A60S2单片机,它是宏晶科技生产的高速、低功耗、超强抗干扰的新一代单片机,指令代码完全兼容传统8051,但速度快近十倍。制作的自动投球机器人,机器人每次携带6个小球,通过单片机控制两个舵机制作两个挡板,挡板配合动作,将小球投到指定位置。两个挡板初始位置为:下面的挡板1在“挡”位置、上面的挡板2在“缩”位置,开始向投球机器人装入小球。启动投球机器人后,挡板2运动到“挡”位置,按照规定的路线循迹运动,运动到指定位置后,投球机器人开始投球。具体动作为:挡板1“缩”,投下一个小球,然后挡板1“挡”,挡板2“缩”,第二个小球落到最下面的位置,然后挡板2“挡”,等待投球;依次类推,投入六个小球后,工作结束。
单片机晶振频率为12MHz,P36输出舵机1的PWM控制信号,P37作为输出舵机2的PWM控制信号,分别采用16位定时器T0、T1产生两路PWM信号P36、P37。
以舵机1控制为例,通过设定定时器T0工作在定时模式,定时时间到产生中断来产生PWM信号。特殊功能寄存器AUXR中的T0x12、T1x12位分别设定T0、T1对系统时钟进行12分频还是不分频计数定时,我们设定T0x12、T1x12为“0”,选择对系统时钟12分频计数定时,则定时器计一个数时间为1us,产生2ms时间需计数2000个。初始时舵机1带动挡板1运动到“挡”位置,根据挡板运动位置(舵机转动角度)确定脉宽的初始值a,即a=(2000/180)*舵机转动角度+500。然后设定定时器T0的初值TH0=-(65536-a)/256、TL0=-(65536-a)%256;并置输出P36为高电平,启动定时器T0,T0开始定时。当定时器计数溢出时,触发计数器溢出中断函数void timer0() interrupt 1 using 1,在子函数中,改变输出P36为反相(此时变为低电平),计算ci =20000-a,并重新设定定时器T0的初值,直到定时器再次产生溢出中断,重复上一过程。
参考程序(部分):
#define uchar unsigned char
#define uint unsigned int
sbit dj1=P3^6;
sbit dj2=P3^7;
uint a,bi,ci,d;
void timer0( ) interrupt 1 using 1
{
dj1=!dj1;
ci=20000-a;
TH0=(65536-ci)/256;
TL0=(65536-ci)%256;
TF0=0;
}
void djdang1()/*挡板1挡位置函数*/
{
dj1=1;
a=(2000/180)*130+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void djsuo1()/*挡板1缩位置函数*/
{
dj1=1;
a=(2000/180)*70+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void S_T() /*程序初始化*/
{
TMOD=0X11;
P3M1=0x00;
P3M0=0xff;
AUXR=0X00;
start_=1;
while(start_==1) //等待按键
{;}
}
void main() /*主函数*/
{
S_T();
djdang1();
djsuo2();
delay_ms(10000); /装入小球
djdang2();
delay_ms(900);
……… ;//运行到指定位置
djsuo1();
delay_ms(800);
djdang1();
delay_ms(850);
djsuo2();
delay_ms(800);
djdang2();//投入一个小球
……………
}
热门排行
推荐信息
期刊知识
- 2025年中科院分区表已公布!Scientific Reports降至三区
- 2023JCR影响因子正式公布!
- 国内核心期刊分级情况概览及说明!本篇适用人群:需要发南核、北核、CSCD、科核、AMI、SCD、RCCSE期刊的学者
- 我用了一个很复杂的图,帮你们解释下“23版最新北大核心目录有效期问题”。
- CSSCI官方早就公布了最新南核目录,有心的人已经拿到并且投入使用!附南核目录新增期刊!
- 北大核心期刊目录换届,我们应该熟知的10个知识点。
- 注意,最新期刊论文格式标准已发布,论文写作规则发生重大变化!文字版GB/T 7713.2—2022 学术论文编写规则
- 盘点那些评职称超管用的资源,1,3和5已经“绝种”了
- 职称话题| 为什么党校更认可省市级党报?是否有什么说据?还有哪些机构认可党报?
- 《农业经济》论文投稿解析,难度指数四颗星,附好发选题!