Canopen的cia402协议控制步进电机
- 硬件搭建
- 软件使用
- 发送写SDO报文格式如下
- 对于0x27、0x22、0x23、0x27、0x2B、0x2F解释
- 简单的驱动器相关参数
- 通常速度模式控制步骤如下
- 发送数据和驱动器返回数据如下图
- 发送读SDO报文格式如下
硬件搭建
在某宝上随便买个支持CANopen协议的驱动,主打的是性价比高,之后用我的周立功CAN通讯工具。
确定步进电机驱动器和上位机的通讯波特率,如果不匹配就无法进行连接。如果懒得去查,那就不断去切换波特率,什么时候有数据返回,就可以了。
软件使用
发送写SDO报文格式如下
红色:代表ID 因为是写入1号驱动器,所以用ds301中规定好的0x601。
橘色:代表功能,可以用22代替。
0x2F: 一个字节长度 // 1 byte data length
0x2B: 两个字节长度 // 2 byte data length
0x27: 三个字节长度 // 3 byte data length
0x23: 四个字节长度 // 4 byte data length
0x22: 未指定字节长度
绿色:代表索引(注意是小端模式,例如 40 60 实际上是 0x 6040)查询字典或者驱动器ds402可以知道具体含义。
蓝色:子索引 查询字典或者驱动器ds402可以知道具体含义。
紫色:数据 (注意数据的类型,长度) 。
对于0x27、0x22、0x23、0x27、0x2B、0x2F解释
简单的驱动器相关参数
通常速度模式控制步骤如下
1、先设置工作模式(6060h-00)为 3,然后监控工作模式(6061h-00)也为 3,表示处于速度模式;
2、写入目标速度(60FFh-00),加速时间(6083h-00),减速时间(6084h-00);
3、往控制字中依次写入 6、7、15,中间间隔 10ms 左右,写入完成后,电机使能, 电机开始运行。
就简简单单的三个步骤,最终例子如下:
如果需要停下来发送:
配置模式的时候需要注意下,我发现其他驱动器不支持0x22,必须要0x2F才能成功控制电机启动。具体需要查看手册。
发送数据和驱动器返回数据如下图
如果此时电机转动了,说明我们的硬件环境没有问题。
为什么电机会转动,是因为我们写入了速度。
我们把速度写入了 60ff 里面。
发送读SDO报文格式如下
返回数据中的CMD数据则不同,会根据查询索引的长度有所变化。
读取SDO时,CMD统一为0x40。
如果读取成功,反馈回以下格式数据
返回数据中的CMD数据则不同,会根据查询索引的长度有所变化。
0x4F: 一个字节长度 // 1 byte data length
0x4B: 两个字节长度 // 2 byte data length
0x47: 三个字节长度 // 3 byte data length
0x43: 四个字节长度 // 4 byte data length
举例:查询1号站点的当前状态,对象为6041,发送如下:
如果读取失败,则返回读取失败命令: