当前位置:首页 > 电源 > 电源
[导读]电池边缘设备想“续航翻3倍”,不是单改一个参数,而是把平均功耗按“占空比×动态功耗×静态漏电”一起压下去:采样时全速、空闲时降频进C-state、无任务时整体suspend,外设不用就runtime挂起。周期性上报类节点把活跃时间从“一直跑”改成“跑100ms、睡数分钟”,配合关无线、关背光、关多余服务,3倍目标可测可达。


电池边缘设备想“续航翻3倍”,不是单改一个参数,而是把平均功耗按“占空比×动态功耗×静态漏电”一起压下去:采样时全速、空闲时降频进C-state、无任务时整体suspend,外设不用就runtime挂起。周期性上报类节点把活跃时间从“一直跑”改成“跑100ms、睡数分钟”,配合关无线、关背光、关多余服务,3倍目标可测可达。

一、DVFS与governor按场景切

轻负载边缘节点用schedutil或powersave,避免一直锁最高频:

for cpu in /sys/devices/system/cpu/cpu[0-9]*; do

   echo schedutil > $cpu/cpufreq/scaling_governor

done

# 极端省电值守可powersave;有实时突发再schedutil

echo 500000 > /sys/devices/system/cpu/cpufreq/policy0/schedutil/up_rate_limit_us

多簇big.LITTLE按policy分别设,小核值守、大核仅推理时拉起;内核开CONFIG_CPU_FREQ、CONFIG_CPU_IDLE、NO_HZ_IDLE,让空闲能进深C-state。用cpuidle查看各状态命中率,深态进不去再查固件C-state白名单和驱动阻睡。

二、外设runtime PM与硬关断

USB、Wi-Fi、BT、以太网不用就关。runtime PM统一走auto:

for d in /sys/bus/usb/devices/*/power/control; do echo auto > $d; done

rfkill block wifi; rfkill block bluetooth

ethtool -s eth0 wol g      # 只留WoL时可关主网

ifconfig wlan0 down

传感器、SPI屏、ADC等可写驱动runtime挂起,用户态也可强制:

echo auto > /sys/bus/spi/devices/spi0.0/power/control

echo auto > /sys/bus/i2c/devices/0-0048/power/control

长期不采样可直给GPIO断电:驱动suspend断供、resume再上电,比runtime更省。 powertop先看Device页谁一直Active,再决定关哪个。

三、深度suspend+RTC/GPIO唤醒

周期性采集最省电:进mem,RTC定时醒,GPIO按键备援。

echo enabled > /sys/class/rtc/rtc0/device/power/wakeup

echo +300 > /sys/class/rtc/rtc0/wakealarm   # 5分钟后续采集

echo mem > /sys/power/state

也可用rtcwake一步到位:

rtcwake -m mem -s 300

GPIO唤醒在设备树标记,按键/传感器中断才能拖系统出suspend:

gpio_keys {

   compatible = "gpio-keys";

   key_wake {

       label = "lowpower-wake";

       gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;

       linux,code = <KEY_WAKEUP>;

       wakeup-source;

   };

};

RTC节点同样要保证驱动支持唤醒;深度standby还要核对PMIC、VBAT和唤醒引脚供电域。 某Cortex-A7样机纯活跃1.2W、mem后0.08W,占空比拉开后续航可提升一个数量级;i.MX6ULL气象站待机电流350mA优化到85mA、整体续航约4倍,说明“睡眠策略+调频+外设”叠加才出效果。

四、应用层去轮询、合并写

坏写法每100ms醒一次:

while(1){ usleep(100000); read_sensor(); }

改事件/定时器驱动,无事件不占CPU:

int fd=open("/dev/input/event0",O_RDONLY);

struct input_event ev;

while(read(fd,&ev,sizeof(ev))>0){

   if(ev.type==EV_KEY||ev.type==EV_ABS) handle(ev);

}

日志写mmc/ nand会很费电,改tmpfs环形缓冲,按次或按量落盘;systemd关不需要服务,用powertop --auto-tune固化USB/audio/sata建议。

五、测量闭环

powertop --html=before.html          # 电池/固定电源下跑5~10分钟

powertop --auto-tune                  # 应用Tunables

# 看Idle Stats深C占比、Device Stats阻睡设备、Overview唤醒次数

串联精密电源记录I_active、I_idle、I_suspend,按容量估算:

续航≈Q/(I_active×占空比+I_suspend×(1−占空比)+I_idle×其余)

只降频可能省20%~30%,只suspend可能省数倍;两者加外设runtime、关无线、应用事件化一起做,采样上报节点从“常活”变“百毫秒活、分钟级睡”,3倍目标更稳。注意深C-state会增加唤醒延迟,工业实时控制要折中,不要为省电把控制周期拖垮。



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