我的主要目标是使用根轨迹为传递函数(5.551 * s ^ 2)制造控制器,使控制器如下所示。使用step()函数分析工作区中的阶跃响应,我得到了满意的答案,但是当我尝试将此答案传递给Simulink时,响应的行为有所不同,例如在稳定状态下,我希望误差尽可能小在Workspace中,但是在Simulink中有一个大错误,并且由于某种原因,在8秒的时间(Simulink模拟时间)上会出现“跳跃”,如显示屏上所示,当我更改模拟时间时,该“跳跃”也会发生变化我也不知道为什么在一个环境和另一个环境之间会发生这些变化。
工作区中的阶跃响应
Simulink中的阶跃响应具有8s的仿真
Simulink中的阶跃响应具有12s的仿真
Simulink控制器
Simulink传递功能
我希望制造一个误差小于5%且过冲小于25%的控制器,因此我首先制造了一个具有两个积分器的控制器,以消除零对源的影响,之后我又添加了两个源上的积分器尝试减小误差,为此,在-0.652处为零,我使用了角度条件,在增益为0.240251处,我采用了模块化条件。
我没想到可能会有最优化的行为,只是它具有满足所施加条件的最低条件,因此我不必担心例如源头上的四个积分器。
我尝试使用sisotool()命令以为我做错了什么,但是当我模拟Simulink时结果改变了很多,所以我放弃了该选项,并保留了使用根轨迹制作的控制器。
答案 0 :(得分:1)
您的MATLAB代码和Simulink模型不相同,因此结果也不同。
MATLAB允许您定义非因果工厂模型P_ball
,然后形成因果闭环CL
,可以生成其阶跃响应。
Simulink不允许您对非因果块进行建模(即使整体模型是因果关系的),因此也不允许您实现s^2
,这是您使用两个微分块的原因。但是数值微分与Laplace s
运算符不同。
您必须通过合并两个极点来使植物成为因果关系,这两个极点足够大,不会对整体模拟产生不利影响。因此,您的工厂模型需要是类似5.551 * s ^ 2 /((s / 1000 + 1)(s / 1000 + 1))的模型,可以使用带有分子数为5.551 * 1000的Transfer Function
块来实现* 1000 * [1 0 0]和分母为[1 2 * 1000 1000 * 1000]。
或者,您也可以实施因果关系的PID * P_ball
(在其中手动执行2个零极点抵消)。