diff --git a/docs/requirement/WCT数据需求分析.md b/docs/requirement/WCT数据需求分析.md new file mode 100644 index 0000000..e4ea566 --- /dev/null +++ b/docs/requirement/WCT数据需求分析.md @@ -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 数据是孤立的 \ No newline at end of file diff --git a/docs/requirement/无线充测试log保存及管理方案-20260702.pdf b/docs/requirement/无线充测试log保存及管理方案-20260702.pdf new file mode 100644 index 0000000..ba32922 Binary files /dev/null and b/docs/requirement/无线充测试log保存及管理方案-20260702.pdf differ