CANFD:
使用示例 1. 环境配置
- 仲裁域波特率:1Mbps 80%。
- 数据与波特率:5Mbps 75%。
2. 基础示例
读取 ID 为 1 的当前位置
指令 = CMD_RD;当前位置低 16 位地址 = 0x14,读取两个寄存器的数据;
指令包:
CAN-ID | DLC | Byte1 | Byte2 | Byte3 |
---|---|---|---|---|
0x01 | 0x03 | 0x01 | 0x14 | 0x02 |
当前位置查询 |
应答包:
CAN-ID | DLC | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 |
---|---|---|---|---|---|---|---|
0x101 | 0x06 | 0x01 | 0x14 | 0x10 | 0x27 | 0x00 | 0x00 |
当前位置 |
当前位置为:position = 0x00002710/10000 = 1°
设置 ID 为 1 的模块目标位置为 1°
指令 = CMD_WR;地址 = 0x36; 数据 = 10000 = 0x00002710;
(1)正常模式:
指令包:
CAN-ID | DLC | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 |
---|---|---|---|---|---|---|---|
0x01 | 0x06 | 0x02 | 0x36 | 0x10 | 0x27 | 0x00 | 0x00 |
设置目标位置 |
应答包:
CAN-ID | DLC | Byte1 | Byte2 | Byte3 | |
---|---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x36 | 0x01 | |
目标位置设置成功 |
(2)伺服模式:
指令包:
CAN-ID | DLC | Byte1 | Byte2 | Byte3 | Byte4 |
---|---|---|---|---|---|
0x201 | 0x04 | 0x10 | 0x27 | 0x00 | 0x00 |
设置目标位置 |
应答包:
CAN-ID | DLC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x501 | 0x10 | 0x64 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x10 | 0x20 | 0x00 | 0x00 |
当前电流(100mA) | 当前速度(0) | 当前位置 | |||||||||||
13 | 14 | 15 | 15 | ||||||||||
0x01 | 0x00 | 0x00 | 0x00 | ||||||||||
使能状态(上使能状态) | 错误代码(无错误) |
3. 常用指令包示例
位置伺服指令包
当关节处于位置伺服模式下,关节进入周期性位置伺服控制阶段,控制器向各个关节模块发送位置指令帧,各个关节模块在收到指令帧之后进行相应的位置伺服控制,并将当前的位置信息、电流信息、速度信息、使能状态和错误代码通过一帧反馈帧发送给控制器。
如果一个总线上有 7 个模块参与周期性伺服控制,那么一个控制周期之内,总线上将会产生 14 帧的通讯,以此降低总线负载。
位置伺服指令帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | IDE | FDF | R0 | BRS | ESI | DLC/4 | Data(4Byte) | CRC | ACK | EOF | IFS | |||
ID+0x200 | 0 | 0 | 1 | 0 | 1 | 0 | Length | D0 | D1 | D2 | D3 | ||||
4 | 目前位置 |
伺服反馈帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | ||||||
---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | ...... | DLC/4 | Data(16Byte) | ...... | ||||
ID+0x500 | 0 | ...... | Length | D0~D3 | D4~D7 | D8~D11 | D12~D13 | D14~D15 | ...... |
16 | 当前电流 | 当前速度 | 当前位置 | 使能状态 | 错误代码 | ...... |
速度伺服指令包
当关节处于速度伺服模式下,关节进入周期性速度伺服控制阶段,控制器向各个关节模块发送速度指令帧,各个关节模块在收到指令帧之后进行相应的速度伺服控制,并将当前的位置信息、电流信息、速度信息、使能状态和错误代码通过一帧反馈帧发送给控制器。
速度伺服指令帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | IDE | FDF | R0 | BRS | ESI | DLC/4 | Data(4Byte) | CRC | ACK | EOF | IFS | |||
ID+0x300 | 0 | 0 | 1 | 0 | 1 | 0 | Length | D0 | D1 | D2 | D3 | ||||
4 | 目标速度 |
伺服反馈帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | ||||||
---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | ...... | DLC/4 | Data(16Byte) | ...... | ||||
ID+0x500 | 0 | ...... | Length | D0~D3 | D4~D7 | D8~D11 | D12~D13 | D14~D15 | ...... |
16 | 当前电流 | 当前速度 | 当前位置 | 使能状态 | 错误代码 | ...... |
电流伺服指令包
控制关节的电流,每下发一帧电流伺服指令帧,返回一帧伺服反馈帧。
电流伺服指令帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | IDE | FDF | R0 | BRS | ESI | DLC/4 | Data(4Byte) | CRC | ACK | EOF | IFS | |||
ID+0x400 | 0 | 0 | 1 | 0 | 1 | 0 | Length | D0 | D1 | D2 | D3 | ||||
4 | 目标速度 |
伺服反馈帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | ||||||
---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | ...... | DLC/4 | Data(16Byte) | ...... | ||||
ID+0x500 | 0 | ...... | Length | D0~D3 | D4~D7 | D8~D11 | D12~D13 | D14~D15 | ...... |
16 | 当前电流 | 当前速度 | 当前位置 | 使能状态 | 错误代码 | ...... |
关节状态查询指令包
周期性的查询关节的状态,为了提高总线利用率,将常用的关节数据通过一帧指令进行查询,关节收到该指令帧后,将错误代码、系统电压、系统温度、使能状态和当前位置放到一帧关节状态反馈帧内进行反馈。
关节状态查询指令帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | IDE | FDF | R0 | BRS | ESI | DLC/4 | Data(0Byte) | CRC | ACK | EOF | IFS |
ID+0x600 | 0 | 0 | 1 | 0 | 1 | 0 | Length | |||||
0 |
关节状态反馈帧:
仲裁域 | 控制域 | 数据域 | CRC及其他域 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
STID/11 | R1 | ...... | DLC/4 | Data(16Byte) | ...... | |||||
ID+0x700 | 0 | ....... | Length | D0~D1 | D2~D3 | D4~D5 | D6~D7 | D8~D11 | D12~D15 | ....... |
12 | 错误代码 | 系统电压 | 系统温度 | D6使能状态 D7抱闸状态 | 当前位置 | 当前电流 | ...... |
4. 使用示例
IAP 在线更新标志位(必要操作)
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x49 | 0x00 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x49 | 0x01 |
获取当前关节状态
指令包:
CAN-ID | DLC |
---|---|
0x601 | 0x00 |
应答包:
CAN-ID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|
0x701 | 0x10 | 0x00 | 0x00 | 0xFC | 0x08 | 0xEA | 0x01 | 0x01 | 0x00 |
错误代码 | 系统电压 | 系统温度 | 使能状态 | 抱闸状态 | |||||
D8 | D9 | D10 | D11 | D12 | D13 | D14 | D15 | ||
0x61 | 0x0D | 0x03 | 0x00 | 0xFA | 0xFF | 0xFF | 0xFF | ||
当前位置 | 当前电流 |
位置模式控制
(1)设置工作模式为位置模式:
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x30 | 0x03 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x30 | 0x01 |
(2)关节通过位置伺服指令运动:
通过关节状态查询指令查询到当前角度后,发送位置伺服指令,使关节运动±10°以内。例如当前角度为20°,关节运动到30°。
指令包:
CAN-ID | DLC | DATA | DATA | DATA | DATA |
---|---|---|---|---|---|
0x201 | 0x04 | 0xE0 | 0x93 | 0x04 | 0x00 |
应答包:
CAN-ID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|
0x501 | 0x10 | 0xC0 | 0xFF | 0xFF | 0xFF | 0x00 | 0x00 | 0x00 | 0x00 |
当前电流 | 当前速度 | ||||||||
D8 | D9 | D10 | D11 | D12 | D13 | D14 | D15 | ||
0x40 | 0x0D | 0x03 | 0x00 | 0x01 | 0x00 | 0x00 | 0x00 | ||
当前位置(运动开始之前的位置) | 使能状态 | 错误代码 |
再次获取关节状态,当前关节角度相交于开始前的位置±10°。
电流模式控制
(1)设置工作模式为电流模式:
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x30 | 0x01 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x30 | 0x01 |
(2)关节通过电流伺服指令运动:
发送电流伺服指令,关节根据电流值,正向或反向运动(数据为负值时关节反向运动,数据为正值时,关节正向运动),例如电流为500MA。
指令包:
CAN-ID | DLC | DATA | DATA | DATA | DATA |
---|---|---|---|---|---|
0x401 | 0x04 | 0xF4 | 0x01 | 0x00 | 0x00 |
应答包:
CAN-ID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|
0x501 | 0x10 | 0xF3 | 0xFF | 0xFF | 0xFF | 0x02 | 0x00 | 0x00 | 0x00 |
当前电流 | 当前速度 | ||||||||
D8 | D9 | D10 | D11 | D12 | D13 | D14 | D15 | ||
0xBB | 0xB0 | 0x09 | 0x00 | 0x01 | 0x00 | 0x00 | 0x00 | ||
当前位置(运动开始之前的位置) | 使能状态 | 错误代码 |
速度模式控制
(1)设置工作模式为速度模式:
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x30 | 0x02 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x30 | 0x01 |
(2)关节通过速度伺服指令运动:
发送速度伺服指令,关节根据速度值,正向或反向运动(数据为负值时关节反向运动,数据为正值时,关节正向运动),例如速度为:5RPM。
指令包:
CAN-ID | DLC | DATA | DATA | DATA | DATA |
---|---|---|---|---|---|
0x301 | 0x04 | 0xC4 | 0x09 | 0x00 | 0x00 |
应答包:
CAN-ID | DLC | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
---|---|---|---|---|---|---|---|---|---|
0x501 | 0x10 | 0xC0 | 0xFF | 0xFF | 0xFF | 0x00 | 0x00 | 0x00 | 0x00 |
当前电流 | 当前速度 | ||||||||
D8 | D9 | D10 | D11 | D12 | D13 | D14 | D15 | ||
0x76 | 0x14 | 0x03 | 0x00 | 0x01 | 0x00 | 0x00 | 0x00 | ||
当前位置(运动开始之前的位置) | 使能状态 | 错误代码 |
清除关节错误
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x0F | 0x01 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x0F | 0x01 |
注意
清除关节错误后,将工作模式切换到位置伺服模式,发送使能指令,关节使能成功。
设置关节零位
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x0E | 0x01 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x0E | 0x01 |
设置使能状态
上使能:
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x0A | 0x01 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x0A | 0x01 |
禁使能:
指令包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x01 | 0x03 | 0x02 | 0x0A | 0x00 |
应答包:
CAN-ID | DLC | CMD | INDEX | DATA |
---|---|---|---|---|
0x101 | 0x03 | 0x02 | 0x0A | 0x01 |
低功耗模式说明
低功耗模式开启后,每个关节的单个关节功耗最大不超过80W,当给内存向量表地址0x69写标志位为1时开始低功耗模式,写0时关闭低功耗模式进入正常关节状态。
说明
仅支持关节WHJ10N/WHJ30/WHJ60固件版本519及后续版本。
末端板模式说明
末端板模式,当内存向量表地址0x79为0时,表示末端板为非关节,当内存向量表地址0x79为1时,表示末端板为关节模式,此模式下末端板为关节。
说明
仅支持关节WHJ10N/WHJ30/WHJ60固件版本519及后续版本。
分时上电模式说明
关节分时模式,当内存向量表地址0x1f为0时,表示关节上电延时,当内存向量表地址0x1f为1时,表示表示关节上电无延时。
说明
仅支持关节WHJ10N/WHJ30/WHJ60固件版本519及后续版本。