功耗是物联网应用当中非常关键的因素,在开发的早期都会对功耗进行评估和测试。那么,如何使用ST提供的工具对动态功耗进行测量呢?针对BLE应用应当如何进行低功耗的设计呢?本篇跟大家一起聊聊该话题。
测量工具
在本文中使用CubeMonitor-Power + Power Shield的组合工具对STM32Nucleo开发板的动态功耗进行测量。
CubeMonitor-Power是ST提供的上位机软件,主要帮助用户动态的测量功耗。用户可以设定采样频率,采样时间,输入电压等。其界面如下:
X-NUCLEO-LPM01A是ST提供的一块功耗测量的评估板,它可以配合CubeMonitor-Power上位机软件,对目标板的动态功耗进行测量,方便开发者对功耗进行评估。
其特性如下:可编程电压源范围:1.8v~3.3v
静态测量:
电流范围:1nA~200mA
动态测量:
电流范围:100nA~50mA
100KHz带宽,3.2Msps采样率
功耗测量范围:180nW~165mW
X-NUCLEO-LPM01A与STM32WB Nucleo板的连接如下所示,完成连接后就可以通过上位机控制和测量Nucleo的功耗了。
不同低功耗模式的区别主要如下:
低功耗模式唤醒源唤醒后系统时钟时钟影响
Sleep中断/事件与进入前一样CPU时钟关闭,对其他时钟或模拟时钟源无影响
LPRUN清除LPR位与进入前一样无
LPSLEEP中断/事件与进入前一样CPU时钟关闭,对其他时钟或模拟时钟源无影响
Stop0/Stop1/Stop2任意EXTI,特定外设事件
STOPWUCK=1,HSI16STOPWUCK=0,MSI
所有时钟关闭,除了LSI和LSE
StandbyWKUP引脚,RTC事件,LSECSS,NRST引脚复位,IWDG重置HSI16
ShutdownWKUP引脚,RTC事件, NRST引脚复位MSI 4MHz所有时钟关闭,除了LSE
STM32WB支持的低功耗模式非常多,首先需要根据应用情况选择一个适合的低功耗模式,能保持BLE连接的低功耗模式主要有Sleep和STOP,
SMPS
LDO是一种线性电源,它的优势在于结构简单,电流纹波比较低,但电源效率偏低。
SMPS是一种开关电源,它的优势在于电源效率高,损耗小,但由于频率较高会对周围设备造成一定的干扰,需要注意。
通过修改Nucleo板子上的SB31可以控制LDO还是SMPS供电:SB31打开:SMPS打开SB31关闭:SMPS关闭软件侧,打开SMPS,修改app_conf.h代码如下:
#define CFG_USE_SMPS 1
关闭SMPS,使用LDO,修改app_conf.h代码:#define CFG_USE_SMPS 0
从以上图片可以看出,使用SMPS无论是平均电流还是低功耗状态下的电流都要更小,所以应当尽可能使用SMPS。
广播参数
使用BLE_HeartRate Demo不需要做任何修改就可以测试不同的广播参数,该demo默认会先进行一段时间快速广播,然后再进入慢速广播。
广播间隔不同,平均功耗不同。
左侧图片的广播间隔为80ms~100ms,平均电流为282.914 uA。右侧图片的广播间隔为1s~2.5s,平均电流为16.443 uA。
可以看出广播间隔的长短对功耗影响很大,所以在设计BLE应用的时候,应当考虑适当降低广播间隔。
为了保证尽快被对方设备发现,可以如ST 心率Demo中的做法类似,首先先进入一段时间的快速广播,然后使用慢速广播,这样既可以保证开机时被发现的速度,又可以降低平均功耗。
连接参数
测试修改连接参数,可以使用ST提供的P2P Demo。注意:只有主机才能修改连接参数。
通过Button SW2按键,切换并测试不同的连接参数,代码修改如下图:打开Button SW2的中断:
关闭trace后,可以使能低功耗:
连接dongle后,按下Button后,切换不同的连接参数:
由于BLE在没有数据传输时,也会发送空包,所以降低连接间隔,可以降低平均功耗。
如图所示,左边是使用125ms连接间隔测试的结果,右边是使用1250ms连接间隔的测试结果,左边比右边的平均电流要高近 140uA。所以在应用中可以根据具体的应用使用合适的连接间隔来降低平均功耗。
总结
本文介绍了使用STM32WB设计BLE应用时,影响功耗的各方面的内容。低功耗设计的好坏,直接关系到产品的使用时长,往往是优秀产品的必备要素,需要认真掌握。