⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuzzy_control.m

📁 一个用Visual C语言编写的PID控制程序
💻 M
字号:
function f2=fuzzy_control(InputVector)
%函数实现模糊控制
%在线控制
%被控系统建模,系统的控制对象为K*esp(tds)/(T1s+1)(T2s+1)
num=20; 
den=conv([2 1],[3 1]); 
td=0.01;
[a1,b,c,d]=tf2ss(num,den); %把拉氏变换转换为状态方程 a1为系统状态阵,由系统参数决定;
                            %b为系统输入阵;c为输出阵;d为直接输出阵;
                            % x^=a1*x+b*u;  
                            % y=c*x+d*u;  y为输出向量
x=[0;0];

%系统参数
T=0.01; %采样时间间隔
h=T;
Nd=td/T; %系统的纯延时
N=1000; 
R=ones(1,N);%系统的参考输入   
    %采用模糊控制器的二阶系统仿真
    e=0;
    de=0;    
    %量化因子,对系统的静、动态性能有重要影响.增大Ke,相当于缩小误差的基本论域,增强误差的控制作用,导致上升速率加大,超调增大;
    %减小Ke,会使系统调节惰性变大;Kec(kd)增大,将增加系统稳定性,但Kec(kd)过大将导致系统的过渡过程时间变长,而Kec(kd)过小可能考之过大的超调和振荡;
    %Ku相当于系统总的放大倍数,Ku增大系统响应速度增大,但过大会产生超调,Ku过小,系统稳态精度变差。
    ke=30; %30 
    kd=3; %20,量化因子
    ku=1.2; %,量化因子
  for k=1:N
        %输入变量变换至论域
        e1=round(ke*e);     %x0
        de1=round(kd*de);   %y0
       if e1>=6
          e1=6;
       elseif e1<=-6
            e1=-6;
       end
       if de1>=6
          de1=6;
       elseif de1<=-6
            de1=-6;
       end
    e1 = e1 + 7;
    de1 = de1 + 7;
    out=InputVector(e1,de1);  %调用函数计算模糊控制输出 z0
    uu(1,k)=ku*out; %Ku相当于系统总的放大倍数
    
    %延迟环节
    if k<=Nd
       u=0;
    else
       u=uu(1,k-Nd);
    end

    %控制作用于被控系统,计算系统输出,采用龙格-库塔法 解一阶微分方程
    %初始条件为x=x[0]时,y=y[0]
    %u为输入矩阵
    %a1为系统状态阵,由系统参数决定;
    %b为系统输入阵;c为输出阵;d为直接输出阵;
    % x^=a1*x+b*u; x^为状态向量
    % y=c*x+d*u;  y为输出向量
    
    k0=a1*x+b*u;
    k1=a1*(x+h*k0/2)+b*u;
    k2=a1*(x+h*k1/2)+b*u;
    k3=a1*(x+h*k2)+b*u;
    x=x+(k0+2*k1+2*k2+k3)*h/6;
    
    y=c*x+d*u;      

    %计算系统输出误差及误差倒数
    e1=e;
    e=R(1,k)-y;  
    de=(e-e1)/T;  
    yy(1,k)=y;
  end
 
  %------------------------------------------------------------------------
   
   %典型二阶环节的控制输出曲线
   kk=[1:N]*T;
   figure(2);
 %  plot(kk,R,'k',kk,yy,'r');
   plot(kk,R,'k',10,2,'r');
   xlabel('时间(0.01秒)');ylabel('输出');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -