首页 文章

Simulink中的三阶速率限制器?如何生成平滑的触发信号?

提问于
浏览
3

First for those, who are not familiar with Simulink, there is a imaginable outside-Simulink partial solution:

我需要创建一个满足以下条件的向量:

  • 已知初始值 a1

  • 已知最终 Value a2

  • 它具有预定义的步长,但长度不是预先确定的

  • 整个范围内的一阶导数仅限于 v_max resp . -v_max

  • 整个范围内的二阶导数仅限于 a_max resp . -a_max

  • 整个范围内的三阶导数仅限于 j_max resp . -j_max

  • 在第一点和最后一点所有衍生物都是 zero .

在你问“你到目前为止尝试了什么”之前,我只是有想法在Simulink之外解决它,我尝试了下面的所有内容;)但也许你们有一个好主意,而我一直在研究我自己的解决方案 .


我想基于Simulink中的触发信号生成平滑的斜坡信号(三阶导数限制) .

为了获得触发步骤,我创建了一个触发子系统来传播触发输出 . 它看起来像这样:

enter image description here

但实际上我并不想要一步,我需要一个非常平滑的斜坡,有限的衍 生产环境 品直到第3阶 . 背后的数学是:

displacement: x
speed: v = x'
acceleration: a = v' = x''
jerk: j = a' = v'' = x'''

(如果这看起来很熟悉,我曾经有过一次非常similar question . 我想到了它的赏金,但在对问题进行必要的编辑后,两个答案都会无效)

由于只有1阶速率限制器,我使用了两个导数和一个双重积分来解决我的问题 . 但是有一个市长的缺点,我不能再忽视了 . 为了便于说明,我选择了相对较大的步长0.1 .

The complete minimal example (Fixed Step, stepsize: 0.1, ode4): Download here

enter image description here

It can be seen, that the signal not even reaches the intended step height of 10 and furthermore is not constant at the end.

在整个模型的开发过程中,这种方法对于小步长来说足够令人满意 . 但是我达到了我真正需要平滑坡道的程度 . 这意味着我需要一个最终恒定的信号,其值恰好是由步高增益指定的值 .

我已经花了好几天时间来解决这个问题,并希望现在能够提供一些帮助 .

我的一些想法:

  • 动态地增加步长超过实际所需值并使最终输出饱和 . 如果速率限制,步长和模拟步长不灵活,则可能找到令人满意的解决方案 . 但由于一切都必须灵活,因此有太多情况会违反加速度和加加速度限制 .

  • 我试图使用 Matlab function 块并编写我自己的3阶速率限制器 . 虽然我觉得触发时刻似乎是可能的,但我没有解决方法如何在斜坡结束时平滑"deceleration" . 此外,我需要C编译器,这将使我很难在其他系统上使用我的模型没有问题 . (至少我是这么认为的 . )

The solver can not be changed siginificantly (either ode3 or ode4) and a fixed step size is mandatory (0.00001 to 0.01).


Currently used, not really useful approach:

enter image description here

对于 dynamic amplification 1.07 我得到以下输出(所有值都在其极限上标准化):
enter image description here
虽然位移看起来不错,但违反加速度限制是非常有害的 .

对于 dynamic amplification 1.05 ,我得到以下输出(所有值在其极限上标准化):
enter image description here
加速度保持在其边界,但位移未达到预期值 . (图中并不是很清楚)混蛋仍然很大 . (我可以忍受,但这不好)


So it appears to me that a inside-Simulink solutions is far from reality. Any ideas how to create a well-behaving custom function block?


在模拟开始之前,已知模拟步长,步长和速率限制 . (但是我有很多这些触发了连续平滑的斜坡,它应该提供事件离散控制) . 因此,我可以设想在simulink外创建整个平滑斜坡并将其保存为 timeseries 对象,并在激活触发器时将其附加到当前信号上 .

3 回答

  • 0

    长度> 1的积分链不稳定!

    有一个涉及轨迹规划的巨大研究领域 . 最简单的方法可能是使用FIR滤波器(Biagotti等)或实现在线轨迹规划器(Ezair等2014 / Knierim等2012) .

  • 0

    你看到的问题是因为差异不是很好 . 取差异可放大模拟中存在的数值 .

    如果你尝试应用实际步骤,那么混蛋总是很大 . 我想对于你的方法,最好以相反的方式工作:即用你的步骤实现一个加速度,加速度和速度 .

    我认为你正在寻找类似ref3块的东西:http://www.dct.tue.nl/home_of_ref3.htm注意网站上的免责声明,并且使用它有点麻烦 .

  • 1

    一种简单(尚未改进)的方法是使用速率限制器,然后使用带有滤波器的状态空间模型 . 从过滤器中获得速度,然后您可以应用速率限制器 . 继续使用速率限制器和过滤器,直到获得所需的曲线 .

    否则,您可以使用runge kutta公式或有限差分来提出更高阶的数值限制器 . 然而有人指出,他们可能会受到不良条件的影响 .

    我通常做的是使用一个速率限制器和三阶滤波器,并调整时间常数(1个三极),以满足我的需求 . 这很好用,尤其是

相关问题