<!--
 * @Date: 2025-06-26 16:19:42
 * @Author: mypx
 * @LastEditors: mypx mypx_coder@163.com
 * @LastEditTime: 2025-06-27 08:32:34
 * @FilePath: README.md
 * @Description: 
 * Copyright (c) 2025 by mypx, All Rights Reserved.
-->
要通过STM32使用Modbus通信控制SV630P伺服驱动器实现启动、停止、恒速运动、转动指定角度等功能，需先明确Modbus通信参数及功能码映射，以下是具体实现步骤及指令说明：


### **一、Modbus通信基础配置**
1. **通信参数设置**  
   - 在SV630P驱动器中配置Modbus参数（通过功能码H0C组）：  
     - **H0C-00**：伺服轴地址（1~247，需与STM32设置一致）。  
     - **H0C-02**：波特率（如115200bps，对应H0C-02=6）。  
     - **H0C-03**：数据格式（如无校验、2个结束位，对应H0C-03=0）。  
   - STM32端需匹配上述参数，使用Modbus-RTU协议（RTU模式，CRC校验）。

2. **通信协议格式**  
   - **报文结构**：从站地址+功能码+数据+CRC校验。  
   - **示例**：读取寄存器0x1000，报文为 `01 03 10 00 00 01 CRC_L CRC_H`。


### **二、实现启动、停止功能**
#### **1. 伺服使能（启动）**  
- **功能码**：写单个寄存器（0x06）。  
- **寄存器地址**：  
  - **H03-00**（DI功能分配1）：需将DI1设为“伺服使能（S-ON）”，即向地址0x0300写入0x0001（Bit0=1）。  
  - **或直接操作控制字**：通过寄存器0x2000（控制字）写入0x0006（bit1=1，使能伺服）。  
- **指令示例**：  
  `01 06 03 00 00 01 CRC_L CRC_H`（使能DI1为S-ON）。

#### **2. 伺服禁止（停止）**  
- **方法1**：向0x0300写入0x0000（清除DI1使能）。  
- **方法2**：向0x2000写入0x0000（清除使能位）。  
- **指令示例**：  
  `01 06 03 00 00 00 CRC_L CRC_H`（禁止DI1）。


### **三、实现恒速运动**
#### **1. 速度模式设置**  
- **功能码**：写单个寄存器（0x06）。  
- **寄存器地址**：  
  - **H02-00**（控制模式选择）：写入0x0000（速度模式）。  
- **指令示例**：  
  `01 06 02 00 00 00 CRC_L CRC_H`（设置速度模式）。

#### **2. 速度指令给定**  
- **寄存器地址**：  
  - **H06-03**（速度指令键盘设定值）：写入目标转速（单位rpm，范围-6000~6000）。  
- **指令示例**：设置速度1000rpm：  
  `01 06 06 03 03 E8 CRC_L CRC_H`（0x03E8=1000）。

#### **3. 启动速度运行**  
- 确保伺服已使能（S-ON=1），速度指令生效后，电机按设定转速运行。


### **四、实现转动指定角度（位置模式）**
#### **1. 位置模式设置**  
- **寄存器地址**：  
  - **H02-00**：写入0x0001（位置模式）。  
- **指令示例**：  
  `01 06 02 00 00 01 CRC_L CRC_H`。

#### **2. 电子齿轮比配置**  
- **寄存器地址**：  
  - **H05-07**（电子齿轮比分子）和 **H05-09**（分母），需根据机械传动比设置。  
  - **示例**：若电机转1圈需要10000脉冲，编码器分辨率262144，则齿轮比=262144/10000=262144/10000，即H05-07=262144，H05-09=10000。

#### **3. 位置指令发送**  
- **方法1：脉冲指令（通过寄存器写入）**  
  - **寄存器0x2001**（位置指令值低32位）和 **0x2002**（高32位），写入目标脉冲数。  
  - **示例**：转动1圈（10000脉冲）：  
    `01 10 20 01 00 02 00 08 00 00 27 10 CRC_L CRC_H`（0x2710=10000）。  
