如何实现恒功率负载 (CPL)

How to implement a constant power load (CPL)

如何实现恒功率负载?


考虑以下电路。这包含一个恒定的功率负载,代表耗电量(在此示例中)持续减少 10 W 的耗电量。我如何创建一个 model 以消耗 10 W 的方式进行自我调整?

我天真的做法如下:

model ConstantPowerLoad
  extends Modelica.Electrical.Analog.Interfaces.OnePin;
  parameter Modelica.Units.SI.Power P "The constant power value";
equation
  v * p.i = P;
end ConstantPowerLoad;

这没有用,我收到消息“无法使用牛顿求解器求解非线性系统”。可能这是因为当前 i 在启动时为零导致 v * 0 = Pv, P > 0。所以我尝试在电流为零时添加一个初始电阻。但是,这仍然行不通。我得到同样的错误。

model ConstantPowerLoad
  extends Modelica.Electrical.Analog.Interfaces.OnePin;
  parameter Modelica.Units.SI.Power P "The constant power value";
  parameter Modelica.Units.SI.Resistance R_internal = 1e-3 "A dummy resistance on startup";
equation 
  if p.i == 0.0 then
    R_internal * p.i = v;
  else
    v * p.i = P;
  end if;
end ConstantPowerLoad;

我玩了很多ifs和whens但我就是不明白运行.


我对 Modelica 和此类模拟非常陌生。因此,我真的很感激,不仅是解决方案,还有我在结构上思考的错误,如果可能的话,解释为什么我的代码不起作用。

非常感谢您!

构建可靠的电力负载(或电源)模型并非易事,这可能是 Modelica 标准库中没有此类模型的原因。

问题

电源模型可能根本没有解决方案。在其他情况下有两种解决方案。

无解

您很容易陷入无法汲取请求的力量的境地。您的示例很好地演示了两个麻烦的案例:

  1. 由于P=v*i,电压为零时无法获得所需的功率。随着电流增加到无穷大,接近于零的电压也很麻烦。当然,当我们使用电流源时,电压也会出现类似的问题。 (注意Modelica中没有无穷大,只有一个可能的最大值:Modelica.Constants.inf,通常定义为1e60)

  2. 根据公式Pmax = v^2 / (4*Ri)
    ,由于Maximum power transfer theorem,与电源串联的电阻限制了最大功率 (不幸的是英文 wiki 文章不是那么好。另见 here or refer to the equivalent wiki article in German

多个解决方案

串联一个1欧姆的电阻,要求10W,我们可以得到两个解决方案:

  • P = v*i = 8.87V*1.12A = 10W 在负载上,因此在电阻器上为 1.12V
  • P = v*i = 1.12V*8.87A = 10W 在负载上,因此在电阻器上为 8.87V

两种解决方案都是正确的。你得到哪一个取决于模拟是如何初始化的。

这里需要start属性。它初始化状态变量并为非线性迭代设置猜测值(这就是我们这里所拥有的)。

可用型号

有多种可用的实现方式,每种都有各自的优缺点。我可以从脑海中回忆起这两个,但我想还有更多:

    DymolaModels 库中的
  • DC_Power(免费,随 Dymola 一起提供):其核心使用与 P=v*i 类似的设置。它试图通过将电流和功率限制在一定电压水平以下来规避各种故障。
  • Loads SmartElectricDrives 库中的软件包(商业):使用 PI 控制器来获取请求的功率

此特定案例的解决方案

在您的具体示例中,我们可以利用一些事实并为有限范围的应用构建电源:

  • 我们知道电压源的内阻。有了功率接收器中可用的这些信息,我们就可以计算出最大功率。
  • 我们根据端子处的电压计算电流
  • 当电压为零时,我们必须避免被零除。请参阅下面的代码如何执行此操作。要了解发生了什么,我建议阅读事件和预防事件以及运算符 noEventThis link 是一个很好的起点(事实上,整本书都可以推荐给任何开始使用 Modelica 的人)。

这是加载的代码:

model Pload
  import Modelica.Units.SI;
  extends Modelica.Electrical.Analog.Interfaces.OnePort;
  parameter SI.Power Pdes=10 "Desired constant power to draw";
  parameter SI.Resistance Ri=1 "Inner resistance of connected circuit";
  SI.Power Pload "Maximum power, either limited by Pdes or by maximum power theorem";
equation 
  Pload = min(Pdes, v^2/(4*Ri));
  i = if noEvent(abs(v)>0) then Pload/v else 0;
end Pload;

请注意,此模型只是一个起点。它仅在我们知道 Ri 并且不处理存在两个解决方案的事实时可用。

将其应用于具有 10V 电压斜坡的电路会得到以下结果: