标题: 详细的舵机控制原理资料 [打印本页]

作者: dfevfvdvfd    时间: 2017-3-4 23:13
标题: 详细的舵机控制原理资料
目录

一.舵机PWM信号介绍... 1
1.PWM信号的定义... 1
2.PWM信号控制精度制定... 2
二.单舵机拖动及调速算法... 3
1.舵机为随动机构... 3
(1)HG14-M舵机的位置控制方法... 3
(2)HG14-M舵机的运动协议... 4
2.目标规划系统的特征... 5
(1)舵机的追随特性... 5
(2)舵机ω值测定... 6
(3)舵机ω值计算... 6
(4)采用双摆试验验证... 6
3.DAV的定义... 7
4.DIV的定义... 7
5.单舵机调速算法... 8
(1)舵机转动时的极限下降沿PWM脉宽... 8
三.8舵机联动单周期PWM指令算法... 10
1.控制要求... 10
2.注意事项... 10
3.8路PWM信号发生算法解析... 11
4.N排序子程序RAM的制定... 12
5.N差子程序解析... 13
6.关于扫尾问题... 14
(1)提出扫尾的概念... 14
(2)扫尾值的计算... 14
















一.舵机PWM信号介绍1.PWM信号的定义
PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,已经不能够应用于传统的模型上面了。
目前,北京汉库的HG14-M舵机可能是这个过渡时期的产物,它采用传统的PWM协议,优缺点一目了然。优点是已经产业化,成本低,旋转角度大(目前所生产的都可达到185度);缺点是控制比较复杂,毕竟采用PWM格式。
但是它是一款数字型的舵机,其对PWM信号的要求较低:
(1)   不用随时接收指令,减少CPU的疲劳程度;
(2)   可以位置自锁、位置跟踪,这方面超越了普通的步进电机;


file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif

















其PWM格式注意的几个要点:
(1)   上升沿最少为0.5mS,为0.5mS---2.5mS之间;
(2)   HG14-M数字舵机下降沿时间没要求,目前采用0.5Ms就行;也就是说PWM波形可以是一个周期1mS的标准方波;
(3)   HG0680为塑料齿轮模拟舵机,其要求连续供给PWM信号;它也可以输入一个周期为1mS的标准方波,这时表现出来的跟随性能很好、很紧密。

2.PWM信号控制精度制定
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.gif
















