4. 安全保护机制:过压保护、欠压保护、过流保护、温度保护电路设计

好了,咱们接着聊牙刷的「保命」电路。

说实话,电动牙刷这玩意儿,看着小,但里面又是电机又是电池,还有充电电路。万一哪个环节出问题,轻则牙刷报废,重则...你懂的。所以安全保护机制,是必须认真对待的。

我个人习惯把保护电路分成四类:过压、欠压、过流、温度。咱们一个一个来拆解。

4.1 过压保护:别让电压冲昏了头

过压保护,说白了就是防止电压太高把芯片烧了。牙刷里最怕过压的,就是主控MCU和锂电池充电管理芯片。

为什么会过压?最常见的情况是充电器坏了,输出一个不正常的电压。或者用户用了非原装充电器,输出5V变成了9V。嗯,我见过不少这样的案例。

核心思路:在电源输入端加一个TVS管(瞬态抑制二极管),再加一个过压保护芯片。

我常用的方案是这样的:

// 过压保护电路关键参数
// TVS管选型:SMBJ5.0A,击穿电压6.4V,钳位电压9.2V
// 过压保护芯片:TPS2521,过压阈值6.0V,响应时间<1μs

// 电路连接示意
// VBUS --- [TVS管到GND] --- [TPS2521 IN] --- [TPS2521 OUT] --- 负载
//                              |
//                            [分压电阻到GND]

这里有个坑,我踩过。TVS管的钳位电压一定要选对。你想想看,如果牙刷的充电电压是5V,你选个钳位电压12V的TVS管,那等它起作用的时候,后面的芯片早就冒烟了。

我的经验:TVS管的钳位电压,最好选在正常电压的1.2~1.5倍。比如5V系统,选6~8V钳位的TVS管。别贪便宜买那种参数虚标的,我吃过亏。

4.2 欠压保护:电池没电了就别硬撑

欠压保护,主要是针对锂电池的。锂电池最怕过放,一旦电压低于2.7V,电池内部结构就可能损坏,甚至鼓包。

我记得有一次,一个客户反馈牙刷用着用着突然不转了,但充电又能用。拆开一看,电池电压只有2.5V,已经过放了。幸好没鼓包,不然就危险了。

欠压保护怎么做?两种方法:

  • 硬件方案:用电压比较器+基准电压源。当电池电压低于设定阈值时,比较器输出低电平,切断负载。
  • 软件方案:MCU通过ADC采样电池电压,低于阈值时主动关闭电机。

我个人更推荐软硬结合。为什么?因为纯软件方案有个隐患:如果MCU死机了,欠压保护就失效了。

// 欠压保护阈值设定(以3.7V锂电池为例)
#define BATTERY_UNDER_VOLTAGE_THRESHOLD  3.0f  // 单位:V
#define BATTERY_SHUTDOWN_THRESHOLD       2.9f  // 单位:V

// 软件欠压检测函数
void check_battery_voltage(void) {
    float vbat = get_battery_voltage();
    
    if (vbat < BATTERY_SHUTDOWN_THRESHOLD) {
        // 切断电机电源
        motor_stop();
        // 进入低功耗模式
        enter_sleep_mode();
        // 点亮欠压指示灯
        led_red_on();
    } else if (vbat < BATTERY_UNDER_VOLTAGE_THRESHOLD) {
        // 提示用户充电
        led_red_blink();
    }
}

注意:软件欠压检测一定要加迟滞。否则电池电压在阈值附近波动时,电机会频繁启停,用户体验极差。我一般设0.1V的迟滞量。

4.3 过流保护:别让电机把电池抽干

过流保护,主要保护电机驱动电路和电池。牙刷电机堵转时,电流会飙升到正常值的3~5倍。如果不保护,驱动芯片和电池都会遭殃。

你想想看,用户刷牙时用力过猛,牙刷头卡在牙齿缝里,电机转不动,电流瞬间飙到2A。这时候要是没有过流保护,驱动芯片可能直接烧掉。

过流保护的实现方式:

方案 原理 优点 缺点
采样电阻+比较器 在电机回路串一个小电阻,检测其两端电压 响应快,成本低 有功耗,需要精密电阻
霍尔电流传感器 利用霍尔效应检测电流 无损耗,隔离性好 成本高,体积大
驱动芯片自带保护 如DRV8837内置过流保护 集成度高,设计简单 阈值固定,不够灵活

