上次在实验室折腾储能变流器,要给现成的台架加上孤岛运行能力。手头没有合适的微电网控制器,市面上的产品基本是黑盒,参数改一个都要折腾半天,我索性决定自己动手把控制和算法全部搭起来。整个过程涉及微电网中最典型的两类控制策略——下垂控制和PQ控制,踩了不少坑,也积累了一些能直接参考的调试经验。这篇笔记不是讲泛泛的理论,而是把我实际手搓的完整链路写下来,从控制架构、原理落地、参数整定到实测波形和故障排查,适合正在做逆变器控制、微电网实验、储能PCS或者并联供电电源的朋友参考。1. 并网与孤岛:两种模式下控制策略到底在解决什么问题先想清楚一个基本问题:微电网为什么要区分“并网”和“孤岛”两种运行模式?因为电网存在与否,决定了逆变器输出端的电压和频率到底由谁说了算。这一个底层差异,直接决定了该用PQ控制还是下垂控制,也决定了后续一大堆参数设计的出发点。1.1 并网时为什么记住“听电网的”就行并网状态下,微电网通过静态开关或者断路器挂在公共电网上,此时电网相当于一个容量无穷大的电压源。逆变器不管输出多少功率,公共连接点的电压和频率基本被电网钳住了,几乎不受逆变器影响。这种情况下,逆变器真正需要控制的只有一件事:输出多少有功、多少无功。PQ控制的名称就是这么来的——P给定有功功率,Q给定无功功率,电压和频率完全跟随电网。并网PQ控制的本质是“电流源”思维:电压已经由电网撑住,逆变器只需要把电流按指令注入电网。有功功率和无功功率可以分别通过d轴电流和q轴电流来独立控制,所以PQ控制往往由功率外环和电流内环组成。外环根据功率指令生成电流指令,内环快速跟踪电流指令,整套控制逻辑的核心就是“别和电网抢电压,把电流送准就行”。1.2 孤岛时为什么必须“自己撑场面”孤岛模式下,微电网与大电网断开,剩下的逆变器和负荷组成了一个独立小电网。此时没有任何外部电压源来撑住电压和频率,逆变器必须自己成为电压源。如果每台逆变器仍然按固定功率输出,负荷一变,电压就会飘,频率也会失去基准。下垂控制正是为了解决这个问题而生的。下垂控制的思想很朴素:模仿传统同步发电机的一次调频和一次调压特性。同步发电机带负载时,转速会因为电磁转矩增加而略微下降,对应到电网上就表现为频率下降;无功输出增大时,发电机内部压降增大,出口电压也会下降。下垂控制把这种“功率越大,频率/电压越低”的外特性做成一条下垂曲线,让多台逆变器在没有通信的情况下也能自动按容量分担负荷。1.3 我的控制板架构为什么选DSP+ARM双核分工我手搓这套系统时,控制板没有采用单芯片一把抓的方案,而是分成两块:一块浮点DSP负责所有实时控制相关的工作,另一块ARM单片机负责模式切换、状态上报、Modbus通信和人机交互。这样分的原因很简单,DSP的PWM外设和ADC采样做得比较顺手,中断响应也稳定,非常适合跑电流环、功率环这类微秒到毫秒级的控制任务;而ARM跑协议栈、显示逻辑、故障记录更灵活,两者分工不会互相干扰。实际使用中,DSP内部完成的是一组固定流程:ADC采样三相电压电流、坐标变换、功率计算、PI调节器、SVPWM调制,全部在PWM周期中断里完成。ARM则通过SPI或者串口与DSP交换指令和状态,比如上电时下发控制模式、孤岛指令、功率给定值;运行中接收DSP回传的实时功率和故障码。这样的架构调试起来非常方便,我在线改下垂系数时不需要反复烧写DSP程序,直接通过上位机经ARM写入即可。2. PQ控制落地:从三相瞬时功率到双闭环的整条链路PQ控制看起来简单,真正落地时第一个拦路虎是“离散化”和“坐标变换”。很多人把原理书看懂了,一上DSP发现电流波形不对、功率计算偏差巨大,多半就栽在这块。本节我把整条信号链路拆开讲。2.1 坐标变换与功率计算:不要跳过dq轴并网逆变器最常用的是三相三线拓扑,反馈量包括三相电网电压和三相电感电流。控制算法里不能直接对abc三相做PID,因为三相量都是正弦波,比例积分调节器对正弦参考的跟踪误差无法做到无静差。所以标准做法是先把abc转换成静止坐标系αβ,再通过锁相环得到的电网角度做Park变换,得到dq轴直流量。d轴有功,q轴无功,在dq坐标系下用PI控制就是纯粹对直流量做调节,逻辑清晰,也便于限幅。这里给出我用到的功率计算公式:有功功率 P = 1.5 × (vd × id + vq × iq)无功功率 Q = 1.5 × (vq × id − vd × iq)为什么是1.5倍?因为等幅值Park变换下,dq轴分量分别代表三相合成矢量的幅值投影,三相瞬时功率合成后正好是1.5倍的关系。实际调试时,先确认这个系数是否正确非常关键。我一开始在仿真里直接套用公式没注意系数,上实验台后功率显示比功率分析仪小了1/3,查了很久才发现是常数问题。2.2 电流内环设计:电感模型与带宽选择电流内环控制的是逆变器侧滤波电感L上的电流,忽略电阻时,电感电流微分方程为:vd − vg = L × (did/dt)其中vd是逆变器桥臂输出的d轴电压,vg是电网d轴电压。PI调节器输出直接作为电压指令,和电网电压前馈相加后,经过SVPWM得到开关信号。电流环的响应速度受两个因素限制:一是开关频率,二是电感量。PWM周期中断里跑一次完整的电流环,理论上最高控制带宽只能是开关频率的十分之一左右,否则离散化带来的相位滞后会让系统不稳定。我实际用的是15kHz的开关频率,电流环带宽设计在1kHz左右。这个感觉比较适中:动态响应足够快,SVPWM和采样延迟带来的相位裕度也还能接受。如果追求更低的电流纹波把开关频率降到10kHz以下,电流环带宽就要相应下调,否则波形会开始出现振荡。2.3 功率外环整定:为什么必须比电流环慢PQ控制的功率外环输出的是d轴和q轴电流指令。很多新手第一次调的时候,功率环和电流环带宽没有拉开距离,P指令一变,功率外环立刻输出一个很大的电流突变,电流内环还没跟上,结果功率波形严重振荡,甚至在限幅线附近来回撞。我给功率外环设计的带宽只有20Hz左右,比电流环的1kHz低了近两个数量级。这样功率环对电流环来说就是一个缓慢变化的参考源,电流内环始终能稳稳跟踪。判断带宽是否合适的办法也很简单:从半载阶跃到满载,观察有功功率响应是否平滑上升,如果出现明显的超调或者振铃,就把功率环的Kp按比例往下缩。3. 下垂控制落地:把逆变器调出同步发电机的“脾气”孤岛模式下,逆变器必须具备类似同步发电机的功率-频率外特性。这里不是简单地把输出电压和频率定死,而是要让它们随着输出功率自然“软”下去。3.1 P-f与Q-V下垂的物理含义下垂控制用两组方程来表达外特性:f = f0 − mp × (P − P0)V = V0 − nq × (Q − Q0)其中f0和V0是空载频率和空载电压,mp和nq是下垂系数。逆变器输出有功功率P越大,内部参考频率f就越低;输出无功Q越大,电压指令越低。从物理上理解,这相当于给逆变器串了一个无形的“阻尼”,负载增大时自动降低输出频率,就像同步发电机负载增加后转速自然下降一样。实际控制时,我会把下垂计算出的频率作为三相正弦波发生的频率基准,把下垂计算出的电压幅值作为正弦波幅值基准,再内嵌一个电压电流双闭环。也就是说,下垂控制直接生成电压参考,后面的电压环和电流环负责跟踪这个参考。这也是下垂控制和PQ控制在结构上的最大区别:PQ控制是电流源思维,下垂控制是电压源思维。3.2 多机并联功率均分:一次调频视角下垂控制最吸引人的地方是多台逆变器并联时不需要互相通信就能均分负荷。两台逆变器并联同一个母线,如果它们输出电压频率不一样,相位差会越来越大,产生很大的环流,最终把某台机器顶到电流保护。加了P-f下垂之后,这个矛盾会自动消除:A机频率偏高,说明它带载偏少,由下垂公式可知它的P相对低,于是频率偏高。B机带载偏多,频率偏低。在共同母线约束下,整个系统会自动稳定在一个中间频率,两台机器的频率一致,对应的有功就趋于一致。下垂系数需要结合允许的频率偏差和逆变器容量来算。例如一台额定有功20kW的逆变器,允许从空载到满载频率下降1Hz,那么mp = 1Hz / 20000W = 0.00005 Hz/W。实际我通常会留一点裕量,把允许频差设成0.8Hz左右,避免多机并联时过渡过程把频率拉得过低。3.3 虚拟阻抗:阻性线路的补偿手段下垂控制的理论推导通常基于线路阻抗呈感性的假设,也就是有功功率主要受相位差影响,无功功率主要受幅值差影响。但实际微电网里的低压线路往往是阻感混合的,如果直接把标准的P-f、Q-V下垂用上去,会出现有功和无功耦合,均流效果变差。解决办法之一是给控制环路叠加虚拟阻抗。原理很简单:在电压参考生成环节故意减去一个虚拟电感上的压降,让逆变器对外呈现出的等效输出阻抗更接近感性。实现上不需要真的串电感,只要在控制软件里计算:Vref_new = Vref − Rv × io − Lv × (dio/dt)其中Rv和Lv是虚拟电阻和虚拟电感。我调试中发现虚拟阻抗不能给太大,给大了空载电压会被“拉低”太多,带载时又需要额外的电压补偿,否则电压跌落超过允许范围。比较实用的做法是把虚拟阻抗对应压降限制在额定电压的5%以内,先用电阻分量稳住均流,再逐渐加感性分量改善有功无功解耦。4. 离并网无缝切换:最容易炸板的一环如果说PQ控制和下垂控制是两套“稳态功夫”,离并网切换就是最考验综合功力的时候。切换做不好,并网瞬间可能直接触发过流保护,孤岛切换瞬间也可能让母线电压被打得一塌糊涂。4.1 预同步到底在同步什么从孤岛切到并网之前,逆变器输出电压的幅值、频率、相位必须和电网基本一致。幅值可以通过PI调节电压参考慢慢贴近电网电压幅值,但相位是一个积分量,单纯调节频率很难保证绝对同步。我用的办法是加一个预同步环:实时检测电网电压角度和逆变器输出电压角度之差,把这个角度误差送到一个PI调节器,输出作为频率微调量,叠加到下垂频率基准上。这样逆变器输出频率会自动向电网频率“靠拢”,直到相位差趋于稳定。这个过程中有一个比较容易犯的错误:只盯着相位差收敛,不看相位差变化率。如果相位差已经到零但频率差还很大,锁相环依然会继续调整,结果锁定之后又滑过去,出现周期性的相位振荡。所以实际调试时我会同时对角度差和频率差做判断,两者都进入死区才认为预同步完成。4.2 模式状态机的实现细节离并网切换不能靠简单的中断标志位乱跳,需要设计一个清晰的状态机。我在DSP里维护了一个枚举类型的运行模式,IDLE表示待机,PASSYNC表示预同步,GRID_MODE表示并网PQ运行,ISO_MODE表示孤岛下垂运行。ARM下发切换指令后,DSP不是立即切换状态,而是先执行切入条件判断,比如并网切换必须先检测静态开关分合闸反馈并且完成预同步,孤岛切换必须先确认断网信号再封锁并网路径上的电流指令。状态机的核心代码如下:typedef enum { MODE_IDLE = 0, MODE_PASSYNC, MODE_GRID, MODE_ISO } RunMode; RunMode currentMode = MODE_IDLE; void ModeMachine(void) { switch (currentMode) { case MODE_IDLE: if (startSynCmd) currentMode = MODE_PASSYNC; break; case MODE_PASSYNC: if (phaseDiffThres && freqDiffThres) { closeGridSwitch(); currentMode = MODE_GRID; } break; case MODE_GRID: if (receiveIslandCmd) { openGridSwitch(); currentMode = MODE_ISO; } break; case MODE_ISO: break; default: currentMode = MODE_IDLE; break; } }这个状态机看起来简单,真正关键的是每个状态切换前后的控制量交接。比如从PASSYNC切换到GRID_MODE时,不能让预同步环输出的频率叠加量瞬间清零,要给它一个斜坡过渡,否则电压相位会突然跳变。4.3 切换瞬间如何避免电流冲击从孤岛切并网时,即使静态开关闭合,逆变器和电网之间仍有微小的电压差,这时会产生冲击电流。我的做法是在合闸瞬间让功率外环暂时封锁,改用电流内环直接跟踪一个很缓的电流指令斜坡,从零慢慢升到目标功率。这样虽然牺牲了一点切换速度,但能避免合闸冲击把保护打掉。从并网切孤岛时则反过来:并网模式下逆变器是被电网电压钳制的,切换瞬间电网突然消失,逆变器必须立刻切换成电压源模式。这时候原来的电流指令如果仍然有效,会导致直流母线电压骤升。我会在断网指令到达后,先把电流内环指令清掉,同时让电压参考从电网电压快照出发,平滑过渡到下功率参考生成的电压,保证调制波连续变化。实测中,这个“调制波保持连续”的细节才是避免过压保护的关键。5. 手搓过程中的踩坑记录:从波形异常到控制参量失稳这套系统从通电到稳定跑了整整两星期,中间碰到的问题比预想多得多。我挑几个最有代表性的写在这里,每一个都是我实际定位并解决的,希望后来的人少走弯路。5.1 功率环带宽太高造成的PWM限幅抖动第一版PQ控制跑起来后,并网功率一阶跃,PWM波形就出现周期性的限幅打嗝现象。用示波器抓输出电流,能看到正弦波顶部被削平,整个系统发闷。排查了很久才定位到是功率外环响应太快:功率环带宽设到了100Hz,负载突变时功率外环输出电流指令瞬间顶到限幅值,电流内环被这个饱和指令推到头,导致调制波持续撞上下限。解决办法分两步:第一步把功率环Kp和Ki大幅下调,带宽压到20Hz附近;第二步在功率环输出处加斜坡限幅,让电流指令的变化率被约束在一个物理可跟踪的范围内。改完之后,哪怕功率指令直接从0阶跃到额定值,电流波形也只是平滑上升,不再撞限幅。5.2 采样相序接反:Clark变换后角度错位第一次上电做并网实验,锁相环显示的电网角度怎么都对不上,功率计算出来有功无功完全乱跳。我用示波器分别看三相电压波形,幅值都正常,相位关系却错了:B相C相采样线序反了。硬件线序反了之后,Clark变换得到的αβ轴分量不是预期的相差90度,Park变换解出来的dq轴也就完全不对,后面的功率计算自然全错。这个坑的排查难度在于它不会报故障,系统只是“看起来错得很随机”。我是把AD采样值直接通过DSP的变量观察窗口打印出来,再和示波器波形逐点对比,才确认线序问题的。后来我在程序里加了一个上电自检函数,往三相电压上叠加强制直流偏置,观察Clark变换后直流分量的符号是否与预期一致,实现接线序的自诊断。5.3 传感器零点偏置带来的dq轴直流偏差电流霍尔传感器在零电流输出时往往不是真正的零电压,而是有一个微小的偏置电压。理论上这个偏置很小,但在d轴和q轴坐标变换后,它不会消失,而是变成一个叠加在dq轴电流上的直流偏差。这个偏差会导致并网时功率控制存在静态误差,看起来像是PI调节器没整定好,实际却是传感器测量层面的系统误差。我采用的补偿办法是在每个PWM周期中断开头,把电流采样前级通道短接,采集一组零点样本,然后在正常采样值中减去这个零点。软件校准后,dq轴电流的静态偏差从几十毫安降到几毫安,控制精度明显改善。如果是量产设备,还能做一阶标定,存衰减系数,但实验室平台用启动时自校准已经足够。5.4 锁相环被过零畸变干扰并网PQ控制要依赖锁相环输出准确的电网角度。实验室台架旁边有一台变频器负载,电网电压波形在过零点附近有明显的畸变,锁相环每次过零都会跳一个相位尖峰,导致dq轴电流发生周期性扰动。单纯加低通滤波会带来相位滞后,锁相环动态响应变差。我最终采用的是二阶巴特沃斯带通滤波加过零窗口检测,只在上一个过零附近的预测窗口内允许过零事件触发,其余位置的毛刺直接忽略。这样锁相环在畸变环境下的角度输出稳定了非常多。这个优化经验在我后来给工业现场设备调试时也被反复验证过,过零畸变问题在真实电网环境中非常普遍。6. 实测结果与可复现的控制器参数理论说得再好,最后还是得用示波器和功率分析仪说话。下面这几组实测结果都是我在实验室台架上得到的,虽然环境和参数具备一定特殊性,但变化趋势和整定思路是可以复用的。6.1 并网阶跃响应实测并网PQ控制模式下,我把有功指令从2kW直接阶跃到8kW,用功率分析仪记录有功功率阶跃曲线。由于功率环带宽只有20Hz,有功功率响应时间约为80ms左右,全程没有超调,电流内环跟踪平滑,无功基本保持原地不动。这说明d轴和q轴之间的解耦效果可以接受。阶跃响应的调试要点是看电流指令的变化速度。如果阶跃后电流波形出现“过冲再拉回来”的迹象,说明功率环Kp偏大,应先把Kp降下来再微调Ki。如果响应很慢但电流纹波正常,则说明带宽太低,可以适当提高Ki来缩短调节时间。6.2 孤岛负载突加实测孤岛下垂控制模式下,让逆变器单独带5kW阻性负载稳定运行,然后突然并上一个10kW负载。由于下垂系数按1Hz/20kW设计,理论上有功从5kW跳到15kW会引起频率下降0.5Hz。实测结果频率跌落约0.45Hz,电压幅值跌落约2%,在几个工频周期内恢复,负荷突加瞬间电流波形出现了一个可控的动态“让渡”,没有触发过流保护。这个实验是我在微电网领域最推荐做的验证项。它能一次性暴露出下垂系数是否过大、电压环响应速度是否足够、电流内环限幅逻辑是否合理等问题。如果负荷突加时频率跌得太狠,说明mp偏大;如果电压恢复太慢,说明电压环带宽偏低,或者虚拟阻抗设置过大。6.3 两台逆变器并联均流测试两台额定功率相同的逆变器在孤岛模式下并联带10kW负荷。不加虚拟阻抗时,两台机器的有功输出偏差约15%,主要是因为两台机器参数不可能完全一致,线缆阻抗也有差异。加上虚拟阻抗后,有功偏差降到5%以内。无功均流的情况类似,但受传感器偏移影响更明显,软件校零后无功偏差也从20%以上降到了8%左右。并联测试最需要注意的现象是环流。可以在两台逆变器输出之间串一个电流互感器测环流方向,如果环流随着负荷增大而明显增大,优先检查下垂系数是否一致、虚拟阻抗是否匹配、采样相位是否对齐。只要这三项都做好,环流通常都能被压到额定电流的5%以下。6.4 控制参数参考表下面是我的台架调试最终使用的参数,逆变器额定功率20kW,开关频率15kHz,滤波电感1.2mH,滤波电容15uF。参数仅作参考,实际使用时必须结合硬件重新整定。参数项设置值说明电流环带宽1kHz约为开关频率的1/15电流环Kp0.15对应电感阻抗约0.28Ω电流环Ki120消除稳态误差功率环带宽20Hz必须远低于电流环带宽功率环Kp2.0指令增益,实际按标幺值换算有功下垂系数mp0.00005 Hz/W满载频差约1Hz无功下垂系数nq0.005 V/Var满载电压差约5%虚拟阻抗Rv=0.15Ω, Lv=0.8mH限制压降不超过5%预同步比例积分Kp=0.5, Ki=20角度误差调节频率微调量这套参数在第一轮运行中表现稳定,后续更换功率等级时我基本按照“电流环带宽 = fsw/10到fsw/15”“功率环带宽 = 电流环带宽/50”的经验去调整,误差都不大。7. 再接一句实在话:进阶方向与动手建议整套微电网控制系统跑通之后,我最大的感受是:下垂控制和PQ控制单独实现都不难,难的是把它们揉进同一套系统里,让模式切换、参数交接、故障处理都成为可控的过程。7.1 自适应下垂系数与二次调频固定下垂系数的局限性在于,重载时频率偏差会比较大,影响电能质量。进阶方向是让下垂系数和空载参考值跟随负载情况自动修正。最简单的做法是根据当前有功功率查表修正频率参考值,让系统在重载时也能把频率“顶回”接近50Hz。更完整的方案则是加入一个上层能量管理系统,通过通信周期性下发微调量,实现类似于二次调频的效果。这层逻辑属于微电网能量管理的范畴,和本地下垂控制可以解耦设计,我在第二个版本中已经开始把两者分开做,调试起来清晰很多。7.2 从下垂控制到虚拟同步机的延伸如果觉得传统下垂控制的动态特性还不够“像发电机”,可以引入转动惯量、阻尼系数等参数,构成虚拟同步机控制。它的本质是在下垂控制频率环里加一个二阶振荡环节,让频率变化过程更平滑,对冲击负荷的抑制效果更好。我建议先把下垂控制调稳,再往上叠加虚拟惯量,否则两层参数耦合在一起,出现问题很难定位。7.3 给新手的从零到一建议最后分享一点个人体会。做微电网控制最容易犯的错误是步子迈得太大,一上来就同时调下垂、并网、切换,结果任何一项出了问题都分不清根源。我自己也是先把PQ控制在电网模拟源下跑通,再切到纯孤岛带阻性负载,最后才做离并网切换。每个环节都固定一个变量,剩下的用示波器逐项确认,这样即使遇到问题,也基本能一次定位到具体环节。如果只让我给一条建议,那就是多做“负载突加实验”。这类实验能在几秒钟内暴露出电流环、功率环、下垂参数、虚拟阻抗等几乎所有环节的问题,比长时间稳定运行后看波形有效得多。微电网控制这块没有太多黑魔法,把每个闭环带宽、每个限幅逻辑、每个状态切换条件都摸清楚,剩下的也就是耐心调参了。
上次在实验室折腾储能变流器,要给现成的台架加上孤岛运行能力。手头没有合适的微电网控制器,市面上的产品基本是黑盒,参数改一个都要折腾半天,我索性决定自己动手把控制和算法全部搭起来。整个过程涉及微电网中最典型的两类控制策略——下垂控制和PQ控制,踩了不少坑,也积累了一些能直接参考的调试经验。这篇笔记不是讲泛泛的理论,而是把我实际手搓的完整链路写下来,从控制架构、原理落地、参数整定到实测波形和故障排查,适合正在做逆变器控制、微电网实验、储能PCS或者并联供电电源的朋友参考。1. 并网与孤岛:两种模式下控制策略到底在解决什么问题先想清楚一个基本问题:微电网为什么要区分“并网”和“孤岛”两种运行模式?因为电网存在与否,决定了逆变器输出端的电压和频率到底由谁说了算。这一个底层差异,直接决定了该用PQ控制还是下垂控制,也决定了后续一大堆参数设计的出发点。1.1 并网时为什么记住“听电网的”就行并网状态下,微电网通过静态开关或者断路器挂在公共电网上,此时电网相当于一个容量无穷大的电压源。逆变器不管输出多少功率,公共连接点的电压和频率基本被电网钳住了,几乎不受逆变器影响。这种情况下,逆变器真正需要控制的只有一件事:输出多少有功、多少无功。PQ控制的名称就是这么来的——P给定有功功率,Q给定无功功率,电压和频率完全跟随电网。并网PQ控制的本质是“电流源”思维:电压已经由电网撑住,逆变器只需要把电流按指令注入电网。有功功率和无功功率可以分别通过d轴电流和q轴电流来独立控制,所以PQ控制往往由功率外环和电流内环组成。外环根据功率指令生成电流指令,内环快速跟踪电流指令,整套控制逻辑的核心就是“别和电网抢电压,把电流送准就行”。1.2 孤岛时为什么必须“自己撑场面”孤岛模式下,微电网与大电网断开,剩下的逆变器和负荷组成了一个独立小电网。此时没有任何外部电压源来撑住电压和频率,逆变器必须自己成为电压源。如果每台逆变器仍然按固定功率输出,负荷一变,电压就会飘,频率也会失去基准。下垂控制正是为了解决这个问题而生的。下垂控制的思想很朴素:模仿传统同步发电机的一次调频和一次调压特性。同步发电机带负载时,转速会因为电磁转矩增加而略微下降,对应到电网上就表现为频率下降;无功输出增大时,发电机内部压降增大,出口电压也会下降。下垂控制把这种“功率越大,频率/电压越低”的外特性做成一条下垂曲线,让多台逆变器在没有通信的情况下也能自动按容量分担负荷。1.3 我的控制板架构为什么选DSP+ARM双核分工我手搓这套系统时,控制板没有采用单芯片一把抓的方案,而是分成两块:一块浮点DSP负责所有实时控制相关的工作,另一块ARM单片机负责模式切换、状态上报、Modbus通信和人机交互。这样分的原因很简单,DSP的PWM外设和ADC采样做得比较顺手,中断响应也稳定,非常适合跑电流环、功率环这类微秒到毫秒级的控制任务;而ARM跑协议栈、显示逻辑、故障记录更灵活,两者分工不会互相干扰。实际使用中,DSP内部完成的是一组固定流程:ADC采样三相电压电流、坐标变换、功率计算、PI调节器、SVPWM调制,全部在PWM周期中断里完成。ARM则通过SPI或者串口与DSP交换指令和状态,比如上电时下发控制模式、孤岛指令、功率给定值;运行中接收DSP回传的实时功率和故障码。这样的架构调试起来非常方便,我在线改下垂系数时不需要反复烧写DSP程序,直接通过上位机经ARM写入即可。2. PQ控制落地:从三相瞬时功率到双闭环的整条链路PQ控制看起来简单,真正落地时第一个拦路虎是“离散化”和“坐标变换”。很多人把原理书看懂了,一上DSP发现电流波形不对、功率计算偏差巨大,多半就栽在这块。本节我把整条信号链路拆开讲。2.1 坐标变换与功率计算:不要跳过dq轴并网逆变器最常用的是三相三线拓扑,反馈量包括三相电网电压和三相电感电流。控制算法里不能直接对abc三相做PID,因为三相量都是正弦波,比例积分调节器对正弦参考的跟踪误差无法做到无静差。所以标准做法是先把abc转换成静止坐标系αβ,再通过锁相环得到的电网角度做Park变换,得到dq轴直流量。d轴有功,q轴无功,在dq坐标系下用PI控制就是纯粹对直流量做调节,逻辑清晰,也便于限幅。这里给出我用到的功率计算公式:有功功率 P = 1.5 × (vd × id + vq × iq)无功功率 Q = 1.5 × (vq × id − vd × iq)为什么是1.5倍?因为等幅值Park变换下,dq轴分量分别代表三相合成矢量的幅值投影,三相瞬时功率合成后正好是1.5倍的关系。实际调试时,先确认这个系数是否正确非常关键。我一开始在仿真里直接套用公式没注意系数,上实验台后功率显示比功率分析仪小了1/3,查了很久才发现是常数问题。2.2 电流内环设计:电感模型与带宽选择电流内环控制的是逆变器侧滤波电感L上的电流,忽略电阻时,电感电流微分方程为:vd − vg = L × (did/dt)其中vd是逆变器桥臂输出的d轴电压,vg是电网d轴电压。PI调节器输出直接作为电压指令,和电网电压前馈相加后,经过SVPWM得到开关信号。电流环的响应速度受两个因素限制:一是开关频率,二是电感量。PWM周期中断里跑一次完整的电流环,理论上最高控制带宽只能是开关频率的十分之一左右,否则离散化带来的相位滞后会让系统不稳定。我实际用的是15kHz的开关频率,电流环带宽设计在1kHz左右。这个感觉比较适中:动态响应足够快,SVPWM和采样延迟带来的相位裕度也还能接受。如果追求更低的电流纹波把开关频率降到10kHz以下,电流环带宽就要相应下调,否则波形会开始出现振荡。2.3 功率外环整定:为什么必须比电流环慢PQ控制的功率外环输出的是d轴和q轴电流指令。很多新手第一次调的时候,功率环和电流环带宽没有拉开距离,P指令一变,功率外环立刻输出一个很大的电流突变,电流内环还没跟上,结果功率波形严重振荡,甚至在限幅线附近来回撞。我给功率外环设计的带宽只有20Hz左右,比电流环的1kHz低了近两个数量级。这样功率环对电流环来说就是一个缓慢变化的参考源,电流内环始终能稳稳跟踪。判断带宽是否合适的办法也很简单:从半载阶跃到满载,观察有功功率响应是否平滑上升,如果出现明显的超调或者振铃,就把功率环的Kp按比例往下缩。3. 下垂控制落地:把逆变器调出同步发电机的“脾气”孤岛模式下,逆变器必须具备类似同步发电机的功率-频率外特性。这里不是简单地把输出电压和频率定死,而是要让它们随着输出功率自然“软”下去。3.1 P-f与Q-V下垂的物理含义下垂控制用两组方程来表达外特性:f = f0 − mp × (P − P0)V = V0 − nq × (Q − Q0)其中f0和V0是空载频率和空载电压,mp和nq是下垂系数。逆变器输出有功功率P越大,内部参考频率f就越低;输出无功Q越大,电压指令越低。从物理上理解,这相当于给逆变器串了一个无形的“阻尼”,负载增大时自动降低输出频率,就像同步发电机负载增加后转速自然下降一样。实际控制时,我会把下垂计算出的频率作为三相正弦波发生的频率基准,把下垂计算出的电压幅值作为正弦波幅值基准,再内嵌一个电压电流双闭环。也就是说,下垂控制直接生成电压参考,后面的电压环和电流环负责跟踪这个参考。这也是下垂控制和PQ控制在结构上的最大区别:PQ控制是电流源思维,下垂控制是电压源思维。3.2 多机并联功率均分:一次调频视角下垂控制最吸引人的地方是多台逆变器并联时不需要互相通信就能均分负荷。两台逆变器并联同一个母线,如果它们输出电压频率不一样,相位差会越来越大,产生很大的环流,最终把某台机器顶到电流保护。加了P-f下垂之后,这个矛盾会自动消除:A机频率偏高,说明它带载偏少,由下垂公式可知它的P相对低,于是频率偏高。B机带载偏多,频率偏低。在共同母线约束下,整个系统会自动稳定在一个中间频率,两台机器的频率一致,对应的有功就趋于一致。下垂系数需要结合允许的频率偏差和逆变器容量来算。例如一台额定有功20kW的逆变器,允许从空载到满载频率下降1Hz,那么mp = 1Hz / 20000W = 0.00005 Hz/W。实际我通常会留一点裕量,把允许频差设成0.8Hz左右,避免多机并联时过渡过程把频率拉得过低。3.3 虚拟阻抗:阻性线路的补偿手段下垂控制的理论推导通常基于线路阻抗呈感性的假设,也就是有功功率主要受相位差影响,无功功率主要受幅值差影响。但实际微电网里的低压线路往往是阻感混合的,如果直接把标准的P-f、Q-V下垂用上去,会出现有功和无功耦合,均流效果变差。解决办法之一是给控制环路叠加虚拟阻抗。原理很简单:在电压参考生成环节故意减去一个虚拟电感上的压降,让逆变器对外呈现出的等效输出阻抗更接近感性。实现上不需要真的串电感,只要在控制软件里计算:Vref_new = Vref − Rv × io − Lv × (dio/dt)其中Rv和Lv是虚拟电阻和虚拟电感。我调试中发现虚拟阻抗不能给太大,给大了空载电压会被“拉低”太多,带载时又需要额外的电压补偿,否则电压跌落超过允许范围。比较实用的做法是把虚拟阻抗对应压降限制在额定电压的5%以内,先用电阻分量稳住均流,再逐渐加感性分量改善有功无功解耦。4. 离并网无缝切换:最容易炸板的一环如果说PQ控制和下垂控制是两套“稳态功夫”,离并网切换就是最考验综合功力的时候。切换做不好,并网瞬间可能直接触发过流保护,孤岛切换瞬间也可能让母线电压被打得一塌糊涂。4.1 预同步到底在同步什么从孤岛切到并网之前,逆变器输出电压的幅值、频率、相位必须和电网基本一致。幅值可以通过PI调节电压参考慢慢贴近电网电压幅值,但相位是一个积分量,单纯调节频率很难保证绝对同步。我用的办法是加一个预同步环:实时检测电网电压角度和逆变器输出电压角度之差,把这个角度误差送到一个PI调节器,输出作为频率微调量,叠加到下垂频率基准上。这样逆变器输出频率会自动向电网频率“靠拢”,直到相位差趋于稳定。这个过程中有一个比较容易犯的错误:只盯着相位差收敛,不看相位差变化率。如果相位差已经到零但频率差还很大,锁相环依然会继续调整,结果锁定之后又滑过去,出现周期性的相位振荡。所以实际调试时我会同时对角度差和频率差做判断,两者都进入死区才认为预同步完成。4.2 模式状态机的实现细节离并网切换不能靠简单的中断标志位乱跳,需要设计一个清晰的状态机。我在DSP里维护了一个枚举类型的运行模式,IDLE表示待机,PASSYNC表示预同步,GRID_MODE表示并网PQ运行,ISO_MODE表示孤岛下垂运行。ARM下发切换指令后,DSP不是立即切换状态,而是先执行切入条件判断,比如并网切换必须先检测静态开关分合闸反馈并且完成预同步,孤岛切换必须先确认断网信号再封锁并网路径上的电流指令。状态机的核心代码如下:typedef enum { MODE_IDLE = 0, MODE_PASSYNC, MODE_GRID, MODE_ISO } RunMode; RunMode currentMode = MODE_IDLE; void ModeMachine(void) { switch (currentMode) { case MODE_IDLE: if (startSynCmd) currentMode = MODE_PASSYNC; break; case MODE_PASSYNC: if (phaseDiffThres && freqDiffThres) { closeGridSwitch(); currentMode = MODE_GRID; } break; case MODE_GRID: if (receiveIslandCmd) { openGridSwitch(); currentMode = MODE_ISO; } break; case MODE_ISO: break; default: currentMode = MODE_IDLE; break; } }这个状态机看起来简单,真正关键的是每个状态切换前后的控制量交接。比如从PASSYNC切换到GRID_MODE时,不能让预同步环输出的频率叠加量瞬间清零,要给它一个斜坡过渡,否则电压相位会突然跳变。4.3 切换瞬间如何避免电流冲击从孤岛切并网时,即使静态开关闭合,逆变器和电网之间仍有微小的电压差,这时会产生冲击电流。我的做法是在合闸瞬间让功率外环暂时封锁,改用电流内环直接跟踪一个很缓的电流指令斜坡,从零慢慢升到目标功率。这样虽然牺牲了一点切换速度,但能避免合闸冲击把保护打掉。从并网切孤岛时则反过来:并网模式下逆变器是被电网电压钳制的,切换瞬间电网突然消失,逆变器必须立刻切换成电压源模式。这时候原来的电流指令如果仍然有效,会导致直流母线电压骤升。我会在断网指令到达后,先把电流内环指令清掉,同时让电压参考从电网电压快照出发,平滑过渡到下功率参考生成的电压,保证调制波连续变化。实测中,这个“调制波保持连续”的细节才是避免过压保护的关键。5. 手搓过程中的踩坑记录:从波形异常到控制参量失稳这套系统从通电到稳定跑了整整两星期,中间碰到的问题比预想多得多。我挑几个最有代表性的写在这里,每一个都是我实际定位并解决的,希望后来的人少走弯路。5.1 功率环带宽太高造成的PWM限幅抖动第一版PQ控制跑起来后,并网功率一阶跃,PWM波形就出现周期性的限幅打嗝现象。用示波器抓输出电流,能看到正弦波顶部被削平,整个系统发闷。排查了很久才定位到是功率外环响应太快:功率环带宽设到了100Hz,负载突变时功率外环输出电流指令瞬间顶到限幅值,电流内环被这个饱和指令推到头,导致调制波持续撞上下限。解决办法分两步:第一步把功率环Kp和Ki大幅下调,带宽压到20Hz附近;第二步在功率环输出处加斜坡限幅,让电流指令的变化率被约束在一个物理可跟踪的范围内。改完之后,哪怕功率指令直接从0阶跃到额定值,电流波形也只是平滑上升,不再撞限幅。5.2 采样相序接反:Clark变换后角度错位第一次上电做并网实验,锁相环显示的电网角度怎么都对不上,功率计算出来有功无功完全乱跳。我用示波器分别看三相电压波形,幅值都正常,相位关系却错了:B相C相采样线序反了。硬件线序反了之后,Clark变换得到的αβ轴分量不是预期的相差90度,Park变换解出来的dq轴也就完全不对,后面的功率计算自然全错。这个坑的排查难度在于它不会报故障,系统只是“看起来错得很随机”。我是把AD采样值直接通过DSP的变量观察窗口打印出来,再和示波器波形逐点对比,才确认线序问题的。后来我在程序里加了一个上电自检函数,往三相电压上叠加强制直流偏置,观察Clark变换后直流分量的符号是否与预期一致,实现接线序的自诊断。5.3 传感器零点偏置带来的dq轴直流偏差电流霍尔传感器在零电流输出时往往不是真正的零电压,而是有一个微小的偏置电压。理论上这个偏置很小,但在d轴和q轴坐标变换后,它不会消失,而是变成一个叠加在dq轴电流上的直流偏差。这个偏差会导致并网时功率控制存在静态误差,看起来像是PI调节器没整定好,实际却是传感器测量层面的系统误差。我采用的补偿办法是在每个PWM周期中断开头,把电流采样前级通道短接,采集一组零点样本,然后在正常采样值中减去这个零点。软件校准后,dq轴电流的静态偏差从几十毫安降到几毫安,控制精度明显改善。如果是量产设备,还能做一阶标定,存衰减系数,但实验室平台用启动时自校准已经足够。5.4 锁相环被过零畸变干扰并网PQ控制要依赖锁相环输出准确的电网角度。实验室台架旁边有一台变频器负载,电网电压波形在过零点附近有明显的畸变,锁相环每次过零都会跳一个相位尖峰,导致dq轴电流发生周期性扰动。单纯加低通滤波会带来相位滞后,锁相环动态响应变差。我最终采用的是二阶巴特沃斯带通滤波加过零窗口检测,只在上一个过零附近的预测窗口内允许过零事件触发,其余位置的毛刺直接忽略。这样锁相环在畸变环境下的角度输出稳定了非常多。这个优化经验在我后来给工业现场设备调试时也被反复验证过,过零畸变问题在真实电网环境中非常普遍。6. 实测结果与可复现的控制器参数理论说得再好,最后还是得用示波器和功率分析仪说话。下面这几组实测结果都是我在实验室台架上得到的,虽然环境和参数具备一定特殊性,但变化趋势和整定思路是可以复用的。6.1 并网阶跃响应实测并网PQ控制模式下,我把有功指令从2kW直接阶跃到8kW,用功率分析仪记录有功功率阶跃曲线。由于功率环带宽只有20Hz,有功功率响应时间约为80ms左右,全程没有超调,电流内环跟踪平滑,无功基本保持原地不动。这说明d轴和q轴之间的解耦效果可以接受。阶跃响应的调试要点是看电流指令的变化速度。如果阶跃后电流波形出现“过冲再拉回来”的迹象,说明功率环Kp偏大,应先把Kp降下来再微调Ki。如果响应很慢但电流纹波正常,则说明带宽太低,可以适当提高Ki来缩短调节时间。6.2 孤岛负载突加实测孤岛下垂控制模式下,让逆变器单独带5kW阻性负载稳定运行,然后突然并上一个10kW负载。由于下垂系数按1Hz/20kW设计,理论上有功从5kW跳到15kW会引起频率下降0.5Hz。实测结果频率跌落约0.45Hz,电压幅值跌落约2%,在几个工频周期内恢复,负荷突加瞬间电流波形出现了一个可控的动态“让渡”,没有触发过流保护。这个实验是我在微电网领域最推荐做的验证项。它能一次性暴露出下垂系数是否过大、电压环响应速度是否足够、电流内环限幅逻辑是否合理等问题。如果负荷突加时频率跌得太狠,说明mp偏大;如果电压恢复太慢,说明电压环带宽偏低,或者虚拟阻抗设置过大。6.3 两台逆变器并联均流测试两台额定功率相同的逆变器在孤岛模式下并联带10kW负荷。不加虚拟阻抗时,两台机器的有功输出偏差约15%,主要是因为两台机器参数不可能完全一致,线缆阻抗也有差异。加上虚拟阻抗后,有功偏差降到5%以内。无功均流的情况类似,但受传感器偏移影响更明显,软件校零后无功偏差也从20%以上降到了8%左右。并联测试最需要注意的现象是环流。可以在两台逆变器输出之间串一个电流互感器测环流方向,如果环流随着负荷增大而明显增大,优先检查下垂系数是否一致、虚拟阻抗是否匹配、采样相位是否对齐。只要这三项都做好,环流通常都能被压到额定电流的5%以下。6.4 控制参数参考表下面是我的台架调试最终使用的参数,逆变器额定功率20kW,开关频率15kHz,滤波电感1.2mH,滤波电容15uF。参数仅作参考,实际使用时必须结合硬件重新整定。参数项设置值说明电流环带宽1kHz约为开关频率的1/15电流环Kp0.15对应电感阻抗约0.28Ω电流环Ki120消除稳态误差功率环带宽20Hz必须远低于电流环带宽功率环Kp2.0指令增益,实际按标幺值换算有功下垂系数mp0.00005 Hz/W满载频差约1Hz无功下垂系数nq0.005 V/Var满载电压差约5%虚拟阻抗Rv=0.15Ω, Lv=0.8mH限制压降不超过5%预同步比例积分Kp=0.5, Ki=20角度误差调节频率微调量这套参数在第一轮运行中表现稳定,后续更换功率等级时我基本按照“电流环带宽 = fsw/10到fsw/15”“功率环带宽 = 电流环带宽/50”的经验去调整,误差都不大。7. 再接一句实在话:进阶方向与动手建议整套微电网控制系统跑通之后,我最大的感受是:下垂控制和PQ控制单独实现都不难,难的是把它们揉进同一套系统里,让模式切换、参数交接、故障处理都成为可控的过程。7.1 自适应下垂系数与二次调频固定下垂系数的局限性在于,重载时频率偏差会比较大,影响电能质量。进阶方向是让下垂系数和空载参考值跟随负载情况自动修正。最简单的做法是根据当前有功功率查表修正频率参考值,让系统在重载时也能把频率“顶回”接近50Hz。更完整的方案则是加入一个上层能量管理系统,通过通信周期性下发微调量,实现类似于二次调频的效果。这层逻辑属于微电网能量管理的范畴,和本地下垂控制可以解耦设计,我在第二个版本中已经开始把两者分开做,调试起来清晰很多。7.2 从下垂控制到虚拟同步机的延伸如果觉得传统下垂控制的动态特性还不够“像发电机”,可以引入转动惯量、阻尼系数等参数,构成虚拟同步机控制。它的本质是在下垂控制频率环里加一个二阶振荡环节,让频率变化过程更平滑,对冲击负荷的抑制效果更好。我建议先把下垂控制调稳,再往上叠加虚拟惯量,否则两层参数耦合在一起,出现问题很难定位。7.3 给新手的从零到一建议最后分享一点个人体会。做微电网控制最容易犯的错误是步子迈得太大,一上来就同时调下垂、并网、切换,结果任何一项出了问题都分不清根源。我自己也是先把PQ控制在电网模拟源下跑通,再切到纯孤岛带阻性负载,最后才做离并网切换。每个环节都固定一个变量,剩下的用示波器逐项确认,这样即使遇到问题,也基本能一次定位到具体环节。如果只让我给一条建议,那就是多做“负载突加实验”。这类实验能在几秒钟内暴露出电流环、功率环、下垂参数、虚拟阻抗等几乎所有环节的问题,比长时间稳定运行后看波形有效得多。微电网控制这块没有太多黑魔法,把每个闭环带宽、每个限幅逻辑、每个状态切换条件都摸清楚,剩下的也就是耐心调参了。