第四章 待机功耗与低功耗设计:TBOX休眠模式电流要求、RTC供电设计、唤醒源管理

各位工程师朋友,咱们今天聊点实在的。TBOX的电源管理,说白了就是跟电池较劲。车停了,TBOX不能死,但也不能太能吃电。我见过太多项目,功能做得花里胡哨,结果一测静态电流,直接超标两三倍。嗯,这里面的坑,我一个个给你们讲透。

4.1 休眠模式电流要求:底线在哪里?

先说说行业标准。主机厂对TBOX的休眠电流,通常要求小于2mA,严苛一点的会压到1mA以内。为什么这么抠?你想想看,一辆车停一个月,如果TBOX一直吃2mA,那点电量对铅酸电池来说,其实挺伤的。尤其是冬天,电池本身容量就下降,再被TBOX这么一耗,搞不好就打不着火了。

我做过一个项目,客户要求休眠电流≤1.5mA。当时我们用的主控是NXP的i.MX6,这家伙本身休眠功耗就偏高。后来没办法,只能加了一颗PMIC(电源管理芯片),专门负责在休眠时把主控彻底断电。实测下来,整机休眠电流做到了1.2mA,勉强过关。

关键指标速查表:

模式典型电流说明
正常工作200-500mA4G通信+GPS定位
浅休眠10-50mA保留RAM,快速唤醒
深休眠1-2mA仅RTC和唤醒逻辑工作
关机<100μA完全断电,仅保留RTC

这里有个容易忽略的点:休眠电流不是恒定值。它会在唤醒检测、RTC更新时出现尖峰。我建议你们在设计时,用平均电流来评估,而不是只看稳态值。我曾经被一个客户追着问,为什么示波器上看到电流有10mA的毛刺?其实那是CAN收发器在周期性检测总线状态,属于正常现象。

4.2 RTC供电设计:别让时间丢了

RTC(实时时钟)是TBOX的命根子。车停了,时间不能停。很多事件上报、日志记录都依赖准确的时间戳。RTC供电通常有两种方案:

  • 方案一:纽扣电池(CR2032)。简单可靠,但寿命有限。一颗电池大概能撑3-5年。我建议选松下或Maxell的工业级型号,别图便宜买杂牌,否则两年后时间就乱了。
  • 方案二:超级电容。环保,不用换电池。但容量有限,一般只能维持几周到几个月。适合那些停车时间不长的场景。

我个人习惯用双电源自动切换电路。主电(常电12V)存在时,由主电给RTC供电,同时给电池或电容充电。主电断开后,自动切换到备用电源。这样既保证了RTC不断电,又延长了电池寿命。

设计小技巧:RTC芯片的供电引脚上,一定要加一个0.1μF的陶瓷电容,紧贴芯片放置。这能滤除电源切换时的毛刺,防止RTC复位。我吃过这个亏,有一次切换瞬间电压跌落,导致RTC归零,所有日志时间戳全乱了。

另外,RTC的精度也要注意。普通晶振的温漂比较大,夏天和冬天能差几十秒。如果项目要求高精度(比如用于V2X时间同步),建议用TCXO(温度补偿晶振),或者干脆用GPS/4G网络校时。

4.3 唤醒源管理:谁叫醒了TBOX?

TBOX不能一直睡,得知道什么时候该醒。常见的唤醒源有三种:CAN唤醒、ACC唤醒、定时唤醒。咱们一个一个说。

4.3.1 CAN唤醒:最常用的方式

CAN唤醒的原理很简单:CAN总线上有活动时,收发器检测到差分信号变化,输出一个唤醒信号给MCU。现在主流的CAN收发器,比如TJA1040、SN65HVD230,都内置了唤醒功能。

但这里有个坑:误唤醒。CAN总线上的噪声、静电干扰,都可能触发虚假唤醒。我遇到过一台车,每次经过高压线塔,TBOX就莫名其妙被唤醒。后来查出来是CAN总线屏蔽层接地不良,导致共模干扰耦合进了差分信号。

避坑指南:我曾经在CAN唤醒引脚上只加了一个简单的RC滤波,结果现场频繁误唤醒。后来改成软件去抖——检测到唤醒信号后,延迟10ms再确认,如果信号持续有效才真正唤醒。从此再没出过问题。

代码实现也很简单,我贴一段伪代码给你们参考:

// CAN唤醒检测,带10ms去抖
bool check_can_wakeup(void) {
    if (GPIO_ReadPin(CAN_WAKEUP_PIN) == HIGH) {
        delay_ms(10);  // 去抖
        if (GPIO_ReadPin(CAN_WAKEUP_PIN) == HIGH) {
            return TRUE;  // 确认唤醒
        }
    }
    return FALSE;
}

4.3.2 ACC唤醒:点火信号

ACC(Accessory)信号,就是车钥匙拧到ON档时输出的12V电。这个信号最直接——车一启动,TBOX必须马上醒。但ACC信号有个特点:上电瞬间会有抖动。尤其是老旧车型,ACC继电器触点弹跳,可能产生多个脉冲。

我建议在ACC输入端加一个RC低通滤波,时间常数设在10-20ms左右。同时,软件里也要做防抖处理。别一检测到ACC高电平就立刻全系统上电,先等100ms确认稳定再说。

4.3.3 定时唤醒:周期性的任务

定时唤醒主要用于远程诊断、OTA升级、数据上报等场景。比如,TBOX可以设置每天凌晨3点醒来,上传前一天的行车数据。这个功能通常由RTC模块的闹钟中断实现。

设计时要注意:定时唤醒的周期不能太短。我见过有人设成每10分钟唤醒一次,结果整车的静态电流直接翻倍。一般来说,每小时一次是比较合理的频率。如果确实需要更频繁的唤醒,建议用浅休眠模式,保留部分外设供电,减少唤醒后的启动时间。

唤醒源优先级管理:

  1. ACC唤醒:最高优先级,车启动必须立即响应。
  2. CAN唤醒:次高优先级,网络有活动时唤醒。
  3. 定时唤醒:最低优先级,可被前两者打断。

我习惯在中断服务程序里设置一个唤醒标志位,主循环根据标志位判断执行什么任务。这样能避免多个唤醒源同时触发时的冲突。

4.4 综合设计思路:一个实际的案例

最后,我给你们分享一个我去年做的项目。客户要求TBOX在休眠时,平均电流≤1.8mA,同时支持CAN唤醒和定时唤醒。我们是这样设计的:

  • 主控:选用STM32L4系列,低功耗模式下电流仅1μA。
  • CAN收发器:TJA1040,休眠电流10μA,支持远程唤醒。
  • RTC:外置RX8025T,精度±5ppm,自带闹钟功能。
  • 电源管理:使用TPS62840 DC-DC,效率高达95%,休眠时关闭。

实测结果:深休眠电流1.2mA,定时唤醒后执行数据上传(耗时约30秒),平均电流1.6mA。完美达标。

嗯,关于待机功耗和低功耗设计,今天就聊这么多。下一章咱们讲电源保护电路——防反接、过压保护、浪涌抑制,这些可都是保命的东西。到时候见。