4、充电状态机设计:预充电、恒流充电、恒压充电、充电终止、充电故障处理

好,咱们进入充电管理的核心——状态机设计。说白了,充电过程不是一股脑把电往里灌,而是分阶段、有策略地喂。我做了这么多年电源管理,见过太多因为状态机设计粗糙,导致电池鼓包甚至起火的案例。嗯,咱们得把这事整明白。

4.1 为什么需要状态机?

锂电池很娇贵。你想想看,它没电的时候内阻很大,你直接大电流怼上去,电压瞬间被拉低,电池内部可能析锂。快充满的时候你还大电流充,电压过冲,直接就保护了。所以,得有个聪明的“管家”——状态机,来管理整个充电流程。

我个人习惯把充电状态机分成五个阶段:

  • 预充电:电池电压太低时,用小电流唤醒它。
  • 恒流充电:电压正常了,用设定的大电流猛充。
  • 恒压充电:电压快到顶了,稳住电压,电流自然下降。
  • 充电终止:电流小到一定程度,判断充满了,切断。
  • 充电故障处理:温度、过压、过流等异常,立刻响应。

这五个阶段,缺一不可。我在项目中遇到过,有人为了省事,把预充电省了,结果一批电池在低温下充电,容量衰减得特别快。

4.2 预充电阶段

预充电,也叫“涓流充电”。什么时候触发?一般是电池电压低于某个阈值,比如2.8V(针对单节锂电)。这时候电池内部化学活性很低,你拿大电流去充,它根本“吃”不进去,反而会发热。

预充电的电流通常设定在0.1C左右。C是电池容量,比如1000mAh的电池,0.1C就是100mA。这个电流很小,目的是安全地把电池电压“抬”起来。

关键点:预充电不能无限进行。如果电池电压长时间(比如1小时)都上不去,说明电池可能已经损坏了,这时候应该报故障,而不是继续充。

我曾经遇到过一批电池,预充电阶段电压死活上不去,后来一查,是电池内部微短路。幸亏状态机里设了超时退出,不然一直小电流充着,迟早出事。

4.3 恒流充电阶段

当电池电压超过预充电阈值(比如3.0V),就进入恒流充电。这是充电的主力阶段。说白了,就是以固定的电流往电池里灌,直到电压达到恒压阈值(通常是4.2V)。

恒流值怎么定?这取决于电池规格和散热能力。一般建议0.5C到1C。快充可以到2C,但发热会很大。我个人的经验是,剃须刀这种小设备,0.5C就足够了,充电时间2小时左右,电池寿命也长。

这里有个坑:恒流阶段要实时监测电池电压。如果电压上升得太快,说明电池内阻变大了(电池老化),这时候应该适当降低电流,否则容易触发过压保护。

小技巧:我习惯在恒流阶段加一个“电压斜率检测”。如果dV/dt(电压变化率)超过某个值,就主动降流。这能有效延长电池循环寿命。

4.4 恒压充电阶段

电池电压达到4.2V后,就不能再大电流充了。这时候进入恒压阶段。充电器把电压稳稳地钳在4.2V,电流会自然下降。

为什么会下降?因为电池内部的极化效应。随着充电进行,电池的等效内阻在变化,电压差变小,电流就小了。这个过程很平滑。

恒压阶段的终止条件是什么?通常是电流下降到某个阈值,比如0.05C(50mA)。这时候认为电池已经“吃饱”了。

注意:恒压阶段的电压精度要求很高。4.2V的充电电压,误差最好在±1%以内。如果电压偏高,电池会过充,有起火风险;偏低,则充不满。我见过一些廉价充电方案,电压误差到了±5%,电池用半年就鼓包了。

4.5 充电终止

充电终止不是简单地切断就完事了。你得考虑几个问题:

  • 再充电:电池充满后,如果放着不用,电压会慢慢下降。当降到某个阈值(比如4.1V)时,应该重新启动充电。这叫“再充电”或“补电”。
  • 防反接:终止后,如果电池被反接,电路要能保护。
  • 指示:充满后,LED灯要变绿,或者熄灭。

