feat: 校准电池电压与ADC2充电检测,重构RGB为Bitbang翻转驱动,并修复RTC晶振起振问题
This commit is contained in:
7
woke-order/wo-00需要完成的功能
Normal file
7
woke-order/wo-00需要完成的功能
Normal file
@@ -0,0 +1,7 @@
|
||||
1 屏幕显示
|
||||
2 按键响应
|
||||
3 射频收发
|
||||
4 马达响应
|
||||
5 RGB控制
|
||||
6 电池电压检测和充电
|
||||
7 板子各状态下的功耗 。
|
||||
72
woke-order/wo-01
Normal file
72
woke-order/wo-01
Normal file
@@ -0,0 +1,72 @@
|
||||
# 📋 工单 wo-01: ADC按键检测、PWR_HOLD开关机控制、P1.3电池电量检测与 PCF8563 硬件 RTC 整合
|
||||
|
||||
**工单编号**: WO-01
|
||||
**创建时间**: 2026-07-27
|
||||
**模块组件**: 按键驱动 (ADC Key) / 电源管理 (Power Control) / 电池检测 (Battery ADC) / 实时时钟 (PCF8563 RTC) / 待机应用 (ClockApp & UI)
|
||||
|
||||
---
|
||||
|
||||
## 📌 一、 需求概述与按阶段分步规划
|
||||
|
||||
根据项目开发优先级与依赖关系,按以下四个顺序阶段分步完成:
|
||||
|
||||
### 阶段 1: P0.3 ADC 按键检测
|
||||
- **硬件引脚**: `P0.3` 对应 STC32G 硬件 `ADC3` 通道。
|
||||
- **电平特征**: 开机常态下 `KEY_DOWN` 节点电压约为 **2.0V**(未按下),按键按下后电压升至约为 **3.7V**。
|
||||
- **算法与逻辑**:
|
||||
- 配置 ADC 模块,引入滑动窗口均值/中值滤波消抖。
|
||||
- 按键判定:未按下区间 (1.5V ~ 2.5V),按下区间 (3.2V ~ 4.2V)。
|
||||
- 保留并兼容原本 KEY_DOWN 的短按功能(消抖释放后触发 `KEY_EVENT_DOWN_CLICK` 供 UI 菜单与时间编辑下翻数值)。
|
||||
|
||||
### 阶段 2: PWR_HOLD 开关机控制与上电自检
|
||||
- **硬件引脚**: `PWR_HOLD` 控制引脚(默认分配为 `P0.0`)。
|
||||
- **开关机流程**:
|
||||
- **开机锁存**: 按下开机键硬件通电后,单片机在入口 `main()` **第一时间拉高 `PWR_HOLD` 引脚**,锁存电源保持供电。
|
||||
- **长按关机**: 开机状态下长按 KEY_DOWN 按键 1 秒以上,触发关机流程 `KEY_EVENT_POWER_OFF`,拉低 `PWR_HOLD` 切断总电源。
|
||||
- **上电自检 (Self-Test)**:
|
||||
- 启动阶段自动执行硬件自检(电源锁存状态、ADC 采样功能、串口通信校验等),并在串口 1 输出完整的格式化自检报告。
|
||||
|
||||
### 阶段 3: P1.3 电池电压检测与真实电量显示
|
||||
- **硬件引脚**: `P1.3` 对应 STC32G 硬件 `ADC11` 通道(电池分压检测脚)。
|
||||
- **计算与转换**:
|
||||
- 读取 ADC11 通道计算电池输入电压 $V_{bat}$。
|
||||
- 将电池电压(锂电池 3.3V ~ 4.2V 范围)线性/分段映射转换为 **0% ~ 100%** 百分比电量。
|
||||
- **UI 真实电量刷新**:
|
||||
- 重构 `ui.c` 的 `UI_ShowClockPage` 及待机界面电量渲染代码,替换原写死固定的静态 "85%" 字符。
|
||||
- 动态显示真实电池百分比(如 "95%")及绘制对应的电量电池柱位图。
|
||||
|
||||
### 阶段 4: PCF8563 (D8563) 硬件 RTC 深度整合
|
||||
- **硬件连接**: PCF8563 RTC 芯片通过 I2C 总线连接至 STC32G (`P3.2` -> SCL, `P3.3` -> SDA)。
|
||||
- **深度整合**:
|
||||
- **开机/唤醒即读**: 系统开机或从低功耗休眠唤醒时,自动通过 I2C 读取 PCF8563 芯片的时间,更新系统全局时钟变量。
|
||||
- **前台编辑直接写入**: 在 `ClockApp` 编辑模式下按确认键保存时,同步将最新时间写入 PCF8563 芯片寄存器中,实现真正的硬件级掉电时间保存。
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 二、 硬件引脚配置汇总
|
||||
|
||||
| 功能名称 | 关联引脚 | 端口模式配置 | 采样/控制参数 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **KEY_DOWN** | `P0.3` / ADC3 | 高阻输入 | 常态 **2.0V**;按下 **3.7V**;消抖 50ms |
|
||||
| **PWR_HOLD** | `P0.0` (可配置) | 推挽输出 | 上电第一时间置 **高电平 (1)**;关机置 **低电平 (0)** |
|
||||
| **BATT_ADC** | `P1.3` / ADC11 | 高阻输入 | 电池分压输入,计算 3.3V(0%) ~ 4.2V(100%) 电量 |
|
||||
| **RTC_SCL** | `P3.2` | 准双向 / 模拟 I2C | PCF8563 SCL 时钟线 |
|
||||
| **RTC_SDA** | `P3.3` | 准双向 / 模拟 I2C | PCF8563 SDA 数据线 |
|
||||
|
||||
---
|
||||
|
||||
## 🧪 三、 分阶段验收标准
|
||||
|
||||
1. **阶段 1 验收 (ADC按键)**:
|
||||
- [ ] 串口实时打印 P0.3 ADC 电压,常态 2.0V 不误触发。
|
||||
- [ ] 按下 3.7V 稳定识别,短按能够正常执行 UI 菜单下翻和数值减小。
|
||||
2. **阶段 2 验收 (开关机与自检)**:
|
||||
- [ ] 长按按键 >1s 开机,系统完成自检后松开按键,`PWR_HOLD` 持续高电平保持供电。
|
||||
- [ ] 开机状态下长按按键 >1s,触发关机提示后 `PWR_HOLD` 拉低,系统断电。
|
||||
- [ ] 开机串口打印完整自检日志。
|
||||
3. **阶段 3 验收 (P1.3电池检测与UI)**:
|
||||
- [ ] 可通过 P1.3 ADC 测量准确计算实际电池电压。
|
||||
- [ ] 待机 UI 屏幕上实时绘制正确的百分比 (0%~100%) 与对应电量电池图标。
|
||||
4. **阶段 4 验收 (PCF8563 RTC)**:
|
||||
- [ ] 开机从 PCF8563 读取硬件时间。
|
||||
- [ ] 前台编辑保存后直接同步写入 PCF8563 芯片,掉电重启时间不丢失。
|
||||
75
woke-order/wo-02
Normal file
75
woke-order/wo-02
Normal file
@@ -0,0 +1,75 @@
|
||||
# 📋 工单 wo-02: 改动总结与硬件调试归档
|
||||
|
||||
**工单编号**: WO-02
|
||||
**归档时间**: 2026-07-28
|
||||
**处理状态**: 已完成 (Completed)
|
||||
**涉及模块**: 电池检测 (Battery ADC) / 按键驱动 (ADC Key) / 实时时钟 (PCF8563 RTC) / 系统自检 (Self-Test)
|
||||
|
||||
---
|
||||
|
||||
## 📌 一、 软件改动与底层逻辑修正
|
||||
|
||||
在本次工单调试执行过程中,针对硬件表现的差异与异常,对底层驱动及自检模块进行了如下修正:
|
||||
|
||||
### 1. 电池电压检测与电量百分比校准 (对应阶段 3)
|
||||
* **公式校准与修正**:
|
||||
* 物理硬件装配实际为:上拉 $10\text{k}\Omega$,下拉 $22\text{k}\Omega$(分压比为 $22/32$)。
|
||||
* 经用户万用表与 ADC 联合实测:当电池电压为 $4.0\text{V}$ (4000mV) 时,分压点物理电压为 $2.7\text{V}$,单片机读出的原始 ADC 过滤值为 `2357`。
|
||||
* 为了消除 LDO 压降、系统参考电压偏差等多重硬件误差,引入经验公式替换原先的理论换算公式:
|
||||
$$\text{Voltage (mV)} = \frac{\text{Raw\_ADC} \times 4000}{2357}$$
|
||||
* 该换算将电池准确映射至 `3.3V (0%) ~ 4.2V (100%)`。在 [adc.c](file:///c:/Users/xtell/Downloads/stc32g128k-master%20(1)/stc32g128k/Drivers/adc.c) 中已完全部署,并在前台时钟界面和自检中完美实时呈现。
|
||||
|
||||
### 2. ADC 按键与电池通道互换 (对应阶段 1 & 2)
|
||||
* **故障定位**:
|
||||
* 物理走线中,`P0.3` (按键) 实际对应单片机的 `ADC11` 通道;`P1.3` (电池) 实际对应 `ADC3` 通道。原先代码中将两个通道错调。
|
||||
* **修正方案**:
|
||||
* 在 [adc.h](file:///c:/Users/xtell/Downloads/stc32g128k-master%20(1)/stc32g128k/Drivers/adc.h) 中对调了通道定义:
|
||||
`#define ADC_CHANNEL_KEY_DOWN 11` (P0.3)
|
||||
`#define ADC_CHANNEL_BATTERY 3` (P1.3)
|
||||
* 修正后,按键常态值成功捕获为正常的 `2712` (约 2.2V),按下后正常达到 `4095` 饱和值。
|
||||
|
||||
### 3. PCF8563 (D8563) RTC 通信时序与机制重构 (对应阶段 4)
|
||||
* **I2C 物理模式优化**: 移除了高频读写 XSFR 带来的推挽/开漏动态切换(避免产生高频暂态毛刺),完全使用准双向口硬件 of “过渡强上拉”机制。
|
||||
* **死锁释放机制 (`I2C_ReleaseBus`)**: 在 PCF8563 通信或自检开始前,自动输出 9 个时钟脉冲配合 Stop 信号,强行迫使因常供电而进入错乱挂起状态的 RTC 芯片释放 I2C 总线,彻底避免死锁。
|
||||
* **自适应引脚探测**: 内置支持运行时自动侦测 `P3.2` 与 `P3.3` 的连线是否在画板时反接(默认极性与互换极性自动轮询),增强了硬件兼容度。
|
||||
* **双时延诊断测试**: 实现了 `PCF8563_TryReadDiagnostic()` 函数,同时使用常规速率 (30us延时) 与超低速时序 (200us延时,2.5kHz) 进行试读测试。
|
||||
|
||||
### 4. RGB 幻彩灯条上电亮白灯与 4-bit SPI 时序重构
|
||||
* **故障定位**:
|
||||
1. 上电复位暂态:单片机复位期间引脚默认弱上拉输出 `1`,这被灯珠移位寄存器误读为“全1”色彩(白光)。当单片机完成复位并拉低引脚时,产生 RESET 信号迫使灯珠锁存该色彩,导致开机长时间亮白灯。
|
||||
2. 3-bit 编码周期过短:在 3MHz 速率下,3-bit 模拟波形(100b/110b)的整个脉冲周期仅有 1.0us,低于规格书规定的 1.2us 最小值,引发灯珠识别率低下。
|
||||
* **软件重构方案**:
|
||||
1. **4-bit 编码重构**: 将转码改为 4-bit 编码(0码=1000b, 1码=1100b),高电平分别保持 333ns 和 666ns,完全处于规格书安全区间;总周期为 4 bits = 1.33us,完美吻合典型值 1.25us,数据传输稳定度极高。
|
||||
2. **上电显式关灯**: 在 `main()` 的 `GPIO_Init()` 执行完毕的第一个瞬间,强制调用 `RGB_Send(0, 0, 0, 0, 0, 0);` 送出关灯帧,在极速开机阶段的几微秒内强行熄灭白光。
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 二、 物理硬件排障记录
|
||||
|
||||
在联合调试期间,定位并解决了一项关键的物理硬件故障:
|
||||
|
||||
* **RTC 晶振不起振故障**:
|
||||
* **现象**: MCU 引脚输出波形完美,但 RTC 芯片一直不回 ACK。
|
||||
* **病因**: 32.768kHz 晶体两端的**旁路电容参数焊接错误**,导致晶振无法起振,从而使芯片的 I2C 接口内部控制块锁定并忽略全部寻址。
|
||||
* **解决**: 修正贴片电容后,晶振起振,RTC 硬件通信与自检完全恢复正常。
|
||||
|
||||
* **充电检测引脚配置与校准**:
|
||||
* **引脚定义**: 充电状态 DET 物理连接至 MCU 的 **`P1.2`** 引脚(对应 QFN32 第 10 脚,硬件为 **`ADC 通道 2`**)。
|
||||
* **电气优化**: 硬件配置为高阻输入,且在 `system.c` 和 `adc.c` 初始化中**显式关闭了 P1.2 的内部上拉电阻**(通过置空寄存器位 `(*(unsigned char volatile xdata *)0xFE11) &= ~(1 << 2)`),彻底消除了上电引起的电平偏置。
|
||||
* **阈值检测标准**:
|
||||
- $V_{\text{DET}} < 0.5\text{V}$ ($<500\text{mV}$): 未插充电器
|
||||
- $0.8\text{V} \le V_{\text{DET}} \le 1.8\text{V}$ ($800\text{mV} \sim 1800\text{mV}$): 正在充电 (充电指示闪烁)
|
||||
- $2.2\text{V} \le V_{\text{DET}} \le 2.8\text{V}$ ($2200\text{mV} \sim 2800\text{mV}$): 已充满 (停止闪烁)
|
||||
|
||||
---
|
||||
|
||||
## 🧪 三、 交付与归档文件
|
||||
|
||||
|
||||
* **最新源文件**:
|
||||
* 电池与按键检测算法: [adc.c](file:///c:/Users/xtell/Downloads/stc32g128k-master%20(1)/stc32g128k/Drivers/adc.c)
|
||||
* 引脚定义配置表: [adc.h](file:///c:/Users/xtell/Downloads/stc32g128k-master%20(1)/stc32g128k/Drivers/adc.h)
|
||||
* 自适应防死锁 RTC 驱动: [pcf8563.c](file:///c:/Users/xtell/Downloads/stc32g128k-master%20%281%29/stc32g128k/Drivers/pcf8563.c)
|
||||
* 极速自检与诊断流程: [system.c](file:///c:/Users/xtell/Downloads/stc32g128k-master%20(1)/stc32g128k/App/system.c)
|
||||
* **烧录固件**:
|
||||
* 归档 HEX 路径: [Build\wristband.hex](file:///c:/Users/xtell/Downloads/stc32g128k-master%20(1)/stc32g128k/Build/wristband.hex)
|
||||
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