STM32
直播中

江左盟

8年用户 1369经验值
擅长:电源/新能源
私信 关注
[问答]

如何对simth滞后系统预估器编程进行matlab仿真呢

一般的大滞后系统常用的控制方法有哪几种?

怎样去实现一种simth滞后系统预估器编程呢?
如何对simth滞后系统预估器编程进行matlab仿真呢?

回帖(1)

李旗挺

2021-11-19 10:33:10
  simth预估器编程实现
  在控制理论中,滞后指在时间上被控变量的变化落后于扰动变化。也就是被控对象有一个纯滞后的环节,相当于延时。然而经过经过延时后,系统会变得难以控制,会出现滞后,超调等现象。
  一般的大滞后系统常用的控制方法有:史密斯预估器、模糊控制、预测函数控制。史密斯预估器较为简单易实现。现设有传递函数:
  
  可知其滞后为10s
  一、matlab仿真:
  
  1、首先看其开环输出:
  
  可以看到红线为滞后输出,10s后才输出。
  2、闭环输出:
  
  
  可以看到超调非常严重,需要加入控制器对其进行控制。
  3、加入史密斯预估器
  
  
  黄线为阶跃输入,红线为输出,蓝线为控制量,可以看到在滞后10s后,系统输出稳定,说明控制较好,幅值可以通过改变pid参数调节。
  二、程序实现
  理论上的分析,现在要将其具体实现,这里我通过两个单片机对其进行模拟仿真。
  1、传递函数c语言实现
  这里的涉及的理论较多,我只说说思路。S域的传递函数想要用计算机实现,则必须将其进行离散化,将s域函数离散化,离散化后得到其差分方程,再用单片机编程实现。
  stm32模拟传递函数:
  
  2、史密斯预估控制器c语言实现:
  将上面的matlab图中控制器模型离散化,具体步骤如下:
  
  然后就可以用单片机编程实现了:
  
  
  三、调试注意
  1、注意,这里可以采用单个单片机实现,也可以采用两个单片机实现。将控制器、传递函数部分放在CPU1中,然后通过通信(AD/DA、串口或其他)将CPU1的输出量反馈给CPU2,CPU2又通过通信将该输出量反馈给CPU1,相当于CPU2只是用来反馈输出量的。
  2、用单片机仿跟仿真有出入,特别是pid参数,仿真用p为1波形就很完美了,然而实际中p为1将发散,参数需要自己摸索。我用的pi控制,p为0.02,i为0.001.
  3、最终的效果:将阶跃设为1,10s后输出为接近1,且波形有非常微小的震荡。传递函数写的是按照计算次数来写的,若要严格的时间控制,可将其放在定时器中。
  4、本文选取的被控对象较为简单,为一阶滞后系统;若将其改为二阶系统,则需要将传递函数、控制器重新设计并离散化,可以用matlab先仿真再写代码。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分