我一般用第一种方案,便宜又可靠。采样电阻选0.1Ω,比较器阈值设0.2V,对应2A的过流保护点。

// 过流保护电路参数
// 采样电阻:R_sense = 0.1Ω
// 比较器阈值:V_th = 0.2V
// 过流保护点:I_protect = V_th / R_sense = 2A

// 比较器输出接MCU中断引脚
void EXTI_IRQHandler(void) {
    if (over_current_flag) {
        // 立即关闭电机
        motor_stop();
        // 记录故障
        fault_log |= FAULT_OVER_CURRENT;
        // 蜂鸣器报警
        buzzer_on();
        // 等待用户松开按键
        while (button_read() == PRESSED);
        buzzer_off();
    }
}

避坑指南:采样电阻的功率要算好。2A电流流过0.1Ω电阻,功耗是0.4W。我建议选1W的电阻,留够余量。曾经有个同事选了0.25W的,结果电阻直接冒烟了。

4.4 温度保护:别让牙刷变成暖手宝

温度保护,主要是防止电池过热和电机过热。锂电池在充电和放电时都会发热,如果散热不好,温度超过60°C就有危险。

我记得有一次做可靠性测试,牙刷连续工作30分钟后,外壳温度到了55°C。虽然没到危险线,但用户拿着肯定不舒服。所以温度保护不仅要考虑安全,还要考虑用户体验。

温度保护的实现:

  • NTC热敏电阻:贴在电池表面和电机附近,通过ADC读取温度。
  • 温度开关:比如KSD9700,当温度超过设定值时自动断开。
  • 软件保护:MCU根据温度值调整电机功率或停止工作。

我常用的NTC是10kΩ的,B值3950。电路很简单:NTC串联一个10kΩ电阻到VCC,中间点接ADC。

// NTC温度读取代码
#define NTC_B_VALUE     3950
#define NTC_R25         10000  // 25°C时电阻10kΩ
#define SERIES_RESISTOR 10000  // 串联电阻10kΩ

float read_temperature(void) {
    uint16_t adc_value = read_adc(NTC_ADC_CHANNEL);
    float voltage = (float)adc_value / 4096 * 3.3;
    float resistance = SERIES_RESISTOR * (3.3 / voltage - 1);
    
    // 用Steinhart-Hart方程计算温度
    float steinhart;
    steinhart = resistance / NTC_R25;           // R/R0
    steinhart = log(steinhart);                 // ln(R/R0)
    steinhart /= NTC_B_VALUE;                   // 1/B * ln(R/R0)
    steinhart += 1.0 / (25 + 273.15);           // + 1/T0
    steinhart = 1.0 / steinhart;                // 得到开尔文温度
    steinhart -= 273.15;                        // 转换为摄氏度
    
    return steinhart;
}

// 温度保护逻辑
void temperature_protection(void) {
    float temp = read_temperature();
    
    if (temp > 60.0f) {
        // 温度过高,停止充电或降低电机功率
        motor_set_speed(50);  // 降到50%功率
        led_red_blink();
    }
    
    if (temp > 70.0f) {
        // 危险温度,立即停止所有操作
        motor_stop();
        charger_disable();
        buzzer_alarm();
    }
}

重要提醒:NTC的安装位置很关键。一定要紧贴热源,用导热硅胶固定。我见过有人把NTC焊在PCB上离电池5cm远的地方,测出来的温度比实际低了10°C,这保护等于没做。

4.5 四种保护的协同工作

好了,四种保护都讲完了。但实际产品中,它们不是各自为战的。我习惯把它们整合成一个统一的保护系统。

举个例子:牙刷正在充电,同时用户在使用。这时候如果电池温度升高,温度保护会先降低充电电流。如果温度继续升高,过流保护会限制电机功率。如果电压异常,过压或欠压保护会切断电源。

我的设计原则是:

  1. 优先级:温度保护 > 过压保护 > 过流保护 > 欠压保护
  2. 响应时间:硬件保护(μs级) > 软件保护(ms级)
  3. 恢复机制:过流和过温保护需要用户手动复位,欠压保护在充电后自动恢复

总结一下:安全保护不是简单的堆砌电路,而是要形成一个完整的保护链。每个保护点都要有明确的阈值、响应时间和恢复策略。我做了这么多年硬件,最大的体会就是:保护电路宁可多做,不能少做。因为一个故障,可能毁掉整个产品的口碑。

嗯,这一章内容不少,但都是干货。下一章咱们聊聊牙刷的无线充电电路设计,那个更有意思。