MATLAB-增量式PID的实现&Simulink PID实现

增量式PID介绍
 

pid算法中位置型和增量型有什么区别,分析两者优缺点

比例P : e(k)-e(k-1) 这次误差-上次误差

积分I : e(i) 误差

微分D : e(k) - 2e(k-1)+e(k-2) 这次误差-2*上次误差+上上次误差

du为增量,error前3偏差计算出来即可算出du;相对于位置式PID要稳定一些

代码:

%增量式PID
clc % 清屏
clear all; % 删除workplace变量
close all; % 关掉显示图形窗口
%% 
%建立传递函数
ts=0.001; %采样时间
sys=tf(400,[1,50,0]);%建立传递函数模型,sys = tf(Numerator,Denominator) 
dsys=c2d(sys,ts,'z');%连续函数离散化,sysd = c2d(sys,Ts,method)
[num,den]=tfdata(dsys,'v');%获得分子分母,[num,den] = tfdata(sys) 

%%
%PID控制量
u_1=0.0;u_2=0.0;u_3=0.0;
y_1=0;y_2=0;y_3=0;
x=[0,0,0]';%’是转置,储存PID的计算值

%%
%误差
error_1=0;
error_2=0;
for k=1:1:1000
    time(k)=k*ts;%时间轴,画图用
    
    yd(k)=2.0;%控制目标(理想位置)
    
    %PID参数
    kp=8;
    ki=0.2;
    kd=10;
    
    du(k)=kp*x(1)+kd*x(2)+ki*x(3);%PID控制值增量
    u(k)=u_1+du(k);%PID控制器输出的控制量
    
    %避免PID值饱和,限制输出
    if u(k)>10
        u(k)=10;
    end
    if u(k)<-10
        u(k)=-10;
    end
    
    %计算y(k)
    y(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;%求系统输出
    u_3=u_2;u_2=u_1;u_1=u(k);%更新PID输出值,用于下一次y(k)计算
    y_3=y_2;y_2=y_1;y_1=y(k);%更新控制结果,用于下一次y(k)计算
    
    %计算偏差,以及PID输入
    error=yd(k)-y(k);%偏差=控制目标-当前的值
    x(1)=error-error_1;  %计算P
    x(2)=(error-error_1)-(error_1-error_2);%计算D
    x(3)=error;        %计算I
    
    %更新偏差
    error_2=error_1;
    error_1=error;
end
    
figure(1);
plot(time,yd,'r',time,y,'b','linewidth',2);
xlabel('时间(s)'); ylabel('误差');
grid on
title('增量式PKD跟踪响应曲线');
legend('理想位置','位置追踪');

figure(2);%误差
plot(time,yd-y,'r','linewidth',2);
xlabel('时间(s)');ylabel('误差');
grid on
title('增量是PID跟踪误差');

运行结果

参考材料《MATLAB_SIMULINK系统仿真》

附:

C语言实现增量是PID:

typedef struct PID
{ 
  float P,I,D,limit;
}PID;
typedef struct Error
{
  float Current_Error;//当前误差
  float Last_Error;//上一次误差
  float Previous_Error;//上上次误差
}Error;
 
/*! 
 *  @brief      增量式PID
 *  @since      v1.0
 *  *sptr :误差参数
 *  *pid:  PID参数
 *  NowPlace:实际值
 *  Point:   期望值
 */
// 增量式PID电机控制
int32 PID_Increase(Error *sptr, PID *pid, int32 NowPlace, int32 Point)
{
 
	int32 iError,	//当前误差
		Increase;	//最后得出的实际增量
 
	iError = Point - NowPlace;	// 计算当前误差
 
	Increase =  pid->P * (iError - sptr->Last_Error)   //比例P
			  + pid->I * iError      //积分I
			  + pid->D * (iError - 2 * sptr->Last_Error + sptr->Previous_Error);  //微分D
	
	sptr->Previous_Error = sptr->Last_Error;	// 更新前次误差
	sptr->Last_Error = iError;		  	// 更新上次误差
	
	return Increase;	// 返回增量
}

参考:位置式PID与增量式PID区别浅析_Z小旋-CSDN博客_增量式pid

simulink PID仿真:

模型建立:

PID参数设置:

 

运行结果:

 

 

  • 6
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: MATLAB Simulink中的增量式PID控制器是一种用于控制系统的反馈控制器。它的主要优点是可以实现快速、稳定的控制系统响应,并且对系统的抗干扰能力相对较强。 增量式PID控制器的具体实现方式是通过使用差分器来获取系统的位置变化量作为PID控制器的输入,然后将这个输入与设定值之间的误差经过比例、积分和微分环节计算出PID输出。与传统的位置式PID控制器相比,增量式PID控制器可以减少积分器的累积误差,从而提高了控制系统的抗干扰能力。 在MATLAB Simulink中,可以通过使用PID Controller模块来实现增量式PID控制器。该模块可以根据系统的需求来设置比例系数、积分时间常数和微分时间常数等参数。通过调整这些参数,可以实现对控制系统的精准调节。 使用MATLAB Simulink增量式PID控制器的步骤如下: 1. 在Simulink模型中添加PID Controller模块。 2. 设置PID控制器的参数,包括比例系数、积分时间常数和微分时间常数等。 3. 将系统的反馈信号连接到PID控制器的输入端口,将PID控制器的输出连接到控制对象(例如电机、伺服系统等)的输入端口。 4. 运行Simulink模型,观察PID控制器对系统的控制效果。 需要注意的是,增量式PID控制器的参数调节和系统的稳定性分析需要一定的经验和技巧。因此,在使用MATLAB Simulink进行增量式PID控制器设计时,应该结合实际系统要求和控制目标,进行合理的参数选择和调节。 ### 回答2: MATLAB Simulink是一种常用的工程软件,可以借助其进行系统建模、仿真和控制算法的设计。增量式PID控制是PID控制的一种改进形式,可以有效地解决传统PID控制器存在的积分饱和和抗扰性能不佳等问题。 增量式PID控制器的基本思想是通过测量控制误差的增量(差值),计算出相应的PID控制器的增量输出。相比于传统的位置式PID控制器,增量式PID控制具有许多优点。 首先,在增量式PID控制中,积分项被转化为差分项,通过对控制误差的增量进行积分,消除了积分项可能引入的积分饱和问题。这样可以使得控制系统更加稳定,并且能够更好地抑制系统的超调和稳态误差。 其次,增量式PID控制器还可以提高系统的抗干扰性能。传统PID控制器对于干扰信号的抑制能力有限,而增量式PID控制器通过控制误差的增量进行控制,能够更好地对系统的干扰信号进行抑制,提高了系统的抗干扰性能。 最后,增量式PID控制器还具有简化调节器件的灵活性。传统PID控制器需要根据具体系统的特点进行调节器件的选型和参数调整,而增量式PID控制器可以通过增加一个微小的增益(如增量系数)来调整系统的响应速度和稳定性,使得控制器的设计和调节更加简单。 综上所述,MATLAB Simulink中的增量式PID控制器可以通过测量控制误差的增量,实现系统的精确控制和抗干扰能力,使得控制系统的性能更加优良。在实际的控制系统设计中,可以根据具体的需求和系统特点,合理选择增量系数和调节器件的参数,并利用MATLAB Simulink进行模型仿真和调节参数的优化。 ### 回答3: MATLAB Simulink增量式PID是一种控制算法,用于控制系统的稳定性和精度。它是一种基于比例、积分和微分的控制器,能够自动调整控制信号,以尽量减少误差。增量式PID与传统的位置式PID相比有一些区别。 增量式PID使用控制信号的增量来计算输出,而不是直接使用控制信号。增量表示控制信号的变化量,根据前后两个采样时刻的差异来计算。这种方法可以避免由于运算误差和积分饱和等问题导致系统不稳定。 在MATLAB Simulink中,增量式PID控制器可以通过选择适当的PID控制器模块来实现。首先,我们需要确定控制器的比例常数、积分常数和微分常数。这些常数可以根据系统的特性和需要进行调整。然后,我们可以将输入信号和输出信号分别连接到PID控制器模块的输入端口和输出端口。通过选择合适的采样时间,我们可以控制系统的响应速度和精度。 增量式PID的计算方法可以通过差分方程来描述。假设e(n)表示误差,u(n)表示控制信号的增量,u(n-1)表示前一个时刻的控制信号增量。那么增量式PID的计算方法可以表示为: u(n) = Kp * (e(n)-e(n-1)) + Ki * e(n) + Kd * (e(n)-2*e(n-1)+e(n-2)) 其中,Kp、Ki和Kd分别表示比例、积分和微分系数。 总之,MATLAB Simulink增量式PID是一种调节控制器,通过计算控制信号的增量,并根据系统的特性和需要进行调整,以实现对控制系统的稳定性和精度的控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值