0

我的主要目标是为传递函数 (5.551* s^2) 制作一个控制器,使用根轨迹我制作了如下所示的控制器。使用 step () 函数分析工作区中的阶跃响应我得到了一个令人满意的答案,但是当我尝试将此答案传输到 Simulink 时,响应的行为不同,例如在稳定状态下,我希望获得尽可能小的错误在 Workspace 但在 Simulink 中有一个很大的错误,由于某种原因,在 8 秒时间(Simulink 仿真时间)有一个“跳跃”,如显示屏上所示,当我更改仿真时间时,这个“跳跃”发生了变化我也不知道为什么在一种环境和另一种环境之间会发生这些变化。

Workspace 中的阶跃响应 Workspace 中的阶跃响应

Simulink 中的阶跃响应,仿真时间为 8 秒 Simulink 中的阶跃响应,仿真时间为 8 秒

Simulink 中的阶跃响应,仿真时间为 12 秒 Simulink 中的阶跃响应,仿真时间为 12 秒

Simulink 控制器 Simulink 控制器

Simulink 传递函数 Simulink 传递函数

我希望制作一个误差小于 5% 且超调小于 25% 的控制器,所以我首先制作了一个带有两个积分器的控制器,以消除零对源的影响,然后我在控制器上添加了两个积分器源尝试减少误差,零在 -0.652 我为此使用了角度条件和 0.240251 的增益我使用了模块化条件。

我没想到会出现最优化的行为,只是它具有满足强加条件的最小条件,所以我并不担心源头上的四个积分器。

我尝试使用 sisotool() 命令,以为我做错了什么,但是当我模拟 Simulink 时结果发生了很大变化,所以我放弃了这个选项并保留了我使用根轨迹制作的控制器。

4

1 回答 1

1

您的 MATLAB 代码和 Simulink 模型不同,因此结果也不同。

MATLAB 允许您定义非因果对象模型P_ball,然后形成因果闭环CL,从而生成其阶跃响应。

Simulink 不允许您对非因果模块进行建模(即使整个模型是因果的),因此不允许您实现s^2,我认为这就是您使用两个微分模块的原因。但是数值微分与拉普拉斯s算子不同。

您必须通过合并两个大到不会对整体模拟产生不利影响的极点来使植物具有因果关系。因此,您的工厂模型需要类似于 5.551*s^2/((s/1000 + 1)(s/1000 + 1)) ,可以使用Transfer Function分子为 5.551*1000*1000*[1 0 0] 和 [1 2*1000 1000*1000] 的分母。

或者,您可以只执行PID * P_ball(手动执行 2 个零/极点消除),这是因果关系。

于 2019-08-26T05:47:55.147 回答