详细的舵机控制原理资料(3)

2019-04-16 14:31

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

时间T

T为一个周期,分为2部分

1. PWM宽

2. 延时等待

PWM Tw

10 / 15

10

3.8路PWM信号发生算法解析

我们预计将整个周期控制在3.5-5ms内;

由上图得知:P1口的8个端在不同时间产生下降沿。 那么由上例如:我们的P1.5口,他的N为125

那么就需要它在125个DIV后产生下降沿,时间为(125*8us=1000us)。 我们在其中发现2个关键参数:①时间参数N=125

②逻辑参数 P1.5=#0DFH

逻辑参数的定义:如下,采用ANL指令,操作P1口。

ANL端口逻辑参数表

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

具体的程序操作如下: ① 开3.5ms定时中断

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

⑤ 取出 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相应的逻辑参数; 11 / 15

11

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

注意事项:当进行逐个排序延时的过程中,CPU要取出M1、M2、M3….M8,那么会有1

个取数指令周期,当CPU采用12MHz时为1us。最终应该在第8个延时,即M8时扣除掉,具体指令参见指令集。

4.N排序子程序RAM的制定

入口处 N值寄存器地址 ANL逻辑数寄存器地址 ANL逻辑数值 P1.7 37H 3FH #7FH P1.6 36H 3EH #BFH P1.5 35H 3DH #DFH P1.4 34H 3CH #EFH P1.3 33H 3BH #F7H P1.2 32H 3AH #FBH P1.1 31H 39H #FDH P1.0 30H 38H #FEH 备注:37寄存器内存放的是P1.7端口的N值;3F寄存器内存放的是P1.7端口的ANL逻

辑参数值;

出口处

从左到右为N值从大到小排列 (大 > N值 > 小) N值寄存器地址 ANL逻辑数寄存器地址 ANL逻辑数值 30H 38H 未知 31H 39H 未知 32H 3AH 未知 33H 3BH 未知 34H 3CH 未知 35H 3DH 未知 36H 3EH 未知 37H 3FH 未知 所谓的“未知”:由于排列按照大到小顺序,“未知”内存放的为端口信息要根据排序 做相应的调整。

备注:30H内存放的是某位的N值,其值最大;

37H内存放的是某位的N值,其值最小;

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

12 / 15

12

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

由于上接排序字程序,所以已经按照从大到小排列,做减法后差所以全为正数。

大 - 小

30H - 31H 30H 31H - 32H 31H 32H - 33H 32H 33H - 34H 33H 34H - 35H 34H 35H - 36H 35H 36H - 37H 36H 37H 37H

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

差 差 差 差 差 差 差 原数

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

13 / 15

13

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)扫尾值的计算

图中有A点、B点,

中断延时2.8ms

A点 B点

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

新开始新的转动。 △T

PWM处在最小极限长度时:

∵Tw=△T - PWM_ B PWM_A = 0.5ms

∴limtTw=2.467ms-0.5ms= 1.967ms PWM_B = 0.5ms

必要条件:△T≥2.467ms

PWM处在最长极限长度时:

∵Tw=△T - PWM_ B PWM_A = 2.5ms

∴limtTw=2.467ms-2.5ms= -0.033ms PWM_B = 2.5ms

必要条件:△T≥2.467ms

为了保证在2种极限情况下舵机都能正常工作,我们取个较长的延时,其经验值为2.8ms;这样舵机都能正常跟随而且速度接近最大值,采用中断法延时2.8ms。

14 / 15

14


详细的舵机控制原理资料(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第1章 线性规划模型-宋

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: