收藏 分销(赏)

模糊控制详细讲解实例.doc

上传人:仙人****88 文档编号:9464310 上传时间:2025-03-27 格式:DOC 页数:9 大小:105.04KB
下载 相关 举报
模糊控制详细讲解实例.doc_第1页
第1页 / 共9页
模糊控制详细讲解实例.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述
一、速度控制算法: 首先定义速度偏差-50 km/h≤e(k)≤50km/h,-20≤ec(i)= e(k)- e(k-1)≤20,阀值eswith=10km/h 设计思想:油门控制采用增量式PID控制算法,刹车控制采用模糊控制算法,最后通过选择规则进行选择控制量输入。 选择规则: e(k)<0 ① e(k)>- eswith and throttlr_1≠0 选择油门控制 ② 否则:先将油门控制量置0,再选择刹车控制 0<e(k) 先选择刹车控制,再选择油门控制 e(k)=0 直接跳出选择 刹车控制:刹车采用模糊控制算法 1.确定模糊语言变量 e基本论域取[-50,50],ec基本论域取[-20,20],刹车控制量输出u基本论域取[-30,30],这里我将这三个变量按照下面的公式进行离散化: 其中,,n为离散度。 E、ec和u均取离散度n=3,离散化后得到三个量的语言值论域分别为: E=EC=U={-3,-2,-1,0,1,2,3} 其对应语言值为{ NB,NM,NS,ZO, PS,PM,PB } 2.确定隶属度函数 E/EC和U取相同的隶属度函数即: 说明:边界选择钟形隶属度函数,中间选用三角形隶属度函数,图像略 实际EC和E输入值若超出论域范围,则取相应的端点值。 3.模糊控制规则 由隶属度函数可以得到语言值隶属度(通过图像直接可以看出)如下表: 表1:E/EC和U语言值隶属度向量表 -3 -2 -1 0 1 2 3 NB 1 0.5 0 0 0 0 0 P0 NM 0 1 0.5 0 0 0 0 P1 NS 0 0.5 1 0.5 0 0 0 P2 ZO 0 0 0.5 1 0.5 0 0 P3 PS 0 0 0 0.5 1 0.5 0 P4 PM 0 0 0 0 0.5 1 0 P5 PB 0 0 0 0 0 0.5 1 P6 设置模糊规则库如下表: 表2:模糊规则表 U E EC — NB NM NS ZO PS PM PB NB PB PB PM PM PS ZO ZO NM PB PM PM PS ZO ZO NS NS PM PM PS PS ZO NS NS ZO PM PS PS ZO ZO NS NM PS PS PS ZO ZO ZO NS NM PM PS ZO ZO ZO NS NM NB PB ZO ZO ZO NS* NM NM NB 3.模糊推理 由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两个例子做模糊推理如下: if (E is NB) and (EC is NM) then (U is PB) 那么他的模糊关系子矩阵为: 其中,,即表1中NB对应行向量,同理可以得到, , if (E is NVB or NB) and (EC is NVB) then (U is PVB) 结果略 按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下: 由R可以得到模拟量输出为: 4.去模糊化 由上面得到的模拟量输出为1×7的模糊向量,每一行的行元素(u(zij))对应相应的离散变量zj,则可通过加权平均法公式解模糊: 从而得到实际刹车控制量的精确值u。 油门控制: 油门控制采用增量式PID控制,即: 只需要设置、 、三个参数即可输出油门控制量。 二、程序实现及参数调节 clear all %************************模糊算法 %/*********隶属度向量 *****% P0=[1,0.5,0,0,0,0,0];%*********NB P1=[0,1,0.5,0,0,0,0];%*********NM P2=[0,0.5,1,0.5,0,0,0];%*********NS P3=[0,0,0.5,1,0.5,0,0];%*********ZO P4=[0,0,0,0.5,1,0.5,0];%*********PS P5=[0,0,0,0,0.5,1,0];%*********PM P6=[0,0,0,0,0,0.5,1];%*********PB %***********语言值 *****% NB=-3;NM=-2;NS=-1;ZO=0;PS=1;PM=2;PB=3; %/*********模糊规则表*****% Pg=[PB PB PM PM PS ZO ZO; PB PM PM PS ZO ZO NS; PM PM PS PS ZO NS NS; PM PS PS ZO ZO NS NM; PS PS ZO ZO ZO NS NM; PS ZO ZO ZO NS NM NB; ZO ZO ZO NS NM NM NB]; %/*********根据规则表计算模糊关系矩阵*****% R1_=dikaer(xbing(P0,P1),7,P0,7); R1_=reshape(R1_,1,49); R1=dikaer(R1_,49,P6,7); R2_=dikaer(xbing(P2,P3),7,P0,7); R2_=reshape(R2_,1,49); R2=dikaer(R2_,49,P5,7); R3_=dikaer(P0,7,P1,7); R3_=reshape(R3_,1,49); R3=dikaer(R2_,49,P6,7); R4_=dikaer(xbing(P1,P2),7,P1,7); R4_=reshape(R4_,1,49); R4=dikaer(R4_,49,P5,7); R5_=dikaer(P3,7,P1,7); R5_=reshape(R5_,1,49); R5=dikaer(R5_,49,P4,7); R6_=dikaer(xbing(P0,P1),7,P2,7); R6_=reshape(R6_,1,49); R6=dikaer(R6_,49,P5,7); R7_=dikaer(xbing(P2,P3),7,P2,7); R7_=reshape(R7_,1,49); R7=dikaer(R7_,49,P4,7); R8_=dikaer(P0,7,P3,7); R8_=reshape(R8_,1,49); R8=dikaer(R8_,49,P5,7); R9_=dikaer(xbing(P1,P2),7,P3,7); R9_=reshape(R9_,1,49); R9=dikaer(R9_,49,P4,7); R10_=dikaer(P3,7,P3,7); R10_=reshape(R10_,1,49); R10=dikaer(R10_,49,P3,7); R11_=dikaer(xbing(P0,P1),7,P4,7); R11_=reshape(R11_,1,49); R11=dikaer(R11_,49,P4,7); P45=xbing(P4,P5); R12_=dikaer(xbing(P2,P3),7,P45,7); R12_=reshape(R12_,1,49); R12=dikaer(R12_,49,P3,7); R13_=dikaer(P0,7,P5,7); R13_=reshape(R13_,1,49); R13=dikaer(R13_,49,P4,7); R14_=dikaer(P1,7,P5,7); R14_=reshape(R14_,1,49); R14=dikaer(R14_,49,P3,7); P01=xbing(P0,P1); R15_=dikaer(xbing(P01,P2),7,P6,7); R15_=reshape(R15_,1,49); R15=dikaer(R15_,49,P3,7); R16_=dikaer(P3,7,P6,7); R16_=reshape(R16_,1,49); R16=dikaer(R16_,49,P2,7); R17_=dikaer(P4,7,P0,7); R17_=reshape(R17_,1,49); R17=dikaer(R17_,49,P4,7); R18_=dikaer(xbing(P5,P6),7,P0,7); R18_=reshape(R18_,1,49); R18=dikaer(R18_,49,P3,7); R19_=dikaer(xbing(P4,P5),7,P1,7); R19_=reshape(R19_,1,49); R19=dikaer(R19_,49,P3,7); R20_=dikaer(P6,7,xbing(P1,P2),7); R20_=reshape(R20_,1,49); R20=dikaer(R20_,49,P2,7); P23=xbing(P2,P3); R21_=dikaer(P4,7,xbing(P23,P4),7); R21_=reshape(R21_,1,49); R21=dikaer(R21_,49,P3,7); R22_=dikaer(P5,7,xbing(P23,P4),7); R22_=reshape(R22_,1,49); R22=dikaer(R22_,49,P2,7); R23_=dikaer(P6,7,xbing(P3,P4),7); R23_=reshape(R23_,1,49); R23=dikaer(R23_,49,P1,7); R24_=dikaer(P4,7,P5,7); R24_=reshape(R24_,1,49); R24=dikaer(R24_,49,P2,7); R25_=dikaer(P5,7,P5,7); R25_=reshape(R25_,1,49); R25=dikaer(R25_,49,P1,7); R26_=dikaer(P6,7,xbing(P6,P5),7); R26_=reshape(R26_,1,49); R26=dikaer(R26_,49,P0,7); R27_=dikaer(xbing(P4,P5),7,P6,7); R27_=reshape(R27_,1,49); R27=dikaer(R27_,49,P1,7); m=[R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17,R18,R19,R20,R21,R22,R23,R24,R25,R26,R27]; R=bingji(m); %*************初始化参量 e=0;ec=0;y_1=0;y_2=0;u=0;u_1=0;u_2=0;u_3=0;e_1=0;e_2=0; Eswith=10;throttle_1=0;brake_1=0; x=[0 0 0]; ts=0.001; sys=tf(1,[1,2,1],'inputdelay',0.5); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); for k=1:1:40000 %****************控制系统 time(k)=k*ts; if(k<25000) vd(k)=40; else vd(k)=0; end y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2; e=vd(k)-y(k); ec=e-e_1; u_3=u_2; u_2=u_1; u_1=u; y_2=y_1; y_1=y(k); x(1)=e; x(2)=(e-e_1)/ts; x(3)=x(3)+e*ts; %*******************************油门PID控制 kp=0.42;Ti=30;Td=0.0018; ki=kp*ts/Ti; kd=kp*Td/ts; dthrottle=kp*x(1)+kd*x(2)+ki*x(3); throttle=u_1+dthrottle; if(throttle>2000) throttle=2000; end %****************************刹车控制 %/********压缩输入变量*****% E=lisan(-50,50,3,e); EC=lisan(-20,20,3,ec); %/*********计算实际输入变量隶属度向量*****% E_R(1)=lbell(E,1,4,-3); E_R(2)=trig(E,-3,-2,0); E_R(3)=trig(E,-3,-1,1); E_R(4)=trig(E,-2,0,2); E_R(5)=trig(E,-1,1,3); E_R(6)=trig(E,0,2,3); E_R(7)=rbell(E,1,4,3); EC_R(1)=lbell(EC,1,4,-3); EC_R(2)=trig(EC,-3,-2,0); EC_R(3)=trig(EC,-3,-1,1); EC_R(4)=trig(EC,-2,0,2); EC_R(5)=trig(EC,-1,1,3); EC_R(6)=trig(EC,0,2,3); EC_R(7)=rbell(EC,1,4,3); %/*********模糊推理过程*****% U_R1=dikaer(E_R,7,EC_R,7); U_R1=reshape(U_R1,1,49); U_R2=jdikaer(U_R1,49,R,7); U_R=max(U_R2); u_L=mean(U_R); %/*********去模糊化*****% brake=-flisan(-150,150,3,u_L); e_2=e_1; e_1=e; %/************************选择规则 if (e<0) if ((e>-Eswith)||(throttle_1~=0)) if(throttle<=throttle_1) throttle_1=throttle; u=throttle; Q(k)=u; W(k)=0; else throttle=0; throttle_1=throttle; u=throttle; Q(k)=u; W(k)=0; end else if(throttle_1==0) brake_1=brake; u=brake; W(k)=u; Q(k)=0; else throttle=0; throttle_1=throttle; u=throttle; Q(k)=u; W(k)=0; end end else if(e~=0) if(brake_1==0) throttle_1=throttle; u=throttle; Q(k)=u; W(k)=0; else brake=0; brake_1=brake; u=brake; end else u=0; W(k)=0; Q(k)=0; end end %********************»­Í¼Êä³öÁ¿¶¨Òå M(k)=u; %******************************迟滞环节 if (time(k)<=0.5) u=0; else u=M(k-0.5/ts); end end %**********画图 figure(1); plot(time,vd,'r',time,y,'k','linewidth',2); xlabel('time(s)'); ylabel('vd,y'); legend('ÆÚÍû','ʵ¼Ê'); figure(2); plot(time,Q,'r','linewidth',2); xlabel('time(s)'); ylabel('u'); figure(3); plot(time,W,'r','linewidth',2); xlabel('time(s)'); ylabel('u'); figure(4); plot(time,N,'b'); xlabel('time£¨s£©'); ylabel('e'); 程序说明: 仿真分加速和加速两个阶段,加速阶段主要应用油门控制,加速阶段主要由刹车控制。 加速过程中,调节PID的三个参数kp、Ti、Td,调节过程中不难发现,kp越大调节时间越长,Ti越小稳态误差越大,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服