搜索
您的当前位置:首页正文

模糊PID控制器设计

来源:二三娱乐
.

模糊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的参数,能够发挥两种控制方式的优点,克服两者的缺点,提高控制质量。

.

因篇幅问题不能全部显示,请点此查看更多更全内容

Top