docs(requirement): 需求文档添加

This commit is contained in:
Scottxjw
2026-08-12 15:50:58 +08:00
parent 66402d7e0b
commit 5189c665c3
2 changed files with 206 additions and 0 deletions

View File

@@ -0,0 +1,206 @@
# 1 数据获取
## 1.1 手动抓数据
### 1.1.1 Qfod
#### 1.1.1.1 日志 Format
`X#:Q A->B C D E`
#### 1.1.1.2 数据结构
| 字段标识 | 字段名称 | 数据类型 | 取值范围 | 说明 |
| ----- | ---------------- | ----------- | -------- | ---------------------------- |
| X | Charger Index | `uint8` | 0, 1 | 充电器索引,标识使用哪个充电器 |
| Q | Q Factor Flag | `uint8` | - | Q 值标记/标志位 |
| A | Coil Index | `uint8` | 0, 1, 2 | 线圈索引,标识检测的线圈编号 |
| B | ΔQ (Delta Q) | `int16` | - | Q 值变化量/差值,反映 Q 值的相对变化 |
| C | Current Q Factor | `float` | - | 当前实时 Q 值 |
| D | Raw Q Factor | `float` | - | 原始 Q 值(未经处理的测量值) |
| ==E== | ==FOD Type== | ==`uint8`== | ==见表 2== | ==异物类型编码,对应 Table 2 中的异物分类== |
#### 1.1.1.3 字段关系说明
- `X + A` 组合唯一标识一个检测通道(充电器 + 线圈)
- `B = C - D`(变化量 = 当前值 - 原始值)
### 1.1.2 Ploss fod
基于功率损耗的异物检测Power Loss FOD
#### 1.1.2.1 日志 Format
`FOD-> (1) X X X (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13)`
示例:
`FOD-> 4 2 1 127 10690 12013 35377 9904 1213 -2882 750 0 0 1 500 1`
> **说明**括号数字表示有效字段编号X 表示忽略该位置数据
前置参数(库内计算):
- `pow_loss` = 2005发射端基础损耗值
- `delta_p` = 2200功率损耗补偿系数**调试关键变量**
#### 1.1.2.2 数据结构
| 编号 | 字段名称 | 数据类型 | 示例值 | 说明 |
| ---- | ---------------------- | -------- | ----- | ---------------------------------------- |
| (1) | Rx Type | `uint8` | 4 | 接收端类型标识 |
| (2) | Rx Power | `uint16` | 10690 | 接收端实际获得功率,能量去向 |
| (3) | Tx Power | `uint16` | 12013 | 发射端输出总功率,能量来源 |
| (4) | Vcoil | `uint16` | 35377 | 发射线圈电压,用于计算理论损耗 |
| (5) | Vin | `uint16` | 9904 | 输入电压,系统状态监控 |
| (6) | Isns | `uint16` | 1213 | 输入电流采样值,系统状态监控 |
| (7) | Ploss | `int32` | -2882 | **核心判定值**计算损耗Tx-(Rx+base_loss+delta_p) |
| (8) | Threshold | `int32` | 750 | **安全红线**,允许的最大损耗限值 |
| (9) | Trigger Count | `uint16` | 0 | 触发计数器,持续超阈值会累积 |
| (10) | FOD Result | `uint16` | 0 | 当前判定结果状态 |
| (11) | Charging Protocol Type | `uint8` | 1 | 充电协议类型 |
| (12) | PWM Duty | `uint8` | 500 | PWM 控制占空比 |
| (13) | Charging coil index | `uint8` | 1 | 充电线圈索引 |
#### 1.1.2.3 核心判定逻辑
**能量守恒定律:**
```
发射功率 = 接收功率 + 系统损耗 + 异物损耗
```
**公式一:发射功率计算**
```
(3) = (5) × (6)
```
即:`Tx Power = Vin × Isns`(通过芯片实际工作的电压和电流相乘得到动态值)
**公式二:额外损耗计算**
```
(7) = (3) - ((2) + pow_loss + delta_p)
```
即:`Ploss = Tx Power - (Rx Power + pow_loss + delta_p)`
> 含义:用"发射端总功率"减去"接收端功率"、"已知系统损耗"和"补偿系数",剩下的数值 (7) 就是无法解释的能量损耗。如果这个值很大,说明有金属异物在发热消耗能量。
#### 1.1.2.4 变量定义详解
| 变量 | 名称 | 说明 |
| --- | ---- | ---- |
| (7) | Calculated Loss | 实时计算出的功率差值,**需要重点监控的变量** |
| (8) | Threshold | Power loss 阈值Qi 协议规定(参考 Table 4**随功率段动态变化**(功率越大,允许的损耗越大) |
| (2) | Rx Power | 接收端(手机/手表)上报给发射端的功率值 |
| pow_loss | Tx 固有损耗 | 发射板的固有损耗,库内计算得出,无需修改 |
| delta_p | 功率补偿系数 | **工程师唯一需要调整的"旋钮"** |
**判定条件:**
- 当 (7) Ploss > (8) Threshold 时,计数器 (9) 增加
- 当计数超过设定阈值,触发 FOD 报警并停止充电
**调试目标:**
- 正常充电时,需满足:(7) Ploss < (8) Threshold
- 如正常充电时误报 FOD需增大 `delta_p` 补偿系数
- 修改代码数组 `m_con_arr_I16PlossCoeff` 中的 `delta_p` 值进行校准
# 2 数据分析方法
## 2.1 QFOD 数据分析
### 2.1.1 阈值计算
1. 从 Log 提取两种场景的 ΔQ
- 场景 A纯手机ΔQ = 25最大值
- 场景 B手机+异物ΔQ = 40 (最小值)
1. 计算阈值Threshold = (25 + 40) / 2 = 32
### 2.1.2 分析步骤
1. 提取日志中 `#Q` 开头的行
2. 绘制 ΔQ 时序曲线,叠加 Y=Threshold 水平线
3. 验证余量:纯手机最高点 vs 阈值、有异物最低点 vs 阈值
## 2.2 Ploss FOD 数据分析
### 2.2.1 日志解析要点
**日志行识别:**`FOD->` 开头的行
**关键字段提取(按位置索引):**
| 位置 | 字段 | 示例值 | 用途 |
| ---- | ---- | ------ | ---- |
| 第 6 列 | Calculated Loss (Ploss) | -634 | 核心监控值,负数表示安全 |
| 第 7 列 | Threshold | 1000 | 当前功率段的阈值 |
| 第 2 列 | Rx Power | 10690 | 用于查表确定阈值 |
| 第 3 列 | Tx Power | 12013 | 用于验证计算 |
### 2.2.2 动态阈值表 (Table 4)
阈值根据接收功率动态查表:
| 接收功率 (Rx Power) | 阈值 (Threshold) | 备注 |
| ----------------- | -------------- | ---- |
| 0 ~ 5W | 350 mW | 低功率下最敏感 |
| 5 ~ 10W | 500 mW | |
| 10 ~ 15W | 750 mW | |
| 15 ~ 30W | 1000 mW | 示例 Log 处于此区间 |
| 30 ~ 50W | 1250 mW | 高功率允许更多损耗 |
> **注意**:数据分析时必须先读取 Rx Power查表获得正确阈值再与计算值对比。
### 2.2.3 计算公式验证
**能量守恒公式:**
```
Ploss = Tx_Power - Rx_Power - System_Loss - delta_p
```
**等价表达:**
```
delta_p + Ploss = Tx_Power - Rx_Power - System_Loss
```
**验证示例:**
- Tx Power = 12013
- Rx Power = 10690
- System Loss (pow_loss) = 2005
- delta_p = 2200
- 计算12013 - 10690 - 2005 - 2200 = -2882 ✓
### 2.2.4 判定逻辑
**FOD 触发条件:**
```
if (Ploss > Threshold) → 计数器累积
if (Count > Limit) → 触发 FOD 报警,停止充电
```
**安全余量监控:**
```
Margin = Threshold - Ploss
```
示例:`1000 - (-634) = 1634 mW` 余量充足
### 2.2.5 分析流程
1. **解析 (Parse)**:读取 Log 文件,找到 `FOD->` 开头的行
2. **提取 (Extract)**
- 抓取第 6 列(计算损耗,如 -634
- 抓取第 7 列(当前阈值,如 1000
- 抓取 Rx Power 用于查表校验
3. **计算 (Calculate)**
- 验证公式:`Loss = Tx_Power - Rx_Power - System_Loss - delta_p`
- 计算余量:`Margin = Threshold - Loss`
4. **可视化 (Visualize)**
- 画横线代表阈值 (Threshold)
- 画波动线代表实时损耗 (Ploss)
- 若波动线突破阈值线,标记为 **FOD Event**
5. **调试 (Tune)**
- 若 Ploss 频繁跳动或变正数(如 800说明 delta_p 设置不准
- 调整 delta_p 使曲线回归安全区(负值区)
# 3 QA
## 3.1 导入之后会有脏数据污染吗? 人工删除?
## 3.2 FOD Type 具体的是什么,对数据分析有影响吗?和文件名定义的有什么关系
## 3.3 Ploss fod 日志格式和 实际日志中的对应不上
## 3.4 数据是孤立的