1 DIV = 8uS ;250DIV=2mS
时基寄存器内的数值为:(#01H01 ----#0FAH250

185度,分为250个位置,每个位置叫1DIV

则:185÷250 = 0.74 / DIV

PWM上升沿函数: 0.5mS + N×DIV
                  0uS ≤ N×DIV ≤ 2mS
                0.5mS ≤ 0.5Ms+N×DIV ≤ 2.5mS

二.单舵机拖动及调速算法1.舵机为随动机构
(1)当其未转到目标位置时,将全速向目标位置转动。
(2)当其到达目标位置时,将自动保持该位置。
所以对于数字舵机而言,PWM信号提供的是目标位置,跟踪运动要靠舵机本身。
(3)像HG0680这样的模拟舵机需要时刻供给PWM信号,舵机自己不能锁定目标位置。
所以我们的控制系统是一个目标规划系统。

(1)HG14-M舵机的位置控制方法
舵机的转角达到185度,由于采用8为CPU控制,所以控制精度最大为256份。目前经过实际测试和规划,分了250份。具体划分参见《250份划分原理》。
将0—185分为250份,每份0.74度。
控制所需的PWM宽度为0.5ms—2.5ms,宽度2ms。
2ms÷250=8us;
所以得出:PWM信号 =1度/8us







file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image004.gif


  
        
舵机角度= 0.74×N
   
   
   


  
        
PWM = 0.5 + N×DIV;(DIV=8us
   
   
   











  
角度
  
0
45
90
135
180
  
N
  
0
3E
7D
BB
FA
  
PWM
  
0.5ms
1ms
1.5ms
2ms
2.5ms


(2)HG14-M舵机的运动协议





file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.jpg


file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image008.gif














运动时可以外接较大的转动负载,舵机输出扭矩较大,而且抗抖动性很好,电位器的线性度较高,达到极限位置时也不会偏离目标。

















2.目标规划系统的特征(1)舵机的追随特性
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.gif












① 舵机稳定在A点不动;
② CPU发出B点位置坐标的PWM信号;
③ 舵机全速由A点转向B点;





  
        
△ф = фB - фA
   
   
   

  
        
△T = △ф÷ω
   
   
   

④ CPU发出B点PWM信号后,应该等待一段时间,利用此时间舵机才能转动至B点。

那么,具体的保持(等待)时间如何来计算,如下讲解:
令:保持时间为Tw
       T≥△T时,舵机能够到达目标,并有剩余时间;
当Tw≤△T时,舵机不能到达目标;
理论上:当T=T时,系统最连贯,而且舵机运动的最快。

实际过程中由于2个因素:
① 1个机器人身上有多个舵机,负载个不相同,所以ω不同;
② 某个舵机在不同时刻的外界环境负载也不同,所以ω不同;
则连贯运动时的极限T难以计算出来。
目前采取的方法是经验选取ω值。


(2)舵机ω值测定
舵机的ω值随时变化,所以只能测定一个平均值,或称出现概率最高的点。
依据 ① 厂商的经验值;
② 采用HG14-M具体进行测试;
测试实验:① 将CPU开通,并开始延时Tw;
② 当延时Tw到达后,观察舵机是否到达目标;
测定时采用一段双摆程序,伴随示波器用肉眼观察T与△T的关系

(3)舵机ω值计算
一般舵机定为0.16--0.22/60度;
0.2/60>> 1.2/360>> 0.617/185
ω360/1.2秒,2Π/1.2
ω=300度/秒
那么185度转动的时间为185÷360/1.2 = 0.6167秒。

(4)采用双摆试验验证








file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.gif


   
         
观察实验过程中的Tw与△T的关系
     
     
   



   
         
发现:当Tw定在0.618秒时,利用示波器观察到舵机能够运动至2个目标点。
     
则:Tw=△T= 0.618秒
     
     
   



   
         
实验过程中,设定舵机运转的目标角度查为185度。
     
     
   



   
         
最终:ω=0.2秒/60度
     
     
   

  

















3.DAV的定义
185度的转角分为250个平均小份。
则:每小份为0.74度。

定义如下:DAV =0.74
由于:ω = 0.2秒/60度
则:运行1 DAV所需时间为:0.72度÷0.2秒/60度 = 2.4 mS


4.DIV的定义
舵机电路支持的PWM信号为0.5mS—2.5mS,总间隔为2mS
若分为250小份,则2mS÷250 = 0.008 mS = 8uS

定义如下:DIV = 8uS


file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image012.gif














那么1 DAV0.74度)对应的△T为:0.74度÷60度/0.2秒 =2.4 67mS.


5.单舵机调速算法


file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.gif




测试内容:将后部下降沿的时间拉至30ms没有问题,舵机照样工作。
将后部下降沿的时间拉至10ms没有问题,舵机照样工作。
         将后部下降沿的时间拉至2.6ms没有问题,舵机照样工作。
         将后部下降沿的时间拉至500us没有问题,舵机照样工作。
实践检验出:下降沿时间参数可以做的很小。目前实验降至500uS,依然工作正常。
原因是:(1)舵机电路自动检测上升沿,遇上升沿就触发,以此监测PWM脉宽“头”。
      2)舵机电路自动检测下降沿,遇下降沿就触发,以此监测PWM脉宽“尾”。


(1)舵机转动时的极限下降沿PWM脉宽


file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image014.gif




T:舵机运转1DAV7.4度)所需要的最小时间,目前计算出的数值为2.467mS
T前面的20 mS等待时间可以省略,舵机依然工作;而且得出舵机跟随的最快驱动方式。







file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image016.jpg

file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.gif

  
















舵机T数据实验表格
  
Tw值
  
舵机运转特性
T与△T关系
该程序可行度
备注
  
500us
  
不能跟随
T< T
不可行


  
800us
  
不能跟随
T< T
不可行


  
1ms
  
不能跟随
T< T
不可行


  
  
  
1.1ms
  
跟随
T T
可行
最快、平滑
  
1.2ms
  
跟随
T> T
可行
最快、平滑
  
1.6ms
  
跟随
T> T
可行
最快、平滑
  
2ms
  
跟随
T> T
可行
最快、平滑
  
2.6ms
  
跟随
T> T
可行
最快、平滑
  
10ms
  
跟随
T>> T
可行
较慢、平滑
  
20ms
  
跟随
T>> T
可行
较慢、平滑
  
30ms
  
跟随
T>> T
可行
较慢、平滑
  
40ms
  
跟随
T>> T
可以
较慢、微抖
  
50ms
  
跟随
T>> T
可以
很慢、微抖
  
  
  
70ms
  
跟随
T>> T
不可以
很慢、较抖
  
100ms
  
跟随
T>> T
不可以
很慢、较抖
  
  










