三相逆变器并网,双PI控制。
三相逆变器并网系统搞过的人都知道,双PI控制这玩意儿就像电路里的老中医——虽然看起来传统,但关键时刻确实管用。咱们今天直接上干货,先说清楚这控制结构到底怎么搭的。
先看整体架构,典型的双闭环结构。外层是电压环,负责维持直流母线稳定;内层是电流环,直接怼电网电压做跟踪。这里有个骚操作:电流环在旋转坐标系下整定,dq轴分开控制。代码里实现Park变换的时候,三角函数计算得特别注意运算效率:
// Clarke变换 void clarke_transform(float ia, float ib, float ic, float *alpha, float *beta) { *alpha = ia; *beta = (ib - ic) * ONE_THIRD_SQRT3; // 1/√3系数预处理 } // Park变换实现 void park_transform(float alpha, float beta, float sin_wt, float cos_wt, float *d, float *q) { *d = alpha * cos_wt + beta * sin_wt; *q = beta * cos_wt - alpha * sin_wt; }这里用了系数预处理,把√3相关的计算放在编译阶段,实时运算时直接乘常数。搞过电机控制的兄弟肯定懂,这种细节对DSP的运算周期影响有多大。
电流环PI参数整定有个玄学公式:Kp = Lω,Ki = R/L。但实际操作中发现电网阻抗存在时,这个理论值得往上调20%左右。看这段中断服务程序里的PI计算:
// 电流环PI计算 void current_pi_update(PI_Type *pi, float set, float fb) { float err = set - fb; pi->integral += err * Ki_curr * Ts; // 抗积分饱和处理 if(pi->integral > LIMIT_UPPER) pi->integral = LIMIT_UPPER; else if(pi->integral < LIMIT_LOWER) pi->integral = LIMIT_LOWER; pi->output = err * Kp_curr + pi->integral; }注意那个Ts是采样周期,得和PWM频率严格对齐。之前有个项目因为ADC触发时序偏差了2us,直接导致并网电流出现6次谐波,调了三天才发现是这里的问题。
电压环的参数整定更考验耐心,通常把带宽做到电流环的1/10左右。有个取巧的办法:先断开电压环,用直流源供电调好电流环,再接上电压环慢慢往上加系数。调试时用示波器同时抓母线电压和并网电流,能看到母线电压纹波和电流THD的博弈过程。
最后说说锁相环,这是整个系统的命门。传统的SRF-PLL在电网不平衡时容易翻车,可以试试用双二阶广义积分器的DSOGI方案。不过对于大部分并网场景,下面这个增强型PLL够用了:
// 改进型PLL核心算法 void pll_update(float u_alpha, float u_beta, float *theta, float *freq) { float sin_theta, cos_theta; sincos(*theta, &sin_theta, &cos_theta); float u_d = u_alpha * cos_theta + u_beta * sin_theta; float u_q = u_beta * cos_theta - u_alpha * sin_theta; // PI调节频率偏差 *freq += pll_pi(u_q); *theta += (*freq) * Ts; // 角度归一化 if(*theta > PI) *theta -= 2*PI; else if(*theta < -PI) *theta += 2*PI; }注意这里的归一化处理,直接关系到角度跳变时会不会出现数值炸裂。曾经有个现场问题,并网瞬间DSP跑飞了,最后查出来是没做角度限幅导致浮点数溢出。
调通整个系统后,拿功率分析仪测效率,THD最好能压到3%以内。这时候再回头看双PI结构,虽然不像模型预测控制那么花哨,但胜在稳定可靠。不过要提醒新手的是,别死磕理论计算,实际并网时电网阻抗、线路滤波参数这些才是真正的拦路虎。多准备几组参数组合,现场调试时该试凑就得试凑,毕竟工程实践和仿真永远是两码事。