所以我试图模拟下图所示的系统。我之前在ODE45中使用Matlab进行了建模,但由于某种原因,我继续使用以下代码获得一个奇怪的输出。我不确定是不是因为我输入了if((Vin-Vd-Vc)/ Ll> = 0),这有助于防止任何电流在反向偏置时在二极管的错误方向上流动。 / p>
我试图附上图片,但我的代表不够高,真的是男士们?所以我必须对其进行描述。
source -> Inductor(Ll) -> diode -> Capacitor -> ground
|->Inductor(Lline)->resistor(Rf) -> ground
感谢任何帮助!
function dy = ThreeLamp(t,y)
I1 = y(1);
I2 = y(2);
Vc = y(3);
Is = 1E-15; % these are parameters for the diode
n = 1.05;
Vt = .025;
D = 24; % this number is from 0 to 50
f = 100E3; % this is the frequency of the input waveform
Ll = 5E-7;
Lline = 5.3E-6;
C = 10E-6;
Rf = 10;
Vin = (465/2)*(6/266)*square(2*pi*f*t,D); % Input voltage waveform
if( Vin < 0 )
Vin = 0; % get rid of negative half cycle
end
%%
Vd = n*Vt*log(I1/Is + 1)/log(10); % This is the voltage across the diode
if( (Vin - Vd - Vc)/Ll >= 0 ) % Is the diode conducting when forward biased?
dy(1) = (Vin - Vd - Vc)/Ll; % Sounds good, what is the current?
else
dy(1) = 0; % force current to 0 when reversed biased
end
dy(2) = (Vc - I2*Rf)/Lline; % KCL for second loop
dy(3) = (I1 - I2)/C; % Voltage on cap
dy = dy'; % ODE45 likes output to be in columns
end
% [t, y] = ode45('ThreeLamp',[0 .001],[0 0 0 ]);
答案 0 :(得分:1)
我最近有一个完全相同的问题,试图建模DCDC升压转换器。就像am304所说,一个僵硬的求解器可能是这个问题的解决方案。二极管打开/关闭时的不连续性非常严重,可变步长求解器很难提取。我发现固定步骤求解器适用于我的应用程序。
修改强>
然而,正如霍格勒尔提出的那样,没有公差收敛或其他数字安全网,所以你必须非常仔细地解释你的输出。使用非常小的步长并且对输出非常明智,当输出具有预期的形状时,通常会缓解这个问题。然而,当试图解决僵硬的系统时,必须注意霍希勒的警告。我发现,即使固定步骤方法发生故障,对解决方案的深入了解也是值得的。
结束编辑
此外,您可能还想检查通过二极管的电流方向。我发现我会得到一个大的反向偏置电流流过二极管,这是不可能的!
我设置了电路模型here。这是一张照片,这是正确的拓扑吗? HTH!
修改强>
好的,既然我理解了电路,我可以帮助使用导数函数ThreeLamp
。如果二极管反向偏置,则通过电感器的电流不能流过二极管。因此,二极管导通/不导通点处的电流变化很大,以便在切断通过电感器的同时切断通过二极管的电流。我认为这个问题喜欢第25行的电感电流计算。