☰
STM32G474实战:单相逆变器并联运行系统的设计与调试
2026/10/28 1:11:12 网站建设 项目流程

做单相逆变器并联这件事,最让我长记性的不是单机怎么调出漂亮的SPWM波形,而是两台单独看都很正常的机器,输出端并到同一个低压母线之后,突然变成一对互相较劲的冤家。母线接触器一闭,电流波形直接爆表,其中一台还在倒吸电流,声音都不对了。我最早带这个项目去联调时就被现场狠狠教育过一轮,后来整套方案换到STM32G474RCT6上,单相逆变器并联运行系统才算真正收敛。这篇文章不打算堆理论,就把我从芯片选型、原理图设计、控制策略梳理,到现场参数整定的完整过程写出来。

这套“单相逆变器并联运行系统”能解决的问题很具体:多台逆变电源模块共享一个交流母线,系统要能自动均分负载,任意一台故障退出后其余模块继续供电。它适合做UPS并联扩容、储能变流器多机并联、微电网接口装置的同行参考,也适合刚接触数字电源并联控制的同学当一份带坑位标注的实操笔记。

1. 并联逆变器项目到底在解决什么问题

1.1 单机容易并联难:环流与同步两大拦路虎

单相逆变器说白了就是一个受控交流电压源。单机运行时,你只需要保证输出电压波形、幅值、频率都满足要求,负载电流自然会根据负载阻抗走。但把两台电压源直接并到同一个点,问题就来了:两个理想电压源并联,要求电压幅值完全相等、相位完全一致、频率完全相同。现实中没有两台机器能做到这一点,哪怕同一批板子、同一套程序,采样电阻有精度误差,开关管压降有差异,死区效应也略有不同,最终输出就会存在一个很小的电压差。

这个电压差会作用在什么回路上?两个逆变器的输出滤波电感、线路阻抗,物理上等效于串联起来再承受这个电压差。于是产生了环流。我项目里滤波电感是2mH,两台机的环路总电感约4mH,输出差3V(一台222V、一台219.5V),50Hz下这个回路的阻抗约1.26Ω,环流轻松超过2A。额定电流才9A,凭空多出2A环流意味着其中一台机器的电流会比另一台高很多,负载分配完全失衡,而且环流是不做功的,只在线路和器件上发热。

同步问题比幅值差更难处理。即使两台机都工作在50Hz,各自的晶振频率也不可能完全一致。比如20ppm误差的晶振,每秒会累积约10微秒的相位误差,这个误差在闭环里会转化为持续的相位差,导致环流不断变化。所以并联系统的第一优先级就是解决相位同步和幅值均衡,这也是整个控制策略的出发点。

1.2 STM32G474RCT6选型:电源控制外设是决定性因素

我第一版用的是常见MCU,做单机没问题,一上并联就各种别扭:PWM和ADC同步要靠软件硬凑,过流保护走中断响应总有延迟,模拟采样通道还要外挂运放,板子越做越大。换到STM32G474RCT6之后,很多问题变成外设配置问题,而不是电路妥协问题。

这颗芯片值得关注的几个点,全是冲着数字电源去的。它主频170MHz,Cortex-M4F带FPU,算PWM、跑PI环、做软件锁相都够用。更重要的是外设组合:内部带3个12位ADC,其中两个支持5MSPS采样率,还有DMA和硬件过采样;带6个内置运放,可以直接处理电流采样信号;带7个快速比较器,可以做硬件过流保护。这些功能配在一起,单芯片就能覆盖并联逆变器需要的全部模拟量采集和保护回路。

最核心的是它那颗高分辨率定时器HRTIM。G474的HRTIM可以输出多路互补PWM,自带死区发生器、斩波调制、故障输入和外部事件同步,分辨率能做到130ps级别。原本需要外部逻辑电路才能实现的快速关断、载波同步,现在配置寄存器就能完成。对比同类的专用电源DSP方案,G4的生态要友好得多,CubeMX一键生成初始化代码,调试工具链也成熟,对团队里不习惯写DSP底层寄存器的同事非常友好。

1.3 控制策略选型:下垂控制为什么比主从控制更可靠

并联控制策略是项目的灵魂。我评估过三种路线。第一种是主从控制,主机定电压基准,从机检测自身输出电流去跟随主机的电流指令。这种方案均流效果最好,动态响应也快,但核心问题是高度依赖通信,通信线一旦断掉或者主机故障,整个系统立刻失去平衡,可靠性在工业现场不够看。

第二种是模拟均流母线方案,板间用一根均流信号线交换负载误差。早期UPS并联经常用这个方案,成本低、响应快,但信号线是模拟信号,容易受功率开关干扰,线长一点就不稳定,而且只能实现有功均流,无功和相位协调做不好。

最终选了第三种:下垂控制,也叫Droop控制。它的思路模仿多台柴油发电机并联:发电机负载增大时转速会下降、频率微降,各台机依靠自身转速特性自动分走相应的负载,不需要机器之间有任何连线。电力电子逆变器同样可以人为构造一条输出电压频率/幅值随输出功率增加而下垂的外特性曲线,每台机只根据本地采样到的有功P和无功Q,对参考频率和参考幅值做修正,就能实现无互联线均流。

这种方式牺牲了一点点电压调整率,换来的是系统可靠性和模块化程度的大幅提升。任何一台机器掉线,其余机器照常运行;任意一台机器加入母线,不需要修改其他机器的参数。在这个项目里,这个特性是刚需。

1.4 系统架构:功率回路与控制回路的整体布局

系统整体由功率级、控制级和通信级三块组成。直流输入侧是DC 380V~420V母线,经过全桥逆变拓扑变成SPWM脉冲,再经过LC滤波得到AC 220V/50Hz正弦波输出。每台逆变器输出端各有一个交流接触器或者继电器,系统启动时先空载建立电压,满足并联条件后再闭合接入公共母线。

控制板以STM32G474RCT6为核心,采集母线电压、输出电压、输出电流、电感电流和温度信号。控制软件在PWM中断里完成电压外环和电流内环运算,在主循环或慢速中断里完成功率计算、下垂修正和状态机管理。HRTIM产生的四路PWM信号经过隔离驱动后控制全桥MOSFET。硬件比较器做好第一道防线,电流采样信号直接进比较器,一旦超过设定阈值,无需软件干预直接触发HRTIM故障关断。

通信级用的是CAN总线,波特率250kbps,周期广播本机的运行状态、输出功率和载波同步信息。通信在并联控制回路里不承担实时均流控制,只负责同步载波和状态监控,这样通信故障不会直接影响均流稳定性。

模块主要芯片/器件作用
功率级MOSFET全桥 + LC滤波DC转AC,实现电压源输出
控制级STM32G474RCT6采样、控制算法、PWM生成、保护
采样调理内置运放 + 外部差分电路电压/电流信号调理
保护内置比较器 + HRTIM Fault硬件级超快关断
通信CAN收发器状态广播、载波同步

2. 围绕STM32G474RCT6的关键配置与实操要点

2.1 HRTIM配置:死区、极性与故障输入一个都不能错

并联逆变器的软件基础是HRTIM生成的SPWM。载波频率我用了10kHz,系统时钟170MHz,所以时基周期设为16999。对应配置代码核心部分是这样:

HRTIM_TimeBaseCfgTypeDef timeBaseCfg = {0}; timeBaseCfg.Period = 16999; // 170MHz / 17000 = 10kHz timeBaseCfg.RepetitionCounter = 0; timeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1; timeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS; timeBaseCfg.Polarity = HRTIM_PERIODACTIVE_POSITIVE; HAL_HRTIM_TimeBaseInit(&hhrtim1, HRTIM_TIMERINDEX_A, &timeBaseCfg);

单相全桥我用的是单极倍频调制方式,高频桥臂工作在10kHz载波,低频桥臂在正负半周做低频切换。这样等效输出纹波频率翻倍,电感电流纹波比双极性调制小很多,滤波电感体积也能压缩。HRTIM的TimerA作为高频载波,TimerB作为低频方波,各自输出两路互补PWM到两组桥臂。

