做一个防丢器应用,扩展睡眠模式,待机电流20ua左右,连接app状态120ua左右,想问一下这是正常的吗?如果不是正常,怎样才能减低功耗
Q:想问一下这是正常的吗?A:需要您提供一下你项目工程里具体的蓝牙连接参数和你板子上使用了哪些传感器等信息,才能得知。连接参数包括:广播间隔,连接间隔如果没有其它传感器在工作,并且广播间隔设置的是 1s,待机(有广播)电流应该是 10uA左右;连接状态,当连接间隔是 500ms 时,电流应该也在 20uA 以内。
Q:怎样才能减低功耗?A:可通过调整广播、连接间隔达到降低功耗的目的。若调整了之后,功耗还降不下来,就需要检查异常漏电:可先排查下硬件上有没有元件漏电(LDO 漏电,休眠时IO口状态异常导致的漏电等),查一下传感器待机功耗等;然后,检查软件有没有频繁触发的定时器,有没有进休眠前让传感器外设进入低功耗状态等
用的最小系统+w25x20clflash做低功耗测试蓝牙工程版本:5.0.4蓝牙工程:ble_app_ota我在OTA工程里面添加睡眠,只是修改了const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;即可进入扩展睡眠在user_config.h中设置的广播间隔和连接间隔在static const struct advertise_configuration user_adv_conf中设置广播间隔.intv_min = 400, //1s // 100ms = (160*0.625ms).intv_max = 1600, // 100ms = (160*0.625ms)在static const struct gapm_configuration user_gapm_conf中设置了.con_intv_min = MS_TO_DOUBLESLOTS(400),.con_intv_max = MS_TO_DOUBLESLOTS(400),和static const struct connection_param_configuration user_connection_param_conf中设置了.intv_min = MS_TO_DOUBLESLOTS(400),.intv_max = MS_TO_DOUBLESLOTS(400),这是我调整连接间隔的两个地方,不知道对不对,调整之后,用万用表测试发现效果不大,连接状态功耗还是110左右波动
另外补充一些:1 稳压电压电压是用的3.15V进行供电并且万用表测试2 板子未使用的IO口都是悬空处理,是否不使用的IO要接地3 芯片接地口通过一个10k电阻接地4 最开始做低功耗的时候还发现连接状态进入睡眠一会之后功耗马上会变高到300ua左右,发现是参数更新定时器问题在user_ota文件的user_app_connection函数中if ((param->con_interval < user_connection_param_conf.intv_min) ||(param->con_interval > user_connection_param_conf.intv_max) ||(param->con_latency != user_connection_param_conf.latency) ||(param->sup_to != user_connection_param_conf.time_out)){// Connection params are not these that we expectapp_param_update_request_timer_used = app_easy_timer(APP_PARAM_UPDATE_REQUEST_TO, param_update_request_timer_cb);}我将这段代码屏蔽掉了,就不会出现功耗突然增加到300ua左右的情况,不知道对板子有没有影响
Q:这是我调整连接间隔的两个地方,不知道对不对?
A:设置的位置没错。不过需要注意的是,连接间隔的最小值和最大值需要有一定的间隔,例如:
.con_intv_min = MS_TO_DOUBLESLOTS(360),.con_intv_max = MS_TO_DOUBLESLOTS(400),
.intv_min = MS_TO_DOUBLESLOTS(360),.intv_max = MS_TO_DOUBLESLOTS(400),
Q:调整之后,用万用表测试发现效果不大,连接状态功耗还是110左右波动
答:祝福的电流波形是周期性“凸”起来的,休眠状态是3 ua左右的直线,唤醒时,会跳到马级别。不知你的万用表是否支持连续测试并计算出平均电流?可在我们的开发板上,用power profile工具进行测试,具体可见:https://support.dialog-semiconductor.com/system/files/resources/User%20m...。
注:在我们的网站上下载文档时,需要先注册一个账号。
Q:板子未使用的IO口都是悬空处理,是否不使用的IO要接地
A:悬空即可
Q:最开始做低功耗的时候还发现连接状态进入睡眠一会之后功耗马上会变高到300ua左右,发现是参数更新定时器问题
A:每次连接成功,系统会在 APP_PARAM_UPDATE_REQUEST_TO 超时之后更新连接参数,更新的内容在结构体user_connection_param_conf中。更完成后,即重新回到休眠状态,对系统功耗影响不大,不建议去除。
Q:想问一下这是正常的吗?
A:需要您提供一下你项目工程里具体的蓝牙连接参数和你板子上使用了哪些传感器等信息,才能得知。
连接参数包括:广播间隔,连接间隔
如果没有其它传感器在工作,并且广播间隔设置的是 1s,待机(有广播)电流应该是 10uA左右;连接状态,当连接间隔是 500ms 时,电流应该也在 20uA 以内。
Q:怎样才能减低功耗?
A:可通过调整广播、连接间隔达到降低功耗的目的。若调整了之后,功耗还降不下来,就需要检查异常漏电:
可先排查下硬件上有没有元件漏电(LDO 漏电,休眠时IO口状态异常导致的漏电等),查一下传感器待机功耗等;
然后,检查软件有没有频繁触发的定时器,有没有进休眠前让传感器外设进入低功耗状态等
用的最小系统+w25x20clflash做低功耗测试
蓝牙工程版本:5.0.4
蓝牙工程:ble_app_ota
我在OTA工程里面添加睡眠,只是修改了const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;即可进入扩展睡眠
在user_config.h中设置的广播间隔和连接间隔
在static const struct advertise_configuration user_adv_conf中设置广播间隔
.intv_min = 400, //1s // 100ms = (160*0.625ms)
.intv_max = 1600, // 100ms = (160*0.625ms)
在static const struct gapm_configuration user_gapm_conf中设置了
.con_intv_min = MS_TO_DOUBLESLOTS(400),
.con_intv_max = MS_TO_DOUBLESLOTS(400),
和static const struct connection_param_configuration user_connection_param_conf中设置了
.intv_min = MS_TO_DOUBLESLOTS(400),
.intv_max = MS_TO_DOUBLESLOTS(400),
这是我调整连接间隔的两个地方,不知道对不对,调整之后,用万用表测试发现效果不大,连接状态功耗还是110左右波动
另外补充一些:
1 稳压电压电压是用的3.15V进行供电并且万用表测试
2 板子未使用的IO口都是悬空处理,是否不使用的IO要接地
3 芯片接地口通过一个10k电阻接地
4 最开始做低功耗的时候还发现连接状态进入睡眠一会之后功耗马上会变高到300ua左右,发现是参数更新定时器问题
在user_ota文件的user_app_connection函数中
if ((param->con_interval < user_connection_param_conf.intv_min) ||
(param->con_interval > user_connection_param_conf.intv_max) ||
(param->con_latency != user_connection_param_conf.latency) ||
(param->sup_to != user_connection_param_conf.time_out))
{
// Connection params are not these that we expect
app_param_update_request_timer_used = app_easy_timer(APP_PARAM_UPDATE_REQUEST_TO, param_update_request_timer_cb);
}
我将这段代码屏蔽掉了,就不会出现功耗突然增加到300ua左右的情况,不知道对板子有没有影响
Q:这是我调整连接间隔的两个地方,不知道对不对?
A:设置的位置没错。不过需要注意的是,连接间隔的最小值和最大值需要有一定的间隔,例如:
.con_intv_min = MS_TO_DOUBLESLOTS(360),
.con_intv_max = MS_TO_DOUBLESLOTS(400),
.intv_min = MS_TO_DOUBLESLOTS(360),
.intv_max = MS_TO_DOUBLESLOTS(400),
Q:调整之后,用万用表测试发现效果不大,连接状态功耗还是110左右波动
答:祝福的电流波形是周期性“凸”起来的,休眠状态是3 ua左右的直线,唤醒时,会跳到马级别。不知你的万用表是否支持连续测试并计算出平均电流?可在我们的开发板上,用power profile工具进行测试,具体可见:https://support.dialog-semiconductor.com/system/files/resources/User%20m...。
注:在我们的网站上下载文档时,需要先注册一个账号。
Q:板子未使用的IO口都是悬空处理,是否不使用的IO要接地
A:悬空即可
Q:最开始做低功耗的时候还发现连接状态进入睡眠一会之后功耗马上会变高到300ua左右,发现是参数更新定时器问题
A:每次连接成功,系统会在 APP_PARAM_UPDATE_REQUEST_TO 超时之后更新连接参数,更新的内容在结构体user_connection_param_conf中。更完成后,即重新回到休眠状态,对系统功耗影响不大,不建议去除。