当前位置:首页 > 汽车电子 > 汽车电子
[导读]BMS静置场景里,10μA不是“MCU进Standby”一个数字能搞定的。整板静态电流=MCU休眠电流+LDO/Iq+AFE常开域+CAN收发器待机+IO与外设漏电。代码只解决前一项,剩下靠电源域划分和进入休眠前的外设清理。


BMS静置场景里,10μA不是“MCU进Standby”一个数字能搞定的。整板静态电流=MCU休眠电流+LDO/Iq+AFE常开域+CAN收发器待机+IO与外设漏电。代码只解决前一项,剩下靠电源域划分和进入休眠前的外设清理。

一、BMS休眠边界先定清

进休眠前必须确认:

ACC/KL15、CRG充电信号、硬线Wakeup全部无效

CAN总线无活动超时

无采样故障、无均衡进行中

RTC下次巡检闹钟已设好

唤醒源通常分四类:硬线(ACC/CRG/Wakeup)、CAN收发器INH、RTC定时自检、从板AFE报警反向唤醒。休眠模式等级按唤醒实时性选:Standby最省但SRAM丢;Stop2保留上下文,适合还要保通信状态机的场景。

二、进休眠前的C语言清理顺序

顺序错了电流就压不下来:先停业务→关外设时钟→IO定型→关PLL/高速晶振→使能唤醒源→WFI。

/* 伪代码,寄存器名按具体MCU替换 */

void bms_enter_sleep(void){

   /* 1. 业务停:关ADC采样、关均衡MOS、释放SPI总线 */

   adc_stop();

   afe_shutdown();          /* AFE进休眠,别留运放通电 */

   can_tx_disable();


   /* 2. 外设时钟门控 */

   RCC->AHBENR = 0;         /* 关GPIO/SRAM外设时钟(保留唤醒所需)*/

   RCC->APB1ENR = 0;

   RCC->APB2ENR = 0;


   /* 3. IO不悬空:未用脚模拟输入,输出脚拉安全电平 */

   gpio_unused_analog();    /* 避免浮空输入缓冲翻转耗电 */

   gpio_out_safe();         /* 继电器/均衡脚明确为无效电平 */


   /* 4. 调试接口关:SWD引脚浮空是隐性漏电大户 */

   DBGMCU->CR = 0;


   /* 5. 高速时钟关,切LSE/LSI给RTC */

   RCC->CR &= ~RCC_CR_PLLON;

   while(RCC->CR & RCC_CR_PLLRDY);

   PWR->CR |= PWR_CR_ULP;   /* 调压器低功耗 */


   /* 6. 唤醒源使能 */

   RTC->CR |= RTC_CR_WUTE;          /* RTC周期唤醒 */

   EXTI->IMR |= WAKE_PIN_MASK;      /* WKUP/ACC/Wakeup */

   can_trx_enable_wake();           /* TJA1145类收发器Sleep+INH */


   /* 7. 清挂起中断,避免刚睡就醒 */

   EXTI->PR = 0xFFFFFFFF;

   __DSB(); __WFI();

}

唤醒后Standby相当于复位,要在启动代码里读唤醒标志决定走“重新初始化”还是“续上下文”;Stop2唤醒则要重配系统时钟、GPIO、SPI。

三、外设断电比MCU睡眠更关键

MCU进Stop2典型几十μA,但板子实测常卡在几百μA,问题多在外部:

LDO静态电流:AMS1117类Iq几十μA直接超标,常电域换TPS7A02/ADP160级nA LDO

分压电阻:电池电压采样分压臂一直挂VBAT,100k+100k在3.7V上就18μA,用GPIO或负载开关只在采样时接通

CAN收发器:必须真进Sleep,SPI命令回读确认;INH脚控制后级电源

AFE:选支持低功耗休眠的型号(如BQ76952、MC33772),休眠电流可到μA级

LED/调试:休眠前灭灯,别用PWM“假灭”

悬空脚:未用引脚配模拟输入或固定输出,不浮空

电源拓扑建议“常开nA LDO给RTC+WKUP+收发器待机”+“负载开关切MCU/AFE/CAN主域”,休眠时主域整路断电。

四、唤醒源配置注意点

WKUP引脚电平极性按硬件设,别配反

CAN唤醒报文滤波窗口别太窄,继电器动作噪声会误触发;也别太宽,否则总线一抖就醒

RTC巡检周期按安全需求定,比如30min~2h采一次电压温度,无异常立刻回休眠

硬线唤醒优先级高于CAN/RTC,唤醒后MCU自保持EN脚,避免信号抖动反复睡醒

五、实测验收

万用表μA档串VBAT,等系统稳定后读数;分三段测:

MCU Run:确认基线

进Stop2:看是否掉到几十μA

整板休眠(MCU+AFE+CAN断电):目标≤10μA

超了按“断开外设电源→关LDO后级→逐IO配固定电平→查上拉电阻”顺序隔离。 高温环境漏电流会翻倍,常温达标还要留余量。

BMS低功耗的底线是:MCU睡再深,LDO/Iq和外设域没切干净也白搭。代码负责“清外设+定型IO+使能唤醒”,硬件负责“常开域极小化+负载开关断电”,两者对上才能稳在10μA以内。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