精华内容
下载资源
问答
  • YAMAHA-TS控制器资料

    2021-03-22 15:51:52
    YAMAHA-TS控制器资料。 介绍了关于YAMAHA-TS控制器资料的详细说明,提供雅马哈YAMAHA的技术资料的下载。
  • 帆产生控制器 这是使用TypeScript的Sails控制器的生成器。 目前,它打算与和。 代替生成的Controller.js您的内/api/controllers/文件夹中,它产生一个Controller.ts代替。 我选择使用TypeScript 1.5而不是更早...
  • 由于TS模型可以有效的描述许多非线性系统,所以采用带有状态不确定项的TS模糊系统对控制系统进行描述,又由于被控量的时滞现象大量存在于系统中,所以通过设计有记忆模糊状态反馈控制器,实现系统的保性能控制,同时...
  • 您可以使用装饰器定义路由路径,也可以使用现有的Koa控制器创建graphql解析器 用法 app.js import Koa from 'koa' ; // 1. Import Router import Router from 'koa-decorator-ts/router' ; const app
  • koa-ts-controllers koa-ts-controllers是用于...支持Koa-ts控制器 Koa-ts-controllers是MIT许可的开源项目,其持续的开发完全有赖于这些出色的支持者的支持。 如果koa-ts-controllers帮助您构建了很棒的API,请考虑
  • 基于S函数的BP神经网络PID控制器及simulink仿真

    万次阅读 多人点赞 2019-12-05 13:51:58
    基于S函数的BP神经网络PID控制器及simulink仿真 文章目录文章来源和摘要S函数的编写格式和运行步骤simulink模型结构S函数模型初始化部分代码理解S函数模型更新部分S函数模型输出部分S函数完整代码附录 文章来源和...

    基于S函数的BP神经网络PID控制器及simulink仿真

    文章来源和摘要

    在这里插入图片描述

    S函数的编写格式和运行步骤

    S函数相当于simulink中自定义的软件包,当simulink中没有现成的功能模块可用时,就可以通过编写s函数的方式来进行仿真。
    S函数的编写格式为
    在这里插入图片描述
    各个变量对应的含义分别为
    在这里插入图片描述
    运行步骤:
    在这里插入图片描述

    simulink模型结构

    在这里插入图片描述
    在simulink中搭建模型如下
    在这里插入图片描述
    其中mux的作用是把常量合并成数组
    demux(黑色部分)的作用是吧一个数组重新解析成标量
    在这里有一个疑惑,就是输入的子系统中,并没有设置有效的单位延时
    在这里插入图片描述
    BP神经网络+PID控制simulink仿真 - zkzfengyi的博客 - CSDN博客
    这篇博客的评论区里,大家普遍认为有造假的嫌疑,我也十分困惑。
    在这里插入图片描述
    控制器部分,利用S函数实现BP神经网络的PID。论文给出的仿真效果如下
    在这里插入图片描述
    实际的控制器仿真效果如图
    在这里插入图片描述
    PID的输出参数变化
    在这里插入图片描述

    S函数模型初始化部分代码理解

    S函数总共分为4个部分,第一部分为切换函数,第二部分为初始化,第三部分为数据更新部分,第四部分为模型输出。
    在这里插入图片描述

    % 模型初始化
    function[sys,x0,str,ts]=mdlInitializeSizes
        sizes=simsizes;%用于设置模块参数的结构体用simsizes来生成
        sizes.NumContStates=0;%模块连续状态变量的个数
        sizes.NumDiscStates=3;%模块离散状态变量的个数
        sizes.NumOutputs=4;%模块输出变量的个数
        sizes.NumInputs=7;%模块输入变量的个数
        sizes.DirFeedthrough=1;%模块是否存在直接贯通,1表示存在直接贯通,若为0,则mdlOutputs函数里不能有u
        sizes.NumSampleTimes=1;%模块的采样时间个数,至少是一个
        sys=simsizes(sizes);%设置完后赋给sys输出
        x0=zeros(3,1);%系统状态变量设置,3行一列
        str=[];
        ts=[0 0];%采样周期设为0表示是连续系统,
    %     ts=[0.001 0];%采样周期设为0表示是连续系统,
    

    simsizes是什么,帮助文档给出如下

    ans =

    包含以下字段的 struct:

    NumContStates: 0
    NumDiscStates: 0
     NumOutputs: 0
      NumInputs: 0
    DirFeedthrough: 0
    NumSampleTimes: 0
    

    说明是一个系统的默认变量,不需要初始化就能直接引用。

    S函数模型更新部分

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxSODpc1-1575516289389)(代码理解.assets/image-20191204133857580.png)]

    % 模型更新部分,输入为系统状态量和系统输入
    function sys=mdlUpdates(x,u)
            T=0.001;
            x=[u(5);x(2)+u(5)*T;(u(5)-u(4))/T];%3个状态量(偏差、偏差和以及偏差变化量),u(5)是偏差,u(4)是上一次的偏差,x(2)则是之前的偏差和
            sys=[x(1);x(2);x(3)];
    

    x和u分别是什么?

    u应该就是mux左侧的那7个输入变量,实际对应u(1)~u(7)

    在这之前,初始化的时候,x0=zero(3,1)=[0;0;0],这里的x正式成为状态量,分别为偏差,偏差和,偏差变化量。

    所以模型更新部分实际只更新了状态量。

    S函数模型输出部分

    参数的初始化

    % 这一段基本上都是一些参数的初始化
    xite=0.2;   % 学习速率
    alfa=0.05;  % 惯性因子
    IN=3;H=5;OUT=3; % 神经网络的3-5-3架构
    
    % 输入层-隐含层的加权系数
    wi=rand(5,3);%产生一个5*3的随机数矩阵,随机数在(0,1)区间
    wi_1=wi;wi_2=wi;wi_3=wi;    % 隐含层加权系数
    % 隐含层-输出层的加权系数
    wo=rand(3,5);   
    wo_1=wo;wo_2=wo;wo_3=wo;    % 输出层加权系数
    Oh=zeros(5,1);  %产生一个1*5的零矩阵(行矩阵),这里就是隐含层
    I=Oh;
    % 输入层的具体输入
    xi=[u(1),u(3),u(5)];%神经网络训练的3个输入,期望值、误差以及实际值
    % PID的3个对应参量
    epid=[x(1);x(2);x(3)];%3个状态变量(偏差、偏差和、偏差变化量)(3*1矩阵,列向量)
    I=xi*wi';%隐层的输入
    

    接着进行隐含层节点和输出层节点值的更新

    % 更新隐含层
    for j=1:1:5
    % 隐含层的节点值
    Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%隐层的输出值(1*5矩阵)行矩阵
    end
    % 更新输出层
    K1=wo*Oh;   % 输出层的输入值(3*1矩阵)
    for i=1:1:3
    % 输出层的输出值
    K(i)=exp(K1(i))/(exp(K1(i))+exp(-K1(i)));%得到输出层的输出(KP、KI、KD)(1*3矩阵,行向量)
    end
    % 这里得到的K相当于是pid的3个参数
    
    % 最终控制器的完全输出值
    u_k=K*epid;%计算得到控制律u,1个值
    

    最后,根据反向传播算法进行权值的调整

     %隐含层至输出层的权值调整
     dyu=sign((u(3)-u(2))/(u(7)-u(6)+0.0001));
     for j=1:1:3
     dK(j)=2/(exp(K1(j))+exp(-K1(j)))^2; %输出层的输出的一阶导
     end
     for i=1:1:3
     delta3(i)=u(5)*dyu*epid(i)*dK(i);  %输出层的delta
     end
     for j=1:1:3
     for i=1:1:5
     d_wo=xite*delta3(j)*Oh(i)+alfa*(wo_1-wo_2);
     end
     end
     % 隐含层-输出层的加权系数的调整
     wo=wo_1+d_wo;
    
    %以下是输入层至隐含层的权值调整
    for i=1:1:5
    dO(i)=4/(exp(I(i))+exp(-I(i)))^2;%(1*5矩阵)
    end
    segma=delta3*wo;%(1*5矩阵,行向量)
    delta2 = dO.*segma;
    d_wi = delta2'*xi+alfa*(wi_1-wi_2);
    % 输入层-隐含层的加权系数调整
    wi=wi_1+d_wi;
    
    % 这里猜测存储的是历史信息?
    wo_3=wo_2;
    wo_2=wo_1;
    wo_1=wo;%储存输出层本次调整后的权值
    
    wi_3=wi_2;
    wi_2=wi_1;
    wi_1=wi;%储存隐层本次调整后的权值
    
    
    Kp=K(1);Ki=K(2);Kd=K(3);
    sys=[u_k,Kp,Ki,Kd];   
    

    S函数完整代码附录

    % 有个疑惑,到底是什么在选择flag?为什么这里没有主函数?
    function [sys,x0,str,ts]=my_exppidf(t,x,u,flag)
    switch flag,
        case 0,
            [sys,x0,str,ts]=mdlInitializeSizes;
        case 2,
            sys=mdlUpdates(x,u);
        case 3,
            sys=mdlOutputs(t,x,u);
        case {1,4,9},
            sys=[];
        otherwise
            error(['unhandled flag=',num2str(flag)]);%异常处理
    end
    
    % 模型初始化
    function[sys,x0,str,ts]=mdlInitializeSizes
        sizes=simsizes;%用于设置模块参数的结构体用simsizes来生成
        sizes.NumContStates=0;%模块连续状态变量的个数
        sizes.NumDiscStates=3;%模块离散状态变量的个数
        sizes.NumOutputs=4;%模块输出变量的个数
        sizes.NumInputs=7;%模块输入变量的个数
        sizes.DirFeedthrough=1;%模块是否存在直接贯通,1表示存在直接贯通,若为0,则mdlOutputs函数里不能有u
        sizes.NumSampleTimes=1;%模块的采样时间个数,至少是一个
        sys=simsizes(sizes);%设置完后赋给sys输出
        x0=zeros(3,1);%系统状态变量设置
        str=[];
        ts=[0 0];%采样周期设为0表示是连续系统,
    %     ts=[0.001 0];%采样周期设为0表示是连续系统,
    function sys=mdlUpdates(x,u)
            T=0.001;
            x=[u(5);x(2)+u(5)*T;(u(5)-u(4))/T];%3个状态量(偏差、偏差和以及偏差变化量),u(5)是偏差,u(4)是上一次的偏差,x(2)则是之前的偏差和
            sys=[x(1);x(2);x(3)];
    function sys=mdlOutputs(t,x,u)
                xite=0.2;
                alfa=0.05;
                IN=3;H=5;OUT=3;
                wi=rand(5,3);%产生一个5*3的随机数矩阵,随机数在(0,1)区间
                wi_1=wi;wi_2=wi;wi_3=wi;
                wo=rand(3,5);
                wo_1=wo;wo_2=wo;wo_3=wo;
                Oh=zeros(5,1);%产生一个1*5的零矩阵(行矩阵)
                I=Oh;
                xi=[u(1),u(3),u(5)];%神经网络训练的3个输入,期望值、误差以及实际值
                epid=[x(1);x(2);x(3)];%3个状态变量(偏差、偏差和、偏差变化量)(3*1矩阵,列向量)
                I=xi*wi';%隐层的输入
                for j=1:1:5
                    Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%隐层的输出值(1*5矩阵)行矩阵
                end
                K1=wo*Oh;%输出层的输入(3*1矩阵)
                for i=1:1:3
                    K(i)=exp(K1(i))/(exp(K1(i))+exp(-K1(i)));%得到输出层的输出(KP、KI、KD)(1*3矩阵,行向量)
                end
                u_k=K*epid;%计算得到控制律u,1个值
                %%以下是权值调整
                %隐含层至输出层的权值调整
                dyu=sign((u(3)-u(2))/(u(7)-u(6)+0.0001));
                for j=1:1:3
                    dK(j)=2/(exp(K1(j))+exp(-K1(j)))^2; %输出层的输出的一阶导
                end
                for i=1:1:3
                    delta3(i)=u(5)*dyu*epid(i)*dK(i);  %输出层的delta
                end
                for j=1:1:3
                    for i=1:1:5
                        d_wo=xite*delta3(j)*Oh(i)+alfa*(wo_1-wo_2);
                    end
                end
                wo=wo_1+d_wo;
                %以下是输入层至隐含层的权值调整
                for i=1:1:5
                    dO(i)=4/(exp(I(i))+exp(-I(i)))^2;%(1*5矩阵)
                end
                segma=delta3*wo;%(1*5矩阵,行向量)
                delta2 = dO.*segma;
                d_wi = delta2'*xi+alfa*(wi_1-wi_2);
                wi=wi_1+d_wi;
                wo_3=wo_2;
                wo_2=wo_1;
                wo_1=wo;%储存输出层本次调整后的权值
                wi_3=wi_2;
                wi_2=wi_1;
                wi_1=wi;%储存隐层本次调整后的权值
             Kp=K(1);Ki=K(2);Kd=K(3);
             sys=[u_k,Kp,Ki,Kd];       
    

    完整simulink模型(建议使用MATLAB2016b或更高版本)+S函数工程文件+原论文和思维导图xmind下载:
    基于S函数的BP神经网络PID控制器及Simulink仿真和对应代码模型.zip

    压缩包截图
    在这里插入图片描述

    展开全文
  • 针对一类输入输出之间具有非线性关系的非线性系统,提出了一种基于2型模糊系统理论的区间2型和TS模糊控制器相结合的模糊控制方法。 为了确保其稳定性,抗干扰能力和最小逼近误差,此设计结合了直接,间接,监督和...
  • 输入饱和的IPMSM最优TS模糊​​控制器
  • TS模糊奇摄动切换系统的控制器设计
  • STM32TS60:多点触感单片控制器
  • STM32TS60:多点触感单片控制器.pdf
  • 模糊控制 MATLAB 仿真

    万次阅读 多人点赞 2018-12-11 23:25:34
    (1)模糊控制器的结构  选用单变量二维模糊控制器控制器的输入为衣物的污泥和油脂,输出为洗涤时间。 (2)定义输入输出模糊集  X:将污泥分为三个模糊集:SD(污泥少),MD(污泥中),LD(污泥多),取值...

    参考《智能控制》第三章

    以模糊洗衣机的设计为例,其控制是一个开环的决策过程,模糊控制按以下步骤进行。

    1)模糊控制器的结构

        选用单变量二维模糊控制器。控制器的输入为衣物的污泥和油脂,输出为洗涤时间。

    2)定义输入输出模糊集

       X:将污泥分为三个模糊集:SD(污泥少),MD(污泥中),LD(污泥多),取值范围为[0100]

       Y:将油脂分为三个模糊集:NG(无油脂),MG(油脂中),LG(油脂多),取值范围为[0100]

       Z:将洗涤时间分为三个模糊集:VS(很短),S(短),M(中等),L(长),VL(很长),取值范围为[060]

    3)定义隶属函数

        选用如下隶属函数:

           a、污泥隶属度

                        

                                    

           b、污泥隶属度

              

                                 

       c、 输出隶属度 

             

                                     

    4)建立模糊控制规则

    根据人的操作经验设计模糊规则,模糊规则设计的标准为:“污泥越多,油脂越多,洗涤时间越长”;“污泥适中,油脂适中,洗涤时间适中”;“污泥越少,油脂越少,洗涤时间越短”。

    5)建立模糊控制表

           根据模糊规则的设计标准,建立模糊规则表

             

    代码如下

    dxp_fis=newfis('fuzz_wash');
    %增加模糊语言变量x
    dxp_fis=addvar(dxp_fis,'input','污泥量x',[0,100]);              
    dxp_fis=addmf(dxp_fis,'input',1,'SD','trimf',[0,0,50]);     %增加模糊语言名称,即模糊集合  污泥少
    dxp_fis=addmf(dxp_fis,'input',1,'MD','trimf',[0,50,100]);   %污泥中
    dxp_fis=addmf(dxp_fis,'input',1,'LD','trimf',[50,100,100]); %污泥多
     %增加模糊语言变量y
    dxp_fis=addvar(dxp_fis,'input','油脂量y',[0,100]);               
    dxp_fis=addmf(dxp_fis,'input',2,'NG','trimf',[0,0,50]);     %无油脂
    dxp_fis=addmf(dxp_fis,'input',2,'MG','trimf',[0,50,100]);   %油脂中
    dxp_fis=addmf(dxp_fis,'input',2,'LG','trimf',[50,100,100]); %油脂多
     %模糊输出变量z
    dxp_fis=addvar(dxp_fis,'output','洗涤时间z',[0,60]);               
    dxp_fis=addmf(dxp_fis,'output',1,'VS','trimf',[0,0,10]);    %很短
    dxp_fis=addmf(dxp_fis,'output',1,'S','trimf',[0,10,25]);    %短
    dxp_fis=addmf(dxp_fis,'output',1,'M','trimf',[10,25,40]);   %中等
    dxp_fis=addmf(dxp_fis,'output',1,'L','trimf',[25,40,60]);   %长
    dxp_fis=addmf(dxp_fis,'output',1,'VL','trimf',[40,60,60]);  %很长
    %[输入1条件索引  输入2条件索引 输出1条件索引 1 1] 
    % 最后两个分别表示该条规则的权重和个条件的关系
    % 1-AND,2-OR
    rule=[
              1 1 1 1 1;                    
       		  1 2 3 1 1;
              1 3 4 1 1;          
              2 1 2 1 1;
              2 2 3 1 1;
              2 3 4 1 1;          
              3 1 3 1 1;
              3 2 4 1 1;
              3 3 5 1 1;
    ];
    dxp_fis = addrule(dxp_fis,rule);
    ruleview('洗衣时间');  %动态仿真

    输入污泥量x=60 油脂量y=70 输出z=33.6    反模糊化采用重心法

          

    展开全文
  • 具有时滞的TS模糊描述符系统的基于观测的滑模控制
  • 一文读懂pid控制器

    千次阅读 2020-05-31 17:06:13
    文章目录PID控制器1. 控制器1.1 电机速度控制系统1.2 温度或水位控制系统1.3 小小总结2. PID3. 模拟式PID4. 数字式PID4.1 位置式PID算法4.1.2 位置式pid算法的缺点4.2 增量式PID算法4.2.2 增量式pid的优点4.3 位置式...

    PID控制器

    1. 控制器

    在研究PID控制器前,必须先想一个问题,控制器的作用到底是什么?相信不少同学在学习自动控制原理的时候,接触最多的是:直接对传递函数进行分析,比如研究某个传函的阶跃响应?幅频特性?稳态误差?根据劳斯判据,根轨迹研究根的分布以判断系统的稳定型?

    那么控制器又是哪里冒出来的?自控中的开环系统或者闭环系统不能解决问题么?其实这是我们认识狭隘了,这句话本身就是不对的,往下看。

    举两个实例:

    1.1 电机速度控制系统

    电机速度

    1. 当出现扰动而使得电机的转速偏离设定值时,测速电动机充当检测变送环节的角色,而它的输出和设定值之间就会出现一个偏差信号(电压信号)
    2. 这个偏差信号通常是比较小的,所以需要放大器对其进行放大
    3. 而这个放大后的电压信号则是触发器的控制电压,控制晶闸管的关断时间,进而调节电动机的电枢电压,从而调节转速直到等于设定值

    在这个控制系统中,电动机显然是被控对象,而它的转速变化规律是可以抽象为一个数学模型的,也就是传递函数;而其他的环节,则是为了共同产生一个控制信号来作为电动机的输入。

    我们可以把比较器称为本文中的调节器,或者将比较器+放大器称为调节器,这不是重点,无伤大雅。

    值得注意的是:这个系统中的所有环节,其控制规律都可以抽象为若干个传递函数

    电机调速

    • Un*为设定值,Un为测量变送的反馈值
    • 两者偏差去调节触发器控制电压Uct,控制规律为Kp
    • 通过晶闸管控制电动机回路总电压Ud0,控制规律为Ks
    • Ud0 - 电枢总电阻电压即为电动机电动势E
    • E = Ceφn,得到输出转速;测速发电机根据转速反馈电压信号,控制规律α

    1.2 温度或水位控制系统

    水位控制

    这个应该是比较简单的过程控制,实际水位低于设定水位时,控制器则作用于执行机构去增大调节阀开度,增加进水流量。

    1.3 小小总结

    不要总是孤立控制器,它们是控制被控对象的必要环节。

    这里给出一般的闭环控制系统框图

    闭环控制框图

    不要单纯的认为只有被控对象才有传递函数,每一个环节都有其相应的控制规律,都可以抽象为一个数学模型,用对应的传递函数来表达。就像最小拍控制器设计中,我们根据输入信号选择整个系统的闭环传函,进而确定控制器的脉冲传递函数。

    总结:对于闭环系统来说,控制器的输入是偏差信号,输出则是控制信号,去控制执行机构,进而调节被控对象

    而闭环控制系统,设计目的就是系统输出对输入的跟随能力

    2. PID

    • P:比例控制器,对系统产生的偏差能够迅速做出反应;但是比例控制器不能消除余差,不过随着比例系数的增大,余差会减小,同时系统输出振荡次数增加,稳定性也会下降,调节时间加长

    关于不能消除余差这一点,从数学角度是可以解释的,求一下余差即可。当然直想也是可以理解的:对于一个速度控制系统,某时刻负载减小,导致转速上升,比例控制器作用于执行机构使得转速下降,假如转速可以下降到设定转速,那么此时负载依然是小于额定负载的,转速依然会上升;所以反证得,最后余差是肯定会存在的。

    • I:积分控制器,积分控制是可以消除余差的,体现于偏差消失后,积分控制器的输出是可以保持前时刻的输出;但是积分控制器的控制动作比较缓慢,一般不单独使用;随着积分系数的增大(时间常数的减小),系统的稳定性下降。

    • D:微分控制器,够体现出当前误差的变化趋势,在偏差出现或变化的瞬间,立即产生强烈的调节作用,从而加快系统的动作速度,减少调节时间;但是由于微分对静态偏差毫无控制能力(偏差存在,但是不变化,控制器输出为0),所以一般不单独使用。并且在纯比例作用的基础上增加微分作用可以提高系统稳定性。

    总结:讲比例,积分,微分三种控制规律结合在一起,只要三项控制作用的强度配合得当,就既能快速调节,又能消除余差,从而得到满意的控制效果。

    3. 模拟式PID

    一般pid框图

    模拟pid控制器的算法:

    模拟pid算法

    • u(t) 为控制器输出,e(t) 为控制器输入,即偏差信号:e(t) = r(t) - y(t)
    • Kp 为比例系数,Ti 为积分时间常数,Td 为微分时间常数

    给出一个简单的matlab模拟pid仿真:
    模拟pid仿真

    参数设置:Kp = 0.5, Ki = 0.2, Kd = 1;输出结果:

    模拟pid仿真结果

    模拟pid局限性

    • 功能单一,灵活性差
    • 信息分散,所用仪表多,且监视不方便
    • 接线过多,系统维护难度大

    随着计算机等技术的发展,数字控制器日益成为工业生产中占据主导地位的控制器。

    4. 数字式PID

    对模拟pid控制器进行离散化处理,用后向差分代替微分得:(具体细节不细说)

    离散化pid算法

    4.1 位置式PID算法

    位置式pid

    • Kp,Ki,Kd为比例,积分,微分的三个重要参数
    • k是采样序列号,k=0,1,2,3…
    • Uk第k次采样时刻控制器输出值
    • ek第k次采样时刻偏差,e(k-1)第k-1次采样偏差值,e(k-2)第k-2次采样偏差值
    • 位置式pid控制器的输入为系统的偏差值,输出为uk,即偏差的组合

    4.1.2 位置式pid算法的缺点

    • 控制器输出与过去的各个状态有关,运算量大
    • 计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变化

    4.2 增量式PID算法

    由位置式pid第k次输出 - 第k-1次输出 得到增量式pid算法:

    增量式pid算法

    增量式pid算法表示的是控制机构(阀门,步进电机等)的调节增量,即k时刻相对于k-1时刻的调节增量。

    值得注意的是:采用增量式pid算法的控制器输出值为调节增量

    从这里也可以得出位置式pid算法的另一种表示形式:
    u(k) = u(k - 1) + Δu

    可以说,位置式pid算法和增量式pid算法是pid算法的两种表现形式,从本质上讲二者是一致的。

    4.2.2 增量式pid的优点

    • 算式中不需要累加;控制增量Δu(k)的确定仅与最近3次的采样值有关
    • 计算机每次只输出控制增量,对应执行机构位置的变化量,不易引起过程的异常操作
    • 手动—自动切换时冲击小。当控制从手动向自动切换时,
      可以作到无扰动切换

    4.3 位置式pid和增量式pid的抉择

    在实际使用中应该使用位置式还是增量式,关键看执行机构的特性:

    • 如果执行机构具有积分特性(如步进电机,具有齿轮传递特性的位置执行机构等),应该使用增量式pid算法
    • 如果执行机构没有积分特性,则应该使用位置式pid算法

    4.4 位置式pid和增量式pid仿真

    function [] = my_simulink_pid()
    % 离散模型
    ts = 0.001;						    % 采样时间
    sys = tf(400, [1, 50, 0]);		    % 传递函数
    d_sys = c2d(sys, ts, 'z');		    % 传递函数离散化
    [num, den] = tfdata(d_sys, 'v');	% 提取分子分母
    
    % pid参数
    kp = 10; ki = 2; kd = 15;
    
    % 初始化信号值
    y_feed = 0;	    % 当前反馈值
    y_prev1 = 0;    % 前一次输出值
    y_prev2 = 0;    % 前前一次输出值
    
    u_prev1 = 0;    % 前一次控制器输出值
    u_prev2 = 0;    % 前前一次控制器输出值
    
    e_prev1 = 0;    % 前一次偏差
    e_prev2 = 0;    % 前前一次偏差
    
    x = [0, 0, 0];  % p i d 分别的输出
    
    for k = 1:1:3000
    	time(k) = k*ts;         % 时间序列,用于画图
    	r_in(k) = 1;            % 输入序列,单位阶跃
    	e(k) = r_in(k) - y_feed;    % 当前时刻偏差
    
    	delta_u = kp*x(1) + ki*x(2) + kd*x(3);
    	% 位置式 PID算法
    	% u(k) = u_prev1 + delta_u;
    	% 增量式 PID算法
    	u(k) = delta_u;
    
    	% 对输出限幅
    	if u(k) >= 10
    		u(k) = 10
    	end
    
    	if u(k) <= -10
    		u(k) = -10
    	end
    	
    	% 值得注意得是,这是输出序列的差分方程;得到他的步骤:
    	% 1. z变换得到脉冲传递函数
    	% 2. 分子分母乘上z的最高次幂的导数,本例中就是z^-2
    	% 3. 交叉相乘,整理
    	% 4. z反变换
    	y_out(k) = -den(2)*y_prev1- den(3)*y_prev2 + num(2)*u_prev1 + num(3)*u_prev2;  % 系统输出序列
    	y_feed = y_out(k);	    % 反馈值
    
    	u_prev2 = u_prev1;      % 更新控制器输出
    	u_prev1 = u(k);
    	y_prev2 = y_prev1;      % 更新系统输出
    	y_prev1 = y_out(k);
    
    	x(1) = e(k) - e_prev1;
    	x(2) = e(k);
    	x(3) = e(k) - 2*e_prev1 + e_prev2;
    	e_prev2 = e_prev1;      % 更新偏差
    	e_prev1 = e(k);
    end
    
    % 画图
    figure(1);
    plot(time, r_in, 'b', time, y_out, 'r'); 
    axis([0, 3, 0, 1.5]);                           % 确定坐标轴范围
    xlabel('time(s)'),ylabel('r_in, y_out');   		% 系统输出和系统输入的曲线
    
    figure(2);
    plot(time, r_in, 'b', time, u, '--k'); 
    axis([0, 3, -0.2, 2.5]);                        % 确定坐标轴范围
    xlabel('time(s)'),ylabel('r_in, u_out');   		% 控制器输出和系统输入的曲线		
    

    仿真结果:

    增量式pid——系统食输出和系统输入曲线图

    r&y

    增量式pid——控制器输出和系统输入曲线图

    r&u

    关于位置式pid算法,在代码中也有标注,只需要加前一时刻控制器输出即可,至于参数的整定,在这里不详细说明。

    欢迎指出不足,共同进步,谢谢~

    展开全文
  • DB2100控水控制器说明书pdf,DB2100控水控制器说明书
  • 基于TS模型的超级电容储能联合体DC / DC转换的模型预测控制
  • DPS2-24W24-2T数字控制器使用说明书.pdf
  • 【Matlab】简单的滑模控制程序及Simulink仿真

    万次阅读 多人点赞 2019-11-17 23:06:09
    最近开始了对滑模控制的学习,使用的书籍为刘金琨的《滑膜变结构控制MATLAB仿真》,今天是按照书上的例程做了一个简单的自适应控制系统。 2.程序解析 此程序中,电机控制系统的动态模型为: ,其中,θ为电机的角...

    1.前言

    最近开始了对滑模控制的学习,使用的书籍为刘金琨的《滑膜变结构控制MATLAB仿真》,今天是按照书上的例程做了一个简单的自适应控制系统。

    2.程序解析

    此程序中,电机控制系统的动态模型为:

    J\ddot{\Theta}=u+d(t),其中,θ为电机的角位置,J为转动惯量,d(t)为干扰且满足\left | d(t) \right |\leq \eta,η为干扰上界,e=\Theta-\Theta_d为角位置跟踪误差

    定义跟踪误差函数,也就是滑模面函数s为:s=ce+\dot{e},c> 0,当s=0时,有e和edot都为0,且是按照指数收敛:e(t)=e(0)e^-^c^t

    也就是说当时间趋于∞时,误差将指数收敛到0,收敛速度取决于c,所以误差函数s的收敛性意味着位置跟踪误差e和速度跟踪误差e'的收敛性,也就是说:s为滑膜函数。

    2.1.控制器代码

    首先是控制器的S函数。控制器就是系统的输入控制量u:

    function [sys,x0,str,ts] = simple_adaptive_controller(t, x, u, flag)
    switch flag,
      case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;  % 调用初始化子函数
      case 1,
        sys=[];
      case 2,
        sys=[];
      case 3,
        sys=mdlOutputs(t,x,u);    %计算输出子函数
      case 4,
        sys=[];   %计算下一仿真时刻子函数
      case 9,
        sys=[];    %终止仿真子函数
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    
    end
    
    function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes   %初始化子函数
    
    sizes = simsizes;
    
    sizes.NumContStates  = 0;  %连续状态变量个数
    sizes.NumDiscStates  = 0;  %离散状态变量个数
    sizes.NumOutputs     = 1;  %输出变量个数
    sizes.NumInputs      = 3;   %输入变量个数
    sizes.DirFeedthrough = 1;   %输入信号是否在输出端出现
    sizes.NumSampleTimes = 0;   % at least one sample time is needed
    
    sys = simsizes(sizes);
    x0  = [];   %初始值
    str = [];   
    ts  = [];   %[0 0]用于连续系统,[-1 0]表示继承其前的采样时间设置
    simStateCompliance = 'UnknownSimState';
    
    function sys=mdlOutputs(t,x,u)   %计算输出子函数
    
    J = 2;
    thd = u(1);
    th = u(2);
    dth = u(3);
    
    e = th - thd;
    de = dth;
    c = 10;
    s = c*e + de;
    xite = 1.1;
    
    k = 0;
    ut = J*(-c*dth-1/J*(k*s+xite*sign(s)));
    sys(1) = ut;

    因为控制器不涉及到复杂的微分运算,故只用在mdlOutputs中写控制输入u的代码

    2.2.受控对象代码

    本例中,受控对象为电机控制系统,J\ddot{\Theta}=u+d(t),需要对这个微分方程进行描述,因为要用到θ、θ',虽然方程中有θ'',但是可以通过除以J得到θ''的表达式,故代码如下:

    function [sys,x0,str,ts] = plant(t, x, u, flag)
    switch flag,
      case 0,
        [sys,x0,str,ts]=mdlInitializeSizes;  % 调用初始化子函数
      case 1,
        sys=mdlDerivatives(t,x,u);   %调用计算微分子函数
      case 2,
        sys=[];
      case 3,
        sys=mdlOutputs(t,x,u);    %计算输出子函数
      case 4,
        sys=[];   %计算下一仿真时刻子函数
      case 9,
        sys=[];    %终止仿真子函数
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    
    end
    
    function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes   %初始化子函数
    
    sizes = simsizes;
    
    sizes.NumContStates  = 2;  %连续状态变量个数
    sizes.NumDiscStates  = 0;  %离散状态变量个数
    sizes.NumOutputs     = 2;  %输出变量个数
    sizes.NumInputs      = 1;   %输入变量个数
    sizes.DirFeedthrough = 0;   %输入信号是否在输出端出现
    sizes.NumSampleTimes = 1;   % at least one sample time is needed
    
    sys = simsizes(sizes);
    x0  = [0, 0];   %初始值
    str = [];   
    ts  = [0 0];   %[0 0]用于连续系统,[-1 0]表示继承其前的采样时间设置
    simStateCompliance = 'UnknownSimState';
    
    function sys = mdlDerivatives(t, x, u)    %计算微分子函数
    J = 2;
    dt = sin(t);
    ut = u(1);
    sys(1) = x(2);
    sys(2) = 1/J*(ut+dt);
    
    function sys=mdlOutputs(t,x,u)   %计算输出子函数
    sys(1) = x(1);
    sys(2) = x(2);

    3.仿真结果和Simulink注意事项

    Simulink建立如下模型:

    将微分方程算法换为定步长fixed step中的ode4!不然仿真超级慢!

    具体分析可见:https://www.ilovematlab.cn/thread-260054-1-1.html

     

    最后结果为:

    系统最终能够跟踪阶跃信号

     

    展开全文
  • js/ts 装饰

    千次阅读 2018-08-28 14:47:58
    第一次听说装饰是在多年前玩python的时候,在python的众多web框架中都大量使用了装饰来抽象功能逻辑或注入元数据...下面我们简要了解一下装饰模式,装饰是什么,js/ts有什么类型的装饰,使用装饰的好处...
  • 2.5 模拟脚踏速度控制设计控制器对用户脚踏信号的采集是通过给可调电阻提供5 V 电压,在不同位置将输出不同电压,通过电压值控制速度的大小.因此用三路模拟电压通路给控制器的接受电路发送不同状态的电压值,以此来...
  • 本篇文章主要介绍了详解IWinter 一个路由转控制器的 Nodejs 库,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 观点:意法半导体微控制器产品部总经理Jim Nicholas:“电阻式多点触感单片控制器STM32TS60是意法半导体新的STMTouch系列产品的首款产品,为客户提供功耗极低而可靠性很高的可替代电容触摸屏的解决方案。STMTouch是...
  • Sugeno型(TS型)模糊推理系统及自适应神经网络的模糊推理系统(anfis)应用Sugeno(TS)型模糊推理系统线性形式1.输出函数f(x1,x2,…)...TS系统特点:输出量是输入量的线性函数,与Mamdani控制器的最大不同是没...
  • 本电磁炉控制电路由MCU主芯片(S3F9454822-94DK)、八选一电子模拟开关HCF4051、六反相TC4069(多谐振荡)、LED驱动控制译码TM1628及四位数码管显示器、七只触摸式按键等组成,如图1所示。(见文章结尾)  1...
  • 基于BP神经网络PID控制+Simulink仿真

    万次阅读 多人点赞 2019-05-30 10:58:30
    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。 神经网络具有任意非线性表达能力,可以通过对系统... 控制器由两部分组成:经典增量式PID控制器;BP神经网络 ...
  • 变频,变频调速操作控制,QY-TS02

    千次阅读 2019-12-10 16:43:59
    变频(Variable-frequency Drive,VFD)是应用变频技术与微电子技术,通过改变电机工作电源频率方式来控制交流电动机的电力控制设备。主要由整流(交流变直流)、滤波、逆变(直流变交流)、制动单元、驱动单元、...
  • 针对基于执行器饱和的不确定 TS 模糊时滞系统,设计了记忆耗散控制器。使用 Wirtinger不等式,得到了使闭环系统既渐近稳定又满足耗散指标的时滞依赖条件。通过求解线性矩阵不等式,得到了控制器增益矩阵。最后,闭环系统...
  • 基于TS模糊模型的一类非线性广义系统的时滞相关有限时间H∞控制器设计。
  • PID控制器构造完毕,我们需要通过r(k)和y(k)得到e(k),再通过e(k)得出u(k),进而再求解出y(k),再结合r(k)求解出e(k),…以此循环,求解出离散的响应点。 详细的代码如下: ts = 0.005 ; % 采样时间 = 0.005 s ...
  • 赛普拉斯半导体公司(Cypress Semiconductor Corp.)推出其专为汽车应用而优化的CY7C67300 EZ-Host?... EZ-Host器件是一款多端口嵌入式主机/外设控制器,包含1个高性能16位RISC微控制器、2个可配置USB串行接口

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,806
精华内容 15,922
关键字:

ts控制器