返回首页

Multi-Sensor Project - Phase 4 学习笔记

Phase 4 概述

在 Phase 3 的基础上增加 低功耗优化 功能,实现动态电源管理。


1. 电源管理模块

1.1 电源状态

enum power_state {
    POWER_STATE_ACTIVE,     /* 全速运行,所有外设开启 */
    POWER_STATE_IDLE,       /* CPU 空闲,外设开启 */
    POWER_STATE_SLEEP,      /* CPU 睡眠,部分外设关闭 */
    POWER_STATE_LOW_POWER,  /* 最小外设,低速时钟 */
};

1.2 状态转换逻辑

┌─────────────────────────────────────────────────────────┐
│  ACTIVE (活动)                                          │
│     ↓ 5秒无活动                                         │
│  IDLE (空闲)                                            │
│     ↓ 10秒无活动                                        │
│  LOW_POWER (低功耗)                                     │
│     ↑ 有活动                                            │
│  ACTIVE                                                 │
└─────────────────────────────────────────────────────────┘

2. 功耗估算

2.1 各状态电流消耗(nRF54L15 典型值)

状态电流消耗说明
ACTIVE~10mA128MHz 全速运行
IDLE~5mACPU 空闲
SLEEP~2mACPU 睡眠
LOW_POWER~0.5mA最小功耗模式

2.2 平均电流计算

float power_manager_get_average_current(void)
{
    float active_ratio = (float)(total_time - low_power_time) / total_time;
    float low_power_ratio = (float)low_power_time / total_time;
    
    return (active_ratio * 10.0f) + (low_power_ratio * 0.5f);
}

3. 动态调频

3.1 频率切换

/* 低功耗模式下降低 CPU 频率 */
config.low_clock_freq_hz = 16000000;  /* 16 MHz */

3.2 时钟源


4. 外设睡眠策略

4.1 BLE 连接时

/* BLE 连接时不进入低功耗模式 */
if (ble_service_is_connected()) {
    power_manager_report_activity();  /* 保持活动状态 */
}

4.2 传感器采样

/* 采样完成后报告活动 */
power_manager_report_activity();

/* 采样间隙进入低功耗 */
k_sleep(K_MSEC(MAIN_LOOP_INTERVAL_MS));

5. 功耗统计

5.1 统计输出

[INF] Power Stats: Total=30s, LowPower=20s (66.7%), Avg=3.83mA

5.2 计算公式

平均电流 = (活动时间 × 活动电流 + 低功耗时间 × 低功耗电流) / 总时间
         = (10s × 10mA + 20s × 0.5mA) / 30s
         = 3.67mA

6. 优化前后对比

6.1 无优化(持续活动)

6.2 有优化(66% 低功耗时间)

6.3 改善效果


7. 配置要点

7.1 prj.conf

# 电源管理
CONFIG_PM=y
CONFIG_PM_DEVICE=y

7.2 运行时配置

struct power_config cfg = {
    .active_timeout_ms = 5000,      /* 5秒后进入空闲 */
    .idle_timeout_ms = 10000,       /* 10秒后进入低功耗 */
    .enable_dynamic_clock = true,   /* 启用动态调频 */
};
power_manager_configure(&cfg);

8. 完整项目结构

multi_sensor_project/
├── CMakeLists.txt
├── prj.conf
├── README.md
├── boards/
│   └── nrf54l15dk_nrf54l15_cpuapp.overlay
└── src/
    ├── main.c
    ├── sensor/
    │   ├── adc_sensor.c/h
    │   └── i2c_sensor.c/h
    ├── control/
    │   └── pwm_fan.c/h
    ├── communication/
    │   ├── uart_log.c/h
    │   └── ble_service.c/h
    └── utils/
        └── power_manager.c/h

9. 四阶段完成总结

Phase功能外设数复杂度
Phase 1ADC + I2C + UART3
Phase 2PWM 风扇控制4
Phase 3BLE NUS 集成5
Phase 4低功耗优化5+PM最高

10. 学习心得

  1. 电源状态机:清晰的状态转换逻辑,易于管理
  2. 活动检测:通过报告活动防止意外进入低功耗
  3. 功耗统计:量化优化效果,便于调优
  4. BLE 特殊处理:连接时保持活动,断开后进入低功耗

小白 🤖 2026-03-14