我是OpenModelica的初学者,试图为具有恒定电压和电流限制的DC / DC转换器建模。基本上,应该假设输出端提供恒定电压,直到达到最大电流为止,然后通过降低电压来保持该电流。
到目前为止,这是我代码的等式部分:
xlim
每当我进行仿真时,电压和电流的结果看起来都像我期望的那样,因此计算似乎是正确的。但是,我得到警告
已达到最大迭代次数,但未找到根。
有人可以向我解释吗?谢谢!
答案 0 :(得分:2)
但是,我得到警告
maximum number of iteration reached, but no root found.
有人可以向我解释吗?谢谢!
这样做的原因是,积分器无法求解您公式化的方程组。
潜在的问题是,您试图更改连续状态(此处为n.i
)而没有告知积分器。
如果您想在事件中更改状态变量的值,则需要使用reinit-operator,该参数仅在when公式内。
您可以执行类似于以下模型的操作:
package minExample
model DC_DC "Voltage source with current limiting"
import SI = Modelica.SIunits;
parameter SI.Voltage Vnom(start=1) "Value of nominal output voltage";
parameter SI.Current Inom(start=1) "Value for maximum continous output current";
parameter SI.Current Imax(start=1) "Value for maximum output current";
Modelica.Electrical.Analog.Interfaces.PositivePin p "Positive electrical pin";
Modelica.Electrical.Analog.Interfaces.NegativePin n "Negative electrical pin";
SI.Voltage v "Voltage drop of the two pins (= p.v - n.v)";
equation
when n.i > Imax then
reinit(n.i,Imax);
end when;
if n.i > Imax then
v = 0;
else
Vnom = p.v - n.v;
end if;
// Connect equations
0 = p.i + n.i;
v = p.v - n.v;
end DC_DC;
model test
Modelica.Electrical.Analog.Basic.Ground ground1;
Modelica.Electrical.Analog.Basic.Inductor inductor1(L = 0.5);
DC_DC dc_dc1;
equation
connect(inductor1.n, ground1.p);
connect(dc_dc1.n, ground1.p);
connect(inductor1.p, dc_dc1.p);
end test;
end minExample;
答案 1 :(得分:2)
不幸的是,您必须了解s参数化才能解决此问题,例如在Modelica.Electrical.Analog.Ideal.IdealDiode。
除了进行单元检查外,您还应该执行以下操作:
Real s;
equation
v = p.v - n.v;
if s<0 then
s=v-Vnom;
n.i=Imax;
else
Vnom = v;
s=Imax-n.i;
end if;
0 = p.i + n.i;
我相信最初的参考文献是https://ieeexplore.ieee.org/document/808640
通过添加新变量并重写if-equations,也可以使用这种样式来重写此模型
Boolean saturatedCurrent=s<0;
equation
v-vNom=if saturatedCurrent then s else 0;
Imax-n.i=if saturatedCurrent then 0 else s;