logo资料库

双足机器人及多舵机控制.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
一、自由度
1. 机器人自由度分配
2. 机器人自由度编号
一.舵机PWM信号介绍
1.PWM信号的定义
2.PWM信号控制精度制定
三.单舵机拖动及调速算法
1.舵机为随动机构
(1)舵机的位置控制方法
(2)HG14-M舵机的运动协议
四.8舵机联动单周期PWM指令算法
1.控制要求
2.注意事项
3.8路PWM信号发生算法解析
4.N排序子程序RAM的制定
2.目标规划系统的特征
(1)舵机的追随特性
(2)舵机ω值测定
(3)舵机ω值计算
一、自由度 1. 机器人自由度分配 手臂----3×2 = 6 腿部----5×2 = 10 头部----1×1 = 1 总计自由度 = 17 手臂舵机----金属齿轮 腿部舵机----金属齿轮 头部舵机----塑料齿轮 图 为 HGR-3 人 形机器人除去胸 部件的示意图 图 中 机 器 人 的 17 个自由度,已 经 用 矢 量 法 标 出。 2. 机器人自由度编号 一般的,我们进行双足机器人研究时总是先从双腿入手,所以将腿部关节自 由度定为 1—10。 汉库公司机器人出厂自由度设置如下: Z8 17 Z7 注意:机械系统中的自由度 编号与电子系统中的编号统 一,并能够与机器人操作软 件相对应。 P7 P8 P3 P 3 Z4 Z5 Z6 P4 P 4 P5 P 5 P6 P 6 P1 Z1 1PEEDE Z2 Z3 P2 EE
一.舵机 PWM 信号介绍 1.PWM 信号的定义 PWM 信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时 间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器 人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业, 已经不能够应用于传统的模型上面了。 目前,北京汉库的 HG14-M 舵机可能是这个过渡时期的产物,它采用传统的 PWM 协议, 优缺点一目了然。优点是已经产业化,成本低,旋转角度大(目前所生产的都可达到 185 度);缺点是控制比较复杂,毕竟采用 PWM 格式。 但是它是一款数字型的舵机,其对 PWM 信号的要求较低: (1) 不用随时接收指令,减少 CPU 的疲劳程度; (2) 可以位置自锁、位置跟踪,这方面超越了普通的步进电机; 图 1-1 其 PWM 格式注意的几个要点: (1) 上升沿最少为 0.5mS,为 0.5mS---2.5mS 之间; (2) HG14-M 数字舵机下降沿时间没要求,目前采用 0.5Ms 就行;也就是说 PWM 波形 可以是一个周期 1mS 的标准方波; (3) HG0680 为塑料齿轮模拟舵机,其要求连续供给 PWM 信号;它也可以输入一个周 期为 1mS 的标准方波,这时表现出来的跟随性能很好、很紧密。
2.PWM 信号控制精度制定 我 们 采 用 的 是 8 位 AT89C52CPU,其数据分辨率为 256,那么经过舵机极限参数实 验,得到应该将其划分为 250 份。 那么 0.5mS---2.5Ms 的宽度 为 2mS = 2000uS。 2000uS÷250=8uS 则:PWM 的控制精度为 8us 我们可以以 8uS 为单位递增 控制舵机转动与定位。 舵机可以转动 185 度,那么 185 度÷250=0.74 度, 则:舵机的控制精度为 0.74 度 1 DIV = 8uS ; 250DIV=2mS 时基寄存器内的数值为:(#01H)01 ----(#0FAH)250。 共 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 (1)当其未转到目标位置时,将全速向目标位置转动。 (2)当其到达目标位置时,将自动保持该位置。 所以对于数字舵机而言,PWM 信号提供的是目标位置,跟踪运动要靠舵机本身。 (3)像 HG0680 这样的模拟舵机需要时刻供给 PWM 信号,舵机自己不能锁定目标位置。 所以我们的控制系统是一个目标规划系统。
(1)舵机的位置控制方法 舵机的转角达到 185 度,由于采用 8 为 CPU 控制,所以控制精度最大为 256 份。目前 经过实际测试和规划,分了 250 份。具体划分参见《250 份划分原理》。 将 0—185 分为 250 份,每份 0.74 度。 控制所需的 PWM 宽度为 0.5ms—2.5ms,宽度 2ms。 2ms÷250=8us; 所以得出:PWM 信号 = 1 度/8us; 0.5ms-2.5ms 0.5ms-30ms 舵机角度= 0.74×N PWM = 0.5 + N×DIV;(DIV=8us) 角度 N PWM 0 0 0.5ms 45 62 1ms 90 125 1.5ms 135 187 2ms 180 250 2.5ms (2)HG14-M 舵机的运动协议 舵机的转动方向为: 逆时针为正转 Φ Φ对应 N 值 N=#00H,Φ=0 度 N=#F5H,Φ=180 度 1 ≤ N ≤ 245 运动时可以外接较大的转动负载,舵机输出扭矩较大,而且抗抖动性很好,电位器的线 性度较高,达到极限位置时也不会偏离目标。
四.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 寄存器 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 position[0] position[1] position[2] position[3] position[4] position[5] position[6] position[7] 目标位置(度) N 数值(整数) PWM 宽度(ms) 0 0.74 45 50 60 90 135 180 0 1 62.5 67.6 81.1 125 187.5 250 0.500 0.508 1.000 1.041 1.148 1.500 2.000 2.500 注意:N 为整数,依照上表看出,由于整数原因,定位不能实现的有 45 度、60 度等。 时间 T T 为一个周期,分为 2 部分 1. PWM 宽 2. 延时等待 Tw PWM
3.8 路 PWM 信号发生算法解析 我们预计将整个周期控制在 3.5-5ms 内; 由上图得知:P1 口的 8 个端在不同时间产生下降沿。 那么由上例如:我们的 P1.5 口,他的 N 为 125 那么就需要它在 125 个 DIV 后产生下降沿,时间为(125*8us=1000us)。 我们在其中发现 2 个关键参数:①时间参数 N=125 逻辑参数的定义:如下,采用&指令,操作 P1 口。 ②逻辑参数 P1.5=#0DFH P1.7 1 P1.6 1 P1.5 1 P1.4 1 P1.3 1 P1.2 1 P1.1 1 P1.0 备注 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 P1.0= # FEH P1.1= # FDH P1.2= # FBH P1.3= # F7H P1.4= # EFH 例如:将 P1.5 口产生下降沿,就将# 0DFH 去“&” P1 口。 逻辑“&”指令,冯“0”得“0”,不影响其他位。 具体的程序操作如下: ① 开 3.5ms 定时中断 ② 取出 8 个端(P1.0-P1.7)的位置值,也就是 8 个 N 值;并赋予相应的端逻辑参数; ③ 将这 8 个值由大到小排列,相应端的逻辑参数值也随着 N 的顺序排列,一一对应; ④ 将 N 值做减法,求得: M1=N1 M2=N2-N1 M3=N3-N2 M4=N4-N3 M5=N5-N4 M6=N6-N5 M7=N7-N6 M8=N8-N7 ⑤ 取出 M1,延时 M1*DIV,& 相应的逻辑参数; 取出 M2,延时 M2*DIV,& 相应的逻辑参数; 取出 M3,延时 M3*DIV,& 相应的逻辑参数; 取出 M4,延时 M4*DIV,& 相应的逻辑参数; 取出 M5,延时 M5*DIV,& 相应的逻辑参数; 取出 M6,延时 M6*DIV,& 相应的逻辑参数; 取出 M7,延时 M7*DIV,& 相应的逻辑参数; 取出 M8,延时 M8*DIV,& 相应的逻辑参数;
⑥ 8 个端的下降沿全部产生完毕,等待一定的 Tw 值,或等待 3.5ms 中断的到来; ⑦ 中断到来后,清理中断标志,然后结束该程序。 注意事项:当进行逐个排序延时的过程中,CPU 要取出 M1、M2、M3….M8,那么会有 1 个取数指令周期,当 CPU 采用 12MHz 时为 1us。最终应该在第 8 个延时,即 M8 时扣除掉,具体指令参见指令集。 4.N 排序子程序 RAM 的制定 入口处 端口 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 N 值寄存器地址 position[0] position[1] position[2] position[3] position[4] position[5] position[6] position[7] &逻辑数寄存器地址 kouchu[0] kouchu[1] kouchu[2] kouchu[3] kouchu[4] kouchu[5] kouchu[6] kouchu[7] &逻辑数值 #FEH #FDH #FBH #F7H #EFH #DFH #BFH #7FH 备注:position[7]寄存器内存放的是 P1.7 端口的 N 值;kouchu[7]寄存器内存放的是 P1.7 端口的&逻辑参数值; 出口处 从左到右为 N 值从大到小排列 (大 > N 值 > 小) 未知 未知 N 值寄存器地址 &逻辑数寄存器地址 &逻辑数值 paixu_ncha[0] paixu_ncha[1] paixu_ncha[2] paixu_ncha[3] paixu_ncha[4] paixu_ncha[5] paixu_ncha[6] paixu_ncha[7] kouchu[0] kouchu[1] kouchu[2] kouchu[3] kouchu[4] kouchu[5] kouchu[6] kouchu[7] 未知 未知 未知 未知 未知 未知 所谓的“未知”:由于排列按照大到小顺序,“未知”内存放的为端口信息要根据排序 做相应的调整。 备注:paixu_ncha[0]内存放的是某位的 N 值,其值最大; paixu_ncha[7]内存放的是某位的 N 值,其值最小; kouchu[0]—kouchu[7]内存放数,可以根据其数值判断出是具体那个端口的下降沿。 例如:其值为“0xFB”那么它就是 P1.2;
分享到:
收藏