# 步进电机B系列控制指令详解 ## 基本通信参数 - **通信方式**: RS485 - **协议**: Modbus - **波特率**: 115200 (默认) - **数据位**: 8位 - **停止位**: 1位 - **校验位**: 无 - **默认站号**: 1 (可设置1-254) ## 支持的功能码 - **03H**: 读取寄存器 - **06H**: 写入单个寄存器 - **10H**: 写入多个寄存器 ## 寄存器地址表 ### 状态监控寄存器 (只读) | 地址 | 功能码 | 内容 | 说明 | |------|--------|------|------| | 00H | 03H | 电机状态 | 0000H-待机/到位, 0001H-运行中, 0002H-碰撞停, 0003H-正光电停, 0004H-反光电停 | | 01H | 03H | 实际步数高位 | 当前电机位置的高16位 | | 02H | 03H | 实际步数低位 | 当前电机位置的低16位 | | 03H | 03H | 实际速度 | 当前转速 (rpm) | | 05H | 03H | 电流 | 当前工作电流 (mA) | ### 控制寄存器 (读写) | 地址 | 功能码 | 内容 | 说明 | |------|--------|------|------| | 04H | 03H/06H/10H | 急停指令 | 紧急停止控制 | | 06H | 03H/06H/10H | 失能控制 | 1-使能, 0-失能 | | 07H | 03H/06H/10H | PWM输出 | 0-1000对应0%-100%占空比 | | 0EH | 03H/06H/10H | 单圈绝对值归零 | 归零指令 | | 0FH | 03H/06H/10H | 归零指令 | 定点模式归零速度设置 | ### 位置模式寄存器 | 地址 | 功能码 | 内容 | 说明 | |------|--------|------|------| | 10H | 03H/06H/10H | 目标步数高位 | 目标位置高16位 | | 11H | 03H/06H/10H | 目标步数低位 | 目标位置低16位 | | 12H | 03H/06H/10H | 保留 | - | | 13H | 03H/06H/10H | 速度 | 运行速度 (rpm) | | 14H | 03H/06H/10H | 加速度 | 0-60000 rpm/s | | 15H | 03H/06H/10H | 精度 | 到位精度设置 | ### 速度模式寄存器 | 地址 | 功能码 | 内容 | 说明 | |------|--------|------|------| | 60H | 03H/06H/10H | 保留 | - | | 61H | 03H/06H/10H | 速度 | 正值正转,负值反转 | | 62H | 03H/06H/10H | 加速度 | 0-60000 rpm/s | ### 设备参数寄存器 | 地址 | 功能码 | 内容 | 默认值 | 说明 | |------|--------|------|--------|------| | E0H | 03H/06H/10H | 设备地址 | 0001H | Modbus从站地址 | | E1H | 03H/06H/10H | 堵转电流 | 0BB8H | 堵转检测电流阈值 | | E2H | 03H/06H/10H | 保留 | 0258H | - | | E3H | 03H/06H/10H | 每圈步数 | 0640H | 细分设置 | | E4H | 03H/06H/10H | 限位开关使能 | F000H | 1-使能, 0-禁用 | | E5H | 03H/06H/10H | 堵转逻辑 | 0000H | 00-断电, 01-对抗 | | E6H | 03H/06H/10H | 堵转时间 | 0000H | 堵转检测时间(ms) | | E7H | 03H/06H/10H | 默认速度 | 1388H | 上电默认速度 | | E8H | 03H/06H/10H | 默认加速度 | EA60H | 上电默认加速度 | | E9H | 03H/06H/10H | 默认精度 | 0064H | 上电默认精度 | | EAH | 03H/06H/10H | 波特率高位 | 0001H | 通信波特率设置 | | EBH | 03H/06H/10H | 波特率低位 | C200H | 115200对应01C200H | ### 版本信息寄存器 (只读) | 地址 | 功能码 | 内容 | 说明 | |------|--------|------|------| | F0H | 03H | 版本号 | 固件版本信息 | | F1H-F4H | 03H | 型号 | 产品型号信息 | ## 常用控制指令示例 ### 读取电机状态 ``` 发送: 01 03 00 00 00 01 84 0A 接收: 01 03 02 00 01 79 84 说明: 电机状态为0001H (正在运行) ``` ### 读取当前位置 ``` 发送: 01 03 00 01 00 02 95 CB 接收: 01 03 04 00 19 00 00 2B F4 说明: 当前位置为1638400步 (100圈) ``` ### 停止电机 ``` 发送: 01 10 00 04 00 01 02 00 00 A7 D4 接收: 01 10 00 04 00 01 40 08 说明: 急停指令 ``` ### 位置模式运动 ``` 发送: 01 10 00 10 00 06 0C 00 19 00 00 00 00 13 88 00 00 00 00 9F FB 接收: 01 10 00 10 00 06 41 CE 说明: 以5000rpm速度运动到1638400步位置 ``` ### 速度模式 - 正转 ``` 发送: 01 10 00 60 00 04 08 00 00 13 88 00 FA 00 00 F4 77 接收: 01 10 00 60 00 04 C1 D4 说明: 以5000rpm速度正转 ``` ### 速度模式 - 反转 ``` 发送: 01 10 00 60 00 04 08 00 00 EC 78 00 FA 00 00 A0 6D 接收: 01 10 00 60 00 04 C1 D4 说明: 以5000rpm速度反转 (EC78H = -5000) ``` ### 设置设备地址 ``` 发送: 00 06 00 E0 00 02 C9 F1 接收: 00 06 00 E0 00 02 C9 F1 说明: 将设备地址设置为2 ``` ## 错误码 | 状态码 | 含义 | |--------|------| | 0001H | 功能码错误 | | 0002H | 地址错误 | | 0003H | 长度错误 | ## CRC校验算法 ```c public static byte[] ModBusCRC(byte[] data, int offset, int cnt) { int wCrc = 0x0000FFFF; byte[] CRC = new byte[2]; for (int i = 0; i < cnt; i++) { wCrc ^= ((data[i + offset]) & 0xFF); for (int j = 0; j < 8; j++) { if ((wCrc & 0x00000001) == 1) { wCrc >>= 1; wCrc ^= 0x0000A001; } else { wCrc >>= 1; } } } CRC[1] = (byte) ((wCrc & 0x0000FF00) >> 8); CRC[0] = (byte) (wCrc & 0x000000FF); return CRC; } ``` ## 注意事项 1. 所有16位数据采用大端序传输 2. 步数计算: 实际步数 = 高位<<16 | 低位 3. 负数使用补码表示 4. PWM输出K脚: 0%开漏, 100%接地, 其他输出1KHz PWM 5. 光电开关需使用NPN开漏型 6. 限位开关: LF正向, LB反向