双馈风力发电机DFIG矢量控制仿真模型【附说明文档】 控制策略: 定子侧电压定向矢量控制: PMW变换器采用双闭环控制,电压外环主要控制直流侧电压,直流电压给定与反馈的误差经过 PI 调节器计算给定,其值决定有功功率的大小,符号决定有功功率的方向。 电流内环按照电压外环输出的电流指令进行电流控制,为实现功率因数为1的整流或逆变,iq=0; 转子侧磁链定向矢量控制: 整个系统为双闭环结构,外环为功率控制环,根据有功功率、无功功率给定和经过计算得出的反馈值进行比较后输入 PI 控制器;内环为转子电流控制环,电流误差经调节后输出电压控制量,叠加udr 、uqr前馈电压补偿量,再经 SVPWM 调制后产生所需的励磁电压和电流。 详细配套说明文档:包含详细DFIG的数学建模、坐标变换、转子与定子控制策略分析、仿真模型搭建、 仿真分析等等 非常详细!

最近在搞双馈风电机的仿真,发现DFIG的矢量控制真不是一般的烧脑。尤其是定子侧电压定向和转子侧磁链定向这两套控制策略,搞明白它们怎么协同工作简直要把坐标变换矩阵刻进DNA里。今天就结合仿真模型里的关键代码,跟大家唠唠这两个闭环到底是怎么转起来的。

先说定子侧的电压外环,这玩意儿主要任务是稳住直流母线电压。在Simulink里实现的时候,PI控制器参数调得我想砸键盘------Kp=0.5,Ki=120这种参数组合你敢信?不过实测下来还真能稳住电压。看这段电压环代码:
matlab
function Ud_ref = Voltage_outer_loop(Udc_ref, Udc_fb)
persistent integrator;
if isempty(integrator)
integrator = 0;
end
error = Udc_ref - Udc_fb;
proportional = 0.5 * error;
integrator = integrator + 120 * error * 0.0001; % 采样时间0.1ms
Ud_ref = proportional + integrator;
end
这里有个坑爹的细节:积分项必须做抗饱和处理,不然直流电压超调能飙到120%。内环电流控制更刺激,iq=0这个设定直接锁死了无功功率通道。仿真时发现定子电流d轴分量死活跟设定值差5%,后来发现是坐标变换时转子角度补偿量没算滑差频率。

转子侧控制才是重头戏。功率外环那个前馈补偿太关键了,少了这个仿真直接发散。看这段转子电流内环的SVPWM调制代码:
cpp
void SVPWM_Gen(float u_alpha, float u_beta) {
float T0 = (Ts - T1 - T2)/2;
// 扇区判断
int sector = (u_beta > 0) ? 1 : 6;
if(fabs(u_alpha) > fabs(u_beta)){
sector += (u_alpha > 0) ? 0 : 3;
} else {
sector += (u_beta > 0) ? 2 : 5;
}
// 作用时间计算
float X = sqrt(3)*u_beta*Ts/Udc;
float Y = (sqrt(3)*u_beta + 3*u_alpha)*Ts/(2*Udc);
float Z = (-sqrt(3)*u_beta + 3*u_alpha)*Ts/(2*Udc);
// 具体实现省略...
}
仿真时发现这个模块发热量异常,原来是零矢量分配时间T0计算时没考虑死区时间。后来在模型里加了最小脉宽限制才解决。不过最要命的还是磁链观测器,用电压模型法算出来的磁链总有高频毛刺,最后换成电流模型才稳定下来。

整套仿真跑起来后,看动态响应曲线特别有意思:突加负载时直流电压跌了8%但1秒内恢复,转子电流跟踪误差小于3%。不过理论上的功率解耦在实际仿真里总有10%左右的耦合量,后来发现是前馈补偿量没考虑定子电阻压降。

搞完这个模型最大收获是:别迷信教科书上的理想坐标变换,实际仿真中漏掉一个旋转因子或者角度补偿项,整个系统分分钟教你做人。下次准备试试改进型滑模控制,看看能不能把动态响应再提20%。有同样在搞风电仿真的老铁,欢迎交流调参心得------特别是那该死的PI参数整定,简直玄学!


