添加原理图;

添加故障上报响应开发文档
This commit is contained in:
DESKTOP-2E6P1Q6\Administrator 2025-09-30 13:18:31 +08:00
parent cc7696c5ac
commit 521b2be597
4 changed files with 182 additions and 14 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,7 @@
## ADC原理说明
GD32F4系列搭载了高性能的12位逐次逼近型SARADC提供了非常灵活和强大的数据采集功能。其采集方式可以从**操作模式**和**数据转移方式**两个维度来理解。 GD32F4系列搭载了高性能的12位逐次逼近型SARADC提供了非常灵活和强大的数据采集功能。其采集方式可以从**操作模式**和**数据转移方式**两个维度来理解。
### 一、按操作模式划分 ### 一、按操作模式划分
@ -184,6 +188,8 @@ C1 -->|读取注入组<br>有专用寄存器| A2
三者协同工作,共同构成了一个高效、可靠且响应及时的数据采集系统。 三者协同工作,共同构成了一个高效、可靠且响应及时的数据采集系统。
## `adc_routine_channel_config`函数说明
在GD32微控制器的ADC驱动库中`adc_routine_channel_config`函数用于配置规则组(常规序列)的通道序列。 在GD32微控制器的ADC驱动库中`adc_routine_channel_config`函数用于配置规则组(常规序列)的通道序列。
### 🧾 函数原型 ### 🧾 函数原型
@ -222,15 +228,13 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
函数的作用就是将特定的物理通道(`channel`)安排到规则组转换序列中的指定位置(`rank`)上。 函数的作用就是将特定的物理通道(`channel`)安排到规则组转换序列中的指定位置(`rank`)上。
--- ---
## ADC程序模式说明
这几种ADC模式是STM32中常见的配置组合主要区别在于**转换组别、转换方式、数据采集方式**等方面。让我详细解释每种模式: 这几种ADC模式是STM32中常见的配置组合主要区别在于**转换组别、转换方式、数据采集方式**等方面。让我详细解释每种模式:
## ADC_MODE_0 - 基础单次转换模式 ### ADC_MODE_0 - 基础单次转换模式
```c ```c
// 规则组、单次转换、非扫描 // 规则组、单次转换、非扫描
@ -253,7 +257,7 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
触发 → 转换通道1 → 停止 → 等待下次触发 触发 → 转换通道1 → 停止 → 等待下次触发
``` ```
## ADC_MODE_1 - 注入组扫描模式 ### ADC_MODE_1 - 注入组扫描模式
```c ```c
// 注入组、单次转换、扫描、转换结束标志位采集 // 注入组、单次转换、扫描、转换结束标志位采集
@ -276,7 +280,7 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
触发 → 转换通道1 → 转换通道2 → 设置EOC标志 → 读取数据 触发 → 转换通道1 → 转换通道2 → 设置EOC标志 → 读取数据
``` ```
## ADC_MODE 2 - 中断方式注入组扫描 ### ADC_MODE 2 - 中断方式注入组扫描
```c ```c
// 注入组、单次转换、扫描、中断转换结束标志位采集 // 注入组、单次转换、扫描、中断转换结束标志位采集
@ -299,7 +303,7 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
触发 → 转换通道1 → 转换通道2 → 产生中断 → 在ISR中读取数据 触发 → 转换通道1 → 转换通道2 → 产生中断 → 在ISR中读取数据
``` ```
## ADC_MODE 3 - DMA连续采集模式 ### ADC_MODE 3 - DMA连续采集模式
```c ```c
// 规则组、连续转换、扫描、DMA采集 // 规则组、连续转换、扫描、DMA采集
@ -324,9 +328,9 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
↑_____________________________循环___________________________↑ ↑_____________________________循环___________________________↑
``` ```
## 关键概念对比 ### 关键概念对比
### 1. 规则组 vs 注入组 #### 1. 规则组 vs 注入组
| 特性 | 规则组 | 注入组 | | 特性 | 规则组 | 注入组 |
| ------ | -------- | ------------------ | | ------ | -------- | ------------------ |
@ -334,7 +338,7 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
| 通道数 | 最多16个 | 最多4个 | | 通道数 | 最多16个 | 最多4个 |
| 应用 | 常规测量 | 紧急或同步测量 | | 应用 | 常规测量 | 紧急或同步测量 |
### 2. 单次 vs 连续转换 #### 2. 单次 vs 连续转换
| 特性 | 单次转换 | 连续转换 | | 特性 | 单次转换 | 连续转换 |
| -------- | ---------------- | ------------ | | -------- | ---------------- | ------------ |
@ -342,7 +346,7 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
| CPU占用 | 低 | 需要管理数据 | | CPU占用 | 低 | 需要管理数据 |
| 适用场景 | 低速采样 | 高速连续采样 | | 适用场景 | 低速采样 | 高速连续采样 |
### 3. 数据获取方式对比 #### 3. 数据获取方式对比
| 方式 | 查询标志位 | 中断方式 | DMA方式 | | 方式 | 查询标志位 | 中断方式 | DMA方式 |
| ------- | ---------------- | ------------------- | -------- | | ------- | ---------------- | ------------------- | -------- |
@ -350,9 +354,9 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
| 实时性 | 一般 | 好 | 最好 | | 实时性 | 一般 | 好 | 最好 |
| 复杂度 | 简单 | 中等 | 复杂 | | 复杂度 | 简单 | 中等 | 复杂 |
## 实际应用建议 ### 实际应用建议
### 选择指南: #### 选择指南:
- **简单单通道读取** → MODE_0 - **简单单通道读取** → MODE_0
- **紧急多通道测量** → MODE_1或MODE_2 - **紧急多通道测量** → MODE_1或MODE_2
@ -360,10 +364,174 @@ void adc_routine_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t chann
- **需要实时响应** → MODE_2中断 - **需要实时响应** → MODE_2中断
- **需要低CPU占用** → MODE_3DMA - **需要低CPU占用** → MODE_3DMA
### 性能考虑: #### 性能考虑:
- DMA模式适合采样率>10Ksps的场景 - DMA模式适合采样率>10Ksps的场景
- 中断模式适合1-10Ksps的中等速率 - 中断模式适合1-10Ksps的中等速率
- 查询模式适合<1Ksps的低速应用 - 查询模式适合<1Ksps的低速应用
这些模式覆盖了从简单到复杂的各种ADC应用场景可以根据具体需求灵活选择。 这些模式覆盖了从简单到复杂的各种ADC应用场景可以根据具体需求灵活选择。
---
| 事件 | 断电保护 | 电压过高保护 | 过流保护 | 一般温度10℃以下故障 | 极限温度10℃以上故障 | 光电开关遮挡 |
| :--: | :----------: | :----------: | :------: | :----------------------: | :----------------------: | -------------------- |
| 响应 | 检测掉电存储 | 断电 | 电机停转 | -(仅故障回传) | 电机停转 | 同时累计遮挡电机停转 |
| | | | | | | |
| | | | | | | |
# 高精度转台/云台嵌入式软件故障上报与响应规范
## 概述
此文档定义了高精度转台(云台)嵌入式软件中的故障上报与响应机制。涵盖的主要故障类型包括电源异常(过电压、过流)、温度异常、光电挡板(限位传感器)异常、掉电保护等。
### 大概故障分类
按紧急程度分为P0致命、P1、P2、P3四类故障。
| 故障类型 | 定义 | 响应 |
| ------------- | ------------------------------------ | -------------------------------------- |
| P0 致命 | 严重电流过载、电压过高、温度过高 | 立即停机、断电、报警,并持久化故障状态 |
| P1 高 | 光电挡板遮挡、电流持续过流、电压过低 | 停机、限流、恢复模式,报警上报 |
| P2 中 | 温度接近限制、传感器异常 | 限速、报警上报 |
| P3 低(可不用) | 通信错误、较小的传感器波动 | 记录日志,便于后续诊断 |
## 关键设计原则
- **快速检测,安全响应**:利用硬件中断和软件冗余检测保障故障发生时的最短响应时间。
- **可恢复优先,不能恢复则安全停机**:在无法恢复的情况下紧急停机并持久化关键故障信息。
- **掉电保护**:确保在掉电时能够正确保存系统状态,以便恢复。
## 主要模块
### 电压监测
- **硬件设计**利用ADC模块或者电压比较器监测主电源电压。
- **故障响应**:过电压和欠电压将触发报警,并在满足条件时进行电机断电、停机。
### 电流监测
- **硬件设计**:使用霍尔传感器或分流电阻监测电机电流。
- **故障响应**持续过流时电机停止工作并切断PWM驱动或者发送停转电机指令。
### 温度监测
- **硬件设计**通过温度传感器如NTC热敏电阻或者TMP75进行监测。
- **故障响应**:超过设定温度阈值时,限制负载和转速,或停机保护。
### 光电挡板(限位)监测
- **硬件设计**:使用光电传感器或光耦监测挡板状态。
- **故障响应**:检测到遮挡时,立即停机,避免碰撞。
### 掉电保护
- **硬件设计**:通过监测电源电压下降,并使用电容保证在掉电瞬间写入系统状态。
- **故障响应**:在掉电事件前保存关键状态数据。
## 故障上报
错误代码使用统一格式进行上报,确保与上位机的兼容性。
| 错误码 | 错误描述 | 优先级 | 模块 |
| ---------- | -------------------- | ------ | ---------- |
| 0x01010001 | 主电源过压 | P1 | 电源 |
| 0x01010002 | 主电源欠压 | P1 | 电源 |
| 0x02020001 | 电机A持续过流 | P0 | 电流 |
| 0x02020002 | 电机B短路 | P0 | 电流 |
| 0x03030001 | 驱动模块过温 | P1 | 温度 |
| 0x04040001 | 光电挡板左侧遮挡异常 | P1 | 限位传感器 |
| 0x04040002 | 光电挡板右侧开路 | P2 | 限位传感器 |
| 0x05050001 | 编码器错位 | P2 | 传感器 |
## 测试与验收
### 单元测试
* 电压检测:模拟电压过高/过低,验证响应动作。
* 电流检测:模拟过流,验证驱动停止和故障上报。
* 温度检测:模拟温度过高,验证系统限速和停机保护。
### 集成测试
* 多故障并发:模拟电流过载和电压不稳,检查故障优先级和响应动作。
* 长时间压力测试:测试系统长时间稳定运行,模拟逐渐升温。
### 验收标准
* 掉电保护成功率99.9%(断电前成功写入状态)
* 电流/电压/温度监测反应时间≤5ms
* 故障上报与记录符合协议,信息完整且准确。
**示例上报报文格式**
```json
{
"error_code": "0x01020005",
"severity": "P1",
"timestamp": "2025-09-30T11:32:14Z",
"voltage_v": 28.3,
"current_a": 1.3,
"temp_c": 52.4,
"encoder_deg": 12.345,
"message": "motor B continuous overcurrent",
//"firmware": "v1.2.3",
"cmd_id": "PT-001"
"mac": "PT-001"
}
```
## C示例代码
```c
// 电流监测中断处理示例
void OVERCURRENT_IRQHandler(void) {
// 立即切断驱动使能
Motor_DisableDriver(MOTOR_B);
// 读取电流并记录
float current = adc_read(CURRENT_B);
log_error(ERROR_CODE_OVERCURRENT(MOTOR_B), "Overcurrent detected", current);
// 上报错误至上位机
ReportErrorToHost(ERROR_CODE_OVERCURRENT(MOTOR_B));
// 进入等待人工复位模式
EnterSafeLoop();
}
// 掉电ISR 保存最小状态
volatile bool power_failing = false;
void POWER_FALL_IRQHandler(void) {
if (power_failing) return;
power_failing = true;
// 禁止新动作立即切断PWM
Motor_StopAllPWMImmediate();
// 采集快照
Snapshot_t snap;
snap.magic = SNAP_MAGIC;
snap.timestamp = rtc_get_time();
snap.voltage = adc_read(VOLTAGE_CHANNEL);
snap.current = adc_read(CURRENT_CHANNEL);
snap.temp = adc_read(TEMP_CHANNEL);
snap.encoder_pos = encoder_get_position();
snap.error_flags = global_error_flags;
// 计算CRC并保存
snap.crc = crc32((uint8_t*)&snap, sizeof(snap) - sizeof(snap.crc));
FRAM_Write(SNAPSHOT_ADDR, (uint8_t*)&snap, sizeof(snap));
// 启动刹车机制
Hardware_EnableBrake();
// 进入安全循环
EnterSafeLoop();
}
```