死区时间我配置为500ns。选这个值不是拍脑袋,要综合MOSFET的关断延迟时间、栅极驱动芯片的传输延迟和功率回路的寄生参数。死区小了容易直通炸管,大了输出波形畸变增加且低压输出时损耗明显。用示波器量驱动芯片输出,确认上下桥臂驱动波形之间有一个清晰的凹陷区间,这个步骤在批量中每次都要做。

HRTIM的极性配置也容易翻车。全桥两个桥臂的电平逻辑,要结合实际驱动电路确认是高电平开通还是低电平开通。要是把极性配反了,上电瞬间就是直通。我的排查顺序是先不接主功率,单独给控制板供电,用示波器看四路驱动波形,确认没有同时为高的时刻,再合直流母线。

然后就是故障输入,这是并联系统能安全运行的关键。我把电流采样信号接到G474内部比较器,比较器输出直接连到HRTIM的Fault输入,阈值靠片内参考电压设置。电流一旦超限,硬件就在几百纳秒内把PWM输出拉到安全电平,整个过程不经过CPU,也不依赖中断调度。并联系统最忌讳的就是保护靠软件判断,软件要是在忙别的,几个周期下来功率管早就炸了。

还有一个HRTIM使用上的实际体会:HRTIM有很多影子寄存器,有些参数写入后要到下一个周期事件才更新。第一次调的时候占空比改了但波形没反应,我还以为是芯片坏了,查了半天才想起来是没等周期更新。介入调试时记住这个特性,能省半天时间。

2.2 ADC同步采样:采样点选在PWM周期的哪里很关键

ADC采样质量直接决定控制环路的性能。逆变器功率级有大量的开关噪声干扰,如果采样时刻落在开关边沿附近,采集到的是什么就很难说了。那时候电流环反馈值每个周期都在跳,控制量也被带偏,输出电压波形上能看到毛刺。

正确的采样点应该放在PWM周期中间,对于对称三角载波来说就是载波的顶点或者谷底。这个时刻开关状态已经稳定,功率回路里没有大的di/dt,而且对于电感电流来说,这个采样点刚好对应一个周期内的平均值,控制模型更准确。

G474实现这个机制很直接。配置HRTIM的周期匹配事件去触发ADC注入组转换,不需要软件定时器或者外部引脚触发。我在代码里把ADC1的触发源配成了HRTIM TimerA的周期事件,转换完成后用DMA自动把结果搬进内存。

ADC_InjectionConfTypeDef sConfigInjected = {0}; sConfigInjected.InjectedChannel = ADC_CHANNEL_2; // 电感电流通道 sConfigInjected.InjectedNbrOfConversion = 1; sConfigInjected.InjectedSamplingTime = ADC_SAMPLINGTIME_3CYCLES_5; sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T1_TRGO2; HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected, 0);

单机调试时先不要直接合高压母线。我是从直流低压(比如50V)开始,开环给一个固定占空比,看采样回来的电压电流值跟外部万用表和电流钳差多少。G474内置运放的增益和零点校准在这一步做完,软件里记录零偏值,后续所有采样都先减去零偏再参与控制。

2.3 单相锁相与正交信号构造:没有它并联无从谈起

并联系统里必须有稳定的相位基准。如果两台机器对“现在到底该输出什么相位”没有统一认识,环流一定压不住。单机运行可以自己自由振荡,并联则必须有一个方法让输出电压相位跟踪公共母线或者跟踪主机的相位。

我用的方案是SOGI二阶广义积分器加SRF-PLL。单相只有一个电压标量,直接算不出瞬时有功和无功,必须先构造一个虚拟正交信号。SOGI的作用就是输入一个正弦电压,内部输出两个正交分量,一个跟输入同相的α分量,一个滞后90°的β分量,同时还能滤掉一部分谐波。有了αβ坐标系,坐标变换就顺畅了。

