更新时间:2024-07-30 03:09:46下载pdf
本文介绍蓝牙子设备的功耗管理功能。
功率
P = W/t(定义式),单位:瓦特(W),表示做功快慢(消耗电能快慢)的物理量。
P = UI(计算式),所有电路里都可以用该公式计算。
1 度电 = 1kW·h = 1000W·3600s = 360 0000J,即功率为 1kW 的设备工作 1h 消耗的电能。
功耗
功率的损耗,有两种含义:
(1)指整机所需的电源功率,即输入功率,定义为单位时间的耗电量。
(2)功耗 = 输入功率 - 输出功率
蓝牙中常说的低功耗指的是第(1)种含义。
由上述的计算式(P = UI)可知,功耗由电压和电流两个因素决定,但是由于单片机系统中电源电压几乎是恒定的(3.3V),所以低功耗蓝牙中常常会把平均电流的大小当做平均功耗的大小。
低功耗蓝牙设备的功耗由很多因素决定,其中常见的因素有以下几种:
广播间隔,20~10240ms(单位:0.625ms)。在其他条件相同的情况下,广播间隔越大,功耗越低。
连接间隔,7.5~4000ms(单位:1.25ms)。在其他条件相同的情况下,连接间隔越大,功耗越低。
发射功率,
主频,常见 6MHz,12MHz,16MHz,24MHz,48MHz 和 64MHz。在其他条件相同的情况下,主频越低,功耗越低。
32K 时钟源,在其他条件相同的情况下,外部低频晶振越精确,功耗越低。
电压,一般范围是 1.8V~3.6V。在其他条件相同的情况下,电压越低,功耗越低。
供电模式(DCDC、LDO)。在其他条件相同的情况下,DCDC 供电模式更省电。
广播数据长度,在其他条件相同的情况下,广播数据长度越短,功耗越低。
休眠唤醒时间,在其他条件相同的情况下,休眠唤醒时间越短,功耗越低。
芯片外设,不同芯片的外设多种多样,测量芯片功耗时尽可能排除外设功耗的影响。
除了上述芯片自身的参数外,低功耗蓝牙设备的功耗还可能受到环境因素的影响:
周围主机数量。
测量仪器,考虑仪器的基底电流。
调试低功耗蓝牙设备时,非常建议将设备接在功耗测试仪器上,实时观察设备的电流状态。功耗测试仪器可以显示设备的瞬时电流和一段时间的平均电流。
通过时域上的电流波形,才能对蓝牙设备的实际功耗有一个形象的认识,如下图所示:
typedef VOID_T (*TUYA_PRE_SLEEP_CB)(VOID_T);
typedef VOID_T (*TUYA_POST_WAKEUP_CB)(VOID_T);
typedef struct {
TUYA_PRE_SLEEP_CB pre_sleep_cb;
TUYA_POST_WAKEUP_CB post_wakeup_cb;
} TUYA_SLEEP_CB_T;
pre_sleep_cb
:进入低功耗前的处理接口。post_wakeup_cb
:从低功耗状态唤醒后的处理接口。typedef struct {
BOOL_T flag;
UINT8_T mode;
} test_enter_sleep_t;
flag
:是否进入低功耗模式。0x00
:未进入低功耗模式,0x01
:已进入低功耗模式。mode
:低功耗模式。0x00
:进入超低功耗模式(不带广播),0x01
:进入低功耗模式(带广播)。接口说明
注册休眠唤醒回调处理函数。
OPERATE_RET tal_cpu_sleep_callback_register(TUYA_SLEEP_CB_T *sleep_cb);
参数说明
参数 | 说明 |
---|---|
sleep_cb | 休眠唤醒回调接口:pre_sleep_cb :应用层休眠回调接口,休眠之前执行。post_wakeup_cb :应用层唤醒回调接口,唤醒之后执行。 |
数据结构
typedef VOID_T (*TUYA_PRE_SLEEP_CB)(VOID_T);
typedef VOID_T (*TUYA_POST_WAKEUP_CB)(VOID_T);
typedef struct {
TUYA_PRE_SLEEP_CB pre_sleep_cb;
TUYA_POST_WAKEUP_CB post_wakeup_cb;
} TUYA_SLEEP_CB_T;
接口说明
允许休眠接口,允许设备在空闲状态时进入休眠。
调用该接口只是允许设备进入低功耗状态,但是如果有外设正在工作,则设备的实际电流并不会如预期降低。一般需要关闭当前正在使用的外设,才能使设备的实际电流降低。
VOID_T tal_cpu_allow_sleep(VOID_T);
接口说明
强制唤醒接口,不允许设备进入休眠状态。
如果在进入休眠时关闭了相关的外设,需要在唤醒的时候重新初始化相关外设。
VOID_T tal_cpu_force_wakeup(VOID_T);
注册低功耗处理接口。
STATIC VOID_T tuya_pre_sleep_cb(VOID_T)
{
// to do
}
STATIC VOID_T tuya_post_wakeup_cb(VOID_T)
{
// to do
}
STATIC TUYA_SLEEP_CB_T tal_sleep_cb = {
.pre_sleep_cb = tuya_pre_sleep_cb,
.post_wakeup_cb = tuya_post_wakeup_cb,
};
OPERATE_RET tuya_init_last(VOID_T)
{
…………
tal_cpu_sleep_callback_register(&tal_sleep_cb);
…………
return OPRT_OK;
}
测试低功耗功能相关代码。
typedef struct {
BOOL_T flag;
UINT8_T mode;
} test_enter_sleep_t;
typedef struct {
test_enter_sleep_t enter_sleep;
} test_param_t;
STATIC test_param_t test_param = {0};
STATIC TIMER_ID sg_test_enter_sleep_timer_id = NULL;
TUYA_WEAK_ATTRIBUTE VOID_T tal_sdk_test_init(VOID_T)
{
tal_sw_timer_create(tal_sdk_test_enter_sleep_handler, NULL, &sg_test_enter_sleep_timer_id);
…………
}
TUYA_WEAK_ATTRIBUTE OPERATE_RET test_group_powermanger(UINT8_T cmd, UINT8_T *cmd_data, UINT32_T cmd_data_len, UINT8_T *p_rsp_data)
{
TEST_GROUP_VARIABLE
switch (cmd) {
case TEST_CID_ENTER_SLEEP: {
test_param.enter_sleep.mode = cmd_data[0];
ret = tal_sw_timer_start(sg_test_enter_sleep_timer_id, 200, TAL_TIMER_ONCE);
TEST_RSP
} break;
default: {
} break;
}
return idx;
}
TEST_CID_ENTER_SLEEP
通过上位机控制设备进入低功耗。
先复位设备,然后进入低功耗状态(不带广播):
对应的电流:
先复位设备,设置广播间隔:
进入低功耗状态(带广播):
对应的电流:
上位机使用的相关问题,请访问 Logic 上位机使用指南。
如果开发过程中遇到任何问题,您可以登录 涂鸦开发者论坛的蓝牙板块 进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