一、 知识理解
功耗优化的本质,是在正确的时间、让正确的电路模块、以最低必要的性能运行,而在空闲时,毫不犹豫地将其关掉或者是停止。
这要求开发者具备一种节约的思维,对每一微安的电流都用到最小或者是最低的一个状态。
二、MCU功耗优化一般我的理解是三种方式
MCU的低功耗能力通常通过以下几种模式实现,理解并熟练运用它们是优化的基础。
睡眠模式,也就是要按需求进行打盹,不知道这样说对不对,这是最基础的优化。当MCU完成一项任务后,如果下一任务还需它来处理等待超时等现象,则应让它进入睡眠模式,而非空转。
浅度睡眠:仅停止内核时钟,外设定时器、串口、ADC仍可运行。当任一中断事件定时器到时、收到数据发生时,内核被即刻唤醒,恢复执行。此模式唤醒延迟极短,适用于需要MCU频繁响应但计算量不大的场景。
深度睡眠:在浅度睡眠基础上,进一步关闭更多时钟和电源域,仅保留极少数必要电路,实时时钟、看门狗、特定唤醒源。此模式下功耗可降至微安级,但唤醒后通常需要更长的启动时间和软件重新初始化。
待机/关机模式:最极端的省电模式,几乎关闭所有电源,仅保留少数引脚,复位脚、特定唤醒引脚的电压。功耗可低至纳安级,但唤醒后等同于硬件复位,程序从开头执行,需要软件保存休眠前的状态。
选择策略:根据任务间隔选择模式。间隔秒级用浅睡,分钟级用深睡,小时级以上用待机。
动态电源管理与时钟系统,是什么意思呢,就是根据情况还进行调整。
这是更深层次的优化,在动态调整MCU的电压和速度,频率。
动态电压频率调节:MCU功耗与频率成正比,与电压的平方成正比。在执行复杂计算时,让内核运行在较高频率和电压;在处理简单任务或空闲时,立即降低频率和电压。现代MCU的DVFS功能可自动完成此调节。
时钟门控与分频:精细化管理每个外设的时钟。UART不用时,关闭其时钟;ADC采样率要求不高时,大幅降低其时钟分频。这需要开发者对MCU的时钟树有清晰了解。
外设管理,人走电断的方式。
外设是功耗使用大户,特别是像FPGA那些周围的外设工作起来,功耗很大,有的都好几A的情况都有,尤其是无线模块、显示屏、传感器等。
静态功耗管理:明确的原则是不用即断电。在进入睡眠前,务必在软件中依次:
停止 外设(如禁用ADC、停止定时器)。——>禁用 其时钟。——>将使用的 GPIO引脚配置为模拟输入或输出低电平,避免悬空引脚因中间电平产生漏电流。——>如果硬件支持,切断 外设的电源域。
动态功耗管理:即使是运行中的外设,也有优化空间。像降低屏幕亮度、缩短无线模块的广播间隔、让传感器以更低速率采样等。
三、 系统化方式去实现,软硬都实施,才能更长久的实现
事件驱动架构:整个软件设计应围绕中断和事件构建。MCU绝大部分时间应在最深可能的睡眠中,仅被外部事件按键、数据到达、定时器中断唤醒,工作完成后立刻返回睡眠。坚决杜绝while(1)轮询。这个说的比较官方了,意思是什么呢,就是在低功耗时,只有能够唤醒的电路和执行才允许工作。
计算换功耗:有时增加一点计算量,能大幅节省功耗。例如,在本地进行简单数据滤波和压缩,减少无线发送的数据量和次数,因为无线传输的能耗远高于MCU计算。
硬件选型与设计:
选型:在项目初期就选择低功耗MCU。
电源设计:使用高效率的LDO或DC-DC电源芯片。
电路设计:为高功耗外设GPS、4G模块设计独立的电源开关电路,由MCU GPIO控制,不用时彻底断电。
以上就是我对这功耗优化的理解和处理方式,供坛友参考,和指点。
|
|