锁相环的核心逻辑就是通过调节频率和相位,让q轴分量归零。误差进PI调节器,输出就是角频率修正量,再积分得到相位角。这样得到的相位角同时供三处使用:正弦表查询生成SPWM调制波、功率计算中的dq变换、下垂控制中的频率参考。实测下来,SOGI-PLL在母线电压畸变的情况下也能锁住,比过零检测的方式抗干扰能力强太多。

两台机器之间的同步策略是这样的:所有模块都锁同一个外部同步源。在样机上我用一路同步信号线,把所有机器的HRTIM外部事件输入并联在一起,同步脉冲一到,各机器在同一时刻重置自己的载波计数器。这样两机的载波相位一致,输出PWM的开关时刻也一致,高频纹波环流能大幅减少。同步线的抗干扰要处理好,用双绞屏蔽线,靠近控制板一侧加RC滤波。

2.4 均流控制逻辑与四级保护体系

整套控制回路的逻辑链是:先采集输出电压和输出电流,计算瞬时功率,低通滤波得到平均P和Q,然后在下垂控制器里生成频率参考和幅值参考,再交给电压电流双闭环去跟踪。

下垂公式很简单:

[ f = f_0 - m \times P ]

[ E = E_0 - n \times Q ]

f0是空载额定频率,E0是空载额定电压幅值,m是有功下垂系数,n是无功下垂系数。每台机器看到的P和Q是本地负载功率,负载越大,它就越主动把自己的频率和幅值压低一点,这样在公共母线上自然会让满载的那台稍微“退让”,把负载份额匀出去。这个原理跟发电机并联完全一致,只是用软件实现。

保护体系我按响应速度和严重程度分了四级。第一级是硬件比较器过流保护,触发到HRTIM故障关断,最快,微秒级动作。第二级是ADC采样后的软件过压过流判断,在PWM中断里执行,毫秒级,用于处理比较器没覆盖到的异常。第三级是母线欠压保护和过温保护,判断条件相对更缓,防止在异常状态下长时间运行。第四级是看门狗和状态机管理,程序跑飞或者逻辑异常时能自动复位或进入安全停机。

均流控制里有一个容易被忽略的细节:功率低通滤波器的时间常数。时间常数太小,P和Q波动大,下垂输出抖,电压波形会跟着毛躁;时间常数太大,均流响应变慢,负载突变时短时间内环流会拉得很大。我用的是20ms左右的一阶低通,折中效果比较满意。

3. 从单机到并联:联调过程与参数计算实录

3.1 硬件平台搭建:关键器件和参数清单

样机硬件参数如下表所示,这套配置是按2000VA输出能力设计的,实际并联两台总功率4000VA。

参数数值说明
额定功率2000VA单台可连续运行
直流输入DC 380V~420V前级整流或直流源
交流输出AC 220V / 50Hz纯正弦
开关频率10kHzHRTIM时基17000
功率管600V / 40A MOSFET低Qg型号
隔离驱动数字隔离驱动芯片带死区设置
滤波电感2mH 铁硅铝磁粉芯两机并联时环流阻抗基础
滤波电容10uF CBB电容并联吸收电容另加
电流采样霍尔传感器 + 内置PGA故障保护用比较器直采
通信CAN 250kbps同步和状态上报

电流采样通道要特别规划。G474虽然有多个ADC,但并联系统需要的模拟量不少:母线电压、本机输出电压、本机电感电流、输出电流、温度。把这些通道合理分配到三个ADC上,确保同一时刻能对电压和电流同时采样。我在给原理图分配通道时,把电压和电流放到了可以同步采样的不同ADC上,这样控制环拿到的电压电流样本在时间上对齐,功率计算才准确。

3.2 单机闭环调试:先把单台系统的性能榨干

并联联调之前,单机调试必须非常扎实。我踩过的教训是:如果单台系统动态响应还稀里哗啦的,就忙着去并联,最后根本分不清问题是出在单机控制还是在均流策略上。

单机调试分四步。第一步是不带功率管的开环测试,只验证HRTIM的PWM波形、死区和驱动电平。第二步是开环带功率,直流母线通过调压器从低压慢慢升,观察输出电压波形和电流波形,确认桥臂没有直通、电感没有异响。第三步是只跑电压外环,空载和带电阻负载,调电压环PI参数。第四步是加入电流内环,把电流环带宽调出来,再重新验证电压环。

