ble之所以能做到μa级别的功耗,在使用纽扣电池供电的情况下能工作达半年甚至更久的原因就是ble特殊的休眠的机制,简单概括就是在特定的时间启动射频,快速地发射完数据后关闭射频进入休眠状态,也就是说在ble工作期间,其射频大部分时间都是处于关闭状态,所以它的功耗就能非常低。
图1就展示了ble设备发送广播数据的电流(图片来源于信驰达产品实测)。
图1 ble设备广播电流
影响ble功耗的参数
本文所说的影响功耗的参数是站在ble协议栈的基础上来说的,不包括硬件本身带来的功耗,比如当你模块负载着很多led的时候,ble模块的功耗降不下来,这就不在讨论范围之内。
影响ble功耗的参数有如下几个:
1.广播间隙(advertising interval)
2.连接间隙(connection interval)
3.从设备延迟(slave latency)
4.连接超时(supervision timeout)
5.扫描窗口(scan window)
6.扫描间隙(scan interval)
1.广播间隙(advertising interval)
ble设备在每次广播时,都会在三个信道上发送相同的报文,这些报文被称为一个广播事件,两个相邻的广播事件的时间就是广播间隙。关于广播间隙的定义如图2(图片来自core_v5.0,蓝牙核心协议5.0)
图2 广播间隙
广播间隙是针对从机设备来说的,广播间隙决定了从机设备的广播频率,你说是一秒钟发一次数据的功耗高呢,还是一秒钟发十次数据的功耗高呢?所以将ble广播间隙调大一些,这样在单位时间中广播次数减少,就能有效的降低功耗。范围如图3所示(图片来自core_v5.0,蓝牙核心协议5.0)
图3 广播间隙范围
2.连接间隙(connection interval)
ble主机设备和从机设备建立连接后,进行数据交互的间隔称为连接间隙,注意是主从设备建立连接后。关于连接间隙的定义如图4(图片来自core_v5.0,蓝牙核心协议5.0)
图4 连接间隙
连接间隙就是指主机从机设备之间的交互频率,将连接间隙调大一些即可有效的降低功耗。连接间隙的参数范围也有一个规定值,如图5所示(图片来自core_v5.0,蓝牙核心协议5.0)
图5 连接间隙范围
3.从设备延迟(slave latency)
从设备延迟是指在连接将被终止之前从设备能够处于睡眠状态的ble连接间隔的数目。为了形象的说明此概念,引用图6来进行解释。
图6 slave latency图解
从图中可以看出当从设备延迟关闭(即等于0的时候),每一个主机发起的数据交互从机都必须要响应,当从设备延迟打开(图中等于3的时候),从机可以忽略3次主机发起的数据交互请求,而继续处于休眠状态。
从图6也可以看出当开启从设备延迟时,从机处于休眠的时间就更多,那么设备就可以更省电。
4.连接超时(supervision timeout)
连接超时又叫监控超时,是指le链路的链路监督超时时间,必须是10ms的整数倍。必须满足关系:timeout >(1 latency) * interval_max * 2。连接超时范围如图7所示(图片来自core_v5.0,蓝牙核心协议5.0)
图7 连接超时范围
5.扫描参数: 扫描窗口(scan window)、扫描间隙(scan interval)
扫描参数是蓝牙主机设备特有的参数,每次扫描时,设备打开接收器去监听广播设备,这称为一个扫描事件。扫描参数有两个:扫描窗口与扫描间隔。如图8所示(图片来自core_v5.0,蓝牙核心协议5.0)
图8 扫描参数构成
关于扫描间隙和扫描窗口的定义如图9所示(图片来自core_v5.0,蓝牙核心协议5.0)
图9 scan interval 和scan window定义
扫描窗口(scan window):扫描窗口是指进行一次扫描的时间宽度,也就是扫描的持续时间。持续时间越短消耗的能源就越少。
扫描间隙(scan interval):扫描间隙是指两个连续的扫描窗口的起始时间的间隔。即可以理解为扫描频率,频率越低消耗的能量就越少。
需要注意的是扫描窗口要小于扫描间隙。
参数范围如图10所示(图片来自core_v5.0,蓝牙核心协议5.0)
图10 扫描间隙扫描窗口范围
如何设置参数来降低功耗?
本文基于信驰达nrf52系列的ble蓝牙模块,来说明如何通过at指令设置参数来降低ble模块的功耗。
1.设置广播间隙
打开串口助手发送指令,如图11所示:at advintv=1600(1600*0.625=1000ms),at advintv=1600(160*0.625=100ms)
图11 设置广播间隙为1s和100ms
设置成功后通过电流测试工具抓取电流数据如图12所示,可以看到平均值为29.93ua。设置为100ms时的功耗为250ua.
图12 1s和100ms广播间隙的功耗对比
2.设置广播间隙
2.设置广播间隙
打开串口助手发送指令如图13所示,设置连接间隙为1s:at conmaxintv=800(800*1.25=1000ms), at conminintv=800(800*1.25=1000ms),设置连接间隙为100ms
图13 设置连接间隙为1s和100ms
成功设置连接间隙后使用仪器抓取功耗如图14所示。连接间隙为1s时功耗259μa,连接间隙为100ms时功耗为335μa。
图14 1s连接间隙和100ms连接间隙功耗对比
3.设置从设备延迟和链接超时
在设置从设备延迟和连接超时的时候需要注意参数范围:
设置参数如图15所示:timeout >(1 latency) * interval_max * 2
5000>(1 20)*100*2
图15 设置从设备延迟和连接超时
需要注意苹果系统的设备做主机的时候,连接参数更为苛刻,需要满足以下关系,否则连接可能存在异常。
interval_max* (slave latency 1) ≤ 2 seconds
interval_min≥ 20 ms
interval_min 20 ms ≤ interval_max
slavelatency ≤ 4
timeout ≤6 s
interval_max* (slave latency 1) * 3 < timeout
4.设置扫描参数
设置扫描参数为1s和10ms,如图16所示:
图16 设置扫描参数为1s和10ms
设置成功后,通过仪器观察功耗情况如图17所示:
1s的扫描间隙扫描窗口平均电流:72.4μa
10ms扫描间隙扫描窗口平均电流:3.37ma
图17 1s扫描间隙与10ms扫描间隙功耗对比
信驰达目前的ble系列产品众多,这里就不对每种型号做示例,可根据自己手里的型号找到对应手册中的指令进行设置。
若使用的是别的公司的产品,想要降低功耗亦可设置这些参数来降低功耗。这里附上一些信驰达产品测试的具体数据,就能更直观地看到各个参数对于功耗的影响: