w494143467 发表于 2021-6-30 21:21

【环境专家之智能手表】Part16:手表日常低功耗

<p><strong><span style="font-size:20px;">1.介绍</span></strong></p>

<p><span style="font-size:16px;">既然是手表,那低功耗是肯定要有的,在写低功耗之前看了论坛中两个大佬的低功耗,一个大佬的整体系统电流在32.8uA,另一位大佬RSL10待机电流大约在30uA左右,我想如果我的待机电流能够达到30uA,那我的手表可以大半年不用充电了。</span></p>

<p><strong><span style="font-size:20px;">2.低功耗</span></strong></p>

<p><span style="font-size:16px;">首先测试一下正常情况下的电流,这个电流是波动的,4~6mA之间波动,主要原因是BHI160+BMM150在计算导致的大电流。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图1</span></p>

<p><span style="font-size:16px;">首先【RSL10-002GEVB】评估版有提供芯片电流检测接口,将如下图2跳冒断开,接上电流表。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图2</span></p>

<p><span style="font-size:16px;">下载【standby_power_mode】例程,然后得到了如下图3的电流值,为14.5uA。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图3</span></p>

<p><span style="font-size:16px;">然后将【standby_power_mode】例程下载至【RSL10-SENSE-DB-GEVK】开发套件,得到的电流为0.1mA。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图4</span></p>

<p><span style="font-size:16px;">应该是有一些外设的占用了80uA的功耗,可能是没初始化,默认处于工作状态,然后我尝试把所有外设的初始化全部关闭,得到的电流为0.75mA。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图5</span></p>

<p><span style="font-size:16px;">功耗还是有点高的,这是没进入Standby模式的功耗,然后初始化环境光传感器,电流增加了60uA。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图6</span></p>

<p><span style="font-size:16px;">将环境光传感器初始化后再执行关闭命令,代码如下:</span></p>

<pre>
<code class="language-cpp">/** Initialize LV0104CS. */
retval = LV0104CS_LUX_Initialize();
if (retval == LV0104CS_OK)
{
        retval = LV0104CS_LUX_StartContinuous(0, NULL);
        if (retval == LV0104CS_OK)
        {
                //lv0104cs_status = 0;
                LV0104CS_LUX_Stop();
        }
        else
        {
                lv0104cs_status = 2;
        }
}
else
{
        lv0104cs_status = 1;
}</code></pre>

<p><span style="font-size:16px;">然后打开BME680的初始化,对于外设全关闭的电流增加了70uA。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图7</span></p>

<p><span style="font-size:16px;">然后一样是初始化完成之后关闭BME680,代码如下:</span></p>

<pre>
<code>/** Initialize BME680 */
retval = BME680_ENV_Initialize();
if (retval == 0)
{
        retval = BME680_ENV_StartPeriodic(BME680_Callback, 3000);
        if (retval == 0)
        {
                //bme680_status = 0;
                BME680_ENV_StopPeriodic();
        }
        else
        {
                bme680_status = 2;
        }
}
else
{
        bme680_status = 1;
}
</code></pre>

<p><span style="font-size:16px;">然后打开BHI160 + BMM150初始化,电流增加了2~3mA,处于一个波动的状态。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图8</span></p>

<p><span style="font-size:16px;">和上面一样,执行完初始化后关闭【BHI160 + BMM150】,代码如下:</span></p>

<pre>
<code class="language-cpp">/** Initialize BHI160 + load BMM150 RAM patch */
retval = BHI160_NDOF_Initialize();
if (retval == BHY_SUCCESS)
{
        retval = BHI160_NDOF_EnableSensor(BHI160_NDOF_S_ORIENTATION, BHY_OrientationCallback, 1);
        if (retval == BHY_SUCCESS)
        {
                //bhy_status = 0;
                BHI160_NDOF_SetPowerMode(BHI160_NDOF_PM_STANDBY);
        }
        else
        {
                bhy_status = 2;
        }
}
else
{
        bhy_status = 1;
}</code></pre>

<p><span style="font-size:16px;">不过结果有点出乎意料,电流反而比外设全部不初始化低60uA。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图9</span></p>

<p><span style="font-size:16px;">最后开启音频外设,电流增加了1.5mA左右,这个倒是稳定的。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图10</span></p>

<p><span style="font-size:16px;">然后还有修改广播的频率,将【#define BDK_BLE_ADV_INT_DEFAULT】修改为1600则是1S广播一次,这样也可以减少些许的功耗。</span></p>

<p><span style="font-size:16px;">最后想在系统空闲的时候进入Standby模式,不过影响了系统的正常运行,正常实现低功耗的话,电流应该在100uA左右。纽扣电池的容量大概在220mA左右,而实际能使用的容量为【220x0.9=198】198mA的容量,半小时唤醒传感器工作十秒,对于整个系统的功耗不会增加太多,就算平均电流120uA,那220mA的纽扣电池可以待机【198/0.12/24=68.75】68天,也就是2个月,还是非常不错的,当然这还没达到极致,官方说明【RSL10-SENSE-DB-GEVK】的电流为20uA,如下图11,所以目前的低功耗还没达到最理想,不过已经完全够使用了。</span></p>

<p class="imagemiddle" style="text-align: center;"></p>

<p style="text-align: center;"><span style="font-size:16px;">图11</span></p>

<p><strong><span style="font-size:20px;">3.总结</span></strong></p>

<p><span style="font-size:16px;">低功耗问题是物联网产品最重要的一个参数之一,只有待机时间足够久,那么在产品上就有一定的优势,RSL10的功耗在诸多BLE芯片中可以算的上数一数二的了,这次低功耗还是学习了不少,也给安森美的RSL10点个赞!</span></p>

Jacktang 发表于 2021-6-30 21:35

<p>谢谢分享,做的不错了</p>

<p>官方的20uA想达到好像不容易</p>

dql2016 发表于 2021-7-1 12:10

<p>蟹蟹分享,我觉得一个产品的低功耗,主要取决于里面最差的组件,RSL10很优秀</p>
页: [1]
查看完整版本: 【环境专家之智能手表】Part16:手表日常低功耗