- **方法2：多段位置指令**  
  - 通过H11组寄存器（如H11-00~H11-03）预设位置段，再通过DI功能选择段号。

#### **4. 启动位置运行**  
- 确保伺服使能，位置指令生效后，电机按脉冲数转动，完成后DO输出“定位完成”信号（可通过寄存器0x2100读取状态）。


### **五、关键状态监控**
- **运行状态读取**：  
  - **寄存器0x2100**（状态字）：bit0=1表示运行中，bit2=1表示定位完成。  
  - **指令示例**：读取状态字：  
    `01 03 21 00 00 01 CRC_L CRC_H`。  
- **转速/位置反馈**：  
  - **寄存器0x2080**（实际转速）、**0x200D**（位置偏差计数器）。


### **六、注意事项**
1. **指令顺序**：需先设置模式，再发送指令，最后使能伺服。  
2. **异常处理**：通过读取故障寄存器（0x2130）判断是否报错（如过流、过载），需先复位故障（写0x2101=0x0008）。  
3. **通信可靠性**：STM32需处理CRC校验错误、超时重发等机制，避免指令丢失。  

通过以上步骤，可实现STM32与SV630P的Modbus通信控制，完成启动、停止、恒速及定位功能。

---

在汇川SV630P伺服驱动器文档里，这些缩写有特定含义，结合伺服系统应用场景，为你解析：

### 一、DI（Digital Input  数字输入）
- **含义**：是驱动器的数字量输入端子 ，用于接收外部设备（像PLC、按钮、传感器等）发出的离散数字信号（通常是高低电平信号，比如24V为高电平代表“1” ，0V为低电平代表“0” ），以此控制驱动器的运行模式、启停、功能切换等逻辑。 
- **举例**：比如DI端子可接入“伺服使能”信号，当外部给该DI端子送入有效高电平，驱动器内部电路检测到后，会使能伺服电机，让电机处于可接收控制指令、准备运行的状态；还能接入“复位”信号，用于清除驱动器的故障状态等 。

### 二、VDI（Virtual Digital Input  虚拟数字输入 ）
- **含义**：是一种通过通信方式（如Modbus、CANopen等）模拟的“虚拟”数字输入信号 。不像DI是实实在在的硬件接线端子，VDI是借助通信报文来传递数字量输入的逻辑状态，可用于和DI类似的控制功能，好处是能减少硬件接线，实现更灵活的远程或总线控制。 
- **应用场景**：假设通过Modbus协议与驱动器通信，上位机（如PLC或工控机）可在通信报文中设置对应VDI参数的数值（0或1 ），驱动器解析报文后，就如同接收到真实DI端子的输入一样，执行相应动作，像通过VDI来切换控制模式、触发某些功能等 。

### 三、VDO（Virtual Digital Output  虚拟数字输出 ）
- **含义**：是虚拟的数字量输出，和VDI对应，通过通信方式向外输出驱动器的数字量状态信息 。它把驱动器内部的状态（如运行状态、故障状态、报警状态等）以数字量形式，通过通信报文发送给上位机或其他设备，无需实际的DO硬件接线就能传递状态。 
- **应用场景**：驱动器运行中出现故障，会把代表“故障”的VDO状态（比如1 ）通过通信发送给上位机，上位机解析后就能知晓驱动器故障，进而执行报警、停机等联动操作；也可用来传递“伺服准备好”“定位完成”等状态信息 。

简单总结就是，DI是物理接线的数字输入端子；VDI、VDO是依托通信实现的虚拟数字输入、输出，能让控制更灵活、减少硬件接线，方便进行总线或远程控制场景下的信号交互 。要是你看的文档里对这些有更细致的自定义解释，以文档为准哈，不同应用场景或自定义配置里，它们的功能表现可能也会有适配性调整。 