调PI的一个实用技巧:比例增益从0开始慢慢加,盯着输出波形看有没有振荡。一旦出现振荡,记录这个临界增益,然后把比例设在临界值的30%到50%,再补积分。这样调出来的参数稳定裕度比较足,不至于在并联之后因为外界条件变化就发散。每台机器都先记录一组PI参数,后面并联时如果环流大,至少能确认不是单机环路的问题。

3.3 并联联调:下垂系数的计算与现场整定

并联调试最忌讳直接闭合并网。我的流程是两台机器先各自空载运行,用示波器双通道同时看两机的输出电压波形,人工确认幅值和相位差足够小之后才允许闭合母线接触器。样机上要求相位差小于0.1°,对50Hz来说就是20微秒左右,示波器上就能看出来。

下垂系数先按理论计算给初值。额定功率2000W,允许满载时频率下降0.5Hz,则有功下垂系数:

[ m = \frac{0.5 \text{ Hz}}{2000 \text{ W}} = 0.00025 ]

允许满载时输出电压幅值下降15V,则无功下垂系数:

[ n = \frac{15 \text{ V}}{2000 \text{ W}} = 0.0075 ]

这两个初值固定后,把两台机器同时接到母线上,带25%负载观察环流。如果环流大,优先往下垂系数上找原因。样机在初值下满载环流还是偏大,我把m加大到0.00035,n加大到0.011,环流明显下降,代价是满载输出电压从220V落到208V。这个取舍没有公式一步到位,要看产品对电压调整率的要求。

还有一个容易忽略的测量操作:测环流不能只靠电流表看额定输出电流,要在两台机器的输出电流采样点各串一个电流探头,用示波器的A-B数学通道看差值波形。这个差值就是环流,能看到它的幅值和频率成分,比看总电流信息量多很多。

3.4 并机带载测试:看波形和数据验证均流效果

并联测试的负载我用了纯阻性负载箱,先不带整流型负载,因为整流负载会引入谐波和EMC问题,干扰因素先排除掉。测试表按空载、25%、50%、75%、100%五档来拉。

带载到50%时,两台的输出电流分别是4.1A和4.3A,均流偏差在5%以内。满载下偏差稍微大一点,6%左右,原因是两台机器的功率器件温升不同导致压降有差异,这是一个正常现象。环流RMS从最初闭合时的2.8A降到0.3A左右,这个数据说明下垂控制确实在起作用。

动态测试是突加满载。负载从空载突加到2000W,输出电压瞬间跌了12V,然后约30ms恢复。切换瞬间两台机器的电流都能跟上,没有出现其中一台承担绝大部分负载而另一台“发呆”的情况。如果在示波器上看到瞬间负载分配明显失衡,优先检查功率低通滤波器时间常数和下垂直流分量是否一致。

谐波测试用功率分析仪看了一眼输出THD,单机约2.5%,并联以后总电流THD略有上浮但还在3%以内,符合预期。整个流程走完,并联系统才算真正过关。

4. 并联运行常见问题与排查技巧

4.1 开机阶段过流:优先级最高的排查

并联系统每次上电最紧张的时刻就是母线接触器闭合那一瞬间。如果闭合后直接过流报警,按这个顺序排查:第一步确认两台机器在闭合前输出电压幅值和相位确实一致,没有人为分合闸顺序错误。第二步看控制板上电时序,是不是两台机器都没有进入稳定运行状态就被硬并了。第三步用示波器抓闭合瞬间的电流波形,看是不是出现了很大的冲击电流峰。

冲击电流往往是相位不一致造成的。闭合瞬间两台机的电压差如果是20V,对2mH电感来说,这个电压在极短时间内会憋出一个很大的电流尖峰。实际操作中我加了一个“预同步完成”指示灯,两机相位差达标后再允许闭合母线接触器,操作员凭指示灯动作,不再凭感觉。

