CANopen--实现双电机速度同步
图1
将上图图中左边的电机和右边的电机进行速度同步,右边的电机同步左边的电机速度。这里需要知道Copley的驱动中的速度环的输入输出情况。如下图所示,速度环限制器接收速度命令信号,经限制后,产生一限制速度命令信号给输入滤波器。输入滤波器将信号传递到求和节点处,求和节点将速度命令信号与反馈的实际速度值相减得到一差值信号。(当在负载端有一编码器的情况下,速度反馈值通常来源于电机端的编码器。)差值信号经过比例增益和积分增益的处理最终产生出电流命令信号。可设置的滤波器可作用于速度环的输入和输出端。
图2 电机驱动速度环
在速度模式下,速度环的命令来源于以下某一种
图3 速度环命令来源
为了达到目的,要设定2#电机驱动器工作在速度模式下,即 The velocity loop is driven by the paogrammed velocity value, 此时只有设置对象字典0x2300为11。将1#电机的速度发送给2#电机,其实就是将1#的programmed velocity value发送给2#电机,2#电机将接受到数当做它的programmed velocity value,就实现了二者的同步。
图4
这里我将1#电机设置成位置模式,然后将其中的速度环的Programmed velocity command 发送给2#电机,那么问题来了,我怎么通过配置将1#电机的值发送给2#,让2#接收呢,我不可能在电机驱动里面去编写一套接收函数吧。这里先留个疑问,接下来就按照CANopen的配置过程将两个电机的PDO进行映射。
PDO通信参数,定义了该设备所使用的COB-ID、传输类型、定时周期等。RPDO通讯参数位于对象字典索引的1400h to 15FFh,TPDO通讯参数位于对象字典索引的1800h to 19FFh。每条索引代表一个PDO的通信参数集,其中的子索引分别指向具体的各种参数。如下表所示。
表1
PDO映射参数是初学者学习CANopen时的一个难点,它包含了一个对象字典中的对象列表,这些对象映射到相应的PDO,其中包括数据的长度(单位,位),对于生产者和消费者都必须要知道这个映射参数,才能够正确的解释PDO内容。就是将通信参数、应用数据和具体CAN报文中数据联系起来。
综上,也就是在通信参数中定义了双方通信的方式,映射参数中定义了通信的内容,也就是在规定好的通信参数的情况下发送或者接受映射参数中的规定的数据字典对应的值。
其中不得不提到的是COB-ID(通信对象标识符),即Communication Object ID,也就是发送或者接收对应帧的ID,再说的形象一点,我发送一帧带有特殊ID的消息,如果你想接收到这帧数,你接收的ID号必须和我的一样。在一些说明书里面说明了诸如下列的说明:
表2 COB-组成说明
表3 对象COB-ID列表
举例:4 号从站TPDO2 的COB-ID 为280h + 4 = 284h。但是有时候你可能有疑问,TPDO5的COB-ID为多少呢?上述都是人为规定的一个规律,为了方便大家写的程序好读懂,实际调试过程中大家经常的人为规定双方的COB-ID号是多少,不一定说要遵循上面表中的规律。这里,我们将对应的COB-ID设置为222,用的是RPDO6和TPDO4,即1#电机发送的数据从TPDO4中发出,2#电机在RPDO6中接收数据。
设置好消息同步,来一个同步信号(注意二者之中只要一个产生同步信号就行了)1#电机就发送一个命令给2#电机。
配置的代码如下: 驱动1 ID =1 主轴 配置TPDO 第1步:DisablePDO(最高位置1) 23 03 18 01 22 02 00 80 第2步:设置通信参数 2F 03 18 02 01 00 00 00 //设置为循环同步 第3步:清空映射对象数目 2F 03 1A 00 00 00 00 00 第4步:映射对象 23 03 1A 01 20 00 41 23 第5步:设置映射对象个数 2F 03 1A 00 01 00 00 00 第6步:Enable PDO(最高位清零) 23 03 18 01 22 02 00 00 主轴设置成 2B 00 23 00 1E 00 00 00 设置成operation模式 驱动2 ID = 2 从轴 配置RPDO 第一步:DisablePDO(最高位置1) 23 05 14 01 22 02 00 80 第二步:设置通信参数 2F 03 14 02 01 00 00 00 //设置为循环同步 第三步:清空映射对象数目 2F 05 16 00 00 00 00 00 第四步:映射对象 23 05 16 01 20 00 41 23 第五步:设置映射对象个数 2F 05 16 00 01 00 00 00 第六步:Enable PDO(最高位清零) 23 05 14 01 22 02 00 00 第七步:从轴设置成the velocity loop is driven by the programmed velocity value. 2B 00 23 00 0B 00 00 40 第八步:设置成为operation 模式 设置同步消息周期 23 06 10 00 10 27 00 00 ///10ms同步一次 激活同步功能 23 05 10 00 80 00 00 40