控制机械臂的电机有三种:  
  1. 伺服电机
  2. 步进电机
  3. 舵机
 

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,即可控制舵机的转角,对应关系如下:
  微信图片_20201223225449  
   $ 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。手动控制测试同上述舵机的控制方法。   微信图片_20201223225514  

3. 步进电机:由于机械臂目前安装的都是步进电机,每个关节的转矩和转速也不同,所以电机的型号也不同,但是控制的原理都是一样的。

  微信图片_20201223225548   以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
  微信图片_20201223225616