控制机械臂的电机有三种:
- 伺服电机
- 步进电机
- 舵机
1. 本次实验所使用的舵机有两种:
LD_1501MG舵机和 ES3005舵机;
控制板选择的是Beaglebone black,由于ES3005舵机的供电电压是5V,可以直接使用Beaglebone控制,手动测试流程如下:
接线: 暗灰: GND
红色: VCC 4.8-7.2V
橙黄线: 脉冲输入
PWM 口为 BBB1 板的 P9_21 口。
period:20000000 舵机的期望周期是20ms,所以给定period为20000000
通过控制占空比duty,即可控制舵机的转角,对应关系如下:
$ echo 0 > run
$ echo 0 > polarity 这步是必须的,要不然没反应
$ echo 20000000 > period
$ echo 500000 > duty 闭合
$ echo 1 > run
$ echo 2500000 > duty 初始
$ echo 1 > run
2. LD_1501MG舵机 :控制的电源是6~7.4V供电,使用beaglebne5v供电的时候操作不当会导致beaglebone重启,使用3.3V控制的话不会导致板子重启,但是由于供电电压不足,需要手动扭一下,舵机才会旋转。这都是不当操作,且注意脉冲的电压和供电电压要匹配(单独给舵机6~7.4V供电,而pwm继续使用beaglebone的3.3V输出,则是不匹配,舵机完全不转)。所以最终方法是使用beaglebone的pwm输出结合逻辑电平转换,用7.4V的电源给电平转换器和舵机供电,将板子的pwm输出从3.3V映射到7.4V,这样电压就匹配了。
加载pwm设备树,测试所用pwm口为p9_16,红黑线分别接电源正负极,第三跟白线接p9_16。手动控制测试同上述舵机的控制方法。
3. 步进电机:由于机械臂目前安装的都是步进电机,每个关节的转矩和转速也不同,所以电机的型号也不同,但是控制的原理都是一样的。
以DM542步进电机驱动器举例:通过驱动器上面的细分调节,设置成3200rec/Table,也就是步进电机每接受3200个脉冲周期,就会旋转360°,所以通过控制发送给步进电机的脉冲数就可以控制步进电机的转角。例如:需要电机旋转 a 弧度,pwm给定的周期为T(beaglebone的周期单位为ns,占空比只改变pwm的输出电压大小,对角度控制没有影响):
则发给步进电机的脉冲为 (a×180/π) × (3200/360),
延时的时间为:time = (a×180/π) × (3200/360) × (T×10^-6) ms,
通过usleep(time ×10^3)即可转到指定的角度。
当然这种方法有一定的误差,误差主要是延时不够准确,步进电机没有闭环导致的。所以需要后面的伺服电机加编码器的组合来升级硬件。
4 .伺服电机+编码器
实验室使用的主要是elmo的伺服电机和驱动器,控制方式和步进电机类似,都是通过pwm控制电机,不同之处在于伺服电机没有步距角的概念,无法通过发送的脉冲数来控制电机旋转的角度,所以要结合编码器的数据来进行角度控制。
5. 手柄
工作环境为ubuntu14.04 + ros-indigo ,安装手柄调试工具。
通过 $ sudo apt-get install jstest-gtk