Files
Uni-Lab-OS/unilabos/devices/liquid_handling/laiyu/docs/hardware/步进电机控制指令.md
q434343 a599eb70e5 3d sim (#97)
* 修改lh的json启动

* 修改lh的json启动

* 修改backend,做成sim的通用backend

* 修改yaml的地址,3D模型适配网页生产环境

* 添加laiyu硬件连接

* 修改移液枪的状态判断方法,

修改移液枪的状态判断方法,
添加三轴的表定点与零点之间的转换
添加三轴真实移动的backend

* 修改laiyu移液站

简化移动方法,
取消软件限制位置,
修改当值使用Z轴时也需要重新复位Z轴的问题

* 更新lh以及laiyu workshop

1,现在可以直接通过修改backend,适配其他的移液站,主类依旧使用LiquidHandler,不用重新编写

2,修改枪头判断标准,使用枪头自身判断而不是类的判断,

3,将归零参数用毫米计算,方便手动调整,

4,修改归零方式,上电使用机械归零,确定机械零点,手动归零设置工作区域零点方便计算,二者互不干涉

* 修改枪头动作

* 修改虚拟仿真方法

---------

Co-authored-by: zhangshixiang <@zhangshixiang>
Co-authored-by: Junhan Chang <changjh@dp.tech>
2025-11-15 02:50:17 +08:00

5.0 KiB

步进电机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校验算法

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反向