一、实验目的:1. 了解常规PID 控制器和常规模糊控制器; 2. 设计出常规PID 控制器和常规模糊控制器; 3. 通过实验比较两种控制器的控制效果; 二、常规PID 控制器的实验原理和实验步骤:1. 常规PID 的基本原理在控制系统中,调节器常用的控制规律是PID 控制。
常规PID 控制系统结构框图如图1所示。
图1 PID 控制系统框图PID 调节器是一种线性调节器,它根据给定值r(t)与实际输出值c(t)构成的控制偏差:e(t)=r(t)-c(t)将偏差的比例(P )、积分(I )、微分(D )、通过线性组合构成控制量,对控制对象进行控制。
在模拟调节系统中PID 控制算法的模拟表达式为(1):1()()[()()]t p dide t u t k e t e t dt T T dt=++⎰(1)式中:u(t)——调节器执行机构的输出信号 Kp ——比例系数 Ti ——积分时间Td ——微分时间为了用计算机实现(1)式,必须将其离散化,离散化后其增量型控制式为: 110112201[]nn n n p n k s dn n n n k ise e u k e e T T u a e a e a e T T -----==++=+-+∑式中:012(1)2(1)s d p isd p s ppsT T a k T T T a k T T a k T =++=+=Ts 为采样周期。
2.PID 的控制的作用及特点PID 调节器各校正环节的作用是这样的: (1) 比例环节(P ):即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差。
(2)积分环节(I ):主要用于消除静差,提高系统的无关度,Ti 积分时间常数越小,积分作用越强。
(3)微分环节(D ):能反应偏差信号的变化均势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一肯效的早期修正信号,从而加快系统的动作速度,减小调节时间。
PID 调节的主要特点是:结构灵活,不仅可以用常规的PID 调节,而且可根据系统要求,采用各种PID 的变种,如PI ,PD 控制,不完全微分控制,积分分离式PID 控制等。
3. 简单介绍二种PID 的参数整定方法(1) Zieler-Nichols 最早提出了PID 参数整定方法,即Z-N 。
它是令控制器如式(2)根据对象(一阶惯性加纯迟延,如式(3))的阶跃响应曲线,获取对象时间常数T ,增益K ,及纯迟延时间τ,再利用相应的经验公式求得。
此法简单易行,但参数还需进一步调整。
通过改进,推出了广义Z-N 法,大大提高了参数整定质量。
Z-N 法一般用于手工计算和设置控制器初值。
1()(1)c p di G s k T s T s=++(2) 0()1s e Sk G s T τ-=+ (3)2()[(,)]n n J t e t dt θθ∞=⎰(4) 这是由Atherton 提出的最优整定方法,它以式(4)为最优控制指标。
其中(,)e t θ为调节器入口偏差e=R-Y ;n 根据需要取值,按/T τ来搜索一组p k ,i T ,d T 的取值,并使n J 为最小,此时的控制器参数为优。
(2) 庄敏霞与Atherton 针对各种指标函数得出了最优PID 参数指定的算法,考虑下面给出的指标通式: 2()[(,)]n n J t e t dt θθ∞=⎰(5) 式中e(t)——进入PID 控制器的误差信号。
根据设定点信号的最优自整定算法,对式(5)中给出的最优指标,着重考虑3种情况,即: n=0,简记为ISE 准则; n=1,简记为ISTE 准则;n=2,简记为2IST E 准则。
已知的数学模型为式子:1()1sP G s eT s τ-=+11.()bp pa k kT τ=, 22()pi pT T a b T τ=+ , 33()d p pT a T b T τ=4. 针对模型0.51()101sG s es -=+两种方法的整定结果为:(1)Z-N 法:24p k = 1i T = 0.25d T =1()240.25G s s s=++(3) ISTE 法:9.99()15.40.34G s s s=++5. 经过零阶保持器Z 变换离散化被控对象变为:561()0.0050.005()10.99Y z zzU z z---+=-()0.99(1)0.05(5)0.005y k y k u k u k =---+- 所以程序为: clear all;close all;%增量式PID 控制; ts=0.1; %采样时间;G=tf([1],[10,1],'inputdelay',0.5);Gd=c2d(G ,ts,'zoh');[num,den]=tfdata(Gd,'v'); %tfdata 直接以行向量的形式返回分子与分母系数;u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;u_6=0;u_7=0; y_1=0;y_2=0;e_1=0;e_2=0;%kp=15.4;Ti=9.99;Td=0.34; %% ISTE 法求出的PID 参数 kp=24;Ti=1;Td=0.25; %%Z-N 法求出的PID 参数 ki=kp*ts/Ti;kd=kp*Td/ts;A=kp*(1+ts/Ti+Td/ts); B=-kp*(1+2*Td/ts); C=kp*Td/ts; for k=1:1:3000 t(k)=k*ts; r(k)=30;y1(k)=0.995*y_1+0.00995*u_7;y(k)=0.99*y_1+0.005*u_6+0.005*u_5;e(k)=r(k)-y(k);u(k)=A*e(k)+B*e_1+C*e_2;u(k)=u_1+u(k);u_7=u_6;u_6=u_5;u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_2=y_1;y_1=y(k); e_2=e_1;e_1=e(k); end figure(1);plot(t,y)hold on得出曲线分别为ISTE 法和Z-N 法:三、模糊PID 控制的实验原理和实验步骤1. 模糊PID 控制器的结构本文以误差e 和ec 作为输入,以满足不同时刻和e 和ec 对PID 参数的自整定要求。
控制器的结构如图2所示。
图2 模糊控制器结构图将系统误差e 和误差变化率ec 变化范围定义为模糊集上的论域。
即e,ec=[-3,3],其中模糊子集为e,ec={NB,M,NS,ZO,PS,PM,PB},子集中元素分别代表负大,负中,负小,零,正小,正中,正大。
根据Kp,Ki,Kd3个参数模糊规则表构造一个两输入(e,ec )三输出(,,)p i d k k k ∆∆∆模糊控制器。
2. 模糊PID 控制器的设计模糊控制规则是用于修正PID 参数的,模糊控制规则则根据过程的阶跃响应情况来考虑求取。
规则如表1所示。
表1 模糊控制规则表根据上述模糊控制规则,采用如下的PID 参数调节规则,如表2、表3、表4、所示,其中每个表格的第一行表示误差变化量ec 的模糊集合,第一列表示误差e 的模糊集合。
PID 三个参数的模糊规则库建立好以后,就可以根据模糊控制理论进行参数的自调整。
将系统误差e ,误差变化量ec ,Kp ,Ki ,Kd 的变化范围定义为模糊上的论域:e,ec={-3,-2,-1,0,1,2,3},Kp={-0.3,-0.2,-0.1,0,0.1,0.2,0.3},Ki={-0.06,-0.04, -0.02,0,0.02,0.04,0.06},Kd={-3,-2,-1,0,1,2,3}。
表2 Kp 规则调节表表3 Ki 规则调节表表4 Kd 规则调节表在模糊控制规律中,e,ec,Kp,Ki,Kd 的语言变量值取“负大”(NB )、“负中”(NM )、“负小”(NS )、“零”(ZO )、“正小”(PS )、“正中”(PM )、“正大”(PB )共7个值。
它们的隶属度函数都是三角形,并且每个值所取的范围宽度相等。
3. 针对模型为0.51()101sG s es -=+经过零阶保持器Z 变换离散化被控对象变为: 561()0.0050.005()10.99Y z zzU z z---+=-=---+-y k y k u k u k()0.99(1)0.05(5)0.005(6)程序为:%Fuzzy Tunning PID Controlclear all;close all;a=newfis('fuzzpid'); %建立一个规则库文件a=addvar(a,'input','e',[-3,3]); %参数ea=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'input','ec',[-3,3]); %参数eca=addmf(a,'input',2,'NB','zmf',[-3,-1]);a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);a=addmf(a,'input',2,'PM','trimf',[0,2,3]);a=addmf(a,'input',2,'PB','smf',[1,3]);a=addvar(a,'output','kp',[-0.3,0.3]); %参数kpa=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);a=addvar(a,'output','ki',[-0.06,0.06]); %参数kia=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]);a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);a=addvar(a,'output','kd',[-3,3]); %参数kd a=addmf(a,'output',3,'NB','zmf',[-3,-1]);a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);a=addmf(a,'output',3,'PM','trimf',[0,2,3]);a=addmf(a,'output',3,'PB','smf',[1,3]);rulelist=[1 1 7 1 5 1 1;1 2 7 1 3 1 1;1 3 62 1 1 1;1 4 62 1 1 1;1 5 5 3 1 1 1;1 6 4 42 1 1;1 7 4 4 5 1 1;2 1 7 1 5 1 1;2 2 7 13 1 1;2 3 6 2 1 1 1;2 4 53 2 1 1;2 5 53 2 1 1;2 6 4 43 1 1;2 734 4 1 1;3 1 6 14 1 1;3 2 6 2 3 1 1;3 3 6 3 2 1 1;3 4 5 3 2 1 1;3 54 4 3 1 1;3 6 3 5 3 1 1;3 7 3 54 1 1;4 1 6 2 4 1 1;4 2 6 2 3 1 1;4 35 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 47 1 1;6 2 4 4 5 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 27 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];a=addrule(a,rulelist);a=setfis(a,'DefuzzMethod','mom');writefis(a,'fuzzpid');a=readfis('fuzzpid');%PID Controllerts=0.1; %采样时间;sys=tf([1],[10,1],'inputdelay',0.5); %输入被控对象模型dsys=c2d(sys,ts,'tustin'); %对被控对象离散化u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0;u_6=0.0;y_1=0;y_2=0;y_3=0;x=[0,0,0]';error_1=0;e_1=0.0;ec_1=0.0;kp0=8.6;ki0=0.12;kd0=0.95;for k=1:1:500time(k)=k*ts;rin(k)=30;%Using fuzzy inference to tunning PIDk_pid=evalfis([e_1,ec_1],a);kp(k)=kp0+k_pid(1);ki(k)=ki0+k_pid(2);kd(k)=kd0+k_pid(3);u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);%yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+nu m(4)*u_3;yout(k)=0.99*y_1+0.005*u_6+0.005*u_5;error(k)=rin(k)-yout(k);%%%%%%%%%%%%%%Return of PID parameters%%%%%%%%%%%%%%% u_6=u_5;u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);x(1)=error(k); % 计算比例环节x(2)=error(k)-error_1; % 计算微分环节x(3)=x(3)+error(k); % 计算积分环节e_1=x(1);ec_1=x(2);error_2=error_1;error_1=error(k);endshowrule(a)figure(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout');figure(4);plot(time,kp,'r');xlabel('time(s)');ylabel('kp');figure(5);plot(time,ki,'r');xlabel('time(s)');ylabel('ki');figure(6);plot(time,kd,'r');xlabel('time(s)');ylabel('kd');fuzzy fuzzpid.fis得出的输出曲线为:四、结论通过实验,对比实验结果可以得了如下几点:1.常规PID控制时,上升时间较短,通过ISTE整定参数的方法的调整时间相对短一些,而应用Z-N法时的调整时间相对长些,但两者的振荡较巨烈。