1. 便携式充电宝系统架构解析
这款基于瑞萨R7F0C809微控制器的便携式电源系统,采用了典型的嵌入式无操作系统架构。主控芯片仅有8KB Flash和1KB RAM资源,在这种硬件限制下,系统设计必须做到极致精简高效。
1.1 硬件平台选型考量
选择R7F0C809这颗MCU主要基于以下几点考虑:
- 内置12位ADC(实际使用中通过过采样可达到等效14位精度),满足电池电压检测需求
- 超低功耗特性(运行模式1.6mA,待机模式0.5μA),非常适合便携设备
- 内置硬件乘法器,方便进行电压差值计算等运算
- 价格优势明显,BOM成本可控制在合理范围
实际开发中发现,这颗芯片的ADC参考电压稳定性对电量检测精度影响很大,建议在PCB布局时将VREF引脚单独走线并添加0.1μF去耦电容。
1.2 软件架构设计
系统采用时间片轮询架构,以20ms为基本调度单位。这种设计相比中断驱动架构有以下优势:
- 避免了中断嵌套带来的优先级管理问题
- 各任务执行时间可预测,不会出现某个模块长时间占用CPU的情况
- 代码结构简单清晰,便于维护和调试
主循环的基本伪代码如下:
c复制void main() {
hardware_init();
while(1) {
if(timer20ms_flag) {
timer20ms_flag = 0;
Battery_ChargeScan();
Battery_KeyScan();
Load_Scan();
Battery_PowerAlarm();
}
// 其他低优先级任务
led_animation_handler();
}
}
2. 充电管理模块实现细节
2.1 充电检测电路设计
充电检测采用电阻分压+ADC采样的方案。具体电路参数如下:
- 输入电压检测:R1=100kΩ,R2=20kΩ,分压比1:6
- 电池电压检测:R3=100kΩ,R4=100kΩ,分压比1:2
电压计算公式:
code复制Vdetect = ADC_Value * Vref / 4096 * (R1+R2)/R2
实际调试中发现,电阻精度对检测结果影响很大,建议使用1%精度的金属膜电阻。我们在第二批样品中将R2换成了22kΩ,使分压比更接近标准USB电压的5V输入。
2.2 充电状态机设计
充电过程采用状态机管理,包含以下状态:
- IDLE:待机状态
- DETECTING:检测到可能充电信号
- CHARGING:确认充电中
- FULL:充电完成
状态转换条件:
mermaid复制stateDiagram
[*] --> IDLE
IDLE --> DETECTING: 检测到电压>4.5V
DETECTING --> IDLE: 连续2次检测失败
DETECTING --> CHARGING: 连续2次确认
CHARGING --> FULL: STDBY引脚变低且电压>4.2V
FULL --> IDLE: 移除充电器
3. 用户交互系统实现
3.1 按键检测算法
采用时间窗口检测法识别按键动作:
c复制#define KEY_SHORT_MIN 100 // 毫秒
#define KEY_SHORT_MAX 2500
#define KEY_LONG1 2500
#define KEY_LONG2 5000
void Battery_KeyScan() {
static uint32_t press_time = 0;
if(key_pressed()) {
if(press_time == 0) press_time = get_tick();
} else {
if(press_time) {
uint32_t duration = get_tick() - press_time;
if(duration >= KEY_SHORT_MIN && duration < KEY_SHORT_MAX) {
handle_short_press();
} else if(duration >= KEY_LONG1 && duration < KEY_LONG2) {
handle_long_press1();
} else if(duration >= KEY_LONG2) {
handle_long_press2();
}
press_time = 0;
}
}
}
3.2 LED显示策略
电量显示采用4颗LED,显示逻辑如下表:
| 电量区间 | LED1 | LED2 | LED3 | LED4 | 充电时表现 |
|---|---|---|---|---|---|
| 0-25% | 闪烁 | 灭 | 灭 | 灭 | 仅LED1闪烁 |
| 25-50% | 常亮 | 闪烁 | 灭 | 灭 | LED2闪烁 |
| 50-75% | 常亮 | 常亮 | 闪烁 | 灭 | LED3闪烁 |
| 75-100% | 常亮 | 常亮 | 常亮 | 闪烁 | LED4闪烁 |
实际使用中发现,在光线较强的环境下,LED亮度可能不足。我们最终选用了规格为0805、亮度达到8000mcd的LED元件,并在PCB上做了反光杯设计。
4. 放电控制与负载检测
4.1 升压电路设计
采用G2116升压芯片,关键参数配置:
- 输入电压范围:2.7V-5.5V
- 输出电压:5.0V±0.2V
- 最大输出电流:2.1A
- 效率:典型值92%
EN使能引脚通过一个NPN三极管(MMBT3904)与MCU连接,这样设计的好处是:
- 可以实现软开关控制
- 当MCU复位时,三极管默认截止,确保安全
- 增加了驱动能力
4.2 负载检测算法
负载检测的核心代码如下:
c复制#define LOAD_DETECT_THRESHOLD 30 // ADC差值阈值
#define NO_LOAD_TIME 20 // 秒
void Load_Scan() {
static uint16_t init_voltage = 0;
static uint8_t no_load_counter = 0;
if(discharge_enabled) {
uint16_t current_voltage = read_battery_voltage();
if(init_voltage == 0) {
init_voltage = current_voltage;
} else {
int16_t delta = init_voltage - current_voltage;
if(abs(delta) > LOAD_DETECT_THRESHOLD) {
no_load_counter = 0;
} else {
if(++no_load_counter >= NO_LOAD_TIME) {
disable_discharge();
init_voltage = 0;
no_load_counter = 0;
}
}
}
}
}
5. 安全保护机制实现
5.1 硬件保护电路
采用DW01+和8205A的经典组合:
- DW01+提供:
- 过充检测电压:4.3V±0.05V
- 过放检测电压:2.4V±0.1V
- 过流检测电压:0.15V±0.02V
- 8205A双MOSFET实现充放电回路控制
5.2 软件保护策略
软件保护作为硬件保护的补充,主要实现:
- 二级过放保护:当电压<3.0V时强制关闭输出(硬件保护阈值为2.4V)
- 温度保护:通过NTC检测电池温度,超过45°C停止充电
- 异常状态记录:在Flash中记录异常事件,便于售后分析
保护参数配置:
c复制typedef struct {
uint16_t over_discharge; // 0x8CCC = 3.0V
uint16_t over_charge; // 0xAE14 = 4.2V
uint16_t high_temp; // NTC对应45°C的ADC值
uint16_t low_temp; // NTC对应0°C的ADC值
} Protection_Params;
6. 生产测试与校准
6.1 测试工装设计
我们开发了专用的测试夹具,可同时完成:
- 充电功能测试
- 放电效率测试
- 按键功能测试
- LED显示测试
- 保护功能测试
测试流程自动化程度达到90%,每台设备测试时间约2分钟。
6.2 电压校准方法
由于元件公差,每台设备都需要进行电压校准:
- 连接标准电源,输入精确的3.0V电压
- 长按按键10秒进入校准模式
- 记录ADC读数V1
- 输入4.2V电压,记录ADC读数V2
- 计算斜率k=(4.2-3.0)/(V2-V1)
- 将k和V1存入Flash特定位置
校准后的电压计算公式:
code复制Vreal = (ADC_Value - V1) * k + 3.0
7. 常见问题与解决方案
7.1 电量显示不准
可能原因及解决方法:
- 电池老化内阻增大 → 建议用户更换电池
- ADC参考电压不稳 → 检查VREF滤波电容
- 分压电阻精度不足 → 更换1%精度电阻
- 软件算法问题 → 更新固件
7.2 充电异常中断
典型排查步骤:
- 测量充电器输出电压是否稳定
- 检查Micro-USB接口是否接触不良
- 检测DW01+的OC引脚是否误触发
- 检查NTC温度检测是否误报
7.3 升压效率低
优化建议:
- 检查电感参数(我们选用4.7μH/3A的屏蔽电感)
- 优化PCB布局,缩短大电流路径
- 检查输出电容ESR(建议使用低ESR的MLCC电容)
- 确认负载电流未超过芯片限额
8. 设计优化与演进
在第二代产品中,我们计划进行以下改进:
- 改用Type-C接口,支持正反插
- 增加无线充电功能(Qi标准)
- 采用库仑计芯片实现更精确的电量检测
- 添加蓝牙连接功能,可通过手机APP查看状态
- 优化结构设计,提升防水性能
当前设计中保留的扩展接口:
- 预留I2C接口引脚,可连接外部传感器
- PCB上留有0Ω电阻位置,方便功能扩展
- 固件支持DFU在线升级
通过这个项目,我们积累了大量便携式电源设计的实战经验。特别是在资源受限的MCU上实现复杂功能,需要充分考虑代码效率和硬件特性的匹配。建议开发类似产品的工程师,在早期就做好功耗规划和代码架构设计,避免后期大规模重构。