1. 项目概述:基于STM32F103的3.6kW储能逆变器设计
去年接手一个离网光伏项目时,发现市面上的储能逆变器要么价格离谱,要么功能冗余。于是萌生了自己开发一套高性价比解决方案的想法。经过三个月的迭代,最终定型了这款基于STM32F103的3.6kW储能逆变器,实测转换效率达到92.3%,成本控制在500元以内,比同功率DSP方案便宜40%以上。
这套系统的核心特点在于:
- 采用BOOST+全桥两级拓扑结构
- 支持并网充电/放电与离网模式自动切换
- 完备的保护机制(过流响应时间<10μs)
- 带Modbus RTU协议的485通信接口
- 独创的固件差分升级方案
- 智能温控风扇系统
2. 硬件架构设计解析
2.1 功率拓扑选择
在3.6kW这个功率等级,常见的拓扑方案有:
- 全桥LLC谐振:效率高但控制复杂
- 双Buck/Boost:成本高且器件应力大
- 传统全桥:控制简单但效率略低
最终选择BOOST+全桥两级结构,主要基于以下考量:
- 前级BOOST将电池电压(48V)升压至380V母线
- 后级全桥逆变实现DC/AC转换
- 器件成本比LLC低30%
- 更适合STM32的PWM资源分配
关键提示:BOOST电感建议选用铁硅铝磁环,实测在20kHz开关频率下,EE型磁芯温升比环型高15℃以上。
2.2 STM32F103外设配置
这颗Cortex-M3芯片的资源分配如下:
- TIM1:全桥PWM生成(中央对齐模式)
- TIM2:BOOST PWM生成(边沿对齐)
- TIM3:保护信号硬件刹车
- ADC1+DMA:8通道模拟量采样
- USART1:Modbus通信
- USART2:IAP升级接口
特别说明TIM1的配置要点:
c复制// 关键寄存器配置
TIM1->CR1 |= TIM_CR1_CMS_0; // 中央对齐模式1
TIM1->BDTR |= TIM_BDTR_MOE; // 主输出使能(全桥必需)
TIM1->CCER |= TIM_CCER_CC1E | TIM_CCER_CC1NE; // 互补通道使能
2.3 关键电路设计
2.3.1 驱动电路
采用TLP350光耦+IR2110的组合方案:
- 传播延迟<100ns
- 峰值驱动电流2A
- 自带死区时间硬件生成
PCB布局时需注意:
- 驱动芯片尽量靠近MOS管
- 栅极电阻采用1206封装以减小寄生电感
- 自举电容选用1μF/50V X7R材质
2.3.2 电流采样
主回路电流检测方案对比:
| 方案 | 成本 | 精度 | 带宽 | 隔离 |
|---|---|---|---|---|
| 分流电阻+运放 | 低 | ±1% | 高 | 需隔离运放 |
| 霍尔传感器 | 高 | ±0.5% | 中 | 自带隔离 |
| 电流互感器 | 中 | ±2% | 低 | 自带隔离 |
最终选择ACS712霍尔传感器,虽然成本略高,但省去了隔离电路设计。
3. 软件实现细节
3.1 控制算法实现
采用电压外环+电流内环的双环控制:
- 电压环周期1ms,PI参数:Kp=0.5, Ki=0.1
- 电流环周期100μs,PI参数:Kp=2.0, Ki=0.5
代码实现关键点:
c复制void Current_Loop_Handler(void) {
static float i_error_sum = 0;
float i_error = i_ref - i_actual;
i_error_sum += i_error;
// 抗积分饱和处理
if(i_error_sum > LIMIT) i_error_sum = LIMIT;
else if(i_error_sum < -LIMIT) i_error_sum = -LIMIT;
duty = Kp_i * i_error + Ki_i * i_error_sum;
PWM_Update(duty);
}
3.2 状态机设计
系统工作状态包括:
- GRID_CHARGE:电网给电池充电
- GRID_DISCHARGE:电池向电网馈电
- ISLAND_MODE:离网独立运行
状态切换逻辑:
mermaid复制graph TD
A[GRID_CHARGE] -->|电网异常| B[ISLAND_MODE]
B -->|电池充满| C[GRID_DISCHARGE]
C -->|电网断电| B
C -->|手动切换| A
实测经验:继电器切换前必须先关闭PWM,建议加入50ms硬件延时电路,避免触点拉弧。
3.3 保护机制实现
四级保护体系:
- 硬件比较器(<5μs响应)
- 软件周期检测(100μs周期)
- 看门狗监控(1s超时)
- 温度保护(NTC采样)
过流保护实现代码:
c复制void EXTI9_5_IRQHandler(void) {
if(EXTI_GetITStatus(EXTI_Line9)) {
TIM1->BDTR &= ~TIM_BDTR_MOE; // 立即关闭PWM
FAULT_LED_ON();
while(1); // 进入死循环等待复位
}
}
4. 通信与升级方案
4.1 Modbus RTU实现
协议栈特点:
- 支持03/06/16功能码
- CRC16校验采用查表法
- 响应超时300ms
- 数据帧间隔3.5字符
从机地址分配:
| 地址 | 功能 |
|---|---|
| 0x01 | 系统参数 |
| 0x02 | 电池数据 |
| 0x03 | 光伏数据 |
4.2 在线升级设计
IAP升级流程:
- 接收"升级开始"命令
- 擦除APP区(0x08004000开始)
- 分块接收固件(每块1KB)
- 校验通过后跳转执行
升级注意事项:
- 波特率固定115200
- 每包数据追加CRC32校验
- 升级过程中维持BOOST电路关闭
5. 实测性能与优化建议
5.1 效率测试数据
不同负载下的转换效率:
| 负载率 | 效率 | 备注 |
|---|---|---|
| 20% | 90.1% | 轻载时MOS导通损耗占比大 |
| 50% | 92.3% | 最佳工作点 |
| 100% | 91.8% | 散热器温升45℃ |
5.2 常见问题排查
-
PWM输出异常
- 检查TIMx_BDTR寄存器MOE位
- 测量驱动芯片供电电压
- 确认死区时间设置(建议500ns)
-
Modbus通信失败
- 用示波器观察485总线波形
- 检查终端电阻匹配(120Ω)
- 确认CRC字节顺序(低字节在前)
-
BOOST电路震荡
- 调整电流环PI参数
- 检查电感是否饱和
- 增加输入电容(至少470μF)
6. 进阶改进方向
-
MPPT功能扩展
- 新增PV输入接口
- 实现扰动观察法MPPT
- 需增加电压电流采样通道
-
锂电池BMS集成
- 支持CAN通信
- 实现单体电压均衡
- 增加SOC估算算法
-
物联网远程监控
- 添加4G通信模块
- 对接云平台
- 开发手机APP
这套方案经过半年实际运行验证,在多个离网场景中表现稳定。特别适合需要快速原型开发的场合,所有设计文件(原理图、PCB、源码)都已开源。对于想深入研究的开发者,建议重点优化死区时间控制和环路参数整定,这是提升效率的关键。
