蓝牙低功耗设计:如何让设备用几年不换电池

发布时间:2026-03-27 · 阅读时长:3分钟

低功耗的重要性

对于电池供电的IoT设备,功耗决定产品命运

功耗构成

`

总功耗 = 静态功耗 + 动态功耗

静态功耗:

动态功耗:

功耗模式

1. 活跃模式(Active)

`c

// 全速运行,处理数据

// 功耗: mA级

void active_mode() {

// 收发数据

// 处理业务

}

`

2. 低功耗模式(Sleep)

`c

// 部分外设休眠

// 功耗: μA级

void sleep_mode() {

// 关闭不必要外设

// 保留中断唤醒

}

`

3. 深度睡眠(Deep Sleep)

`c

// 仅RTC运行

// 功耗: nA~μA级

void deep_sleep() {

// 关闭所有外设

// 仅RTC/按键唤醒

}

`

4. 关机(Shutdown)

`c

// 最低功耗

// 功耗: nA级

void shutdown() {

// 彻底关闭

// 只能通过硬件复位唤醒

}

`

各芯片功耗对比

芯片活跃睡眠深度睡眠
----------------------------
nRF528326mA2μA0.6μA
nRF528407mA2μA1μA
CC26406mA1.5μA1μA
DA145804mA1μA0.5μA
ESP3280mA0.8mA10μA

低功耗设计策略

1. 合理选择休眠模式

`c

// 传感器上报场景

void loop() {

// 唤醒

wake_up();

// 采集数据

sensor_read();

// 发送数据

ble_send();

// 立即休眠

enter_deep_sleep();

}

`

2. 优化广播策略

广播功耗公式

`

平均功耗 = 峰值电流 × 广播占比

广播占比 = 广播时长 / 广播间隔

`

优化方法

`c

// 延长广播间隔

// 1000ms → 5000ms

adv_params.adv_interval = 5000;

// 降低发射功率

// 0dBm → -20dBm

adv_params.tx_power = -20;

// 非必要不广播

// 改为按需广播

if (need_to_connect) {

start_advertising();

}

`

3. 缩短连接时间

`c

// 快速连接参数

conn_params.min_conn_interval = 20; // 20ms

conn_params.max_conn_interval = 40; // 40ms

conn_params.slave_latency = 99; // 跳过99个间隔

conn_params.supervision_timeout = 500; // 500ms超时

`

4. 优化数据交互

批量发送

`c

// 不要频繁发送

// 错误: 每秒发送一次

// 正确: 收集10秒后一次发送

`

数据压缩

`c

// 减少传输数据量

// 压缩后再发送

compress_data(sensor_data);

`

5. 关闭不必要外设

`c

// 进入深度睡眠前关闭所有外设

void prepare_sleep() {

// 关闭ADC

ADC_Disable();

// 关闭定时器

TIM_Cmd(TIM2, DISABLE);

// 关闭I2C

I2C_Cmd(I2C1, DISABLE);

// 关闭SPI

SPI_Cmd(SPI1, DISABLE);

}

`

硬件低功耗设计

1. 电源设计

`

电池 ──┬──► LDO ──► 模块

└──► 分压电路 ──► ADC(检测电池电量)

`

建议

2. 晶振选择

晶振功耗精度
32KHz RTCnA级一般
16MHz 主晶振μA级

建议:使用32K晶振作为休眠时钟

3. GPIO处理

`c

// 所有未使用GPIO配置为低功耗模式

void config_unused_gpio() {

// 设置为输入+下拉

for (int i = 0; i < 16; i++) {

if (!used_gpio[i]) {

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.Pin = (1 << i);

GPIO_InitStructure.Mode = GPIO_MODE_INPUT;

GPIO_InitStructure.Pull = GPIO_PULLDOWN;

HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);

}

}

}

`

功耗计算示例

场景:智能门锁

配置

计算

`

工作电流: 10mA

工作时间: 10 × 2s = 20s/天

睡眠电流: 5μA

睡眠时间: 86400 - 20 = 86380s

日均功耗:

= (10mA × 20) + (5μA × 86380)

= 200mAs + 431.9mAs

= 631.9mAs

= 0.175mAh

续航时间:

= 2000mAh / 0.175mAh

= 11428天 ≈ 31年

`

实测技巧

1. 电流监测

`c

// 使用精密电流表

// 串联在电源线中

// 示波器观察电流波形

`

2. 功耗分析

`c

// 开启功耗统计

power_profile_enable();

// 打印功耗报告

print_power_stats();

`

3. 休眠测试

`c

// 测试各模式电流

void test_sleep_modes() {

// 测试深度睡眠

enter_deep_sleep();

assert(current < 10uA);

// 测试浅睡眠

enter_sleep();

assert(current < 100uA);

}

`

总结

蓝牙低功耗设计要点:

1. 选对芯片:nRF52832/DA14580超低功耗

2. 合理休眠:深度睡眠+快速唤醒

3. 优化广播:延长间隔+降低功率

4. 关闭外设:不用的都关掉

5. 硬件配合:低功耗元件


*低功耗设计问题?评论区聊!*

技术问题?查看更多 设计指南文章