精华内容
下载资源
问答
  • MATLAB PID控制程序

    2014-08-25 16:45:20
    PID控制参数求解,利用matlab 控制PID参数使得在程序中有所应用
  • PID控制程序 matlab

    2018-01-14 14:47:34
    最近在学习PID的一些知识,只是matlabPID控制程序代码
  • LabVIEW和Matlab混合编程的预测PID控制器研究.pdf
  • PID算法matlab编写

    2013-12-21 16:56:37
    基于matlabPID算法控制,simulink的建模与仿真,一阶传递函数类型的被控对象。
  • MATLAB生成pid代码,可以直接在编程中使用,包括模型和参数。可以直接滑动response time和transient,与之前的曲线对比然后更新数据就可以将pid调的比较好了。也可以直接上面更改pid的值。
  • MATLAB 学习小程序: PID神经元网络解耦控制算法_多变量系统控制
  • 一份智能控制的课程报告,包括PID参数整定的简便有效方法及模糊控制器的设计,包含二者的详细matlab仿真,及其结果对比,可以依葫芦画瓢。
  • 现在大多数的大型火电单元机组都是PID控制,这个程序是基于单元机组的数学模型,用MATlAB对它进行仿真。具体参数都是调好的
  • 基于VC 与MATLAB混合编程的温度控制系统的模拟,程国怀,,应用MATLAB的engine引擎函数实现VC 与MATLAB的混合编程,结合温度PID控制系统实例,详细介绍参数的优化和接口实现的过程,最后在VC 的界面
  • 其实这篇文章基本是转自一片论文的,只是论文是用simulink仿真实现,而这里的使用代码实现,并且只是注重实现的...用matlab编程法和游动鼠标法求二阶传递函数的上升时间、峰值时间、超调量和调节时间 PID算法模...

    这篇文章基本是转自一片论文的,只是论文是用simulink仿真实现,而这里的使用代码实现,并且只是注重实现的方法,对理论分析并没有太多的描述。以下是论文链接,可以相互参考一下:
    基于临界比例度法整定PID控制器参数的仿真研究
    这篇的内容与上两篇是有一定联系的,也可以参考一下之前两篇加强理解:

    1. 用matlab的编程法和游动鼠标法求二阶传递函数的上升时间、峰值时间、超调量和调节时间
    2. PID算法模型分析:基于温度控制

    问题:

    某系统的开环传递函数?0 (?)=1/(?(?+2)(?+4)),试采用临界比例度计算系统的P、PI、PID控制器的参数,并绘制整定后的单位阶跃响应曲线。将阶跃响应曲线导入到MATLAB的工作空间中,在命令窗口绘制该系统的阶跃响应曲线。

    临界比例度法:

    已知传递函数,用纯比例调节控制系统,调节比例度,得到系统等幅振荡的曲线后,即可的到此时的临界比例度 δK 和临界振荡周期 TK,其中:
    δK: 即此时比例度。
    TK: 相邻两个波峰之间的时间间隔。
    注意:只有三阶及三阶以上系统才有可能产生临界振荡,才能使用此方法获取以上参数。

    步骤:

    1. 构造函数,经过初步调节将Kp的值设为24,开始按照4的步长增加Kp的值,得到Kp等于48时,出现等幅振荡,并可计算得到 Tk 为2.2256,如下两图:

    获取临界比例度和临界振荡周期的代码
    调整Kp值时波形的变化
    2. 有得到的数据并根据下表方法可以得到相应的参数:

    控制方法KpKiKd
    P控制δK / 2
    PI控制δK / 2.2Kp / (0.833 × TK)
    PID控制δK / 1.7Kp / (0.5 × TK)0.125 × TK × Kp

    并构建函数如下:
    在这里插入图片描述
    运行可得如下三种情况的阶跃响应图像(曲线中标的点只是用来标识曲线的名字,没有其他特殊的含义),可见,虽然三种调节都有超调量,但是PID调节得到的系统性能参数最好,也就是说,PID调节是最理想的:
    参数整定后的曲线

    添加到工作空间,并在命令行窗口绘制阶跃响应图像

    如下图,我的文件是在作业3中,所以右键-添加到路径-选定的文件夹:

    在这里插入图片描述
    然后便可以在命令行中输入文件名运行代码了,我的文件名是pid_0.m,所以输入如下:
    在这里插入图片描述
    如果以相同的方法从工作空间移除后会出现以下错误:
    在这里插入图片描述

    >>> 完 <<<

    展开全文
  • 上篇介绍了连续系统的PID算法,但是计算机控制是一种采样控制,他只能根据采样时刻的偏差来计算控制量,因此计算机控制系统中,必须对公式进行离散化,具体就是用求和代替积分,用向后差分来代替微分,使模拟PID离散...

    GitHub 微信公众号 知乎 B站 CSDN

    引言

    上篇介绍了连续系统的PID算法,但是计算机控制是一种采样控制,他只能根据采样时刻的偏差来计算控制量,因此计算机控制系统中,必须对公式进行离散化,具体就是用求和代替积分,用向后差分来代替微分,使模拟PID离散化为数字形式的差分方程。

    1 准备工作

    在采样周期足够小时,可以作如下近似:
    在这里插入图片描述式中

    • T————为采样周期
    • k————为采样序号,k=0,1,2….

    用这种近似方法,可以得到两种形式数字PID控制算法

    1.1 位置式PID算法

    由前面推倒很容易得到离散化后的表达式
    在这里插入图片描述

    由此式可以看出数字调节的输出u(k)跟过去的所有偏差信号有关,计算机需要对e(i)进行累加,运算量太大,一般不用,重点说明增量式PID算法。

    1.2 增量式PID算法

    由于位置式PID的算法不够方便,不仅对偏差进行累加,占用过多的存储单元,而且不方便写程序,所以需要进行一些改进,对位置式取增量,方法如下:
    在这里插入图片描述


    2 Matlab仿真

    分析过程

    1. 对G(s)进行离散化即进行Z变换得到Z传递函数G(Z);
    2. 分子分母除以z的最高次数即除以z的最高次得到;
    3. 由z的位移定理Z[e(t-kt)]=z^k*E(z)逆变换得到差分方程;
    4. PID编程实现

    具体实现细节在代码注释中已经给出

        %设一被控对象G(s)=50/(0.125s^2+7s),  
        %用增量式PID控制算法编写仿真程序  
        %(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-3,3],  
        %  仿真曲线包括系统输出及误差曲线)。  
    
        ts=0.001;                 %采样时间  
        sys=tf(50,[0.125,7, 0]); %tf是传递函数  即被控对象函数G();  
        dsys=c2d(sys,ts,'z');    %把控制函数离散化取Z变换n阶定常离散系统差分方程
                                    %在零初始条件下取Z变换:
                                    %dsys即Y(z)/U(z)
        [num,den]=tfdata(dsys,'v');% 离散化后提取分子、分母    
        u_1=0.0;  
        u_2=0.0;  
        y_1=0.0;  
        y_2=0.0;  
        x=[0,0,0]';  
        error_1=0;  
        error_2=0;  
        %核心代码
    
        for k=1:1:1000  
        time(k)=k*ts;                        %采样次数  
        S=1;  
        if S==1                              %阶跃输入
            kp=6.5;ki=0.1;kd=1;              %初始化PID    
            rin(k)=1;                        %Step Signal   
        elseif S==2                          %正弦输入
            kp=10;ki=0.1;kd=15;             
            rin(k)=0.5*sin(2*pi*k*ts);       %Sine Signal 即实际输入      
        end 
    
        du(k)=kp*x(1)+kd*x(2)+ki*x(3);       %PID Controller   控制系数    
        u(k)=u_1+du(k);                      %真正的PID输出应该为du+前一时刻的输出
        if u(k)>=3         
           u(k)=3;  
        end  
        if u(k)<=-3  
           u(k)=-3;  
        end  
    
        %Linear model 难点就是把传递函数转化为差分方程,以实现PID控制。 
        yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;          %实际输出 num为dsys分子多项式系数,den为dsys分母多项式系数,从n阶定常离散系统差分方程变化来的。
        error(k)=rin(k)-yout(k);                        % 误差=输入-输出 
        u_2=u_1;                                        %保存上上次输入   为下次计算  
        u_1=u(k);                                       %保存上一次控制系数   为下次计算  
        y_2=y_1;                                        %保存上上次次输出   为下次计算  
        y_1=yout(k);                                    %保存上一次输出   为下次计算  
    
        x(1)=error(k)-error_1;                          %KP的系数  
        x(2)=error(k)-2*error_1+error_2;                %KD的系数  
        x(3)=error(k);                                  %KI的系数
        error_2=error_1;                                %上次的变上上次误差
        error_1=error(k);                               %这次的变上次的误差
        end 
    
    
        figure(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'); 
    

    2.1 仿真效果(PID调参后)

    在这里插入图片描述
    在这里插入图片描述

    2.2 调参过程

    • Step 1
      确定比例系数Kp

      确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为

      纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。

    • Step 2
      确定积分时间常数Ti

      比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。

    • Step 3
      确定微分时间常数Td;
      微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。

    • Step 4
      系统空载、带载联调;
      对PID参数进行微调,直到满足性能要求。

    2.3 Simulink仿真部分

    这里使用Simulink仿真也非常的方便,只需要设定好PID控制器的参数和传递函数即可
    在这里插入图片描述
    这里注意Filter coefficient这个参数起前向滤波作用,这里取得1
    在这里插入图片描述

    微分环节的缺点,就是误差e变化微弱的时候,如果D过大会产生过大的修正量,导致震动不但不减小反而扩大。
    滤波器的作用就是滤除高频修正,使D更好用,说白了是一个改进型

    在这里插入图片描述

    在这里插入图片描述

    运行后双击示波器查看结果
    在这里插入图片描述
    在这里插入图片描述

    3 结论

    (1)对于PID 参数采用 MATLAB 进行整定和仿真,使用起来不仅快捷、方便,而且更为直观,同时也避免了传统方法反复修改参数调试。
      (2)系统的响应速度会随Kp值的增大而加快,同时也有助于静差的减小,而Kp值过大则会使系统有较大超调,稳定性变坏;此外,系统的动作会因为过小的Kp值减慢。
      (3)超调的减小、振荡变小以及系统稳定性的增加都取决于积分时间Ti的增大,但是系统静差消除时间会因为Ti的增大而变长。
      (4)增大微分时间Td对于系统的稳定性、系统响应速度的加快以及系统超调量的减小都会有所帮助。但是如果Td过大,则会使得调节时间较长,超调量也会增大;如果Td过小,同样地也会发生以上状况。
      (5)总之PID 参数的整定必须考虑在不同时刻三个参数的作用以及彼此之间的作用关系。

    相关Matlab代码和Simulink仿真文件请关注公众号:迈微电子研发社(左侧或下方微信扫码即可)回复“PID算法”,获取免费下载链接

    相关阅读

    1. 深入浅出PID控制算法(一)————连续控制系统的PID算法及MATLAB仿真 原文链接:https://blog.csdn.net/Charmve/article/details/104538102
    2. 深入浅出PID控制算法(三)————增量式与位置式PID算法的C语言实现与电机控制经验总结 原文链接:https://blog.csdn.net/Charmve/article/details/104536504
    3. 单片机应用系统课程设计——基于PID的直流电机调速控制系统 原文链接:https://blog.csdn.net/Charmve/article/details/103466831
    4. 2015 年全国电赛题——风力摆控制系统(B 题)原文链接:https://blog.csdn.net/Charmve/article/details/103922460

    -END-

    知识星球


    在这里插入图片描述

    △微信扫一扫关注「迈微AI研习社」公众号

    在这里插入图片描述

    展开全文
  • 基于matlab数字pid控制代码PID马达控制器 抽象的 DC motors are used in industry extensively due to their high reliability, low cost, simple control of speed and position, low energy consumption and ...
  • 抗积分饱和PID控制算法PDF文档+MATLAB源程序,全部通过测试
  • 通过串口转发给arm单片机,ARM单片机接收上位机的目标值及电机反馈回来的转数,利用PID控制器计算出0-1023的控制指令,传给D/A转换器,它将数字信号转换为0~5V的模拟信号,模拟信号经过电源隔离模块后传送到驱动...
  • 这是PID的标准形式包括比例/积分/微分三部分,e为偏差 下面我们分析三个环节的作用,设:当前系统状态A,目标状态B, e=B-A,初始状态e>0 (以下是个人的理解,欢迎读者评论) 1 比例环节P e越大u越大,当A...

    这是PID的标准形式包括比例/积分/微分三部分,e为偏差

    下面我们分析三个环节的作用,设:当前系统状态A,目标状态B, e=B-A,初始状态e>0

    (以下是个人的理解,欢迎读者评论)

    1 比例环节P

    e越大u越大,当A近似B时,e非常小,u也非常小,现实系统的u除了要满足自身系统的需求,还要分担给克服磨擦,空气阻力等等,因此最终A总是和B差一点,这个很小的u用在克服阻碍上了(它会存在一个小误差)

    2 微分环节d

    此环节就是e的斜率,A在趋近B的过程中e的值始终为正,但e的斜率为负,它不希望e变化,当A稳定在恒定值时,e的斜率为零,它也就失去作用(但它无法消除误差)

    3 积分环节i

    我们一直都知道,积分的数学意义就是求函数与坐标轴围成的面积(这里是指A与目标B围成的面积),它希望面积为零,当比例环节造成的误差存在时(此时A<B),它就会发挥作用,直到围成的面积和为零(它可以消除误差)

     

    这是编程中u的计算方法

    u(i) = Kp * (x_last - x(i)) +

          Ki * (x_last - 2 * x(i - 1) + x(i - 2)) +

          Kd * x_last

    u为控制量,x_last为目标值。x(i)为当前值

    下面是matlab编程实例:

    已知:A= [-2 -1;1 0] , B = [1 ; 0],现用P控制器来控制这个系统(搞清楚P控制,积分微分内容也是如法炮制)

    matlab脚本如下:

    A = [-2 -1;

             1 0];

    B = [1;0];

    C = [0 0];

    D = 0;

    sys = ss(A,B,C,D);%组成空间量

    sys1 = c2d(sys,0.1);%转为离散,采样时间0.1s

    x = [1;0];%系统初始状态

    x_last = [0;0];%我们期望的最终目标

    Kp = [0.001 0.001];%系数不能太大,这里Kp是1*2的

    %Ki.......

    %Kd........

    %下面开始进行P控制

    for i = 1:100

      u = Kp * (x_last - x(:,i));%u控制器算出的控制量

      x(:,i+1) = sys1(1,1).A * x(:,i) + sys1(1,1).B * u;%为了保证矩阵维度一致,u必须是1*1的,所以Kp需要是1*2的

    end

    到此程序结束,在这要注意几点:

    1 一定要注意矩阵维度问题,维度很容易出错;

    2 循环时要保证每个状态都能被循环到;

     3     注意系数不能太大,有时候调试半天也不知道是怎么回事,其实就是系数太大导致u大的离谱;

     

    转载于:https://www.cnblogs.com/niulang/p/9049265.html

    展开全文
  • 离散控制Matlab代码PID控制器算法 该库受MIT许可的约束,因此允许将其用于商业用途,修改,分发和私人使用,而不承担任何担保和责任。 PID控制器算法是用C编程语言开发的,以简化其在嵌入式系统中的实现。 因此,该...
  • 先进PID控制及其MATLAB仿真经典书籍程序-先进PID4.rar 书中介绍了模糊结合PID,神经网络结合的PID,程序很详细,值得深入学习
  • 本资源是PID神经元网络解耦控制算法_多变量系统控制的matlab仿真。根据PID神经元网络控制器原理,在matlab编程实现PID神经元网络控制多变量。
  • 这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...
  • 这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...
  • 关于PID 控制的一些仿真例子,pidmatlab编程的实际运用
  • 简单的卫星姿态控制系统,采用基于飞轮的PID控制,动力学方程参考《航天器姿态动力学与控制》,使用了两种编程方式,m文件与Simulink+S函数,适合初学者学习与改进。
  • matlab pid源码前叉-BLRS 15“转折点机器人 适用于2018-19 VEX U转折点赛季的BLRS 15“机器人小组的PROS 3代码。 强调 由两个无动力编码器轮驱动的里程表 一种改进的纯跟踪算法和RAMSETE控制器,用作OkapiLib的...
  • pidmatlab编程的实际运用
  • matlabpid控制

    2011-11-25 20:39:15
    位置pid matlab编程,增量pid编程
  • 通过PID控制,根轨迹控制,状态空间方程等控制控制飞机俯仰角变化
  • PID控制原理及编程方法.pdf PID控制教程.exe PID控制算法.pdf PID控制经典培训教程.pdf PID源程序.doc PID用在智能车上的目的.pdf PID算法.txt PID算法再理解.doc PID算法原理、调试经验以及代码.pdf PID算法原理及...
  • 这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...
  • 这是VC与Labview、Matlab编程论文资料,全部为pdf格式,讲述有VC编程技巧、也有VC与Labview混合编程, VC与matlab混合编程,有365个,约500M,分成4个【独立】压缩包,如果想要全部的论文则需要下载全部压 缩包,...
  • Matlab 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。因而其在电子行业...

    Matlab 和MathemaTIca、Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。Matlab 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。因而其在电子行业也有广泛应用。

    b45a345c3394724d9ac56b2a71050628.png

    Matlab 入门宝典:(点击带社区名称的标题即可下载)《初学者宝典——Matlab 基础及其应用教程》
    《Matlab 从入门到精通》
    《Matlab 常用函数参考》
    《Matlab 信号处理宝典》

    书籍分享——一些和matlab有关的书_电子技术基础-面包板社区《Matlab 编程-菜鸟入门》
    MATLAB编程-菜鸟入门(清晰版)-面包板社区《Matlab 揭秘》
    《Matlab揭秘》中文版-面包板社区
    Matlab 编程与算法:
    《Matlab 编程(中文第二版)》
    国外高校电子信息类优秀教材---MATLAB 编程(中文第二版)-Stephen J C著-面包板社区《Matlab 语言常用算法程序集》
    《MATLAB语言常用算法程序集》-面包板社区《Matlab 高效编程25个案例,可应用于数学建模等》
    Matlab高效编程案例-面包板社区《精通Matlab 最优化计算》
    《精通MATLAB最优化计算(第2版)》-面包板社区《Matlab 算法大全》
    《Matlab 7 官方学习手册》
    《Matlab 2013 超强教程》

    资料:Matlab编程与算法教程_电子技术基础-面包板社区《Matlab 智能算法30个案例分析及源代码》
    MATLAB智能算法30个案例分析及源代码-面包板社区《卡尔曼滤波简介及其算法MATLAB实现代码》
    卡尔曼滤波简介及其算法MATLAB实现代码-面包板社区《小波分析基础》
    《基于Matlab 的系统分析与设计——小波分析》
    《Matlab 小波分析高级技术》
    《时间序列的小波分析》

    资料:MATLAB小波分析_EDA工具与IC设计-面包板社区《如何用Matlab 对信号进行傅里叶变换》
    如何用matlab对信号进行傅里叶变换_可编程器件-面包板社区补充资料:
    《Matlab 语言与 C 语言的区别》
    MATLAB语言与C语言的区别_嵌入式系统与MCU-面包板社区
    《基于Matlab 的有源滤波器的实现 》
    基于MATLAB的有源滤波器的实现-面包板社区
    《先进PID控制Matlab 仿真》
    《先进PID控制MATLAB仿真》-刘金琨-第2版-面包板社区《MATLAB-Simulink 电力系统建模与仿真》
    《MATLAB-Simulink 电力系统建模与仿真》-面包板社区
    《工程与科学数值方法的Matlab 实现》
    好书推荐:工程与科学数值方法的MATLAB实现(第2版)_EDA工具与IC设计-面包板社区《Matlab 神经网络43个案例分析》
    MATLAB神经网络-面包板社区《数字图像处理与机器视觉-VC++与Matlab 实现》源码+文件
    MATLAB神经网络-面包板社区

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 879
精华内容 351
关键字:

matlabpid编程

matlab 订阅