我习惯在充电终止后,进入一个“待机”状态。在这个状态里,只做两件事:监测电池电压,以及等待用户拔掉充电器。如果电压掉下来了,就重新进入恒流或恒压。

4.6 充电故障处理

这部分是保命的。故障处理状态机,优先级最高。常见的故障有:

故障类型 触发条件 处理动作
电池过温 NTC检测到温度 > 55°C 立即停止充电,等待冷却
电池欠温 温度 < 0°C 禁止充电,或进入低温预充模式
电池过压 电压 > 4.25V 立即切断充电MOS,报错
充电器过流 电流 > 设定值1.2倍 降流或关断,防止烧毁
电池短路 检测到极低阻抗 立即关断,锁死,需人工复位

故障处理的核心原则是:安全第一,宁可误判,不可放过。我曾经在项目中,因为温度检测的滤波没做好,导致温度跳变,频繁触发过温保护。后来加了一个50ms的去抖延时,问题就解决了。

避坑指南:我曾经在故障恢复逻辑上栽过跟头。故障解除后,不能立刻恢复充电,要有一个“冷却时间”或“恢复延时”。否则,电池刚冷却下来,一充电又过热,反复振荡,MOS管很快就烧了。

4.7 状态机代码示例

下面是一个简化的状态机实现,用C语言写的。实际项目中,我会用枚举和函数指针表来管理,更清晰。

typedef enum {
    STATE_IDLE,
    STATE_PRECHARGE,
    STATE_CC_CHARGE,
    STATE_CV_CHARGE,
    STATE_CHARGE_DONE,
    STATE_FAULT
} charge_state_t;

charge_state_t current_state = STATE_IDLE;

void charge_state_machine(void) {
    switch(current_state) {
        case STATE_IDLE:
            if (battery_voltage < PRECHARGE_THRESHOLD) {
                current_state = STATE_PRECHARGE;
                set_charge_current(PRECHARGE_CURRENT);
            } else if (battery_voltage < CV_THRESHOLD) {
                current_state = STATE_CC_CHARGE;
                set_charge_current(CC_CURRENT);
            }
            break;

        case STATE_PRECHARGE:
            if (battery_voltage >= PRECHARGE_EXIT) {
                current_state = STATE_CC_CHARGE;
                set_charge_current(CC_CURRENT);
            } else if (precharge_timeout) {
                current_state = STATE_FAULT;
                fault_code = FAULT_BATTERY_DEAD;
            }
            break;

        case STATE_CC_CHARGE:
            if (battery_voltage >= CV_THRESHOLD) {
                current_state = STATE_CV_CHARGE;
                set_charge_voltage(CV_VOLTAGE);
            }
            break;

        case STATE_CV_CHARGE:
            if (charge_current < TERMINATION_CURRENT) {
                current_state = STATE_CHARGE_DONE;
                disable_charger();
            }
            break;

        case STATE_CHARGE_DONE:
            if (battery_voltage < RECHARGE_THRESHOLD) {
                current_state = STATE_CC_CHARGE;
                enable_charger();
                set_charge_current(CC_CURRENT);
            }
            break;

        case STATE_FAULT:
            // 故障处理,等待复位
            break;
    }
}

这段代码看着简单,但实际项目中,每个状态都要加超时、加异常检测。比如恒流阶段,如果电压长时间不上升,可能是电池内阻异常,也要报故障。

4.8 总结一下

充电状态机设计,说白了就是给电池一个“VIP服务”。预充电是唤醒,恒流是猛灌,恒压是细品,终止是收工,故障处理是保命。每一步都要考虑边界条件,不能想当然。

我个人觉得,状态机设计最考验工程师的地方,不是正常流程,而是异常流程。你想想看,用户可能把充电器插拔十次,可能在高温下充电,可能用劣质充电器。这些情况,你的状态机都要能优雅地处理。

嗯,这一章就到这里。下一章咱们聊聊具体的硬件电路设计,包括MOS管驱动、电流采样、NTC电路这些实战内容。