首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现恒功率负载(CPL)

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

Stack Overflow用户
提问于 2021-11-22 14:41:16
回答 1查看 259关注 0票数 0

如何实现恒功率负载?

考虑一下下面的电路。这包含一个恒定的功率负载,它表示电力消耗者(在本例中)持续减少了10W。如何创建一个以消耗10W的方式调整自身的model

我天真的做法如下:

代码语言:javascript
复制
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。所以我试着在电流为零时增加一个初始电阻。但是,这还是行不通的。我也会犯同样的错误。

代码语言:javascript
复制
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和类似的模拟非常陌生。因此,我非常感谢不仅是一个解决方案,而且我在结构上想错了什么,并且,如果可能的话,解释一下为什么我的代码不能工作。

非常感谢您提前!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-22 16:58:25

构建可靠的电力负荷(或源)模型不是一件容易的事情,所以这可能是Modelica标准库中没有这样一个模型的原因。

问题

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

无解

你可以很容易地进入这样一种情况,那就是不可能获得所要求的力量。您的示例很好地演示了两个麻烦的情况:

  1. 在电压为零的情况下,由于P=v*i的原因,不可能获得所需的功率。接近零的电压也是麻烦的,因为电流增加到无穷大。当然,当我们使用电流源时,电压也会出现类似的问题。(请注意,Modelica中没有无穷大,只有一个最大值:Modelica.Constants.inf__,通常定义为1e60)
  2. 串联对电源的电阻根据公式最大功率传递定理限制Pmax = v^2 / (4*Ri)的最大功率。 (不幸的是,英文wiki的文章并没有那么好。也请参阅https://en.wikipedia.org/wiki/Maximum_power_transfer_theorem#Calculus-based_proof_for_purely_resistive_circuits或参考https://de.wikipedia.org/wiki/Leistungsanpassung#Ohmsche_Widerst%C3%A4nde中类似的wiki文章)

多解

在串联电阻为1欧姆并请求10W的情况下,我们可以得到两种解决方案:

  • 负载时为P = v*i = 8.87V*1.12A = 10W,电阻器为1.12V
  • 负载时为P = v*i = 1.12V*8.87A = 10W,电阻器为8.87V

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

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

可用模型

有各种不同的实现,每一种都有各自的优缺点。我能从我的脑海中回忆起这两件事,但我想还有更多:

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

这一特殊情况的解决方案

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

  • 我们知道电压源的内阻。有了这个信息,我们就可以计算出最大功率。
  • 我们计算端子电压的电流。
  • 当电压为零时,我们必须避免除以零。请参阅下面的代码如何做到这一点。为了了解正在发生的事情,我建议阅读有关事件和预防事件以及操作符noEvent的内容。这个链接是一个很好的起点(实际上,整本书可以推荐给任何从Modelica开始的人)。

这是加载的代码:

代码语言:javascript
复制
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的电路中,结果如下:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70067571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档