ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《PDxxS1步进电机闭环驱动器用户手册_V1.0》第四章(4.4-4.5)

《PDxxS1步进电机闭环驱动器用户手册_V1.0》第四章(4.4-4.5)

原创 嵌入式/内核开发 作者:正点原子 时间:2026-07-14 10:06:41 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    764016