基于STM32G474的400W微型逆变器设计与实现:含源代码、原理图及PCB设计图
400w微型逆变器, 基于stm32g474实现 设计方案,不是成品 带有源代码、原理图(AD)、PCB(AD)
400 W 微型逆变器 V2.0 DCAC 量测核心
—— 软件功能说明书
(基于 STM32G474,面向高压直流侧采样与保护)
一、项目定位
Microinverter DCAC 板是 400 W 微型逆变器三段式架构中的“高压直流侧量测与保护节点”。
400w微型逆变器, 基于stm32g474实现 设计方案,不是成品 带有源代码、原理图(AD)、PCB(AD)
硬件层面:
- 浮地 HVDC(≤450 V)经电阻分压/隔离运放转换为 0-3.3 V 信号
- 双向电流经 25 mΩ 分流器 + 内部运放 ×20 增益后送入 ADC
- 板上双通道 DAC 为比较器提供可编程过流、过压阈值
- 三路过流比较器(COMP1/3/4)在 100 ns 级硬件关断 PWM,保证“不烧管”
软件层面:
- 不跑 MPPT、不跑逆变调制,仅完成“采样-滤波-保护-上报”四件事
- 通过 16-bit SPI 与主控(DCDC 板)交换 3 字节制式帧,1 kHz 周期
- 所有保护本地闭环,关断信号在 1 µs 内生效,MCU 仅记录事件原因
二、功能总览
- 多通道同步采样
ADC1/ADC2 同时工作,双通道注入组(JEXT=软触发)+ 单通道常规组(EXT=TIM1_TRGO),实现
- HVDC 电压(VDC)
- HVDC 电流(IDC)
- 功率器件温度(NTC)
- 内部结温(TSENSOR)
- 电池/母线电压(VBAT)
分辨率 12 bit,采样率 50 kS/s,硬件过采样 ×16 后等效 14 bit
- 窗口比较器与硬件刹车
DAC3CH1 → COMP1/3 过流阈值(MOSFET 16.5 A 对应 330 mV)
DAC3CH2 → COMP4 母线过压阈值(≈2 A 对应 720 mV)
比较器输出直接连 TIM1_BKIN,硬件刹车优先级高于软件;MCU 仅“事后”读取 TIM1->SR 的 BIF 位判定故障源
- 单线 SPI 从机协议
帧格式:
[D15..0] = [ID11..8 | DATA11..0]
主控发 0xA115 → DCAC 回传 [VDC, IDC, TEMP] 三帧
采用 SPI3 全双工 16-bit,波特率 6 Mbit/s,DMA1_Ch1 自动搬运,CPU 零中断负载
- 故障状态机
enum {SYSTEMOK=1, MOSFETOVERCURRENT, BUSOVERVOLTAGE, MCUOVERTEMP…}
任何故障触发 TIM1 刹车后,软件状态机立即迁移,下一次 SPI 回传将状态字最高位置 1,主控收到后停止发波
- 在线校准
上电自动运行 HALADCExCalibration_Start(),单端模式校准因子写入 ADC->CALFACT
运放失调通过内部 OPA 级“零负载”采样扣除,用户无需手动修正
三、运行流程
- 启动阶段
SystemInit() → 主频 170 MHz → 使能 ADC12/OPAMP/COMP/DAC3/TIM1/SPI3 时钟
MXADC1/2Init() → 配置注入组序列,触发源=软触发,采样时间=247.5 cycles
MXDAC3Init() → 输出缓冲关闭,内部连接到 COMP,立即输出 0x199/0xFFF
MXCOMP1/3/4Init() → 30 mV 迟滞,滤波 5 cycles
MXTIM1Init() → PWM 频率 50 kHz,刹车源=COMP1/3/4 OR BKIN,死区 150 ns
HALOPAMPStart() → OPA1 同相放大 ×20,OPA2 电压跟随器缓冲
HALADCExMultiModeStartDMA() → 常规组由 TIM1TRGO 启动,循环模式
- 实时阶段(50 kHz 周期)
TIM1TRGO → ADC1/2 同步采样 → DMA1Ch1 传输完成中断置位 aqusitionDMA11=1
主循环检测到标志后:
- 读取 ADC12BUFFER[0](高 16-bit=电流,低 16-bit=电压)
- 计算 VDC、IDC、温度,IIR 滤波系数 1/8
- 若频率因子=1,则 SPI 回传最新数据;否则跳过,保证 1 kHz 上传速率
- 清除 DMA 标志,等待下一周期
- 保护阶段(异步)
任何比较器翻转 → TIM1BKIN 生效 → 硬件关闭 PWM 输出 → 产生 TIM1BRK 中断
中断服务程序:
- 关闭 TIM1 主输出(MOE=0)
- 记录故障码到 SystemState
- 置位 SPI 状态字 Alarm 位
- 等待主控查询后,由主控发“清除”命令重新使能 MOE
四、对外寄存器映射(SPI 回传 3 帧)
Frame0:bit15=Alarm, bit14..12=故障码, bit11..0=VDC(0-450 V → 0-4095)
Frame1:bit15..0=IDC(-30 A..+30 A → 0-4095,Zero=2048)
Frame2:bit15..8=NTC 温度(-40..125 ℃ → 0-255),bit7..0=MCU 内部温度(℃)
五、性能指标
- 采样精度:电压 ±1 %,电流 ±1.5 %(25 ℃)
- 保护响应:硬件关断 < 500 ns,软件记录 < 2 µs
- 通信延迟:SPI 端到端 30 µs(含 DMA)
- 代码占用:Flash 28 KB,RAM 4 KB,CPU 负载 < 5 %(50 kHz 采样)
六、扩展与维护
- 阈值在线调整
主控通过 SPI 写 0xBxxx 命令,DCAC 解析后重写 DAC3->DHR12Rx,无需重启 - 温度补偿
在 VDC/IDC 计算中引入 NTC 温度多项式,系数保存在 Flash 最后 1 KB - 固件升级
支持双 Bank Boot(用户需开启 OB_SWAP),通过主控转发 UART 升级镜像,升级完成后软复位
七、注意事项
- 高压侧电阻分压网络温漂需 ≤50 ppm,否则电压精度无法保证
- 分流器四线布局与运放输入走线需对称,差分长度差 < 0.5 mm
- 比较器滤波值 OC_FILTER 默认为 5,若母线杂散电感大导致误触发,可在 0-15 之间调整
- SPI 线路长度 ≤ 15 cm,否则需在 SCK/MISO/MOSI 串 22 Ω 电阻并靠近接收端放置 47 pF 电容
八、结语
DCAC 软件以“极简、极速、极可靠”为设计目标,所有关键保护均由硬件闭环完成,MCU 仅承担采样与通信任务,最大限度降低软件失效导致炸机的风险。后续版本如需增加弧岛检测或绝缘阻抗监测,可在现有 50 kHz 时隙中插入新状态机,无需改动底层驱动。