软件层面也要做协作控制。母线闭合是由主机统一控制的,从机不主动闭合自己那路接触器,而是等待主机的CAN同步帧和闭合并联指令。这样能避免两机同时抢着闭合导致瞬间短路的混乱局面。

4.2 稳态环流偏大:从零偏到同步逐项定位

稳定运行后环流还是大,要逐项小时代排查。我最先怀疑的是采样零偏没有校准干净。电流传感器的零点漂移在温度变化后尤其明显,如果两台机器的零漂方向相反,即使实际没有负载也会读出功率,下垂控制就会误修正,制造出虚假的环流。解决办法是在上电后、逆变器启动前,专门做一个零偏校准流程,采集20次电流求平均存为偏置值。

第二个高发原因是相位同步精度。如果同步线受到干扰或者CAN同步丢包,两台机的PWM载波相位差别越来越大,输出PWM的等效开通时刻就不一致。在示波器上如果看到两台机器输出电流的高频纹波部分有明显的错位和叠加,基本就是载波不同步,处理办法见下一节。

第三个原因是输出阻抗不一致。两台机器的滤波电感磁芯批次不同,电感值可能有5%到10%的偏差,这会让环流在无功分量上偏大。理论上可以加虚拟阻抗来平衡,把每台机器的等效输出阻抗修正到一致。我在样机上把虚拟阻抗设了0.5Ω,环流又下来了一截。

4.3 载波不同步引发的波纹群环流

两台机器的MCU各自都有独立的晶振,即使载波频率都设置为10kHz,两路PWM开关时刻也不可能严格对齐。开关时刻错开后,两路SPWM脉冲的频谱有了差异,输出端会出现额外的开关频率差拍分量,在电感上表现为刺耳的高频噪声,同时高频环流明显增大。

解决载波同步有两种手段。第一种是硬件同步线,把所有机器的HRTIM外部事件输入并联,由主机周期性地发一个同步脉冲,各机收到脉冲后立即重置载波计数器。这种方案简单、延时小、精度高,适合机柜内短距离布置。第二种是软件同步,主机在CAN帧里周期广播本地载波计数器的数值,从机收到后对应修正自己的HRTIM周期值,实现载波频率的掏平。软件同步不需要额外接线,但同步精度受CAN通信抖动影响,我用下来能到微秒级,对10kHz载波够用。

样机最终是两条手段同时启用。同步线负责硬同步,CAN报文负责握手确认,如果同步线断了,系统还能靠CAN同步维持运行一段时间,不至于立刻崩溃,等于给关键环节加了一层热备份。

4.4 常见问题速查表

现象可能原因处理办法
闭合并联瞬间过流报警相位差过大、接触器误动作检查预同步灯,加装同步闭锁逻辑
空载时两台机电流不为零采样零漂未校准、传感器温漂每次启动前执行零点校准
满载环流偏大下垂系数不足、输出阻抗不一致加大下垂系数,加虚拟阻抗
输出声音刺耳、高频纹波大载波不同步、同步线受干扰更换屏蔽线,启用CAN同步兜底
输出电压满载时掉得太多下垂系数过大、电压外环带宽不足折中调整下垂系数,优化PI参数
不规律过流报警干扰误触发比较器阈值提高比较器抗干扰滤波,检查采样回路
CAN通信丢包波特率不对、终端电阻缺失检查总线终端电阻,降低波特率验证
一台机器突然退出并联保护误动作、通信失联查看故障寄存器,确认触发的是哪一级保护

这套项目做下来,我个人的体会是:并联系统的技术深度不在单机性能上,而是在如何定义模块之间的边界条件。选择STM32G474RCT6确实是关键一步,它把ADC同步采样、PWM生成、硬件保护和通信占用的资源都拉开了档次,让控制策略可以做得很纯粹,而不是到处找资源缺口补丁。如果你正准备做类似的多机并联项目,我建议先把单机调试和上位机监控软件做好,把调试界面里的电压、电流、P、Q、下垂状态全部可视化成曲线,再去碰并联联调。没有完整的数据记录做辅助,现场出了问题基本只能靠猜,而并联系统的故障,往往一次猜测就要付出炸机的代价。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询