文章目录
-
- 每日一句正能量
- 一、引言:从电池到"无限续航"
- 二、能量收集系统架构总览
-
- [2.1 系统分层模型](#2.1 系统分层模型)
- 三、MPPT最大功率点跟踪
-
- [3.1 MPPT算法原理](#3.1 MPPT算法原理)
- [3.2 MPPT算法对比](#3.2 MPPT算法对比)
- [3.3 FOCV算法代码实现](#3.3 FOCV算法代码实现)
- 四、光伏能量收集电路设计
-
- [4.1 BQ25570 PMIC应用电路](#4.1 BQ25570 PMIC应用电路)
- 五、热电能量收集(TEG)电路设计
-
- [5.1 TEG特性与LTC3108应用](#5.1 TEG特性与LTC3108应用)
- 六、振动能量收集电路设计
-
- [6.1 压电 vs 电磁方案对比](#6.1 压电 vs 电磁方案对比)
- [6.2 SECE同步电荷提取电路](#6.2 SECE同步电荷提取电路)
- 七、混合储能管理策略
-
- [7.1 超级电容+锂电池混合储能](#7.1 超级电容+锂电池混合储能)
- [7.2 储能管理代码实现](#7.2 储能管理代码实现)
- 八、完整系统代码框架
- 九、总结

每日一句正能量
放下执念,接纳真实,心会越来越轻盈;顺应现实,专注当下,路会越走越宽阔。
执念是对"事情应该怎样"的固执预期。放下它,不是放弃追求,而是不再与现实对抗。接纳真实,包括自己的局限和外界的不完美。内心没有了多余的重担,自然变得轻盈、不内耗。顺应现实是顺势而为,不是消极认命。专注当下是只做此刻能做的事,不悔过去、不忧未来。当你不和现实较劲,精力都用在有效行动上,脚下的路自然慢慢拓宽。
不慕浮华,不惧风雨,不断生长,且懂得在该柔软时柔软。
一、引言:从电池到"无限续航"
在物联网(IoT)的数亿节点中,电池更换成本占据了全生命周期成本的30%~50%。对于部署在偏远地区、深海、太空或人体内的传感器,电池更换几乎不可能。能量收集(Energy Harvesting)技术------从环境中捕获光能、热能、振动能等微弱能量------为"永久续航"提供了可能。
然而,能量收集面临三大核心挑战:能量源极不稳定 (光照随昼夜变化、温差随环境波动)、输出电压极低 (热电仅20mV、振动仅0.1V)、功率密度极小(室内光伏仅10μW/cm²)。这要求采集电路具备超低电压启动、最大功率点跟踪(MPPT)和智能储能管理的能力。
本文将系统讲解光伏、热电、振动三种主流能量收集技术的采集电路设计,重点剖析MPPT算法实现和储能管理策略,并提供可直接落地的代码和电路方案。
二、能量收集系统架构总览
2.1 系统分层模型
一个完整的能量收集系统包含四个层次:

| 层次 | 功能 | 关键指标 |
|---|---|---|
| 能量源层 | 光伏/热电/振动/射频 | 功率密度、输出阻抗、稳定性 |
| 转换调理层 | 整流、升压、MPPT、充电管理 | 转换效率>80%、静态电流<500nA |
| 储能层 | 超级电容/薄膜电池/锂电池 | 循环寿命、自放电率、能量密度 |
| 负载层 | MCU、传感器、无线模块 | 功耗剖面、峰值电流、占空比 |
关键设计约束 :整个系统的静态电流必须远低于能量收集的平均功率,否则收集的能量将被电路自身消耗殆尽。例如,若收集功率为100μW,而PMIC静态功耗为50μW,则系统效率上限仅为50%。
三、MPPT最大功率点跟踪
3.1 MPPT算法原理
能量收集源(尤其是光伏电池)的输出特性呈现非线性------存在一个最大功率点(MPP),此时电压和电流的乘积最大:

光伏电池I-V特性:
- 短路电流 I S C I_{SC} ISC:电压为0时的电流,与光照强度成正比
- 开路电压 V O C V_{OC} VOC:电流为0时的电压,与温度成反比
- 最大功率点 P M P = V M P × I M P P_{MP} = V_{MP} \times I_{MP} PMP=VMP×IMP,其中 V M P ≈ 0.75 ∼ 0.82 × V O C V_{MP} \approx 0.75 \sim 0.82 \times V_{OC} VMP≈0.75∼0.82×VOC
3.2 MPPT算法对比
| 算法 | 跟踪效率 | 实现复杂度 | 静态功耗 | 适用场景 |
|---|---|---|---|---|
| 扰动观察法(P&O) | 85% | 低 | 中等 | 光照变化缓慢 |
| 电导增量法(INC) | 92% | 高 | 较高 | 快速变化环境 |
| 分数开路电压(FOCV) | 80% | 极低 | <1μW | 超低功耗应用 |
| 分数短路电流(FSCC) | 78% | 极低 | <1μW | 电流源特性 |
| 自适应算法 | 95% | 很高 | 高 | 多源混合系统 |
FOCV算法 是能量收集领域的首选------它利用光伏电池的 V M P V_{MP} VMP 与 V O C V_{OC} VOC 近似成比例的特性,通过定期断开负载测量开路电压,再乘以系数k(典型0.8)得到参考电压。这种方法无需乘法运算,功耗极低。
3.3 FOCV算法代码实现
c
/**
* @file mppt_focv.c
* @brief FOCV MPPT算法实现(适用于超低功耗场景)
* @version 1.0
*/
#include <stdint.h>
#include <stdbool.h>
/* ========== FOCV配置参数 ========== */
#define FOCV_K_FACTOR_PV 0.80f // 光伏电池: V_MPP = 0.8 * V_OC
#define FOCV_K_FACTOR_TEG 0.50f // 热电发电机: V_MPP = 0.5 * V_OC (纯电阻源)
#define FOCV_SAMPLE_INTERVAL_MS 16000 // 每16秒采样一次V_OC
#define FOCV_SETTLE_TIME_MS 256 // 断开负载后等待稳定时间
/* ========== MPPT状态机 ========== */
typedef enum {
MPPT_STATE_TRACKING, // 正常跟踪MPP
MPPT_STATE_SAMPLING, // 采样V_OC
MPPT_STATE_SETTLING, // 等待稳定
} mppt_state_t;
typedef struct {
mppt_state_t state;
uint32_t last_sample_time;
uint32_t settle_start_time;
float v_oc; // 开路电压 (V)
float v_mpp; // 最大功率点电压 (V)
float k_factor; // FOCV系数
float v_in; // 当前输入电压 (V)
float i_in; // 当前输入电流 (A)
float p_in; // 当前输入功率 (W)
uint16_t pwm_duty; // DC-DC占空比
bool load_disconnected; // 负载是否断开
} mppt_context_t;
static mppt_context_t g_mppt = {
.state = MPPT_STATE_TRACKING,
.k_factor = FOCV_K_FACTOR_PV,
.pwm_duty = 50, // 初始占空比50%
};
/**
* @brief 初始化MPPT控制器
*/
void mppt_init(float k_factor)
{
g_mppt.k_factor = k_factor;
g_mppt.state = MPPT_STATE_TRACKING;
g_mppt.last_sample_time = get_tick_ms();
// 配置ADC用于测量V_IN和I_IN
adc_init(ADC_CHANNEL_VIN);
adc_init(ADC_CHANNEL_IIN);
// 配置PWM输出
pwm_init(PWM_FREQ_100KHZ);
pwm_set_duty(g_mppt.pwm_duty);
printf(\"[MPPT] FOCV初始化完成, k=%.2f\\n\", k_factor);
}
/**
* @brief 测量开路电压V_OC
*
* 断开负载,等待稳定后测量输入电压
*/
float mppt_measure_voc(void)
{
// 断开负载(关闭DC-DC转换器)
pwm_disable();
g_mppt.load_disconnected = true;
// 等待输入电压稳定
delay_ms(FOCV_SETTLE_TIME_MS);
// 测量开路电压
float v_oc = adc_read_voltage(ADC_CHANNEL_VIN);
// 重新连接负载
pwm_enable();
g_mppt.load_disconnected = false;
printf(\"[MPPT] V_OC = %.3f V\\n\", v_oc);
return v_oc;
}
/**
* @brief FOCV MPPT主循环
*
* 每16秒执行一次V_OC采样,其余时间跟踪V_MPP
*/
void mppt_task(void)
{
uint32_t now = get_tick_ms();
switch (g_mppt.state) {
case MPPT_STATE_TRACKING:
// 正常跟踪模式:调节PWM使V_IN接近V_MPP
if (now - g_mppt.last_sample_time >= FOCV_SAMPLE_INTERVAL_MS) {
// 到达采样时间,进入采样状态
g_mppt.state = MPPT_STATE_SAMPLING;
g_mppt.settle_start_time = now;
} else {
// 实时调节占空比
mppt_regulate();
}
break;
case MPPT_STATE_SAMPLING:
// 执行V_OC采样
g_mppt.v_oc = mppt_measure_voc();
g_mppt.v_mpp = g_mppt.v_oc * g_mppt.k_factor;
g_mppt.last_sample_time = now;
g_mppt.state = MPPT_STATE_TRACKING;
printf(\"[MPPT] V_MPP = %.3f V (k=%.2f)\\n\", g_mppt.v_mpp, g_mppt.k_factor);
break;
case MPPT_STATE_SETTLING:
// 稳定等待(已合并到SAMPLING中)
break;
}
}
/**
* @brief 实时调节占空比使V_IN跟踪V_MPP
*/
void mppt_regulate(void)
{
// 读取当前输入电压
g_mppt.v_in = adc_read_voltage(ADC_CHANNEL_VIN);
// 计算误差
float error = g_mppt.v_mpp - g_mppt.v_in;
// 比例调节(简化PI控制)
float kp = 2.0f; // 比例系数
int16_t duty_delta = (int16_t)(error * kp);
// 更新占空比(带限幅)
int16_t new_duty = (int16_t)g_mppt.pwm_duty + duty_delta;
if (new_duty < 5) new_duty = 5; // 最小5%
if (new_duty > 95) new_duty = 95; // 最大95%
g_mppt.pwm_duty = (uint16_t)new_duty;
pwm_set_duty(g_mppt.pwm_duty);
// 计算当前功率(用于监控)
g_mppt.i_in = adc_read_current(ADC_CHANNEL_IIN);
g_mppt.p_in = g_mppt.v_in * g_mppt.i_in;
}
/**
* @brief 获取当前MPPT状态
*/
void mppt_get_status(mppt_status_t *status)
{
status->v_in = g_mppt.v_in;
status->i_in = g_mppt.i_in;
status->p_in = g_mppt.p_in;
status->v_mpp = g_mppt.v_mpp;
status->efficiency = (g_mppt.v_in * g_mppt.i_in) /
(g_mppt.v_oc * g_mppt.i_in) * 100.0f;
status->pwm_duty = g_mppt.pwm_duty;
}
四、光伏能量收集电路设计
4.1 BQ25570 PMIC应用电路
BQ25570是TI专为能量收集设计的超低功耗PMIC,集成了升压转换器、降压稳压器和MPPT功能:

关键设计参数:
| 参数 | 值 | 说明 |
|---|---|---|
| 冷启动电压 | 600mV | 可从室内光照启动 |
| 持续采集电压 | 100mV | 超低输入电压仍可工作 |
| 静态电流 | 488nA | 几乎不消耗收集能量 |
| 转换效率 | 高达93% | 最大限度利用能量 |
| MPPT配置 | 80%或50% V_OC | 通过VOC_SAMP引脚选择 |
| 输出电压 | 1.8V/3.3V | 可编程稳压输出 |
外部元件选型:
c
/**
* @brief BQ25570外部元件配置
*/
* #define C_IN_UF 4.7f // 输入滤波电容
* #define C_REF_NF 10.0f // MPPT采样保持电容
* #define C_STOR_UF 100.0f // 储能电容
* #define L_BOOST_UH 22.0f // 升压电感
* #define L_BUCK_UH 10.0f // 降压电感
* /**
* @brief 计算过压保护分压电阻
*
* VBAT_OV = 1.24V * (1 + R_OV1/R_OV2)
* 目标: 4.2V (锂电池充电上限)
*/
void calculate_ovp_resistors(float vbat_ov, uint32_t *r_ov1, uint32_t *r_ov2)
{
// 固定R_OV2 = 10MΩ (高阻值降低功耗)
*r_ov2 = 10000000;
// R_OV1 = R_OV2 * (VBAT_OV / 1.24V - 1)
*r_ov1 = (uint32_t)(*r_ov2 * (vbat_ov / 1.24f - 1.0f));
printf(\"[OVP] R_OV1 = %lu Ω, R_OV2 = %lu Ω\\n\", *r_ov1, *r_ov2);
printf(\"[OVP] VBAT_OV = %.2f V\\n\", 1.24f * (1.0f + (float)*r_ov1 / (float)*r_ov2));
}
MPPT配置:
- VOC_SAMP = High(接VSTOR):MPPT = 80% V_OC(适用于光伏)
- VOC_SAMP = Low(接地):MPPT = 50% V_OC(适用于热电)
五、热电能量收集(TEG)电路设计
5.1 TEG特性与LTC3108应用
热电发电机(TEG)利用塞贝克效应将温差转换为电能,其输出特性为低电压(20500mV)、低内阻(15Ω),需要极高的升压比:

LTC3108关键特性:
- 最低启动电压:20mV(业界最低)
- 升压比:100倍(通过外部变压器)
- 输出电压:2.35V/3.3V/5V可选
- 辅助LDO:2.2V @ 3mA(用于主输出启动前的供电)
变压器设计:
c
/**
* @brief TEG变压器参数计算
*/
typedef struct {
uint16_t turns_ratio; // 匝数比 (1:100)
float primary_inductance; // 初级电感 (uH)
float saturation_current; // 饱和电流 (A)
float coupling_coefficient; // 耦合系数
} teg_transformer_t;
// 推荐型号: Coilcraft LPR6235-752SML (1:100)
// 或定制变压器: 初级10匝, 次级1000匝, 铁氧体磁芯
TEG选型指南:
| 应用场景 | 温差 | 推荐型号 | 输出电压 | 功率 |
|---|---|---|---|---|
| 人体佩戴 | 5K | TEC1-12706 | 50~100mV | 0.1~0.5mW |
| 工业管道 | 50K | TEG-19908 | 500mV~2V | 10~50mW |
| 汽车排气 | 200K | TEG-127240 | 2~10V | 100~500W |
六、振动能量收集电路设计
6.1 压电 vs 电磁方案对比
振动能量收集有两种主流技术路线:

压电方案:
- 输出电压高(1~100V AC),需要全桥整流
- 阻抗高(100kΩ~1MΩ),整流损耗大(肖特基二极管0.3V×2)
- 采用SECE(Synchronized Electric Charge Extraction)电路可提升效率至80%以上
电磁方案:
- 输出电压低(0.1~5V AC),但阻抗低(10~100Ω)
- 易于阻抗匹配,可使用LTC3588集成方案
- 线圈匝数5002000匝,磁通密度0.10.5T
6.2 SECE同步电荷提取电路
SECE是压电能量收集的高效接口电路,通过在位移最大时提取电荷,最大化能量回收:
c
/**
* @file sece_controller.c
* @brief SECE同步电荷提取控制器
*/
#include <stdint.h>
#include <stdbool.h>
/* ========== SECE配置 ========== */
#define PIEZO_CAPACITANCE_PF 10000.0f // 压电电容 10nF
#define INDUCTOR_UH 1000.0f // 提取电感 1mH
#define RECTIFIER_THRESHOLD_V 0.5f // 整流阈值 0.5V
/* ========== SECE状态机 ========== */
typedef enum {
SECE_STATE_MONITORING, // 监测压电电压
SECE_STATE_EXTRACTING, // 执行电荷提取
SECE_STATE_RECOVERING, // 等待电感电流归零
} sece_state_t;
typedef struct {
sece_state_t state;
float v_piezo; // 压电电压
float v_rect; // 整流后电压
float energy_extracted; // 提取能量 (uJ)
uint32_t extraction_count;
bool switch_closed; // 提取开关状态
} sece_context_t;
static sece_context_t g_sece = {0};
/**
* @brief SECE主控制循环
*
* 当压电电压达到峰值时,闭合开关将电荷转移到电感
* 当电感电流归零时,断开开关
*/
void sece_task(void)
{
// 读取压电电压(通过峰值检测电路或ADC)
g_sece.v_piezo = adc_read_voltage(ADC_CHANNEL_PIEZO);
switch (g_sece.state) {
case SECE_STATE_MONITORING:
// 检测电压峰值(通过比较器或微分)
if (is_peak_detected() && g_sece.v_piezo > RECTIFIER_THRESHOLD_V) {
// 达到峰值,开始提取
sece_start_extraction();
g_sece.state = SECE_STATE_EXTRACTING;
}
break;
case SECE_STATE_EXTRACTING:
// 等待电感电流达到最大值(半个LC周期)
// T_extract = π * sqrt(L * C_piezo)
delay_us((uint32_t)(3.14159f * sqrtf(INDUCTOR_UH * 1e-6f * PIEZO_CAPACITANCE_PF * 1e-12f) * 1e6f));
// 断开开关,电感能量释放到储能电容
sece_stop_extraction();
g_sece.state = SECE_STATE_RECOVERING;
break;
case SECE_STATE_RECOVERING:
// 等待电感电流归零(通过零电流检测)
if (is_inductor_current_zero()) {
g_sece.extraction_count++;
g_sece.state = SECE_STATE_MONITORING;
}
break;
}
}
/**
* @brief 计算SECE提取能量
*
* E_extracted = 0.5 * C_piezo * (V_peak^2 - V_rect^2)
*/
float sece_calculate_energy(float v_peak, float v_rect)
{
return 0.5f * PIEZO_CAPACITANCE_PF * 1e-12f *
(v_peak * v_peak - v_rect * v_rect);
}
/**
* @brief 提取效率计算
*
* 标准整流: E = 0.5 * C * V_peak^2 - 0.5 * C * (2*V_diode)^2
* SECE: E = 0.5 * C * V_peak^2 * (1 - k^2) 其中k为反转系数
*/
float sece_efficiency_vs_standard(float v_peak)
{
float v_diode = 0.3f; // 肖特基二极管压降
float e_standard = 0.5f * PIEZO_CAPACITANCE_PF * 1e-12f *
(v_peak * v_peak - 4 * v_diode * v_diode);
float e_sece = 0.5f * PIEZO_CAPACITANCE_PF * 1e-12f *
v_peak * v_peak * 0.8f; // 80%提取效率
return e_sece / e_standard;
}
七、混合储能管理策略
7.1 超级电容+锂电池混合储能
单一储能介质无法满足能量收集的所有需求------超级电容适合快速充放电但自放电快,锂电池适合长期存储但循环寿命有限。混合储能是最佳方案:

能量分配策略:
| 场景 | 策略 | 实现方式 |
|---|---|---|
| 能量充足时 | 同时给电容和电池充电 | PMIC双路输出 |
| 脉冲负载时 | 电容优先供电,保护电池 | 二极管或开关选择 |
| 能量不足时 | 电池补充供电,维持系统 | 低压差稳压器 |
| 深度休眠时 | 电池维持RTC和唤醒电路 | 专用低功耗LDO |
7.2 储能管理代码实现
c
/**
* @file hybrid_storage_mgmt.c
* * @brief 混合储能管理系统
* */
#include <stdint.h>
#include <stdbool.h>
/* ========== 储能阈值 ========== */
#define CAP_FULL_VOLTAGE_V 4.8f // 超级电容满电压
#define CAP_EMPTY_VOLTAGE_V 2.0f // 超级电容空电压
#define BATT_FULL_VOLTAGE_V 4.2f // 锂电池满电压
#define BATT_EMPTY_VOLTAGE_V 3.0f // 锂电池空电压 (保护点)
#define BATT_LOW_VOLTAGE_V 3.3f // 锂电池低电压告警
/* ========== 储能状态 ========== */
typedef struct {
float v_cap; // 超级电容电压
float v_batt; // 锂电池电压
float i_charge_cap; // 电容充电电流
float i_charge_batt; // 电池充电电流
float i_load; // 负载电流
uint8_t soc_cap; // 电容SOC (%)
uint8_t soc_batt; // 电池SOC (%)
bool cap_priority; // 电容优先模式
bool batt_active; // 电池是否供电
} storage_status_t;
static storage_status_t g_storage = {0};
/**
* @brief 初始化混合储能系统
* */
void storage_init(void)
{
// 配置ADC通道
adc_init(ADC_CHANNEL_V_CAP);
adc_init(ADC_CHANNEL_V_BATT);
adc_init(ADC_CHANNEL_I_CHARGE);
adc_init(ADC_CHANNEL_I_LOAD);
// 初始化充电开关
gpio_init(CHARGE_CAP_EN, GPIO_OUTPUT);
gpio_init(CHARGE_BATT_EN, GPIO_OUTPUT);
gpio_init(BATT_DISCHARGE_EN, GPIO_OUTPUT);
// 初始状态:电容优先充电
g_storage.cap_priority = true;
gpio_write(CHARGE_CAP_EN, HIGH);
gpio_write(CHARGE_BATT_EN, LOW);
printf(\"[STORAGE] 混合储能系统初始化完成\\n\");
}
/**
* @brief 储能管理主循环
* *
* * 根据能量状态和负载需求动态分配能量
* */
void storage_task(void)
{
// 读取所有电压电流
g_storage.v_cap = adc_read_voltage(ADC_CHANNEL_V_CAP);
g_storage.v_batt = adc_read_voltage(ADC_CHANNEL_V_BATT);
g_storage.i_load = adc_read_current(ADC_CHANNEL_I_LOAD);
// 计算SOC
g_storage.soc_cap = (uint8_t)((g_storage.v_cap - CAP_EMPTY_VOLTAGE_V) /
(CAP_FULL_VOLTAGE_V - CAP_EMPTY_VOLTAGE_V) * 100);
g_storage.soc_batt = (uint8_t)((g_storage.v_batt - BATT_EMPTY_VOLTAGE_V) /
(BATT_FULL_VOLTAGE_V - BATT_EMPTY_VOLTAGE_V) * 100);
// 能量分配策略
if (g_storage.v_cap > 3.5f) {
// 电容电压充足:电容优先供电,同时给电池涓流充电
g_storage.cap_priority = true;
g_storage.batt_active = false;
gpio_write(BATT_DISCHARGE_EN, LOW);
if (g_storage.v_batt < BATT_FULL_VOLTAGE_V &&
g_storage.v_cap > CAP_FULL_VOLTAGE_V * 0.8f) {
// 电容充足时给电池充电
gpio_write(CHARGE_BATT_EN, HIGH);
gpio_write(CHARGE_CAP_EN, LOW);
} else {
gpio_write(CHARGE_BATT_EN, LOW);
gpio_write(CHARGE_CAP_EN, HIGH);
}
} else if (g_storage.v_cap > CAP_EMPTY_VOLTAGE_V) {
// 电容电压中等:电容供电,停止充电
g_storage.cap_priority = true;
g_storage.batt_active = false;
gpio_write(CHARGE_CAP_EN, HIGH);
gpio_write(CHARGE_BATT_EN, LOW);
gpio_write(BATT_DISCHARGE_EN, LOW);
} else {
// 电容电压低:切换到电池供电
g_storage.cap_priority = false;
g_storage.batt_active = true;
gpio_write(CHARGE_CAP_EN, HIGH); // 继续给电容充电
gpio_write(BATT_DISCHARGE_EN, HIGH);
if (g_storage.v_batt < BATT_LOW_VOLTAGE_V) {
// 电池也低,进入紧急模式
enter_emergency_mode();
}
}
// 负载电流分配
if (g_storage.cap_priority) {
// 电容供电:适合脉冲负载
if (g_storage.i_load > 50) { // 高脉冲电流 (>50mA)
printf(\"[STORAGE] 电容提供脉冲电流: %.1f mA\\n\", g_storage.i_load);
}
} else {
// 电池供电:限制峰值电流保护电池
if (g_storage.i_load > 100) {
printf(\"[WARN] 电池供电时负载过高: %.1f mA\\n\", g_storage.i_load);
// 可启用负载 shedding
}
}
}
/**
* @brief 紧急模式:最小化功耗
* */
void enter_emergency_mode(void)
{
printf(\"[EMERGENCY] 进入紧急模式!\\n\");
// 关闭所有非必要外设
peripheral_shutdown_all();
// 降低系统时钟到最低
clock_set_frequency(100000); // 100kHz
// 仅保留RTC和唤醒中断
// 等待能量恢复
enter_stop_mode(PWR_MODE_STOP2);\n}
八、完整系统代码框架
c
/**
* @file energy_harvesting_system.c
* @brief 完整能量收集系统主框架
*/
#include <stdio.h>
#include <stdint.h>
/* ========== 系统配置 ========== */
#define SYSTEM_VERSION \"2.0.0\"
#define WAKEUP_INTERVAL_MS 60000 // 60秒唤醒周期
/* ========== 主循环 ========== */
int main(void)
{
// 初始化硬件
hal_init();
// 初始化能量收集子系统
mppt_init(FOCV_K_FACTOR_PV); // 根据能量源选择k因子
storage_init();
printf(\"[SYS] 能量收集系统 v%s 启动\\n\", SYSTEM_VERSION);
while (1) {
// 1. MPPT任务(每16秒执行一次采样)
mppt_task();
// 2. 储能管理任务
storage_task();
// 3. 应用任务(传感器采集、通信等)
if (is_wakeup_event()) {
application_task();
}
// 4. 进入低功耗模式
enter_low_power_mode();
}
return 0;
}
/**
* @brief 应用层任务
* */
void application_task(void)
{
// 检查储能是否足够
if (g_storage.soc_cap < 20 && g_storage.soc_batt < 20) {
printf(\"[APP] 能量不足,跳过本次任务\\n\");
return;
}
// 传感器采集
sensor_read_all();
// 数据处理
process_data();
// 无线通信(仅在能量充足时)
if (g_storage.soc_cap > 50 || g_storage.soc_batt > 30) {
radio_transmit();
} else {
// 缓存数据,等待能量恢复
cache_data();
}
}
九、总结
能量收集技术正在从实验室走向大规模商用,其核心在于高效的能量采集 、精准的MPPT跟踪 和智能的储能管理。本文系统性地讲解了:
| 技术领域 | 关键方案 | 核心指标 |
|---|---|---|
| 光伏收集 | BQ25570 + FOCV MPPT | 冷启动600mV,效率93% |
| 热电收集 | LTC3108 + 变压器 | 启动20mV,升压100倍 |
| 振动收集 | SECE / LTC3588 | 效率80%,阻抗匹配 |
| 储能管理 | 超级电容 + 锂电池 | 缓冲+长期,智能分配 |
对于嵌入式开发者而言,能量收集不是简单的"替代电池",而是需要重新设计整个系统的能量流架构------从被动消耗转向主动管理,让每一微焦耳的能量都发挥最大价值。
转载自:https://blog.csdn.net/u014727709/article/details/162557501
欢迎 👍点赞✍评论⭐收藏,欢迎指正