模糊控制器设计实例
- 格式:ppt
- 大小:202.50 KB
- 文档页数:38
5.2.2 .6 模糊控制器设计实例1 、单输入模糊控制器的设计【例 5.12 】已知某汽温控制系统结构如图 5.10 所示,采用喷水减温进行控制。
设计单输入模糊控制器,观察定值扰动和内部扰动的控制效果。
图 5.10 单回路模糊控制系统按表 5-2 确定模糊变量 E 、 U 的隶属函数,按表 5-3 确定模糊控制规则,选择温度偏差 e 、控制量 u 的实际论域:,则可得到该系统的单输入模糊控制的仿真程序如 FC_SI_main.m 所示,仿真结果如图 5.11 所示。
设温度偏差 e 、控制量 u 的实际论域:,选择 e 、 u 的等级量论域为量化因子。
选择模糊词集为 { NB,NS,ZO,PS,PB } ,根据人的控制经验,确定等级量 E , U 的隶属函数曲线如图 5-8 所示。
根据隶属函数曲线可以得到模糊变量 E 、 U 的赋值表如表 5-3 所示。
图5-8 E ,U 的隶属函数曲线表 5-3 模糊变量 E 、 U 的赋值表( μ )-3 -2 -1 0 1 2 3 等级量μE 、 UPB 0 0 0 0 0 0.5 1 PS 0 0 0 0 1 0.5 0 ZO 0 0 0.5 1 0.5 0 0 NS 0 0.5 1 0 0 0 0 NB 1 0.5 0 0 0 0 0依据人手动控制的一般经验,可以总结出一些控制规则,例如:若误差 E 为 O ,说明温度接近希望值,喷水阀保持不动;若误差 E 为正,说明温度低于希望值,应该减少喷水;若误差 E 为负,说明温度高于希望值,应该增加喷水。
若采用数学符号描述,可总结如下模糊控制规则:若 E 负大,则 U 正大;若 E 负小,则 U 正小;若 E 为零,则 U 为零;若 E 正小,则 U 负小;若 E 正大,则 U 负大。
写成模糊推理句 :if E =NB then U =PBif E =NS then U =PSif E=ZO then U=ZOif E =PS then U =NSif E =PB then U =NB由上述的控制规则可得到模糊控制规则表,如表 5-4 所示。
1.一个三阶系统201232123b b b a a a s s s s s +++++ ,其中a,b 的值由自己设定,该系统具有非线性环节,如下图所示:依据上述条件设计一个模糊控制器: ①用MATLAB 仿真,得出仿真结果, ②并通过改变a 、b 值对仿真结果的影响;③改变隶属度函数,从仿真结果图分析隶属度函数,模糊化对系统的影响; 解:①(1)取b0=0,b1=0,b2=1.5,a1=4,a2=2,a3=0,在SIMULINK 里建模如下图所示(2)用GUI 建立FISE 和EC 分别为系统输出误差和误差的变化量,U 为控制输出,编辑其隶属度函数如下编辑模糊推理规则如下(3)仿真结果如下2自己选定一个对象,设计一个神经网络控制系统。
解:被控对象为y(k)=0.3y(k-1)+0.2y(k-2)+0.1u(k-1)+0.6u(k-2),采用单神经元PID 控制,控制结构如下图所示:采用有监督的Hebb 学习规则,控制算法及学习算法如下:3131111222333()(1)()()()()/()()(1)()()()()(1)()()()()(1)()()()i i i i i i i I P D u k u k K w k x k w k w k w k w k w k z k u k x k w k w k z k u k x k w k w k z k u k x k ηηη=='=-+'==-+=-+=-+∑∑式中,2123()();()()(1);()()()2(1)(2);x k e k x k e k e k x k e k e k e k e k ==--=∆=--+-K K >0I P D ηηη﹑﹑分别为积分﹑比例﹑微分的学习速率,为神经元比例系数,。
输入信号为方波:()rin k 0.5sgn (sin (4t))π=仿真程序如下:clear all ; close all ;x=[0,0,0]';xiteP=0.40; xiteI=0.35; xiteD=0.40;wkp_1=0.10;wki_1=0.10;wkd_1=0.10;error_1=0;error_2=0;y_1=0;y_2=0;y_3=0;u_1=0;u_2=0;u_3=0;ts=0.001;for k=1:1:1000time(k)=k*tsrin(k)=0.5*sign(sin(4*pi*k*ts));yout(k)=0.3*y_1+0.2*y_2+0.1*u_1+0.6*u_2;error(k)=rin(k)-yout(k);wkp(k)=wkp_1+xiteP*error(k)*u_1*x(1);%Pwki(k)=wki_1+xiteI*error(k)*u_1*x(2);%Iwkd(k)=wkd_1+xiteD*error(k)*u_1*x(3);%DK=0.12;x(1)=error(k)-error_1;x(2)=error(k);x(3)=error(k)-2*error_1+error_2;wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k)); w11(k)=wkp(k)/wadd(k);w22(k)=wki(k)/wadd(k);w33(k)=wkd(k)/wadd(k);w=[w11(k),w22(k),w33(k)];u(k)=u_1+K*w*x;%Control lawif u(k)>10u(k)=10;endif u(k)<-10u(k)=-10;endu_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);wkp_1=wkp(k);wkd_1=wkd(k);wki_1=wki(k);endfigure(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout'); figure(2);plot(time,error,'r');xlabel('time(s)');ylabel('error');figure(3);plot(time,u,'r');xlabel('time(s)');ylabel('u');仿真结果如下:3.前向神经网络拟合一个函数y=sin(x)*cos(10x),取n个样本,神经网络的层数和每层的点数可自定。
模糊pid控制实例以下是一个模糊PID控制的简单实例:假设我们要控制一台电机的转速,目标是使电机转速尽可能稳定在设定值附近。
根据模糊PID控制器的工作原理,我们可以进行以下步骤:1. 设定目标值和初始设定值:设定电机转速的目标值,例如1000转/分钟。
同时设置初始的PID参数。
- 设定值(SP,Set Point)= 1000 RPM- 比例增益 (Kp) = 1- 积分时间(Ti) = 1- 微分时间(Td) = 0.12. 测量电机转速:使用传感器或编码器来测量电机当前的转速,得到当前的反馈值。
3. 模糊控制规则建立:基于当前误差(设定值减去反馈值)和误差的变化率,建立一组模糊逻辑规则,例如: - 如果误差为"NB"并且误差变化率为"PB",则输出为"NB"。
- 如果误差为"NB"并且误差变化率为"NM",则输出为"NM"。
- ...4. 模糊推理和模糊输出:根据模糊逻辑规则,进行模糊推理,即将当前的误差和误差变化率映射到模糊输出的隶属度值上。
5. 解模糊:将模糊输出映射回具体的控制量,例如根据模糊输出计算PID控制器的输出量。
6. 更新PID参数:根据误差的变化和模糊输出的结果来更新PID控制器的参数,例如根据误差的大小和变化率来调整PID参数,以使控制更加精确。
7. 反馈控制:将PID控制器的输出量应用于电机,调整电机的转速。
8. 循环控制:循环执行上述步骤,不断更新PID参数和反馈控制,使得电机转速尽可能稳定在设定值附近。
需要注意的是,以上是一个简单的示例,实际的模糊PID控制根据具体的应用情况和系统特点会有所差异。
参数的选择和模糊规则的建立都需要根据具体的控制对象进行优化和调整。
此外,在实际应用中,还需要考虑到系统的鲁棒性、性能指标等因素。
实验二典型模糊控制器的设计实验内容解析:实验1:(1)步骤:1.确定观测量和控制量定义理想液位O点的水位为,实际测得液位为h,液位差为e=Δh=—h2.输入量和输出量的模糊化将偏差e分为5个模糊集:负大(NB)、负小(NS)、零(Z)、正小(PS)、正大(PB)。
将偏差e的变化分为7个等级:-3,-2,-1,0,1,2,3。
控制量u为调节阀门开度的变化。
将其分为5个模糊集:负大(NB)、负小(NS)、零(Z)、正小(PS)、正大(PB)。
将u的变化分为9个模糊集:-4,-3,-2,-1,0,1,2,3,4。
3.模糊规则的描述将规则用“IF A THEN B ”的形式来描述。
4.求模糊关系(求模糊关系R)5.模糊决策模糊控制器的输出为误差向量和模糊关系的合成,即u= e o R6.控制量的反模糊化(2)设计程序如下:%Fuzzy Control for water tankclear all;close all;a= newfis('fuzz_tank');a= addvar(a,'input','e',[-3,3]); %Parameter ea= addmf(a,'input',1,'NB','zmf',[-3,-1]);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,'PB','smf',[1,3]);a= addvar(a,'output','u',[-4,4]); %Parameter ua= addmf(a,'output',1,'NB','zmf',[-4,-1]);a= addmf(a,'output',1,'NS','trimf',[-4,-2,1]);a= addmf(a,'output',1,'Z','trimf',[-2,0,2]);a= addmf(a,'output',1,'PS','trimf',[-1,2,4]);a= addmf(a,'output',1,'PB','smf',[1,4]);rulelist=[1 1 1 1; %Edit rule base2 2 1 1;3 3 1 1;4 4 1 1;5 5 1 1];a= addrule(a,rulelist);a1= setfis(a,'DefuzzMethod','mom'); %Defuzzywritefis(a1,'tank'); %Save to fuzzy file "tank.fis" a2= readfis('tank');figure(1);plotfis(a2);figure(2);plotmf(a2,'input',1);figure(3);plotmf(a2,'output',1);flag=1;if flag==1showrule(a2);ruleview('tank');enddisp('...............................................................');disp(' fuzzy control table:e = [-3,+3],u=[-4,+4]' ); disp('...............................................................');for i = 1:1:7e(i) = i-4;Ulist(i) = evalfis([e(i)],a2);endUlist = round(Ulist)e= -3; %Erroru= evalfis([e],a2); %Using fuzzy interference (3)实验结果:...............................................................fuzzy controller table:e = [-3,+3],ec=[-3,+3] ..............................................................................................................................fuzzy control table:e = [-3,+3],u=[-4,+4] ...............................................................Ulist =-4 -2 -2 0 2 2 4System tank: 1 inputs, 1 outputs, 5 rulese (5)-3-2-1012300.20.40.60.81eD e g r e e o f m e m b e r s h i p-4-3-2-10123400.20.40.60.81uD e g r e e o f m e m b e r s h i p实验2:(1)步骤1.模糊控制器的结构单变量二维模糊控制器是常见的结构形式。
模糊控制在matlab中的实例模糊控制是一种应用广泛的控制方法,它可以处理那些难以精确建立数学模型的系统。
在Matlab中,使用Fuzzy Logic Toolbox工具箱可以方便地实现模糊控制系统。
以下是一个简单的模糊控制器示例,控制一个小车的速度和方向,使得其能够沿着预设的轨迹行驶。
1. 首先,定义输入和输出变量。
这里我们需要控制小车的速度和转向角度。
代码如下:```speed = newfis("speed");speed = addvar(speed,"input","distance",[0 10]);speed = addmf(speed,"input",1,"slow","trimf",[0 0 5]);speed = addmf(speed,"input",1,"fast","trimf",[5 10 10]); speed = addvar(speed,"output","velocity",[-10 10]);speed = addmf(speed,"output",1,"reverse","trimf",[-10-10 -2]);speed = addmf(speed,"output",1,"stop","trimf",[-3 0 3]); speed = addmf(speed,"output",1,"forward","trimf",[2 10 10]);angle = newfis("angle");angle = addvar(angle,"input","position",[-1 1]);angle = addmf(angle,"input",1,"left","trimf",[-1 -1 0]);angle = addmf(angle,"input",1,"right","trimf",[0 1 1]); angle = addvar(angle,"output","steering",[-1 1]);angle = addmf(angle,"output",1,"hard_left","trimf",[-1 -1 -0.5]);angle = addmf(angle,"output",1,"soft_left","trimf",[-1 -0.5 0]);angle = addmf(angle,"output",1,"straight","trimf",[-0.5 0.5 0.5]);angle = addmf(angle,"output",1,"soft_right","trimf",[0 0.5 1]);angle = addmf(angle,"output",1,"hard_right","trimf",[0.5 1 1]);```2. 然后,定义模糊规则。