前言
- 之前根据实际项目的功耗管理抽空写了几篇功耗管理相关的文章,但感觉还没有讲透功耗是个什么,怎么按步骤进行管理
- 直观的感受,如手机充满用了一天,发现电量低于50%,晚上要接着充电吧,否则第二天电量估计不足,这个50%、充满100%是个什么概念?
- 引入实际的项目并讲解功耗管理(功耗调优)为大势所趋
- 一言以蔽之,前面的文章只是理论与基础,质量不太高
- 有了前面的文章的理论与基础,相信在电源管理、功耗调优方面会有一点方向感
实践与实战
- 假如项目使用一个低功耗的MCU,通过查看MCU的手册,如STM32L系列,直观上会认为让STM32L475本身进入低功耗模式,实现电源模式切换,功耗管理就完成了
- 但是没想到,实际中功耗管理起来相当的复杂,并且管理的是硬件与业务,不仅仅是MCU本身的功耗。
- 大型的团队里,与功耗相关的小组有:硬件部、测试部、BSP(驱动部)、OS(系统部)、UI(应用部)、BMS(电池管理)、项目部、策划部(产品定义),等等。
- 大型项目中的功耗管理不再是:自扫门前雪,由于牵涉的部门与成员很多,管理起来很麻烦。
- 功耗管理不仅是需要熟悉PM框架(软件)的使用,还需要各种电源仪器仪表(直流电源、万用表),不仅需要懂MCU的电源管理,还要懂各个片外外设,要熟悉硬件(不只是了解),还有熟悉软件
- 功耗管理一般是个冷板凳的活,很少有公司专门投入较大的人力与时间去研究去管理,干好了没什么可说的,干不好的话,呵呵。
理论结合实战
- 需要用数据与事实来讲解,这里使用STM32L475-Pandora 开发板,讲解一下功耗相关的数据
- 工具:电源分析仪一台,或者可以使用Power Monitor等,用途为:供电、电源分析,在这里,电源分析是重要的。
- PC端使用电源分析仪带的电源分析工具,图形化查看功耗数据(电压、时间、电流)
- 打仗,需要了解打的是谁,功耗管理也是一样,管的是什么?做到什么程度才算好。
- 开发板:STM32L475-Pandora,其他电路板也可以
- 万用表:测量电压,测量某路的电流
- 另外根据情况配置电烙铁、杜邦线、开发板下载工具、USB转串口工具等
接线
- 这里有点讲究:要了解或熟悉硬件,否则接错了很可能把板子烧掉,或者测量的不准确(不是主电源),严重影响下一步的电源分析与管理。
- 为了防止烧掉板子需要了解板子的电压供电范围,通过电路板的原理图,可以查找电源的【主入口】
- 如STM32L475-Pandora开发板,电源入口是两个USB座,5V的电源来自USB VBUS,有5V的扩展排针,可以作为整板供电,但接线时需要注意电压要正确,为5V,电源的正负极接对。
- 假如你接的位置不正确,如接的是3.3V,或测量功耗时还接着USB线供电,测量的数据会千差万别,用来测量功耗,会带来很多烦恼。
- 使用外部电源分析仪供电时,不要再使用USB供电,这样电源分析仪测量的即为整机电流。
- 说到整机电流,就是这个板子的所有电流,全部由一个电源入口进入。
- 在测量整机功耗时,如果板子使用电池,需要先取下电池,引出电池的正、负极两根电源线,使用外部的电源作为假电池供电,注意使用颜色区分电源的正负极,防止接反损坏电路板。
功耗测量
- 功耗数据一般由:供电电压、供电电流、持续时间组成,分为瞬时功耗、平均功耗。
- 瞬时功耗一般为当前实时(短时间)的平均功耗
- 平均功耗一般只一段较长时间的功耗,如10S内、10min内,1小时或1天内的平均功耗
- 功耗的单位:毫安(mA)、微安(uA)、毫安时(mAh)等,为何不包括电压?因为电压变化不大(尤其是使用电池场景),某些场景下,有电压,但是没有电流,不产生功耗。
- 开发板默认功耗:一个LED的功耗
小疑问
- 项目给的功耗目标是待机 100uA,这里 50mA,功耗算不算合格?
100uA 是 0.1mA, 跟50mA比,当然是50mA大了,所以功耗不合格
- 项目给的电池 100mAh,我用 50mA的放电电流,可以放电多久?一天?
放电时间:
电量 / 放电电流 = 使用时间
,这里:100mAh / 50mA = 2h,只能放电 2小时,注意一般的电池,实际可以使用的电量不可能100%,普通锂电池的有效电量为:85%~95%,所以实际使用2个小时都达不到。
- 100mAh 与 100mA的区别是什么?
mAh是电量,mA是电流。如100mA放电,100mAh可以放电1h,如用10mA放电,不考虑电池自放电与实际有效容量的情况下,理论上就可以放电10h
- 手机刚买回来,能用续航两天,一年之后,却用不了一天?
这是电池的特性,越用越不耐用,反复充电影响电池的寿命与容量(容量越来越小)
小结
- 电源(功耗)管理需要懂的东西,不只是PM框架或MCU本身,要去了解更多的东西
- 当前的开发板50mA的电流都干什么了,我代码里只有一个LED闪灯啊。
接下来讲解:如何降低这个功耗,这也是功耗调优的意义所在:降低功耗,提高续航
- LED关了确实降低了功耗,可是电流还是有50mA左右,怎么达成uA级的目标?
接下来讲解:功耗拆拆解,找到功耗大头
- 假如我的业务就是LED闪烁,你直接给我关了,我不干事情了?不关闭,能否降低整机功耗?
接下来讲解:什么是间歇性工作,如何在完成工作的同时降低功耗
- 各个疑难如何排查?如何成为功耗管理专业人士?敬请期待…