4.4 运动类指令说明
4.4.1 力矩模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F0H |
Byte1 |
Byte2 |
Byte3 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F0H |
Byte1 |
CHECKSUM |
5CH |
该指令用于力矩模式控制。
下行帧的指令数据:
Byte1:电机旋转方向,有以下可能:
0:正转
1:反转
Byte2~ Byte3:电流,取值范围:0~3000(单位:mA)(类型uint16_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F0 00 03 E8 A1 5C
从机操作成功,应答 C5 01 F0 01 B7 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2~ Byte3:电流为1000mA
上行帧的指令数据Byte1:1,操作成功
4.4.2 速度模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F1H |
Byte1 |
… |
Byte6 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F1H |
Byte1 |
CHECKSUM |
5CH |
该指令用于速度模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:
0:正转
1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte6:速度,取值范围0.1~6000 RPM(float → uint8_t[4])
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F1 00 64 44 16 00 00 75 5C
从机操作成功,应答 C5 01 F1 01 B8 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值600.0 RPM,用联合体float→ uint8_t[4]读取为0x44160000
方法可参考:例程00 联合体float 和uint32_t类型互换读取方法
上行帧的指令数据Byte1:1,操作成功
4.4.3 绝对位置模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F2H |
Byte1 |
… |
Byte8 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F2H |
Byte1 |
CHECKSUM |
5CH |
该指令用于绝对位置模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:0:正转;1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte4:速度,取值范围0~6000 RPM(类型uint16_t)
Byte5~ Byte8:绝对位置(注意51200为一圈)(类型uint32_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F2 00 64 07 D0 00 07 D0 00 CA 5C
从机操作成功,应答 C5 01 F2 01 B9 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值2000 RPM
Byte5~ Byte8:绝对位置,取值512000
上行帧的指令数据Byte1:1,操作成功
注意:在绝对位置模式控制下,当前位置角度值到设定的绝对位置值后,重复发送上述指令,电机将不会继续运动,除非把绝对位置值改大,或者将当前位置角度清零后,再发。
4.4.4 相对位置模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F3H |
Byte1 |
… |
Byte8 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F3H |
Byte1 |
CHECKSUM |
5CH |
该指令用于相对位置模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:0:正转;1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte4:速度,取值范围0~6000 RPM(类型uint16_t)
Byte5~ Byte8:相对位置(注意51200为一圈)(类型uint32_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F3 00 64 07 D0 00 07 D0 00 CB 5C
从机操作成功,应答 C5 01 F3 01 BA 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值2000 RPM
Byte5~ Byte8:相对位置,取值512000(即转10圈)
上行帧的指令数据Byte1:1,操作成功
注意:在相对位置模式控制下,每次设置新的相对位置,当前位置角度值会一直累加,可重复发送指令,让电机继续运动。
4.4.5 脉冲模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F4H |
无 |
BCH |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F4H |
Byte1 |
CHECKSUM |
5CH |
该指令用于让电机进入脉冲模式控制。说明:EN引脚用于使能脉冲模式控制,STP引脚用于输入脉冲,DIR用于控制电机旋转方向,涉及到的功能码有0x6D和0x6E。
举个例子:
主机发送 C5 01 F4 BA 5C
从机操作成功,应答 C5 01 F4 01 BB 5C
上行帧的指令数据Byte1:1,操作成功
进入脉冲模式后,具体的接线可以查看第2章的接线方法,具体的控制方法可以参考我们提供的STM32例程:05 脉冲模式控制(计算目标速度)和06 脉冲模式控制(计算脉冲频率)。
脉冲模式控制简明介绍:
1, 脉冲模式使能:EN引脚和0x6E功能码指令共同控制
2, 脉冲模式电机旋转方向:DIR引脚和0x6D功能码指令共同控制
3, 脉冲模式电机旋转速度:确定(1.8°步进角)电机的情况下,由脉冲频率和细分控制
公式:RPM = (脉冲频率 * 60) / (每圈总步数)
其中,RPM表示速度,单位:RPM,即圈每分钟。脉冲频率,单位:Hz。每圈总步数,即电机转一圈要多少个步数(一个脉冲对应一个微步)。在无细分的情况下,1.8°步进角的步进电机每旋转一圈对应200步(即360°/1.8°)。
细分:一种驱动技术,通过控制电机线圈中的电流,将电机的一个完整物理步距(如1.8°)分割成若干个更小的、电流连续的微步来运行。比如:对于 1.8°(200 步/圈)的电机,4细分后,每个微步的步距角 = 1.8° / 4 = 0.45°,每圈总步数就是360°/ 0.45°= 800。
所以一般计算每圈总步数,都会先看细分设置了多少。例如我们的步进电机驱动器默认的细分设置为16,那么每圈总步数 = (360°/1.8°) * 16 = 3200 个脉冲/圈。
控制分辨率越高,运行越平滑。
4, 脉冲模式电机旋转角度:确定(1.8°步进角)电机的情况下,由细分和脉冲数控制
知道细分概念,控制旋转角度很简单了。例如:想控制电机旋转720°,在16细分下,只需要输入3200 * 2 = 6400个脉冲即可。
4.4.6 脉宽位置模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F5H |
Byte1 |
… |
Byte12 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F5H |
Byte1 |
CHECKSUM |
5CH |
该指令用于脉宽位置模式控制,也就是通过控制STP引脚输入的PWM脉宽(即占空比),来控制电机旋转的位置角度。PWM占空比和旋转的位置角度对应关系由用户自定义。
下行帧的指令数据:
Byte1~ Byte2:高电平脉宽最长长度,取值范围:0~50000us(类型uint16_t)
Byte3~ Byte4:高电平脉宽最短长度,取值取值:0~50000us(类型uint16_t)
Byte5~ Byte8:脉宽最长长度对应的位置(注意51200为一圈)(类型int32_t)
Byte9~ Byte12:脉宽最短长度对应的位置(注意51200为一圈)(类型int32_t)
上行帧的指令数据:Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F5 09 C4 01 F4 00 00 64 00 00 00 00 00 E1 5C
从机操作成功,应答 C5 01 F5 01 BC 5C
下行帧的指令数据:
Byte1~ Byte2:高电平脉宽最长长度,取值:2500us
Byte3~ Byte4:高电平脉宽最短长度,取值:500us
Byte5~ Byte8:脉宽最长长度对应的位置,取值:25600(旋转半圈)
Byte9~ Byte12:脉宽最短长度对应的位置,取值:0(未旋转)
上行帧的指令数据Byte1:1,操作成功
该例子模仿SG90舵机来定义,PWM的占空比和控制关系如下:
PWM的频率设置为50Hz(即周期为20ms)
高电平时间 占空比 角度
0.5ms 2.5% 0°
1.0ms 5.0% 45°
1.5ms 7.5% 90°
2.0ms 10.0% 135°
2.5ms 12.5% 180°
由PWM的占空比和控制关系可以知道:
当角度为180°时,对应高电平脉宽最长长度,取值为:2.5ms(即2500us)
当角度为0°时,对应高电平脉宽最短长度,取值为:0.5ms(即500us)
由于驱动器的位置值51200为一圈,所以脉宽最长长度对应的位置180°,对应的取值为:25600(旋转半圈)。脉宽最短长度对应的位置0°,对应的取值:0(未旋转)。
进入脉宽位置模式后,具体的接线可以查看第2章的接线方法,具体的控制方法可以参考我们提供的STM32例程:07 脉宽位置模式。
4.4.7 脉宽力矩模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F6H |
Byte1 |
… |
Byte12 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F6H |
Byte1 |
CHECKSUM |
5CH |
该指令用于脉宽力矩模式控制,也就是通过控制STP引脚输入的PWM脉宽(即占空比),来控制电机旋转的力矩。PWM占空比和旋转的力矩对应关系由用户自定义。
下行帧的指令数据:
Byte1~ Byte2:高电平脉宽最长长度,取值范围:0~50000us(类型uint16_t)
Byte3~ Byte4:高电平脉宽最短长度,取值取值:0~50000us(类型uint16_t)
Byte5~ Byte8:脉宽最长长度对应的电流(取值范围:0~3000mA)(类型int32_t)
Byte9~ Byte12:脉宽最短长度对应的电流(取值范围:0~3000mA)(类型int32_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F6 0D AC 01 F4 00 00 0B B8 00 00 00 00 2D 5C
从机操作成功,应答 C5 01 F6 01 BD 5C
下行帧的指令数据:
Byte1~ Byte2:高电平脉宽最长长度,取值:3500us
Byte3~ Byte4:高电平脉宽最短长度,取值:500us
Byte5~ Byte8:脉宽最长长度对应的电流,取值:3000mA
Byte9~ Byte12:脉宽最短长度对应的电流,取值:0 mA
上行帧的指令数据Byte1:1,操作成功
该例子自定义PWM的占空比和电流关系如下:
PWM的频率设置为100Hz(即周期为10ms)
高电平时间 占空比 电流
0.5ms 5% 0 mA
1.0ms 10% 500 mA
1.5ms 15% 1000 mA
2.0ms 20% 1500 mA
2.5ms 25% 2000 mA
3.0ms 30% 2500 mA
3.5ms 35% 3000 mA
由PWM的占空比和控制关系可以知道:
当电流为3000 mA时,对应高电平脉宽最长长度,取值为:3.5ms(即3500us)
当角度为0 mA时,对应高电平脉宽最短长度,取值为:0.5ms(即500us)
进入脉宽力矩模式后,具体的接线可以查看第2章的接线方法,具体的控制方法可以参考我们提供的STM32例程:08 脉宽力矩模式控制。
4.4.8 脉宽速度模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
F7H |
Byte1 |
… |
Byte12 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F7H |
Byte1 |
CHECKSUM |
5CH |
该指令用于脉宽速度模式控制,也就是通过控制STP引脚输入的PWM脉宽(即占空比),来控制电机旋转的速度。PWM占空比和旋转的速度对应关系由用户自定义。
下行帧的指令数据:
Byte1~ Byte2:高电平脉宽最长长度,取值范围:0~50000us(类型uint16_t)
Byte3~ Byte4:高电平脉宽最短长度,取值取值:0~50000us(类型uint16_t)
Byte5~ Byte8:脉宽最长长度对应的速度(取值范围:0~6000 RPM)(类型int32_t)
Byte9~ Byte12:脉宽最短长度对应的速度(取值范围:0~6000 RPM)(类型int32_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 F7 0C E4 01 2C 00 00 0B B8 00 00 00 00 9D 5C
从机操作成功,应答C5 01 F7 01 BE 5C
下行帧的指令数据:
Byte1~ Byte2:高电平脉宽最长长度,取值:3300us
Byte3~ Byte4:高电平脉宽最短长度,取值:300us
Byte5~ Byte8:脉宽最长长度对应的速度,取值:3000 RPM
Byte9~ Byte12:脉宽最短长度对应的速度,取值:0 RPM
上行帧的指令数据:
Byte1:1,操作成功
该例子自定义PWM的占空比和速度关系如下:
PWM的频率设置为100Hz(即周期为10ms)
高电平时间 占空比 电流
0.3ms 3% 0 RPM
0.6ms 6% 300 RPM
0.9ms 9% 600 RPM
1.2ms 12% 900 RPM
1.5ms 15% 1200 RPM
1.8ms 18% 1500 RPM
2.1ms 21% 1800 RPM
2.4ms 24% 2100 RPM
2.7ms 27% 2400 RPM
3.0ms 30% 3000 RPM
3.3ms 33% 3000 RPM
由PWM的占空比和控制关系可以知道:
当速度为3000 RPM时,对应高电平脉宽最长长度,取值为:3.3ms(即3300us)
当速度为0 RPM时,对应高电平脉宽最短长度,取值为:0.3ms(即300us)
进入脉宽力矩模式后,具体的接线可以查看第2章的接线方法,具体的控制方法可以参考我们提供的STM32例程:09 脉宽速度模式控制。
4.4.9 将当前的位置角度清零指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F8H |
无 |
BEH |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F8H |
Byte1 |
CHECKSUM |
5CH |
该指令用于将当前位置角度、位置误差和累计脉冲数清零。
举个例子:
主机发送 C5 01 F8 BE 5C
从机操作成功,应答 C5 01 F8 01 BF 5C
4.4.10 解除堵转保护指令
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F9H |
无 |
BFH |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
F9H |
Byte1 |
CHECKSUM |
5CH |
该指令用于解除堵转保护(电机发生堵转后,可以使用该指令解除堵转保护)。
举个例子:
主机发送 C5 01 F9 BF 5C
从机操作成功,应答 C5 01 F9 01 C0 5C
4.4.11 电机使能控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
FAH |
Byte1 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | ||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | |
|
C5H |
01H |
FAH |
Byte1 |
Byte2 |
CHECKSUM |
5CH |
该指令用于使能电机。
下行帧的指令数据:
Byte1:0:使能电机;1:失能电机
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:0:使能电机;1:失能电机
举个例子:
主机发送 C5 01 FA 00 C0 5C
从机操作成功,应答 C5 01 FA 01 00 C1 5C
下行帧的指令数据Byte1:0:使能电机
上行帧的指令数据Byte2:0:使能电机
4.4.12 清除状态(堵转、刹车,失能)指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
FBH |
无 |
C 1H |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
FBH |
Byte1 |
CHECKSUM |
5CH |
该指令可以清除状态(包括:堵转、刹车,失能)。
举个例子:
主机发送 C5 01 FB C1 5C
从机操作成功,应答 C5 01 FB 01 C2 5C
4.4.13 立即停止(刹车)指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
FCH |
无 |
C 2H |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
FCH |
Byte1 |
CHECKSUM |
5CH |
该指令用于立即停止。注意:刹停后,请及时清除电机状态,否则电机会严重发烫!!!
举个例子:
主机发送 C5 01 FC C2 5C
从机操作成功,应答 C5 01 FC 01 C3 5C
4.4.14 开环速度模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
E0H |
Byte1 |
… |
Byte6 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
E0H |
Byte1 |
CHECKSUM |
5CH |
该指令用于速度模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:
0:正转
1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte6:速度,取值范围0.1~400 RPM(float → uint8_t[4])
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 E0 00 64 41 70 00 00 BB 5C
从机操作成功,应答 C5 01 E0 01 A7 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值15.0 RPM,用联合体float→ uint8_t[4]读取为0x41700000
方法可参考:例程00 联合体float 和uint32_t类型互换读取方法
上行帧的指令数据Byte1:1,操作成功
4.4.15 开环绝对位置模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
E1H |
Byte1 |
… |
Byte8 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
E1H |
Byte1 |
CHECKSUM |
5CH |
该指令用于绝对位置模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:0:正转;1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte4:速度,取值范围0~400 RPM(类型uint16_t)
Byte5~ Byte8:绝对位置(注意51200为一圈)(类型uint32_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 E1 00 64 00 64 00 00 C8 00 37 5C
从机操作成功,应答 C5 01 E1 01 A8 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值100 RPM
Byte5~ Byte8:绝对位置,取值51200
上行帧的指令数据Byte1:1,操作成功
注意:在绝对位置模式控制下,当前位置角度值到设定的绝对位置值后,重复发送上述指令,电机将不会继续运动,除非把绝对位置值改大,或者将当前位置角度清零后,再发。
4.4.16 开环相对位置模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
E2H |
Byte1 |
… |
Byte8 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
E2H |
Byte1 |
CHECKSUM |
5CH |
该指令用于相对位置模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:0:正转;1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte4:速度,取值范围0~400 RPM(类型uint16_t)
Byte5~ Byte8:相对位置(注意51200为一圈)(类型uint32_t)
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 E2 00 64 00 64 00 00 C8 00 38 5C
从机操作成功,应答 C5 01 E2 01 A9 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值100 RPM
Byte5~ Byte8:相对位置,取值51200
上行帧的指令数据Byte1:1,操作成功
注意:在相对位置模式控制下,每次设置新的相对位置,当前位置角度值会一直累加,可重复发送指令,让电机继续运动。
4.4.17 开环脉冲模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
E3H |
无 |
A9H |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
E3H |
Byte1 |
CHECKSUM |
5CH |
该指令用于让电机进入脉冲模式控制。说明:EN引脚用于使能脉冲模式控制,STP引脚用于输入脉冲,DIR用于控制电机旋转方向,涉及到的功能码有0x6D和0x6E。
举个例子:
主机发送 C5 01 E3 A9 5C
从机操作成功,应答 C5 01 E3 01 AA 5C
上行帧的指令数据Byte1:1,操作成功
进入脉冲模式后,具体的接线可以查看第2章的接线方法,具体的控制方法可以参考我们提供的STM32例程:05 脉冲模式控制(计算目标速度)和06 脉冲模式控制(计算脉冲频率)。
4.4.18 IO启停模式控制指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
E4H |
Byte1 |
… |
Byte6 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
E4H |
Byte1 |
CHECKSUM |
5CH |
该指令用于速度模式控制。
下行帧的指令数据:
Byte1:电机旋转方向:
0:正转
1:反转
Byte2:加减速度,取值范围0~200,数值越大加减速度越大(注意:0表示直接启动)
Byte3~ Byte6:速度,取值范围0.1~6000 RPM(float → uint8_t[4])
上行帧的指令数据:
Byte1:表示指令操作结果
举个例子:
主机发送 C5 01 E4 00 64 42 C8 00 00 18 5C
从机操作成功,应答 C5 01 E4 01 AB 5C
下行帧的指令数据:
Byte1:电机旋转方向:0:正转
Byte2:加减速度,取值100
Byte3~ Byte4:速度,取值50.0 RPM,用联合体float→ uint8_t[4]读取为0x42C80000
方法可参考:例程00 联合体float 和uint32_t类型互换读取方法
上行帧的指令数据Byte1:1,操作成功
4.5 回零类指令说明
4.5.1 设置左限位原点指令
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
90H |
Byte1 |
… |
Byte4 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
90H |
Byte1 |
… |
Byte5 |
CHECKSUM |
5CH |
该指令用于设置回零零点位置(类型int32_t)。
下行帧的指令数据:
Byte1~ Byte4:左限位原点位置
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2~ Byte5:左限位原点位置
举个例子:
主机发送 C5 01 90 00 00 C8 00 1E 5C
从机操作成功,应答 C5 01 90 01 00 00 C8 00 1F 5C
下行帧的指令数据Byte1~ Byte4:设置回零零点位置为51200
上行帧的指令数据Byte2~ Byte5:回零零点位置为51200
4.5.2 设置有无限位回零指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
91H |
Byte1 |
… |
Byte8 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
91H |
Byte1 |
… |
Byte9 |
CHECKSUM |
5CH |
该指令用于设置有无限位回零。
下行帧的指令数据:
Byte1:使用无限位回零或有限位回零:
0:左无限位回零;
1:右无限位回零;
2:左有限位回零;
3:右有限位回零;
Byte2:电机旋转方向,0:正转;1:反转
Byte3~ Byte6:电机旋转速度范围:0~6000(单位RPM)
Byte7~ Byte8:限位电流范围:0~3000(单位mA),注意:限位电流,只对无限位回零有作用,用于检测是否到位
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:使用无限位回零或有限位回零
Byte3:电机旋转方向
Byte4~ Byte7:电机旋转速度
Byte8~ Byte9:限位电流
举个例子:
主机发送 C5 01 91 01 00 00 00 07 D0 0B B8 F2 5C
从机操作成功,应答 01 91 01 01 00 00 00 07 D0 0B B8 F3 5C
下行帧的指令数据:
Byte1:使用无限位回零或有限位回零,1:有限位回零
Byte2:电机旋转方向,0:正转
Byte3~ Byte6:电机旋转速度:2000 RPM
Byte7~ Byte8:限位电流:3000 mA
上行帧的指令数据:Byte1为操作结果,其他和下行帧一样
4.5.3 触发回零指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
92H |
Byte1 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | ||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | |
|
C5H |
01H |
92H |
Byte1 |
Byte2 |
CHECKSUM |
5CH |
该指令用于触发回零(该零点以左限位原点为准)。
下行帧的指令数据:
Byte1:回零模式:
0:单圈回零(按完整一圈去找到原点信号)
1:就近回零(电机从当前位置开始,朝最近的原点位置移动)
2:多圈回零(找到绝对0点)
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:回零模式
举个例子:
主机发送 C5 01 92 01 59 5C
从机操作成功,应答 C5 01 92 01 01 5A 5C
下行帧的指令数据Byte1:回零模式:1:就近回零
上行帧的指令数据Byte2:回零模式:1:就近回零
4.5.4 强制中断并退出回零操作指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
93H |
无 |
59H |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
93H |
Byte1 |
CHECKSUM |
5CH |
该指令用于强制中断并退出回零操作。
举个例子:
主机发送 C5 01 93 59 5C
从机操作成功,应答 C5 01 93 01 5A 5C
4.5.5 读取回零参数指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
94H |
无 |
5A H |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
94H |
Byte1 |
… |
Byte18 |
CHECKSUM |
5CH |
该指令用于读取回零参数。
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:表示上电自动回零标志,有以下可能:
0:无需上电自动回零 1:上电自动回零
Byte3:表示回零状态,有以下可能:
0:空闲态
1:正在运行
2:回零完成
3:回零失败未找到零点
Byte4~ Byte5:表示限位电流,范围:0~3000(单位:mA)(类型int16_t)
Byte6~ Byte9:表示左限位原点,(类型int32_t)
Byte10~ Byte13:表示超时时间(单位:ms)(类型uint32_t)
Byte14~ Byte17:表示右限位原点,(类型int32_t)
Byte18:表示左右限位开关状态:
举个例子:
主机发送 C5 01 94 5A 5C
从机操作成功,应答C5 01 94 01 00 00 01 2C 00 00 C8 00 00 00 27 10 00 00 C8 00 01 50 5C
上行帧的指令数据:
Byte2:00表示上电自动回零标志,0:无需上电自动回零
Byte3:00表示回零状态,0:空闲态
Byte4~ Byte5:01 2C表示限位电流,300mA
Byte6~ Byte9:00 00 C8 00表示左限位原点,51200
Byte10~ Byte13:00 00 27 10表示超时时间,10000ms
Byte14~ Byte17:00 00 C8 00表示右限位原点,51200
Byte18:01表示开启左右限位
4.5.6 修改原点回零超时时间指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
95H |
Byte1 |
… |
Byte4 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
95H |
Byte1 |
… |
Byte5 |
CHECKSUM |
5CH |
该指令用于修改原点回零超时时间(单位:ms)(类型uint32_t)。
下行帧的指令数据:
Byte1~ Byte4:原点回零超时时间
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2~ Byte5:原点回零超时时间
举个例子:
主机发送 C5 01 95 00 00 13 88 F6 5C
从机操作成功,应答 C5 01 95 01 00 00 13 88 F7 5C
下行帧的指令数据:
Byte1~ Byte4:点回零超时时间为5000ms
上行帧的指令数据:
Byte2~ Byte5:点回零超时时间为5000ms
4.5.7 读取回零状态指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
96H |
无 |
5C H |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | ||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | |
|
C5H |
01H |
96H |
Byte1 |
Byte2 |
CHECKSUM |
5CH |
该指令用于读取回零状态。
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:表示回零状态,有以下可能:
0:空闲态
1:正在运行
2:回零完成
3:回零失败未找到零点
举个例子:
主机发送 C5 01 96 5C 5C
从机操作成功,应答C5 01 96 01 00 5D 5C
上行帧的指令数据:Byte2:0x00表示空闲态
4.5.8 设置上电自动回零指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
97H |
Byte1 |
5 EH |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | ||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | |
|
C5H |
01H |
97H |
Byte1 |
Byte2 |
CHECKSUM |
5CH |
该指令用于设置上电是否自动回零(该零点对应左限位原点)。
下行帧的指令数据:
Byte1:是否上电自动回零,有以下可能:
0:上电不自动回零
1:上电自动回零
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:表示上电自动回零标志
举个例子:
主机发送 C5 01 97 01 5E 5C
从机操作成功,应答 C5 01 97 01 01 5F 5C
下行帧的指令数据Byte1:1:上电自动回零
上行帧的指令数据Byte2:1:上电自动回零
4.5.9 设置右限位原点指令
|
下行帧 ( 上位机 --> 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
98H |
Byte1 |
… |
Byte4 |
CHECKSUM |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | |||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | ||
|
C5H |
01H |
98H |
Byte1 |
… |
Byte5 |
CHECKSUM |
5CH |
该指令用于设置回零零点位置(类型int32_t)。
下行帧的指令数据:
Byte1~ Byte4:右限位原点位置
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2~ Byte5:右限位原点位置
举个例子:
主机发送 C5 01 98 00 00 C8 00 26 5C
从机操作成功,应答 C5 01 98 01 00 00 C8 00 27 5C
下行帧的指令数据Byte1~ Byte4:设置回零零点位置为51200
上行帧的指令数据Byte2~ Byte5:回零零点位置为51200
4.5.10 设置左右限位开关状态
|
下行帧 ( 上位机 --> 驱动板 ) | |||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 |
|
C5H |
01H |
99H |
Byte1 |
5 EH |
5CH |
|
上行帧 ( 上位机 <-- 驱动板 ) | ||||||
|
帧头 |
从机地址 |
功能码 |
指令数据 |
检验码 |
帧尾 | |
|
C5H |
01H |
99H |
Byte1 |
Byte2 |
CHECKSUM |
5CH |
该指令用于设置左右限位是否开启,开启后电机运动范围受限于左右限位原点。
下行帧的指令数据:
Byte1:是否开启左右限位开关,有以下可能:
0:关闭左右限位
1:开启左右限位
上行帧的指令数据:
Byte1:表示指令操作结果
Byte2:表示左右限位开关标志
举个例子:
主机发送 C5 01 99 01 60 5C
从机操作成功,应答 C5 01 99 01 01 61 5C
下行帧的指令数据Byte1:1:开启左右限位
上行帧的指令数据Byte2:1:开启左右限位
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3175842/ ,如需转载,请注明出处,否则将追究法律责任。