令人质疑的地方1.1ms时的表现,得出的T T
也就是说1.1ms =2.467ms,显然存在问题。
经过考虑重新观察PWM波形图发现,电机真正的启动点如下图:


file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image018.gif








实际上由AB的运动时间为:T = T +B点的)PWM



三.8舵机联动单周期PWM指令算法1.控制要求
要求同时发给8个舵机位置目标值,该指令的执行周期尽量短,目的有2个:
其一,是为了将来扩充至24舵机;其二,目标越快,舵机的转动速度越快;
我们以8路为1组或称1个单位,连续发出目标位置,形成连续的目标规划曲线,电机在跟随过程中自然形成了位置与速度的双指标曲线,实现8路舵机联动。
2.注意事项
从24个端口,P0.0、P1.0到P2.0,单DIV循环的最小时间只有8us,所以串行运算是不行的,那么就采用并行运算。
目前采用的并行算法是P0.0—P0.7为一个基本单位,8位一并。
实际案例:P1口的8个位置个不相同;

  
端口
  
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
  
N寄存器
  
37H
36H
35H
34H
33H
32H
31H
30H
  
目标位置(度)
  
180
135
90
60
50
45
0.74
0
  
N数值(整数)
  
250
1875
125
811
676
625
1
0
  
PWM宽度ms
  
2.500
2.000
1.500
1.148
1.041
1.000
0.508
0.500
注意:N为整数,依照上表看出,由于整数原因,定位不能实现的有45度、60度等。



file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image020.gif
  

















3.8路PWM信号发生算法解析
我们预计将整个周期控制在3.5-5ms内;
由上图得知:P1口的8个端在不同时间产生下降沿。
那么由上例如:我们的P1.5口,他的N125
那么就需要它在125DIV后产生下降沿,时间为(125*8us=1000us)。
我们在其中发现2个关键参数:①时间参数N=125
②逻辑参数 P1.5=#0DFH
逻辑参数的定义:如下,采用ANL指令,操作P1口。

  
        
      
      
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
备注
      
P1.0= # FEH
      
1
1
1
1
1
1
1
0


      
P1.1= # FDH
      
1
1
1
1
1
1
0
1


      
P1.2= # FBH
      
1
1
1
1
1
0
1
1


      
P1.3= # F7H
      
1
1
1
1
0
1
1
1


      
P1.4= # EFH
      
1
1
1
0
1
1
1
1


      
P1.5= # DFH
      
1
1
0
1
1
1
1
1


      
P1.6= # BFH
      
1
0
1
1
1
1
1
1


      
P1.7= # 7FH
      
0
1
1
1
1
1
1
1


   
   
   
   
ANL端口逻辑参数表









例如:将P1.5口产生下降沿,就将# 0DFH 去“ANL P1口。
逻辑“ANL”指令,冯“0”得“0”,不影响其他位。

具体的程序操作如下:
① 开3.5ms定时中断
② 取出8个端(P1.0-P1.7)的位置值,也就是8个N值;并赋予相应的端逻辑参数;
  
        
M5=N5-N4
   
M6=N6-N5
   
M7=N7-N6
   
M8=N8-N7
   
   
   
  
        
M1=N1
   
M2=N2-N1
   
M3=N3-N2
   
M4=N4-N3
   
   
   
③ 将这8个值由大到小排列,相应端的逻辑参数值也随着N的顺序排列,一一对应;
④ 将N值做减法,求得:




⑤ 取出 M1,延时M1*DIV,ANL相应的逻辑参数;
取出 M2,延时M2*DIV,ANL相应的逻辑参数;
取出 M3,延时M3*DIV,ANL相应的逻辑参数;
取出 M4,延时M4*DIV,ANL相应的逻辑参数;
取出 M5,延时M5*DIV,ANL相应的逻辑参数;
取出 M6,延时M6*DIV,ANL相应的逻辑参数;
取出 M7,延时M7*DIV,ANL相应的逻辑参数;
取出 M8,延时M8*DIV,ANL相应的逻辑参数;

⑥ 8个端的下降沿全部产生完毕,等待一定的Tw值,或等待3.5ms中断的到来;
⑦ 中断到来后,清理中断标志,然后结束该程序。RET

注意事项:当进行逐个排序延时的过程中,CPU要取出M1、M2、M3….M8,那么会有1个取数指令周期,当CPU采用12MHz时为1us。最终应该在第8个延时,即M8时扣除掉,具体指令参见指令集。

4.N排序子程序RAM的制定
入口处

  
  
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
  
N值寄存器地址
  
