当前位置:首页 > 毕业论文 基于matlab的智能PID控制器的设计与仿真
只简要介绍解决方法。Simulink模型编辑器里面除了可以放置Matlab已经定义的模块,还可以放置用户自定义的模块。
在 库 浏 览 器Simulink库User-Defined Function子 库 中,选 S-Function,拖 放 到 模 型 编辑 器 中。这是一个空白的模块,用户需要用Matlab程序语言编写 一个文件,程序里面描述用户需要定义的模块的功能。比如,在程序中编写计算动词PID动词推理过程,然后保存为VerbPID.m。在Simulink模型编辑器中,双击S-Function模块,填写S-Function Name为VerbPID.m。S-Function Parameters的填写与m文件中的变量定义有关。写好动词推理S-Function程序,在模型编辑器中设置好S-Function模块的属性,就实现了动词推理算法嵌入到Simulink仿真中。
4.6 本章小结
本章简要介绍电弧炉炉温控制系统以及Simulink仿真软件。用Simulink对该炉温进行传统PID和模糊PID 控制的仿真,由于动词PID推理模块嵌入到Simulink中工作量比较大,本章没有对其进行仿真,只是提出了一些解决思路。传统PID和模糊PID的仿真结果比较相似,模糊PID没有对传统PID控制效果进行明显的改良。
5 用Matlab编写程序进行各种PID控制仿真
本章用Matlab编写程序,对控制对象进行传统PID、模糊PID、动词PID控制仿真。被控对象仍然是第4章所用过的炉温控制系统。系统函数:
G(s)?0.1623?208se833s (5.1)
5.1 仿真程序流程图
三个Matlab仿真程序的结构组成都列于图5.1。程序开始设定控制目标r,对被控对象的输入信号u、以及kp、ki 、kd三个参数进行初始化,然后进入循环。由u作用于被控对象,对象的输出为yout,控制误差e=r-yout,误差变化率ec用e的差分表示,误差的积累用?e 表示。如果是传统PID控制器,因为PID三个参数不变,所以直接用加法求出新的控制信号u,进行下一轮循环。
图5.1流程图
智能PID控制器在求出e和ec之后,通过e和ec计算出?kp 、?ki和?kd,修正3个参数,然后再进行加法求出u,进入下一个循环。
模糊PID控制和动词PID控制仿真程序的不同在于修正3个PID参数的过程。模糊PID控制 器通过查找模糊规则表,然后K=K0+?K ;而动词规则分别求出e的动态与七个标准动词的相似度,?k是七个输出动词在相似度上的加权平均,然后修正参数:Knext = Kcurrent + ?k.
做完预设的循环次数后,每一仿真时刻的yout 、kp 、ki 、kd都有记录下来,此时画出这四个 变量随时间变化的曲线,以供研究比较。
5.2 关键环节的算法
图5.1已经描述了仿真程序的大纲,其中一些加法、减法、乘法、累加的环节,非常容易理解。只有两个环节的算法比较复杂。一个是由e和ec怎样计算出?kp 、?ki和?kd。针对模糊和动词控制规则,有相应的计算方法,在前面已经介绍。
另外一个比较复杂的环节是:如何由控制电压u得到输出yout。本文仿真通过用ode45求解微分方程的方法来完成。由于选取的控制对象具有时滞,在写微分方程时要对系统函数里时滞的部分进行近似,所以用到一个 “ PADE”指令,下面分别介绍。
5.2.1 ode45求解微分方程[7]
仿真程序中ode45的用法如下:
TSPAN = Ts*k:simuStep:Ts*(k+1); [t,x]=ode45(’dynsys’,TSPAN,x0); Ts是采样时间,simuStep=Ts/4;k是循环控制量,TSPAN把两次采样的时间间隔分成5个点。’dynsys’是一个文件名,dynsys.m文件里保存着描述被控对象特征的微分方程,这些微分方程以状态空间的形式给出,其中包含了输入u的影响。
˙ = Ax + Bu (5.2) xx是状态向量(列向量)。
TSPAN是ode45解微分方程组的几个时间点,x0是第一个时间点上系统的状态向量。这样进行ode45运算的结果,产生了5个t和5个x。t是一维的,
也就是5个时间点。x的维数与系统的阶数相当。系统的输出yout是x的几个分量以及输入u的线性组合。
y = C x + Du (5.3) A,B,C,D是一些矩阵。在已知系统的传递函数的情况下,在Matlab主窗口中输入
[A,B,C,D]=tf2ss([num],[den])
即可得到这4个矩阵。[num]和[den]是系统函数的分子和分母。
5.2.2 对延时的近似处理
对无时滞的系统进行仿真时,直接用tf2ss写出微分方程,再写进dynsys.m文件,在主程序里循环调用ode45函数即可进行仿真。本文选用的被控对象具有208秒的延迟。 无法直接根据系统函数写出微分方程。我采用的解决方法是,先把e?τ s用Matlab指令“[NUM,DEN]=PADE(τ,N)“近似成一个N阶的不带指数 的系统函数(N越大近似越精确)。再和原来系统函数中非时滞的部分相乘,得到总的系统函数,然后用TF2SS写出微分方程。
针对上面的系统,在Matlab中输入“[NUM,DEN]=PADE(208,1)”得到
?208sNUM=[-1 0.0096],DEN=[1 0.0096],即e用
?s?0.0096s?0.0096代替,则:
G(s)??s?0.00960.1623?0.1623s?0.001558??s?0.0096833s833s2?7.997s(5.4)
5.3 传统PID控制仿真
5.3.1 调整过程及结果
仿真程序的编写遵循图5.1的上、中部分。设置PID三个参数,并进行调节。PID参数的选取,在第4.3.2小节已经提过。先令ki=0,kd=0,找到一个kp;然后ki从0开始增大,kp适当减小,ki增大到能消除静态误差就行了,不必一直调大。最后调kd,再对kp、kd进行联合调整。
调节三个参数,观察在传统PID控制下误差e的变化情况。误差e的变化如图5.2所示。当Kp=80、Ki=0.01、Kd=800时,误差变化如图所示。
本文后面要拿智能PID控制的效果来和传统PID控制做比较,为了统一标准,智能PID控 制结果都和传统PID来做对比。在响应时间差不多的情况下,看智能PID对超调和振荡的控制效果如何。在这里传统PID控制超调量为15%。
图5.2: 传统PID控制误差e变化
共分享92篇相关文档