增量式PID的matlab仿真_增量式pid的matlab含性能分析-程序员宅基地

首先,增量式PID的实现公式:

式中 Δe(k)=e(k)-e(k-1)

进一步可以改写成

       

式中       、

 

为了便于理解,也可写成:

式中e(k)为第k次采样时的设定值与实际值的差,e(k-1)为上一次采样时的设定值与实际值的差值,e(k-2)一样类推。

所以增量式PID 输出的是控制量的增量,无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

而且,由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,

因此对系统影响较大。

%执行机构需要的是控制量的增量,例如驱动不仅电机的时候,采用增量式PID控制,
%增量式PID控制算法中不需要累加,控制增量u(k)仅与最近k次的采样有关,所以误动作影响小。
%设一被控对象G(s)=50/(0.125s^2+7s),  
%用增量式PID控制算法编写仿真程序  
%(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],  
%  仿真曲线包括系统输出及误差曲线,并加上注释、图例)。  
  
clc;
clear ;     
ts=0.001;                  %采样时间  
%sys=tf(50,[0.125,7, 0]);  %tf是传递函数,用来实现G(s);  在自动控制领域经常用到,
sys=tf(400,[1,50,0]);   
%sys=tf(50,[5,50,0]);
dsys=c2d(sys,ts,'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:3000  
time(k)=k*ts;    %采样次数  

S=1;   %选择需要跟踪的函数
if S==1  
   % kp=10;ki=0.1;kd=15;             %初始化PID
    %kp=8;ki=0.1;kd=10;
    kp=8;ki=0.1;kd=10;
    rin(k)=1;            %Step Signal ,阶跃信号  
end
if S==2  
    kp=10;ki=0.1;kd=15;               
    rin(k)=0.5*sin(2*pi*k*ts);       %Sine Signal   正弦信号  
end    
if S==3          %三角波信号 
     kp=10;ki=0.1;kd=15;
     if mod(time(k),2)<1
         rin(k)=mod(time(k),1);
     else
         rin(k)=1-mod(time(k),1);
     end
     rin(k)=rin(k)-0.5;
end
if S==4     %锯齿波信号
    kp=8;ki=0.05;kd=4; %测试得合适参数,如果输出过冲,可将kd调小。
    rin(k)=mod(time(k),1);
end
 
du(k)=kp*x(1)+kd*x(2)+ki*x(3);      %PID Controller   控制系数    
u(k)=u_1+du(k); 

if u(k)>=10         %Restricting the output of controller,输出限幅
   u(k)=10;  
end  
if u(k)<=-10  
   u(k)=-10;  
end  

%Linear model  
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;          %实际输出  
error(k)=rin(k)-yout(k);                                       %Return of parameters 误差  
u_2=u_1;                                                       %保存上上次输入   为下次计算  
u_1=u(k);                                                      %保存上一次控制系数   为下次计算  
y_2=y_1;                                                       %保存上上次次输出   为下次计算  
y_1=yout(k);                                                   %保存上一次输出   为下次计算  

x(1)=error(k)-error_1;            %Calculating P  
x(2)=error(k)-2*error_1+error_2;  %Calculating D  
x(3)=error(k);                    %Calculating I  

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');  

http://blog.csdn.net/m0_37655357/article/details/72628300

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuyangyg/article/details/77387810

智能推荐

android 开发笔记 (黎活明)_android 开发 黎活明-程序员宅基地

文章浏览阅读928次。android 笔记 1.android UI布局方式: LinearLayout (线性布局)、AbsoluteLayout(绝对布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局) 2.android 拨号器: 2.1 manifest 配置拨号器权限: _android 开发 黎活明

【练习5.3】高斯平滑_调整调整4个参数的处理效果对比-程序员宅基地

文章浏览阅读356次。学习OpenCV》中文版第5章第3题提纲题目要求程序代码结果图片题目要求:a、设置param1=param2=9,依次将param3设为1和6对比b、设置param1=param2=0,依次将param3设为1和6对比c、设置param1=param2=0,但这时令param3=1,param4=9,处..._高斯平滑处理函数的参数

遇到跨域的问题(origin:* 多处使用,导致失效)_addallowedorigin多个-程序员宅基地

文章浏览阅读775次。在网关中使用了以下代码/** * 配置路由支持跨域 * * @return */ @Bean @Order(Integer.MAX_VALUE) public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource_addallowedorigin多个

redis集群分布式锁的使用(Integration)_integration-redis-程序员宅基地

文章浏览阅读526次。基于Spring Integration使用分布式锁Spring Integration这个项目中已经实现了上面说的RedLock算法,开发中可以直接使用现成的分布式锁RedisLockRegistry 是实现对象,其obtain方法可以获得全局所对象;1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b_integration-redis

mysql中select column_name from Information_schema.columns where table_Name = 'test'出现多个字段的问题_sqlquery error sqlcommand: select column_name from-程序员宅基地

文章浏览阅读1.4w次,点赞8次,收藏8次。在mysql中,通过sql查询某个表字段时,会出现一些这个表中没有的字段例:select column_name from Information_schema.columns where table_Name = 'test';因为这个表在其它库中也存在了,所以会出现多余的字段。解决办法:select column_name from Information_s_sqlquery error sqlcommand: select column_name from information_schema.column

java学习日志(二)_java学习日志200字-程序员宅基地

文章浏览阅读168次。1.编写程序:输出200以内所有奇数,并要求每行输出10个数。public class OddNumber{ public static void main(String[] args){ int g=0; for (int i=1;i<=200;i+=2){ System.out.print(i+"\t");g++; if (g%10==0) { Sys_java学习日志200字

随便推点

主线程和子线程的区别_进程主线程子线程-程序员宅基地

文章浏览阅读4.2k次。主线程和子线程的区别每个线程都有一个唯一标示符,来区分线程中的主次关系的说法。 线程唯一标示符:Thread.CurrentThread.ManagedThreadID;UI界面和Main函数均为主线程。被Thread包含的“方法体”或者“委托”均为子线程。委托可以包含多个方法体,利用this.Invoke去执行。也可以定义多种方法体,放在Thread里面去执行。则此方法体均为子线程。注意_进程主线程子线程

设计模式 4.Factory Method 模式_设计模式 factory method-程序员宅基地

文章浏览阅读157次。工厂模式是用模板模式来构建生成实例的工厂。Factou_设计模式 factory method

c语言程序编写高空坠球,初学python算法100例-案例19 球高空落地 弹跳N次后高度计算...-程序员宅基地

文章浏览阅读893次。题目:计算N次后高度一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?解法1 列表程序分析通过列表将每次的高度以及反弹高度添加程序实现sum = []height = []hei = 100.0 # 起始高度for i in range(1, 11):# 从第二次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下)if i..._c语言篮球从一定高度向下掉落,每一次弹起的高度

#SQL:函数依赖、范式、第一范式(1NF)、第二范式(2NF)、第三范式(3NF) @FDDLC_sql 函数依赖 范式-程序员宅基地

文章浏览阅读2.7k次。一、函数依赖与码若X->Y,即由X能确定Y,或者说一个已知的X能确定一个唯一的Y,则称Y依赖于Y(跟初中的函数定义一致)。一个学生只能属于一个学院,即知道学号X,就能确定对应的学院代码Y,所以学院代码Y依赖于学号X。1、部分函数依赖Y由X中的部分即能确定,比如(学号,姓名)->(系主任),显然,只需(学号,姓名)里的学号就能确定系主任!因此:(系主任)部分函数依赖于(学号,姓名)2、完全函数依赖(可对比部分函数依赖)Y由X中的全部属性确定,比如(学号,课程号)->某_sql 函数依赖 范式

【feign】SpringCloud OpenFeign Hystrix 统一异常处理及熔断机制_fegin 配置业务异常不进入fallback规则-程序员宅基地

文章浏览阅读5.6k次,点赞2次,收藏13次。文章目录问题`@FeignClient`加上`fallback`方法,并获取异常信息保留原始异常信息不进入熔断,直接抛出异常总结问题最近在项目开发中,使用 Feign 调用服务,当触发熔断机制时,遇到了以下问题:异常信息形如:TestService#addRecord(ParamVO) failed and no fallback available.;获取不到服务提供方抛出的原始异常信息;实现某些业务方法不进入熔断,直接往外抛出异常;接下来将一一解决上述问题。对于failed and n_fegin 配置业务异常不进入fallback规则

【转】【Flex】FLEX 学习网站分享-程序员宅基地

文章浏览阅读217次。【转:http://hi.baidu.com/tanghecaiyu/item/d662fbd7f5fbe02c38f6f764 】FLEX 学习网站分享http://blog.minidx.com/flex核心开发技术:http://blog.csdn.net/mervyn_lee/archive/2008/10/07/3027039.aspxfl部落:http://www.fltr...