feat: 校准电池电压与ADC2充电检测,重构RGB为Bitbang翻转驱动,并修复RTC晶振起振问题
This commit is contained in:
126
woke-order/wo-03
Normal file
126
woke-order/wo-03
Normal file
@@ -0,0 +1,126 @@
|
||||
# 工单 WO-03:RGB 灯控故障排查 & 电池充电功能测试计划
|
||||
|
||||
**优先级**:高
|
||||
**状态**:进行中
|
||||
|
||||
---
|
||||
|
||||
## 一、RGB 灯控 — 故障排查与修复
|
||||
|
||||
### 现象
|
||||
开机后两颗 WS2812B 灯珠一直亮白灯,无法通过软件控制熄灭或变色。
|
||||
|
||||
### 1.1 硬件电路复查
|
||||
| # | 操作步骤 | 验证手段 | 预期结果 | 状态 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1.1.1 | 用万用表测量 P2.3 对地电阻 | 断电测 | 非短路 | 待执行 |
|
||||
| 1.1.2 | 上电测 P2.3 引脚电平 | 示波器捕获上电瞬间到 main() 执行前的波形 | 应快速被拉低,无长时间高电平 | 待执行 |
|
||||
| 1.1.3 | 测量 TP4054 VCC (5V) 和 VSYS 供电 | 万用表直流档 | VSYS 约 3.7~4.2V 或 5V | 待执行 |
|
||||
| 1.1.4 | 测量 WS2812B VDD (Pin4) 电压 | 万用表 | 与 VSYS 一致 | 待执行 |
|
||||
| 1.1.5 | 测量 WS2812B DIN (Pin3) 静态电平 | 未发送数据时示波器/万用表 | 应接近 0V | 待执行 |
|
||||
|
||||
### 1.2 引脚初始化修复
|
||||
| # | 操作步骤 | 涉及文件 | 说明 | 状态 |
|
||||
|---|---------|---------|------|------|
|
||||
| 1.2.1 | GPIO_Init() 中增设 RGB_DIN = 0 | system.c:50 | 将 P2.3 初始输出拉低,消除上电不确定态 | ✔ 已修复 |
|
||||
| 1.2.2 | main() 中发一次 RESET 脉冲确保 WS2812B 复位 | main.c | 确保 WS2812B 在上电后处于已知复位状态 | ✔ 已修复 |
|
||||
| 1.2.3 | 验证 P_SW1 SPI 引脚映射 | rgb.c:19 | P_SW1 &= ~0x0C; P_SW1 |= 0x04 将 SPI 映射到 P2.3(MOSI)/P2.5(SCLK) | ✔ 已验证 |
|
||||
|
||||
### 1.3 SPI 时序验证
|
||||
| # | 操作步骤 | 验证手段 | 预期结果 | 状态 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 1.3.1 | 示波器探头接 P2.3 (MOSI/DIN) 和 GND | 调用 RGB_Send(0, 180, 0, 0, 0, 0) 只亮红灯 | 观察到 3MHz 时钟波形 | 待执行 |
|
||||
| 1.3.2 | 示波器接 P2.5 (SCLK) 观察 | 同一调用 | 发送期间无 SCLK 信号(因已被设为高阻) | 待执行 |
|
||||
| 1.3.3 | 测量 RESET 低电平持续时间 | 在 RGB_Send() 最后 RGB_DIN=0 后测 | >80μs | 待执行 |
|
||||
| 1.3.4 | 验证 SPCTL = 0xD1 配置 | 核对 STC32G 数据手册 | SSIG=1, SPEN=1, MSTR=1, CPOL=0, CPHA=0, SPR0=1 → 3MHz @24MHz | ✔ 已验证 |
|
||||
|
||||
### 1.4 代码逻辑复查
|
||||
| # | 操作步骤 | 涉及文件 | 说明 | 状态 |
|
||||
|---|---------|---------|------|------|
|
||||
| 1.4.1 | 检查 Encode_Byte 编码 | rgb.c:42-62 | 每个 WS2812B 的 8bit 展开为 3 字节 SPI 数据 = 24 SPI bits | ✔ 已验证 |
|
||||
| 1.4.2 | 检查 RGB_Send 中 SPI 收发循环 | rgb.c:94-100 | 18 字节全部通过 SPDAT 发出,含等待 SPIF | ✔ 已验证 |
|
||||
| 1.4.3 | SPI_Init 调用频次 | rgb.c:92 | 每次 RGB_Send 都重新 init SPI,不影响功能 | ✔ 已验证 |
|
||||
| 1.4.4 | RGB_Send(0,0,0,0,0,0) 能否关灯 | 调试指令 | 需实测验证 | 待执行 |
|
||||
|
||||
### 1.5 功能验证
|
||||
| # | 测试用例 | 操作 | 预期结果 | 状态 |
|
||||
|---|---------|------|---------|------|
|
||||
| 1.5.1 | 开机默认灭灯 | 上电 | 两颗灯全灭 | 待执行 |
|
||||
| 1.5.2 | 对码模式白灯 | 进入 PairApp | 两颗灯亮白灯(G=R=B=150) | 待执行 |
|
||||
| 1.5.3 | 对码成功绿灯 | PairApp 确认保存 | 两颗亮绿灯(G=200) | 待执行 |
|
||||
| 1.5.4 | 报警红灯 | 触发门磁报警 | 红灯闪烁 | 待执行 |
|
||||
| 1.5.5 | SOS 红蓝交替 | 触发 SOS | 灯1红灯、灯2蓝灯交替闪烁 | 待执行 |
|
||||
| 1.5.6 | 时间设置蓝灯 | 长按确认进入时间设置 | 双蓝灯常亮 | 待执行 |
|
||||
| 1.5.7 | 马达无异常振动 | 任何 RGB_Send 调用时 | 马达不应发出异常噪音或振动 | 待执行 |
|
||||
|
||||
---
|
||||
|
||||
## 二、电池充电功能测试计划
|
||||
|
||||
### 2.1 硬件充电回路验证
|
||||
| # | 操作步骤 | 验证手段 | 预期结果 | 状态 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 2.1.1 | 万用表测 TP4054 的 VCC(Pin4) 对 GND | 插入 USB 5V 供电 | 5.0V ±0.25V | 待执行 |
|
||||
| 2.1.2 | 测 TP4054 的 PROG(Pin5) 对 GND 电阻 | 断电测 R1 阻值 | 24kΩ → 充电电流约 41.7mA | 待执行 |
|
||||
| 2.1.3 | 测 TP4054 的 BAT(Pin3) 对 GND 电压 | 插入 USB + 接电池 | 电池电压 3.7~4.2V | 待执行 |
|
||||
| 2.1.4 | 测 TP4054 的 CHRG(Pin1) 电平 | 未接USB/充电中/充满 | 未接:高阻;充电中:低电平;充满:高阻 | 待执行 |
|
||||
| 2.1.5 | 追踪 CHRG → DET → MCU 引脚号的 PCB 走线 | 对照原理图 | 确认连接至 MCU GPIO 引脚号 | 待执行 |
|
||||
| 2.1.6 | 确认 DET 网络终端的 MCU 引脚电平兼容性 | 万用表测 MCU 侧 | TP4054 CHRG 需 MCU 内部上拉 | 待执行 |
|
||||
| 2.1.7 | 测量 BAT_ADC(P1.3) 分压网络 | 万用表 | R15=10kΩ, R16=22kΩ, 分压比 22/32 | 待执行 |
|
||||
|
||||
### 2.2 充电检测代码实现
|
||||
| # | 操作步骤 | 涉及文件 | 说明 | 状态 |
|
||||
|---|---------|---------|------|------|
|
||||
| 2.2.1 | 确认 MCU 实际连接 CHRG/DET 的引脚号 | 原理图追踪 | CHRG → DET → MCU | ✔ 已完成 |
|
||||
| 2.2.2 | 在 config.h 添加 sbit CHRG_DET 定义 | config.h | 定义充电检测引脚 | ✔ 已添加 |
|
||||
| 2.2.3 | 在 GPIO_Init() 中将该引脚配置为高阻输入+内部上拉 | system.c | 适配 TP4054 开漏输出 | ✔ 已添加 |
|
||||
| 2.2.4 | 实现 bit Is_Charging(void) | adc.c / adc.h | 返回 0=未充电, 1=充电中 | ✔ 已实现 |
|
||||
| 2.2.5 | 在 UI 层接入充电状态显示 | ui.c / app_clock.c | 充电时显示 `+` 后缀 | ✔ 已完成 |
|
||||
| 2.2.6 | 在 Self_Test() 中输出充电状态 | system.c | 上电自检时UART输出充电状态 | ✔ 已添加 |
|
||||
|
||||
### 2.3 充电功能验证
|
||||
| # | 测试用例 | 操作 | 预期结果 | 状态 |
|
||||
|---|---------|------|---------|------|
|
||||
| 2.3.1 | 未插入 USB 充电 | 观察待机界面 | 仅显示百分比,无 `+` 后缀 | 待执行 |
|
||||
| 2.3.2 | 插入 USB 充电(电池未满) | USB 供电 | 状态栏显示 `85%+`,CHRG 低电平 | 待执行 |
|
||||
| 2.3.3 | 电池充满后 | 等待充电完成 | `+` 后缀消失,CHRG 变高阻 | 待执行 |
|
||||
| 2.3.4 | 充电时热插拔 USB | 反复插拔 | 状态切换无延迟 > 2s | 待执行 |
|
||||
| 2.3.5 | 低电量充电(电池 < 3.3V) | 电池耗尽后充电 | 充电电流约 41.7mA,UI 显示充电中 | 待执行 |
|
||||
| 2.3.6 | 充电时进入休眠 | 插入 USB 等待 60s 自动休眠 | 休眠后应能被唤醒 | 待执行 |
|
||||
| 2.3.7 | 充电时触发报警/SOS | 充电中触发报警 | 报警功能正常 | 待执行 |
|
||||
| 2.3.8 | Is_Charging() 电平反转验证 | 强制拉高/拉低 DET 引脚 | UART 调试输出正确状态 | 待执行 |
|
||||
|
||||
### 2.4 ADC 电池电压校准
|
||||
| # | 操作步骤 | 验证手段 | 预期结果 | 状态 |
|
||||
|---|---------|---------|---------|------|
|
||||
| 2.4.1 | 用万用表实测电池电压 | 记录 Vref | 如 3.85V | 待执行 |
|
||||
| 2.4.2 | UART 读取 ADC_GetBatteryVoltage_mV() 返回值 | 串口助手 | 偏差应在 ±50mV 内 | 待执行 |
|
||||
| 2.4.3 | 如果偏差过大,调整校准系数 | adc.c:122 | val * Vref_mV / adc_raw | 待执行 |
|
||||
| 2.4.4 | 验证电量百分比线性度 | 可调电源模拟 3.3V~4.2V | 0%~100% 线性输出 | 待执行 |
|
||||
|
||||
---
|
||||
|
||||
## 三、测试环境与工具清单
|
||||
- Keil C251 编译器 + STC-ISP 烧录工具
|
||||
- USB 转 TTL 串口模块 (115200 baud)
|
||||
- 数字万用表
|
||||
- 双通道数字示波器(至少 10MHz 带宽)
|
||||
- 可调直流稳压电源(模拟电池 3.0~4.2V)
|
||||
- 逻辑分析仪(可选)
|
||||
- 已组装好的手环 PCB x 1~2pcs
|
||||
- 433MHz 发射模块/遥控器
|
||||
- 锂电池 3.7V
|
||||
|
||||
---
|
||||
|
||||
## 四、代码修改记录
|
||||
|
||||
| 文件 | 修改内容 | 状态 |
|
||||
|------|---------|------|
|
||||
| App/config.h | 新增 CHRG_DET sbit 定义 | ✔ |
|
||||
| App/system.c | GPIO_Init() 中增设 RGB_DIN=0,配置 CHRG_DET 引脚,Self_Test() 输出充电状态 | ✔ |
|
||||
| App/main.c | GPIO_Init() 后立即发 WS2812B RESET 脉冲 | ✔ |
|
||||
| Drivers/adc.h | 新增 Is_Charging() 声明 | ✔ |
|
||||
| Drivers/adc.c | 实现 Is_Charging() | ✔ |
|
||||
| App/rgb.c | 确认 SPI 配置正确 | ✔ 已验证 |
|
||||
| App/ui.c | UI_ShowClockPage 中接入 Is_Charging() 显示 `+` 后缀 | ✔ |
|
||||
Reference in New Issue
Block a user