基于simulink的模糊PID控制例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于simulink的模糊PID控制例⼦
1模糊PID
⽤命令Fuzzy打开模糊控制⼯具箱。

Anfisedit打开⾃适应神经模糊控制器,它⽤给定的输⼊输出数据建个⼀个模糊推理系统,并⽤⼀个反向传播或者与最⼩⼆乘法结合的来完成⾪属函数的调节。

Surfview(newfis)可以打开表⾯视图窗⼝8.1 模糊PID 串联型
新建⼀个simulink模型同时拖⼊⼀个fuzzy logic controller 模块,双击输⼊已经保存的fis模糊控制器的名字。

由于这个控制模块只有⼀个输⼊端⼝,需要⽤到mux模块。

模糊结合PID,当输出误差较⼤时,⽤模糊校正,当较⼩时,⽤PID校正。

8.2 模糊⾃适应PID
(1)PID 参数模糊⾃整定的原则
PID 调节器的控制规律为: u( k) = Kp e( k) + Ki Σe( i) + Kd ec( k)
其中: Kp 为⽐例系数; Ki 为积分系数; Kd为微分系数; e( k) 、ec( k) 分别为偏差和偏差变化率.模糊⾃整定PID 参数的⽬的是使参数Kp 、Ki 、Kd随着e 和ec 的变化⽽⾃⾏调整,故应⾸先建⽴它们间的关系. 根据实际经验,参数Kp 、Ki 、Kd在不同的e 和ec
下的⾃调整要满⾜如下调整原则:
(1) 当e 较⼤时,为加快系统的响应速度,防⽌因开始时e 的瞬间变⼤可能会引起的微分溢出,应取较⼤的Kp 和较⼩的Kd ,同时由于积分作⽤太强会使系统超调加⼤,因⽽要对积分作⽤加以限制,通常取较⼩的Ki值;
(2) 当 e 中等⼤⼩时,为减⼩系统的超调量, 保证⼀定的响应速度, Kp 应适当减⼩;同时Kd 和Ki的取值⼤⼩要适中;
(3) 当e 较⼩时,为了减⼩稳态误差, Kp 与Ki 应取得⼤些,为了避免输出响应在设定值附近振荡,同时考虑系统的抗⼲扰性能,Kd 值的选择根据|ec|值较⼤时,Kd 取较⼩值,通常Kd 为中等⼤⼩。

同时按照需要,将输⼊语⾔变量E 和EC 分为7 个模糊⼦集,分别⽤语⾔值正⼤( PB) 、正中( PM) 、正⼩( PS) 、零(Z) 、负⼩(NS) 、负中(NM) 、负⼤(NB) 来表⽰,它们的⾪属函数为⾼斯型(gaussmf) ,输出语⾔变量Kp′、Ki′、Kd′⽤语⾔值⼩正⼤( PB) 、正中( PM) 、正⼩( PS) 、零(Z) 、负⼩(NS) 、负中(NM) 、负⼤(NB) 来表⽰⾪属函数为三⾓型(t rimf) ,
⽅法⼆:
图-1模糊⾃适应simulink模型根据各模糊⼦集的⾪属度赋值表和各参数模糊控制模型,应⽤模糊合成推理设计分数阶PID参数的模糊矩阵表,算出参数代⼊下式计算:
Kp=Kp0+(E,EC)p;Ki=Ki0+(E,EC)I;Kd=Kd0+(E,EC)d
式中:Kp0、Ki0、Kd0为PID参数的初始设计值,由传统的PID控制器的参数整定⽅法设计。

(E,EC)p、(E,EC)i、
(E,EC)d即(Δ Kp, Δ Ki, Δ Kd)为模糊控制器的3个输出,可根据被控对象的状态⾃动调整PID三个控制参数的取值。

PID控制器部分
例⼦:下⾯是⼀个例⼦⼯业控制常见例⼦⼆阶惯性加纯滞后环节,传递函数为
)
1)(1(21++=-s T s T e G s
s τ,T1=1,T2=1,τ=0.3,模糊化因⼦,ke=kec=0.01;解模糊因⼦k1=0.5,k2=0.05,k3=0.05;PID 初始值Kp0=6.5;Ki0=1;Kd0=3.5;设置采样频率为0.01s 。

建⽴simulink 系统模型如下。

其中模糊控制器变量论域取[-6 6]. 同时按照需要,将输⼊语⾔变量 E 和EC 分为7 个模糊⼦集,分别⽤语⾔值正⼤( PB) 、正中( PM) 、正⼩( PS) 、零(Z) 、负⼩(NS) 、负中(NM) 、负⼤(NB)
来表⽰。

对于模糊控制规则按照上⾯的表选取。

图5-绿⾊线为fuzzy_pid输出,红⾊线为常规PID输出
四、量化因⼦Ke,Kec,Ku 该如何确定?
有个⼀般的公式:Ke=n/e(max),Kec=m/ec(max),Ku=u(max)/l。

n,m,l 分别为Ke,Kec,Ku 的量化等级,⼀般可取6 或7。

e(max),ec(max),u(max)分别为误差,误差变化率,控制输出的论域。

不过通过我实际的调试,有时候这些公式并不好使。

所以我⼀般都采⽤凑试法,根
据你的经验,先确定Ku,这个直接关系着你的输出是发散的还是收敛的。

再确定Ke,这
个直接关系着输出的稳态误差响应。

最后确定Kec,前⾯两个参数确定好了,这个应该也
不会难了。

五、在仿真的时候会出现刚开始仿真的时候时间进度很慢,从e-10 次⽅等等开始,该怎么
解决?
这时候肯定会有许多⼈跳出来说是步长的问题,等你改完步长,能运⾏了,⼀看结果,惨
不忍睹!我只能说这个情况有可能是你的参数有错误,但如果各项参数是正确的前提下,
你可以在⽅框图⾥⾯加饱和输出模块或者改变阶跃信号的sample time,让不从
0 开始或者加个延迟模块或者加零阶保持器看看……
六、仿真到⼀半的时候仿真不动了是什么原因?
仿真图形很有可能发散了,加个零阶保持器,饱和输出模块看看效果。

改变Ke,Kec,
Ku 的参数。

七、仿真图形怎么反了?
把Ku ⾥⾯的参数改变⼀下符号,⽐如说从正变为负。

模糊PID 的话改变Kp 的就可以。

⼋、还有⼈问我为什么有的⾃适应模糊PID ⾥有相加的模块⽽有的没有?
相加的是与PID 的初值相加。

最后出来的各项参数Kp=△Kp+Kp0,Ki=△Ki+Ki0,Kd=△
Kd+Kd0。

Kp0,Ki0,Kd0 分别为PID 的初值。

有的系统并没有设定PID 的初值。

九、我照着论⽂搭建的,什么都是正确的,为什么最后就是结果不对?
你修改下参数或者重新搭建⼀遍。

哪⼀点出了点⼩问题,都有可能导致失败。

相关文档
最新文档