模糊PID控制器参数自整定报告
0引言:
PID控制作为一种典型的传统反馈控制器,以其结构简单,易于实现和鲁棒性好等特点在工业过程控制中广泛应用。但是传统PID控制器的参数需要被控对象的数学模型来进行调整,而控制过程中的滞后性、控制参数的非线性和高阶陛增加了对Kp、Ki、Kd三个参数的调整难度。所以对确定的控制系统通过复杂的计算后,其三个参数的值在控制运行中一般是固定的,不易进行在线的调整。而在实际的工业生产过程中,许多被控对象受到负荷变化和干扰因素的作用,其对象参数的特征和结构易发生改变,这就需要对参数进行动态的调整。同样因为被控系统的复杂性和不确定性,其精确的数学模型难以建立,甚至无法建立模型,所以需要利用模糊控制技术等方法来解决。模糊PID无需考虑被控系统的模型,而只根据其误差e和误差变化ec等检测数据来自适应调整Kp、Ki、Kd的值,最终使被控系统处于稳定工作态。
1、PID控制器:
PID参数模糊自整定是找出PID中3个参数与e和ec之间的模糊关系,在运行过不断检测e和ec,根据模糊控制原理来对3个参数进行在线修改,以满足不同e和ec时对控制参数的不同要求,而使被控对象有良好的动稳态性能。从系统的稳定性、响应速度、超调量和稳态精度等方面来考虑Kp,Ki,Kd的作用如下:
(1)比例系数Kp的作用是:加快系统的响应速度,提高系统的调节精度。Kp越大,系统的响应速度越快,系统的调节精度越高,但易产生超调,甚至导致系统不稳定;Kp取值过小,则会降低调节精度,使响应速度缓慢,从而延长调节时间,使系统静态、动态特性
.
.
变坏。
(2)积分作用系数Ki的作用是:消除系统的稳态误差。Ki越大,系统的稳态误差消除越快,但Ki过大,在响应过程的初期会产生积分饱和现象,从而引起响应过程的较大超调;若Ki过小,将使系统稳态误差难以消除,影响系统的调节精度。
(3)微分作用系数Kd的作用是:改善系统的动态特性。其作用主要是能反应偏差信号的变化趋势,并能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
2、 模糊PID参数自整定控制器设计
2.1控制器结构:
2.2模糊化
由PID各个参数对系统的影响得到:
.
.
(a)当误差|e|较大时,说明误差的绝对值较大,不论误差的变化趋势如何,都应该考虑控制器的Kp取较大值,以提高响应的快速性;而为防止因为|ec|瞬时过大,kd应该取较小的值;为控制超调,ki也应该取值很小。
(b)当误差|e|在中等大小时,为保证系统的相应速度并控制超调,应减小Kp,Ki值应增大,Kd应适中。
(c)当误差|e|较小时,为保证系统具有良好的稳态特性,应加大Kp、Ki的取值,同时为避免产生振荡,Kd的取值应该和|ec|联系起来。
模糊PID控制根据系统运行的不同状态,考虑Kp、Ki、Kd三者的关联,根据工程经验设计模糊整定这三个参数,选择输入语言变量为误差e和偏差变化率ec,语言变量值取{NB,NM,NS,0,PS,PM,PB}七个模糊值;选择输出语言变量为△Kp,△Ki,△Kd语言变量值也取{NB,NM,NS,0,PS,PM,PB}七个模糊值,建立△Kp,△Ki,△Kd的模糊规则表如下表1、表2、表3。
.
.
2.3设计模糊控制器
在MATLAB命令空间输入fuzzy,弹出对话框,然后进行设置,如图:
.
.
设置为两输入三输出结构。
根据经验设置输入输出的隶属度函数都为:
.
.
设置完隶属度函数后,按照上述三个模糊规则表格设置模糊规则,如图
.
.
设置完毕后,保存文件“zhinengkongz.fis”至磁盘,留给仿真调用,生成的文件为:
[System]
Name='zhinengkongz'
Type='mamdani'
Version=2.0
NumInputs=2
.
.
NumOutputs=3
NumRules=49
AndMethod='min'
OrMethod='max'
ImpMethod='min'
AggMethod='max'
DefuzzMethod='centroid'
[Input1]
Name='e'
Range=[-3 3]
NumMFs=7
MF1='nb':'zmf',[-3 -1]
MF2='nm':'trimf',[-3 -2 0]
.
.
MF3='ns':'trimf',[-3 -1 1]
MF4='zo':'trimf',[-2 0 2]
MF5='ps':'trimf',[-1 1 3]
MF6='pm':'trimf',[0 2 3]
MF7='pb':'smf',[1 3]
[Input2]
Name='ec'
Range=[-3 3]
NumMFs=7
MF1='nb':'zmf',[-3 -1]
MF2='nm':'trimf',[-3 -2 0]
MF3='ns':'trimf',[-3 -1 1]
MF4='zo':'trimf',[-2 0 2]
.
.
MF5='ps':'trimf',[-1 1 3]
MF6='pm':'trimf',[0 2 3]
MF7='pb':'smf',[1 3]
[Output1]
Name='kp'
Range=[-3 3]
NumMFs=7
MF1='nb':'zmf',[-3 -1]
MF2='nm':'trimf',[-3 -2 0]
MF3='ns':'trimf',[-3 -1 1]
MF4='zo':'trimf',[-2 0 2]
MF5='ps':'trimf',[-1 1 3]
MF6='pm':'trimf',[0 2 3]
.
.
MF7='pb':'smf',[1 3]
[Output2]
Name='ki'
Range=[-3 3]
NumMFs=7
MF1='nb':'zmf',[-3 -1]
MF2='nm':'trimf',[-3 -2 0]
MF3='ns':'trimf',[-3 -1 1]
MF4='zo':'trimf',[-2 0 2]
MF5='ps':'trimf',[-1 1 3]
MF6='pm':'trimf',[0 2 3]
MF7='pb':'smf',[1 3]
[Output3]
.
.
Name='kd'
Range=[-3 3]
NumMFs=7
MF1='nb':'zmf',[-3 -1]
MF2='nm':'trimf',[-3 -2 0]
MF3='ns':'trimf',[-3 -1 1]
MF4='zo':'trimf',[-2 0 2]
MF5='ps':'trimf',[-1 1 3]
MF6='pm':'trimf',[0 2 3]
MF7='pb':'smf',[1 3]
[Rules]
1 1, 7 1 5 (1) : 1
1 2, 7 1 3 (1) : 1
.
.
1 3, 6 2 1 (1) : 1
1 4, 6 5 1 (1) : 1
1 5, 5 3 1 (1) : 1
1 6, 4 4 2 (1) : 1
1 7, 4 4 5 (1) : 1
2 1, 7 1 5 (1) : 1
2 2, 7 1 3 (1) : 1
2 3, 6 2 1 (1) : 1
2 4, 5 3 2 (1) : 1
2 5, 5 3 2 (1) : 1
2 6, 4 4 3 (1) : 1
2 7, 3 4 4 (1) : 1
3 1, 6 1 4 (1) : 1
.
.
3 2, 6 2 3 (1) : 1
3 3, 6 3 2 (1) : 1
3 4, 5 3 2 (1) : 1
3 5, 4 4 3 (1) : 1
3 6, 3 5 3 (1) : 1
3 7, 3 5 4 (1) : 1
4 1, 6 2 4 (1) : 1
4 2, 6 2 3 (1) : 1
4 3, 5 3 3 (1) : 1
4 4, 4 4 3 (1) : 1
4 5, 3 5 3 (1) : 1
4 6, 2 6 3 (1) : 1
4 7, 2 6 4 (1) : 1
.
.
5 1, 5 2 4 (1) : 1
5 2, 5 3 4 (1) : 1
5 3, 4 4 4 (1) : 1
5 4, 3 5 4 (1) : 1
5 5, 3 5 4 (1) : 1
5 6, 2 6 4 (1) : 1
5 7, 2 7 4 (1) : 1
6 1, 5 4 7 (1) : 1
6 2, 4 4 3 (1) : 1
6 3, 3 5 5 (1) : 1
6 4, 2 5 5 (1) : 1
6 5, 2 6 5 (1) : 1
6 6, 2 7 5 (1) : 1
.
.
6 7, 1 7 7 (1) : 1
7 1, 4 4 7 (1) : 1
7 2, 4 4 6 (1) : 1
7 3, 2 5 6 (1) : 1
7 4, 2 6 6 (1) : 1
7 5, 2 6 5 (1) : 1
7 6, 1 7 5 (1) : 1
7 7, 1 7 7 (1) : 1
3、 系统仿真
设控制对象为:G(s)=25/s^2+6s+25
通过程序(含注释)仿真如下:
clear all;
clc;
.
.
a=readfis('zhinengkongz'); %读取设定的FIS模糊控制器
ts=0.001; %抽样时间为1MS
sys=tf(25,[1,6,25]); %构造系统G(s)=25/s^2+6s+25
dsys=c2d(sys,ts,'z'); %离散化
[num,den]=tfdata(dsys,'v'); %得到系数
%设置系统初值
u1=0;u2=0;
y1=0;y2=0;
x=[0,0,0];
e1=0;ec1=0;
Kp0=0.3;Ki0=2;Kd0=1;
for k=1:5000; %仿真5S
time(k)=k*ts;
.
.
r(k)=1; %输入阶跃信号
fpid=evalfis([e1,ec1],a); %模糊推理
Kp(k)=Kp0+fpid(1); %得到新的参数
Ki(k)=Ki0+fpid(2);
Kd(k)=Kd0+fpid(3);
u(k)=Kp(k)*x(1)+Ki(k)*x(2)+Kd(k)*x(3); %PID输出
y(k)=-den(2)*y1-den(3)*y2+num(1)*u(k)+num(2)*u1+num(3)*u2;%系统输出
e(k)=r(k)-y(k); %计算误差
u2=u1;u1=u(k); %更新数据
y2=y1;y1=y(k);
x(1)=e(k); %对应KP
x(2)=x(2)+e(k)*ts; %对应KI
x(3)=e(k)-e1; %对应KD
.
.
ec1=e(k)-e1; %重新计算ec
e1=e(k); %重新计算e
end
%打印输出
figure(1);
plot(time,y,'g',time,r,'r');
grid on;
xlabel('time(s)');ylabel( 'y ');
figure(2)
plot(time,Kp,'r');
xlabel('time(s)');ylabel( 'Kp ');
grid on;
figure(3)
.
plot(time,Ki,'b');
grid on;
xlabel('time(s)');ylabel( 'Ki ');
figure(4)
plot(time,Kd,'g');
xlabel('time(s)');ylabel( 'Kd ');
grid on;
结果显示:
1.41.210.8 y0.60.40.2000.511.522.533.544.55time(s)输入输出对比图 .
.
0.50.40.30.20.1 pK0-0.1-0.2-0.3-0.400.511.522.533.544.55time(s)
Kp自动调整曲线
.
2.82.72.62.52.4Ki Kd 10.90.80.70.60.52.32.22.121.91.800.511.522.5time(s)33.544.550.40.30.2
00.511.522.5time(s)33.544.55
Ki自动调整曲线 Kd自动调整曲线
可以看出,系统输出具有较好的超调量和调节时间,没有稳态误差,达到了理想的效果。
4、 结束语
模糊自调整PID是在常规PID算法的基础上,通过计算当前系统误差e和误差变化ec,利用模糊推理系统(FIS),查询模糊矩阵表进行参数调整,该方法实现简单、方便易用,对实际控制有重要指导意义。同时,利用模糊逻辑工具箱设计的模糊控制器,能方便地修改输入输出的论域、模糊子集、隶属度函数及模糊控制规则等,突破了传统方法需要编制大量程序的做法。用模糊推理的方法在动态过程中改变PID的参数,能够发挥两种控制方式的优点,克服两者的缺点,提高控制质量。
.
因篇幅问题不能全部显示,请点此查看更多更全内容