机器人舵机说明Word格式.docx
《机器人舵机说明Word格式.docx》由会员分享,可在线阅读,更多相关《机器人舵机说明Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
这里可以看到,舵机体积十分小巧。
机器人使用它是非常合适的。
一般的舵机可以旋转185左右,我们这里留一些余量,算做180度。
八位单片机的精度是256,我们也留一些余量,算作250o这样我们可以得到一个基本的对应关系:
舵机转动角度①:
0-180度
单片机数值N:
0-250
£
T注:
在代码编写及调试过程中要时刻注意舵机的转动角度,在各关节不发生干涉的情况下也要保证其输出角度不要超出预设范围:
0-180度(单片机对应取值:
0-250)。
4.2舵机工作原理
1、舵机PW此号定义
PWM1号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。
具体的时间宽窄协议参考下列讲述。
我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。
目前,HG14-M它机可能是这个过渡时期白产物,它采用传统的PWM、议,优缺点一目了然。
优点是已经产业化,成本较低,旋转角度大(目前所生产的都可达到185度);
缺点是控制比较复杂,毕竟采用PWM&
式。
但是它是一款数字型的舵机,其对PWM1号的要求较低:
不用随时接收指令,减少CPU勺疲劳程度;
可以位置自锁、位置跟踪,这方面超越了普通的步进电机;
N451-250
O^mS<
O,SMs^xDIV<
25nS
其PWM&
式注意的几个要点:
高电平最少为0.5mS,为0.5-2.5mS之间;
(对应舵机旋转0-180度)
HG14-M数字舵机下降沿时间没要求,目前采用0.5Ms就行;
也就是说
PWMfc形可以是一个周期1mS勺标准方波。
2、PWW号控制精度制定
上面已经提到了八位单片机,我们的舵机需要的是方波信号。
单片机的精度直接影响了舵机的控制精度,这里就详细的说明一下。
我们在这里做了一些名词上的定义。
DIV是一个时间位置单位,一个DIV等
于8us,关系入公式:
1DIV=8uS250DIV=2mS
实际寄存器内的数值为:
(#01H)01(#0FAH250。
共185度,分为250个位置,每个位置叫1DIV。
则:
185+250=0.74度/DIV
PWMK电平函数:
0.5mS+NXDIV
0uS<
NXDIV<
2mS
0.5mS<
0.5Ms+NXDIV<
2.5mS
根据这些知识,我们就可以开始编程,并做一些初步的实验了,学会舵机控制是研究机器人的一个比较技术手段,需要完全掌握。
4.3单舵机的控制程序
我们已经知道了舵机的工作与控制原理,我们现在可以通过一个简单的程序来控制单个舵机的运转。
如果您手头上有控制板和舵机,而且已经熟悉了KEIL
软件和STC烧录软件,马上就可以试试了,如果您还不满足这些条件的话,也没什么关系,先来分析一下这段程序。
延时程序:
用于产生所需的PWM&
号
;
voiddelay_8us()
RSEG
?
PR?
delay_8us?
Robot
delay_8us:
延时8US子程序24周
期.
MOV
R1,#3
LP2_8us:
R2,#3
LP1_8us:
DJNZ
R2,LP1_8us
R1,LP2_8us
RET
voiddelay_500us()
delay_500us?
delay_500us:
延时500US子程序1500
周期一
R1,#32
LP2_500us:
R2,#45
LP1_500us:
R2,LP1_500us
R1,LP2_500us
voiddelay_500ms()
delay_500ms?
delay_500ms:
延时500MS子程序
1500000周期
R0,#242
LP3_500ms:
R1,#242
LP2_500ms:
R2,#24
LP1_500ms:
R2,LP1_500ms
R1,LP2_500ms
R0,LP3_500ms
END
单舵机PWM&
号产生函数:
voidPWM(ucharfoot,ucharspeed)(
uchari,j;
for(i=0;
i<
foot;
i++)
//将P1.0口拉高
//延时foot*8us
//将P1.0口拉低
〃延时speed*0.5ms
(
P1|=0x01;
delay_500us();
for(j=0;
j<
i;
j++)
delay_8us();
}.
P1&
=0xfe;
speed;
j++)(
}}}一
上面函数的参数foot,是控制舵机转动的度数,A@=foot*0.72(度),speed控制的是舵机转动的速度。
4.4多路舵机并行控制方法
上一小节中比较详细的讲解了单舵机是怎么控制的,但是在机器人运动过程中,必须让多个舵机同时协作的运动,要想实现这个目标,我们必须有个精致的并行控制算法。
假设我们现在要控制8个舵机联动,并且这八个舵机所要到达的位置各不相同,我们应该怎么做呢?
首先我们用逆向思维思考一下,假设这八个舵机的PWMS号同时进入上升沿(既单片机上对应的八个输出引脚同时拉高),那么它们进入下降沿的时间顺序是怎样的呢?
我们很容易知道舵机所要到达的位置与0度位置的夹角w越小(既高电平宽度),它进入下降沿就越早,这一点不难理解。
假设我们机器人身上有8个舵机,它们要到达的位置参数(n的值)分别是45,30,15,60,80,98,135,155,为了
方便,我们将这些数存到一个取名为position的数组里,既
position[8]={45,30,15,60,80,98,135,155}
为了使这八个舵机和单片机上相应的管脚对应起来,我们又设置了一个数组kouchu[8],初始化为kouchu[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f),为了方便起见,下面列了
一个表格。
表1舵机程序控制数据对照表-1
数组名
-0-
1
2
3
4
5
6
7
position
45
30
15
60
80
98
135
155
kouchu(16进制)
0xfe
0xfb
0xfd
0xf7
0xef
0xbf
0xdf
0x7f
这八个舵机对应的理想波形如下:
positiontl]=3。
position[2]=15
i
r60*8usA
position⑷=80
图7舵机控制理想输出波形-1
我们将这八个舵机对应的数组position[8]各个元素从大到小排序,同时将
数组kouchu[8]的各个元素也进行相应的调换,这样做的原因是不使单片机各引脚对舵机的对应控制关系不打乱,以前是怎么一一对应的,现在还是那样的对应,排序之后的列表如下:
表2舵机程序控制数据对照表-2
kouchu
下图是排序后所对应的PWMS想波形:
position同二乂
positiontl.=135
1___
2135*Sus»
positioiiL2]=98
:
・9e*Sus———►
positian[3]=80
position[4]=60
position[5]=45
卜
*45*8匚A
positioti[6]=30
dobition[7]=15
图8舵机控制理想输出波形-2
通过对这一系列波形的观察,我们可以这样实现它,先将单片机上控制舵机
的八路引脚电平同时间拉高,经过延时500+15*8(us)后,将pos市on口对应
的舵机信号输出引脚拉低,再经过(30-15)*8us后拉低position[6]对应的舵机信号输出引脚,这样就依次求差延时,逐个拉低,知道所有的舵机都到达自己所要到达的位置。
这牛¥
的话,我们在对position[8]数组排序之后还要进行一个求差处理。
上面说的是8个舵机并行控制的原理,但在实际应用中,由于有些机器人身上的舵机数目远不止8个,所以写程序时还设置了一个paixu_ncha[8]数组,用来提供排序空间。
具体做法如下:
ucharposition[24];
〃uchar既无符号字符型
ucharkouchu[8];
ucharpaixu_ncha[8];
第一步:
定义数组
第二部:
给各个数组赋值
为了方便起见,这里的position[24]的值是一组假设值。
表3position[24]数据对照表
下标
元素值
M20
100
145
35
210
F195
127
551
8
9
10
11
12
13
14
43
67
93
167
235
87
国
17
181
19
20
121
22
231
62