37H
36H
35H
34H
33H
32H
31H
30H
  
ANL逻辑数寄存器地址
  
3FH
3EH
3DH
3CH
3BH
3AH
39H
38H
  
ANL逻辑数值
  
#7FH
#BFH
#DFH
#EFH
#F7H
#FBH
#FDH
#FEH
  
  

















备注:37寄存器内存放的是P1.7端口的N值;3F寄存器内存放的是P1.7端口的ANL逻
辑参数值;

出口处
从左到右为N值从大到小排列          (大> N值 > 小)
  
N值寄存器地址
  
30H
31H
32H
33H
34H
35H
36H
37H
  
ANL逻辑数寄存器地址
  
38H
39H
3AH
3BH
3CH
3DH
3EH
3FH
  
ANL逻辑数值
  
未知
未知
未知
未知
未知
未知
未知
未知
  
  
















所谓的“未知”:由于排列按照大到小顺序,“未知”内存放的为端口信息要根据排序
做相应的调整。

备注:30H内存放的是某位的N值,其值最大;
37H内存放的是某位的N值,其值最小;
38H—3FH内存放ANL数,可以根据其数值判断出是具体那个端口的下降沿。
例如:其值为“#FBH”那么它就是P1.2;



5.N差子程序解析
所谓N差子程序,要观察PWM口的逻辑时序特性。要求连续将8位端口分别产生
下降沿。所以有个先后问题,解决的方法有2种:
①打开8个时间中断;
②按先后顺序排列,先后触发;
由于CPU不能开启8个中断,所以采用后者方法,那么,就可以得出以下结论:
第1个 触发位所用的时间为  N1- 0 =M1;
第2个 触发位所用的时间为  N2-N1=M2;
第3个 触发位所用的时间为  N3-N2=M3;
第4个 触发位所用的时间为  N4-N3=M4;
第5个 触发位所用的时间为  N5-N4=M5;
第6个 触发位所用的时间为  N6-N5=M6;
第7个 触发位所用的时间为  N7-N6=M7;
第8个 触发位所用的时间为  N8-N7=M8;

                                
入口:30H 31H 32H 33H 34H 35H 36H 37H
由于上接排序字程序,所以已经按照从大到小排列,做减法后差所以全为正数。
大  - 小
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif30H - 31H      30H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif31H - 32H      31H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image022.gif32H - 33H      32H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image023.gif33H - 34H      33H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image024.gif34H - 35H      34H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif35H - 36H      35H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif36H - 37H      36H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image022.gif37H      37H


  
        
   
      
出口
      
30H
31H
32H
33H
34H
35H
36H
37H
      
      
原数
      
      
















   
   
   
   
   




  调用延时程序时,37H最先出,30H最后出。

6.关于扫尾问题(1)提出扫尾的概念
我们提出了1个扫尾的新概念:当CPU执行完8个位的下降沿操作后(最多为2.5ms),会有向下1个周期过渡的时间间隔,其主要为2个功能:
①保证下降沿的准确性;
②为舵机的跟踪留出足够的时间;
当PWM信号以最小变化量即(1DIV=8us)依次变化时,舵机的分辨率最高,但是速度会减慢。
例如:先发一个PWM信号N=125,相隔20ms后再发1个PWM信号N=126。那么舵机在20ms内转动了0.74度,计算得出:ω=0.74度/20ms= 37度/秒;
        HG14-M舵机空载时:ω=300/
发现与最快速度相差8倍之多!
(2)扫尾值的计算
  
        
中断延时2.8ms
   
   
   
图中有A点、B点,





file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image025.gif


  
        
舵机从PWM_A发出后开始转动,经过△T时间后接收完毕PWM_B信号后,又重新开始新的转动。
   
   
   








  
        
∵Tw=△T - PWM_ B
   
∴limtTw=2.467ms-0.5ms= 1.967ms
   
   
   
PWM处在最小极限长度时:
PWM_A = 0.5ms
PWM_B = 0.5ms
必要条件:△T≥2.467ms

  
        
∵Tw=△T - PWM_ B
   
∴limtTw=2.467ms-2.5ms= -0.033ms
   
   
   
PWM处在最长极限长度时:
PWM_A = 2.5ms
PWM_B = 2.5ms
必要条件:△T≥2.467ms
为了保证在2种极限情况下舵机都能正常工作,我们取个较长的延时,其经验值为2.8ms;这样舵机都能正常跟随而且速度接近最大值,采用中断法延时2.8ms。



作者: yeyuaihaozhe    时间: 2017-9-10 12:17
楼主,可以给个完整版资料吗,谢谢





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1