倒立摆在dssim-app中的实现

倒立摆在dssim中实现

之前在simulink中搭建过倒立摆,将系统在dssim-app中搭建出来,来熟悉dssim。过程中主要有两个困难。

1.pid的实现

  1. simulink中使用pid模块直接进行控制,dssim中不含该模块,但是该模块比较简单,通过gain、integration、derivative模块就可以拼出来。
  2. gain有现成的,integration和derivative都可以用传递函数来得到。
  3. 传递函数模块有限制条件:分母的阶必须大于分子的阶,微分的传递函数是s/1,不能直接得到。用传递函数s/0.001s+1来近似,在simulink中测试发现可以用。

2.代数环问题

  1. 之前在simulink中搞得倒立摆的建模中,因为引入了杆和车之间的相互作用力P和N作为中间量分析,建模产生了代数环。
  2. 先用了在P和N后边加入延时的方法来消除代数环,但是使用delay后会在运行时出现报错,在某些点不收敛。
  3. 最后还是把小车的模型改了,看了别人的文章,有线性化的直线一阶倒立摆模型。可以计算出外力和角度的传递函数,用它来作为小车模型。
  4. 此时一些参数为

    小车M=0.5kg 杆 m=0.2kg 摩擦系数 b=0.1N/m/sec 杆长 l=0.3m 转动惯量I=0.006kg*m^2

结果

  1. 在simulink和dssim-app中都搭建了新的倒立摆模型
  2. 结果如下

加入延时消除代数环

  1. 由于只有传递函数看不出来物理过程,又对消除代数环做了尝试
  2. 在P和N之后加入传递函数1000/s+1000,来达到延时的目的
  3. 由于simulink可以解这个代数环,所以在simulink中没有加入该延时,在dssim中加入延时观察了图像,发现几乎相同,解决了代数环问题

参考

https://max.book118.com/html/2017/1017/137333541.shtm https://microcontrollerslab.com/pid-controller-design-simulink/


本文章使用limfx的vscode插件快速发布