去年帮朋友公司做智能穿戴设备方案选型时,发现市面上的开发套件要么功能单一,要么功耗控制不佳。这让我想起2015年参与过的小米生态链项目bong II手环,其开源方案至今仍具有参考价值。这款手环在当时以30天超长续航和精准睡眠监测脱颖而出,其设计思路对现在开发同类产品依然有启发。
智能手环本质上是个微型物联网终端,需要平衡三大核心指标:续航能力、数据精度和成本控制。bong II采用的主控+传感器架构后来成为行业标配,但它在算法层做的功耗优化至今仍值得学习。本文将拆解其硬件设计、嵌入式软件架构和运动算法实现,所有代码均基于实际工程经验做了适配性调整。
bong II最终选用Dialog DA14580作为主控芯片,这颗BLE SoC有几个关键优势:
实际测试中,在1秒间隔的心率监测场景下,配合优化后的固件可实现21天续航。相比当时竞品常用的nRF51822,DA14580在同等功能下功耗降低约40%。
硬件选型心得:不要盲目追求高性能MCU,穿戴设备更看重μA级功耗控制。建议优先选择内置DC-DC转换器的SoC,能显著提升电源效率。
传感器配置采用"基础版+专业版"双方案:
c复制// 传感器驱动配置示例
typedef struct {
uint8_t has_hr_sensor; // 光学心率传感器
uint8_t has_6axis; // 加速度计+陀螺仪
uint8_t has_ppg; // 血氧传感器(专业版)
} sensor_config_t;
基础版包含:
专业版额外增加:
采用FreeRTOS裁剪版,关键优化点包括:
c复制// FreeRTOSConfig.h关键配置
#define configUSE_TICKLESS_IDLE 1
#define configUSE_PREEMPTION 0
#define configTOTAL_HEAP_SIZE 0 // 禁用动态内存
实现三级功耗状态机:
状态转换触发条件:
mermaid复制stateDiagram
[*] --> DeepSleep: 无操作5分钟
DeepSleep --> LowPower: 加速度计中断
LowPower --> Active: 用户交互/定时唤醒
采用改进的峰值检测算法实现计步功能:
python复制# 伪代码示例
def step_detect(accel_data):
window = median_filter(accel_data, window_size=5)
peaks = find_peaks(window, height=1.2g, distance=20)
valid_peaks = []
for peak in peaks:
if peak_valley_ratio > 2.5 and duration > 200ms:
valid_peaks.append(peak)
return len(valid_peaks)
实际工程中需要处理的主要异常情况:
基于加速度和心率变异性的多特征融合算法:
c复制// 睡眠阶段判定逻辑
sleep_stage_t classify_sleep(float hrv, float accel_std) {
if(accel_std > 0.1g) return AWAKE;
if(hrv > threshold_rem && accel_std < 0.05g) return REM;
if(hrv_std < threshold_deep) return DEEP;
return LIGHT;
}
开发了基于Python的自动化测试架:
python复制import serial
import numpy as np
def test_vibration_motor(port):
ser = serial.Serial(port, 115200)
ser.write(b'TEST_VIBE 100')
response = ser.readline()
current = parse_current(response)
assert 80 < current < 120 # mA范围校验
完整测试项目包括:
使用Joulescope JS110精密电流分析仪:
实测数据示例:
| 功能模块 | 电流消耗 | 日占比 |
|---|---|---|
| BLE广播 | 0.8mA | 38% |
| 心率监测 | 1.2mA | 25% |
| 加速度计 | 0.3mA | 15% |
| 待机 | 1.5μA | 22% |
首版样机遇到的典型问题:
采用双Bank OTA方案确保可靠性:
关键安全措施:
原始工程需注意以下兼容性问题:
典型移植步骤:
bash复制# 构建环境准备
sudo apt install arm-none-eabi-gcc
git clone https://github.com/bong/bongII-firmware
cd bongII-firmware
make BOARD=da14580_dialog
在手环开发中,最容易被忽视的是运动传感器的校准环节。我们曾因未做温度补偿导致冬季计步误差高达30%,后来增加了-20℃~60℃的全温区校准表才解决。建议开发者务必建立完整的生产测试体系,特别是环境适应性测试。