本文主要是介绍关节驱动器 CANFD 通信协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
睿尔曼关节采用了问答方式进行通信,控制器发出指令包,模块返回应答包。一个CAN 总线网络中允许有多个模块,所以每个模块都分配有一个 ID 号。控制器发出的控制指令中包含 ID 信息,只有匹配上 ID 号的模块才能完整接收这条指令,并返回应答信息。所有的查询、控制和参数修改指令均通过对一个储存于模块主控芯片内部的内存控制表的读写操作完成。内存控制表的每一个地址存储两个字节,数据存储和传输均使用小端模式
一、关节协议
1.指令类型
可用指令类型如下:
2.FADCAN 总线协议
使用CANFD 的标准帧格式,只使用数据帧,远程帧无应答。CANFD 协议的数据帧最长 64 个字节,通讯速率可达 5M,CANFD 协议的数据长度码如下所示。
3.常用指令包
指令包格式如下:
仲裁域:只有目标ID段需要仲裁,仲裁域ID即为模块ID,模块ID为0x00~0x1E(0~30), 广播ID为0x00(0)。ID0固定为接口板使用。
控制域:DLC长度,即数据域字节长度,最大位64个字节,数据长度表如上所示;BRS表示速率可变,可变为1,不可变为0;ESI,暂定为0,总线不主动报错。
数据域:数据域第一个字节为指令类型,第二个字节为控制表索引, 第三到第四个字节为随指令发送的数据。读指令有一个字节数据,表示所要读取的内存表寄存器的数量;写指令数据段有两个字节数据,为要写入内存表的内容,低位在前。
4.常用应答包
应答包格式如下:
应答包的格式与指令包基本一致,其区别在于:
若模块收到的是读指令,则返回的数据段为指定长度的数据。
若模块收到的是写指令,则返回的数据段为操作是否成功,0x01-成功,0x00-失败。应答包的ID为指令包ID+0x100.
备注:当下发的CANFD控制帧不符合协议要求时,驱动器返回CMD_ERR应答包,应答包格式如下所示。
ERR代表错误类型,错误代码如下所示:
5.位置伺服指令包
当关节处于位置伺服模式下,关节进入周期性位置伺服控制阶段,控制器向各个关节模块发送位置指令帧,各个关节模块在收到指令帧之后进行相应的位置伺服控制,并将当前的位置信息、电流信息、速度信息、使能状态和错误代码通过一帧反馈帧发送给控制器。如果一个总线上有7个模块参与周期性伺服控制,那么一个控制周期之内,总线上将会产生14帧的通讯,以此降低总线负载。
位置伺服指令帧:
6.速度伺服指令包
当关节处于速度伺服模式下,关节进入周期性速度伺服控制阶段,控制器向各个关节模块发送速度指令帧,各个关节模块在收到指令帧之后进行相应的速度伺服控制,并将当前的位置信息、电流信息、速度信息、使能状态和错误代码通过一帧反馈帧发送给控制器。
速度伺服指令帧:
7.电流伺服指令包
当机械臂拖动示教模式下,通过控制机械臂关节的电流,配合外部力矩完成拖动示教, 每下发一帧电流伺服指令帧,返回一帧伺服反馈帧,上传机械臂动力学关键数据。
电流伺服指令帧:
8. 关节状态查询指令包
二、关节协议示例
1.环境配置
2.IAP 在线更新标志位(必要操作)
3.获取当前关节状态
4.位置模式控制
(1)设置工作模式为位置模式
(2)关节通过位置伺服指令运动
5.电流模式控制
(1)设置工作模式为电流模式
(2)关节通过电流伺服指令运动
6.速度模式控制
(1)设置工作模式为速度模式
(2)关节通过速度伺服指令运动
7.清除关节错误
8.设置关节零位
9.设置使能状态
这篇关于关节驱动器 CANFD 通信协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!