【问题标题】:How to make a block force a simulation step to occur at a given time?如何使块强制模拟步骤在给定时间发生?
【发布时间】:2015-02-16 06:28:52
【问题描述】:

问题

有没有办法让块强制模拟步骤在给定时间发生?

例如,即使用户在他的模型中选择了 1e-2 的模拟步长(固定步长模拟),如果他使用我的模块,那么模拟步长将在 2.5e-4 秒发生?


上下文

我正在开发一个 PWM 发生器模块 [1],我最初的方法有一个大问题。为了更好地解释这一点,我画了一个简单的图表:

黑色信号是我希望模块生成的信号(方形信号,周期 T,在 D.T 秒内的值为 1,其中 D 是介于 0 和 1 之间的常数)。蓝色星号是在模拟步骤时间采样的点(假设固定步骤模拟)。蓝线是模块实际生成的,因为在第 5 步之后和第 6 步之前,值 1 将保持不变。

这种步时间与信号值变化的不同步会在信号的平均值中引入误差(因为它会保持比预期为 1 的时间更长的时间)。在最坏的情况下,这个错误将是 s/T,其中 s 是模拟步长,T 是要生成的信号的周期(我可以发布推导,但我不知道如何在这里写方程这很简单)。解决此问题的直接方法是减小步长,但这并不总是可行的,具体取决于 PWM 的周期。

如果有办法强制模拟步骤发生在 0、D.T 和 T 秒,那么蓝色和黑色信号的平均值将完全相同。

如果需要进一步说明,请说出来。提前致谢。

1 - PWM 是一个周期性方波信号,在其周期内,在给定的时间内保持值为 1,其余时间保持值为 0,因此具有介于 0 和 1 之间的任意平均值。

【问题讨论】:

  • 在模拟时间之间没有发生任何事情......那......绝对荒谬。计算机模拟时间 t1,然后是 t2,然后是 t3……如果你想做你想做的事,那么你需要在你想要的t 中创建一个模拟 ste。它必须被模拟。
  • 完美,问题就是这样:“如何使块强制模拟步骤(...)”。
  • 我不认为你可以改变模拟配置。您可以手动设置模拟配置并让模块在 Tn 时间内执行某些操作,因此 simulink 将模拟那个时间,因为我遇到了一些事情。但是我不确定。检查你是否可以这样做。
  • 固定步长模拟就是这样,固定步长。你不能改变它,期间。如果您希望求解器检测 PWM 信号的变化,则需要使用启用过零检测的可变步长求解器。

标签: matlab simulink pwm


【解决方案1】:

正如我在 cmets 中提到的,如果您使用的是固定步长求解器,那么步长在模拟期间是固定的。因此,您(或用户)需要在开始模拟之前对其进行适当设置,以确保捕获所有效果。恐怕没有其他办法了。

唯一的其他选择是使用variable-step solver,它将根据系统的动态动态调整步长,并启用过零检测以捕获 PWM 切换时的精确瞬间。有关过零的更多详细信息,请参阅documentation

【讨论】:

  • 一直想知道求解器窗格中的“过零检测”是什么,哈哈!你不仅解决了我的问题,还让我学到了一些新的、非常有用的东西。再次感谢 am304。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2023-03-31
  • 2019-10-05
  • 1970-01-01
相关资源
最近更新 更多