当前位置:首页 > 消费电子 > 消费电子
[导读]小家电待机功耗压到0.5W以内,不全是电源芯片的事。MCU睡得再深,背光LED还亮着、继电器线圈还吸着、GPIO浮空漏电几十μA,整机照样超。 软件层要做的不是“进个Stop模式”,是把运行态—待机态—唤醒恢复三段拆开,待机时只留唤醒源活着。

小家电待机功耗压到0.5W以内,不全是电源芯片的事。MCU睡得再深,背光LED还亮着、继电器线圈还吸着、GPIO浮空漏电几十μA,整机照样超。 软件层要做的不是“进个Stop模式”,是把运行态—待机态—唤醒恢复三段拆开,待机时只留唤醒源活着。

一、先定待机边界

待机≠关机。保留三件事就够了:

按键/触摸中断唤醒

RTC定时唤醒(如需周期检测)

电源IC辅助绕组供电

其余全断:显示、电机驱动、加热、传感器、通信外设。

某烤箱不进待机一直保温,待机5~10W;无操作10分钟进待机后降到0.4W。

二、进入待机前的清理顺序

顺序错了电流就压不下来,按“外设→时钟→GPIO→负载电源→MCU模式”走:

void enter_standby_prepare(void){

   /* 1. 停业务外设 */

   adc_stop();

   uart_disable();

   pwm_motor_stop();

   spi_disable();


   /* 2. 关外设时钟(只留RTC/LPTIM)*/

   RCC->APB1ENR &= ~(I2C1EN|TIM2EN|SPI2EN);

   RCC->APB2ENR &= ~(ADC1EN|USART1EN);


   /* 3. GPIO定型:空脚模拟输入,负载脚拉低 */

   gpio_unused_analog();              // 防浮空漏电

   gpio_write(MOS_BACKLIGHT, 0);      // 背光断电

   gpio_write(REL_MOTOR, 0);          // 继电器释放

   gpio_write(SENSOR_EN, 0);          // 传感器断供


   /* 4. 唤醒源配置 */

   exti_key_enable();                 // 按键下降沿

   rtc_set_alarm(idle_wake_sec);      // 定时唤醒


   /* 5. 进Stop/Standby */

   pwr_enter_stop();

}

关键点:

空脚设模拟输入或输出低电平,别留浮空输入,否则施密特触发器半导通漏电

唤醒脚(按键)保留输入+上下拉,不能设模拟

SWD脚别动成模拟,量产变砖

输出脚进待机前先拉确定电平,MOS栅极别半开

三、外设关干净的“三层关闭”

只关寄存器不关时钟、只关时钟不断电源,都是假省电:

停外设功能(ADC停止转换、UART发完最后一字节)

关外设时钟 __HAL_RCC_xxx_CLK_DISABLE()

MOS/负载开关切断外部器件电源

传感器、显示屏、WiFi模组别只“软件休眠”,走GPIO控MOS直接断电。某破壁机电源加空载休眠后,待机从0.6W降到0.15W。

四、别用周期唤醒假装低功耗

常见翻车:每10秒唤醒一次“检查一下状态”,每次唤醒启动电流叠加,平均功耗反而超。

某破壁机取消10分钟一次唤醒检查,每小时省0.2W。

规则:

纯待机只靠按键/触摸中断唤醒

RTC唤醒间隔≥1分钟,且唤醒后干完立即睡

唤醒别做“顺手扫一下传感器”,扫了就得开时钟开电源

批量处理:要采就一次采完,别碎唤醒

五、唤醒后恢复时钟再动外设

Stop唤醒后系统时钟常回到HSI默认低频,直接操作UART/I2S会波特率错、时序崩:

void wakeup_handler(void){

   system_clock_reconfig();      // HSE+PLL重配

   gpio_restore();

   periph_clock_enable();

   uart_reinit();

   pwm_resume_if_needed();


   if(rtc_wake()) do_idle_check();

   if(key_wake()) ui_wake();

}

Standby模式唤醒等同复位,RAM丢,关键状态存Backup REG或EEPROM。

六、负载侧才是0.5W大头

MCU待机电流做到μA级也就几mW,真正超0.5W的常是:

指示灯LED常亮 → 改按键瞬亮

数码管/背光不走MOS → 待机还在耗

继电器线圈保持吸合 → 待机必须释放

电源IC轻载效率低 → 换Burst/DoE Level VI电源

上拉电阻10k → 改100k降低静态电流

代码里“关背光”不是关PWM就完事,要MOS断供;继电器不是“输出低”就行,要看线圈回路真断开。

七、落坑清单

主循环while轮询按键→CPU不睡

只关ADC不关时钟→模拟电路还耗

空脚浮空输入→几μA到几百μA漏电

SWD设模拟输入→下不了程序

周期唤醒10s一次→平均功耗反升

唤醒不重配时钟→UART乱码

背光只关PWM不关MOS→屏还亮

继电器待机保持吸合→线圈白耗

电源选了满载高效待机拉胯→0.5W过不了

Standby后读RAM状态→复位丢失

八、调试方法

电流探头或功率计测三段:

深睡静态电流(目标μA级)

唤醒峰值时长

平均待机功率(24h加权)

二分法定位:先断外部负载电源,电流骤降就是那路漏;再把GPIO全设输出低,电流正常说明之前有浮空脚。

九、落地顺序

定待机触发:无操作5~10分钟

业务外设停掉,关时钟

空脚模拟输入,负载脚拉低

4 MOS断背光/传感器/通信模组电源

配置按键+RTC唤醒源

MCU进Stop(保RAM)或Standby(更深)

唤醒重配时钟再恢复外设

取消无意义周期唤醒

功率计测24h平均,超0.5W查负载侧

小家电待机0.5W的本质不是“MCU低功耗模式多深”,是待机时还有多少东西没真断。MCU睡到μA只是底线,背光、继电器、传感器电源、上拉电阻、周期唤醒才是隐性耗电大户。软件架构就一条:事件驱动+进待机前三层关断+唤醒后按序恢复。电源选型兜底,固件逻辑决定上限——两者只对上,0.5W才稳得过认证。



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