双馈发电机控制1:转子侧变换器控制
软件版本:MATLAB Simulink R2022b
参考资料:
- DFIM Tutorial 1 - Implementation and Control of a DFIM in Matlab-Simulink
- H. Abu-Rub, M. Malinowski, and K. Al-Haddad, Power Electronics for Renewable Energy Systems, Transportation and Industrial Applications. John Wiley & Sons, 2014.
- G. Abad, J. Lopez, M. Rodriguez, L. Marroyo, and G. Iwanski, Doubly Fed Induction Machine: Modeling and Control for Wind Energy Generation. John Wiley & Sons, 2011.
最近需要学一下风机。书看不下去,正好有这个教程,先搭个仿真试试。双馈异步发电机DFIG常用于风力发电,学一下最基本的控制方法。
这是照着上面这个教程搭的仿真模型。主要是介绍整个仿真模型和一些觉得值得记录的地方。大部分按照视频操作,少部分按照自己的想法做了一点调整,最后仿真结果是相同的。
第一部分,转子侧变换器的控制。
主电路和顶层
DFIG系统主电路如下。第一部分中只看Rotor-side VSC,所以把Vbus用直流源代替,删掉Grid-side VSC。
仿真的顶层,包括:
- 主电路,只有转子侧变换器RSC和恒定的直流母线电压
- 控制器。控制器的输入量都加了一阶保持器。
- 电机模型,普通的异步电机。恒定转矩输入(仿真期间可以暂停,改值,再继续,看暂态波形)
- 示波器,观察关键波形。这里from模块对应的goto模块设为global,就可以从任意位置连出来,还挺方便。
三相电源,接在定子。
三相测量模块,这是定子侧,测量电网电压Vs和电流Is。
这里 use a label,就可以直接用同名的from模块连到示波器,也挺方便。
Universal bridge,三相两电平变换器。
电机模块
对电机的测量,电机模型输出很多信号,使用bus selector 选了其中几个。
PWM调制模块,输入调制波幅值范围[-1,1]
,输出PWM信号,频率为fsw。——以前习惯自己搭,这个其实也挺好用的。
控制部分
输入:
- 转速参考,给一个定值
- d轴电流参考,设置为0
- 转子电流Ir
- 定子电压Vs
- 电机的机械角度theta
- 电机机械角速度omega_m (其实就是theta的微分)
输出:三相两电平变换器的调制信号Vabc_ref
控制策略
参考下图的控制策略,打叉的部分不使用,也就是无功功率不可调节。
所以最终是3个PI控制器:
- 速度外环speed PI
- d轴电流环id PI,不调节无功功率,只设置idr=0
- q轴电流环iq PI
其他模块包括:
- 坐标变换,abc-αβ0-dq(这个图里面是叫做abc-DQ-dq,感觉怪怪的,是电机相关的都用这个标注吗?)
- 角度计算,仿真中用了最基本的方法实现。
- dq解耦,其实就是基于电机的模型,给id和iq控制器的输出加上了一点东西
仿真模型
对应控制策略,仿真模型如下。
坐标变换都用了matlab function(在R2022b中不推荐用视频教程中的Fcn模块
)——不过应该也有现成的模块能用。
PI控制器
主要就是注意PI输出的限幅。
speed PI
id PI
iq PI
坐标变换
见后面的代码。
角度计算
参考下面这个框图,用atan2直接计算角度,而不使用PLL。
dq解耦
其实就是控制策略图中的两个公式,用模块搭的。
仿真波形
改了下转速和转矩的参考值,验证了几个控制器正常工作。
实际应用不会采用这样控制,没有做软启动,暂态电流太大。
(右上角的V stator比例不对,因为之前电压测量模块设置错了,实际幅值应该是略小于600V (线电压690V,换算得到相电压幅值 690/sqrt(3)*sqrt(2)=563V
,懒得重做了。。)
涉及的代码
初始化
clear
% DFIG parameters -> Rotor parameters referred to the stator side
f = 50; % Stator frequency (Hz)
Ps = 2e6; % Rated stator power (W)
n = 1500; % Rated rotational speed (rev/min)
Vs = 690; % Rated stator voltage (V)
Is = 1760; % Rated stator current (A)
Tem = 12732; % Rated torque (N.m)
p=2; % Pole pair
u = 1/3; % Stator/rotor turns ratio
Vr = 2070; % Rated rotor voltage (non-reached) (V)
smax = 1/3; % Maximum slip
Vr_stator = (Vr*smax) *u; % Rated rotor voltage referred to stator (V)
Rs = 2.6e-3; % Stator resistance(ohm)
Lsi = 0.087e-3; % Leakage inductance (stator & rotor) (H)
Lm = 2.5e-3; % Magnetizing inductance (H)
Rr = 2.9e-3; % Rotor resistance referred to stator (ohm)
Ls = Lm + Lsi; % Stator inductance (H)
Lr = Lm + Lsi; % Rotor inductance (H)
Vbus = Vr_stator*sqrt(2); % DC de bus voltge referred to stator (V)
sigma = 1-Lm^2/(Ls*Lr);
Fs = Vs*sqrt(2/3)/(2*pi*f); % Stator Flux (aprox.) (Wb)
J = 127; % Inertia
D = 1e-3;
fsw = 4e3;
Ts = 1/fsw/50;
kT = -1.5*p*(Lm/Ls)*Fs; % kT, coef of output of the speed controller
tau_i = (sigma*Lr)/Rr;
tau_n = 0.05;
wni = 100*(1/tau_i);
wnn = 1/tau_n;
kp_id = (2*wni*sigma*Lr)-Rr;
kp_iq = kp_id;
ki_id = (wni^2)*Lr*sigma;
ki_iq = ki_id;
kp_n = (2*wnn*J)/p; %kp_n = (2*wnn*J)/p;
ki_n = (wnn^2)*J/p; %ki_n = (wnn^2)*J/p;
abc-αβ0
function ab0 = abc_to_ab0(abc)
ab0 = zeros(2,1);
ab0(1) = 2/3 * (abc(1) - abc(2)/2 - abc(3)/2);
ab0(2) = 2/3 * ( (sqrt(3)/2)*abc(2) - (sqrt(3)/2)*abc(3));
end
αβ0-dq
function dq = ab0_to_dq(ab0, theta)
dq = zeros(2,1);
dq(1) = cos(theta)*ab0(1) + sin(theta)*ab0(2);
dq(2) = -sin(theta)*ab0(1) + cos(theta)*ab0(2);
end
dq-αβ0
function ab0 = dq_to_ab0(dq, theta)
ab0 = zeros(2,1);
ab0(1) = dq(1) * cos(theta) - dq(2) * sin(theta);
ab0(2) = dq(1) * sin(theta) + dq(2) * cos(theta);
end
αβ0-abc
function abc = ab0_to_abc(ab0)
abc = zeros(3,1);
abc(1) = ab0(1);
abc(2) = -1/2 * ab0(1) + sqrt(3)/2 * ab0(2);
abc(3) = -1/2 * ab0(1) - sqrt(3)/2 * ab0(2);
end
剩余的一些问题
目前还有一些没理解的地方,感觉现在可以去看书了。
- 双馈电机的模型和dq解耦原理
- 角度计算模块的原理
- 各个PI控制器参数选择