这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » pid算法_什么是pid算法

共2条 1/1 1 跳转至

pid算法_什么是pid算法

高工
2014-06-12 10:31:26     打赏

  在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、…)。

  PID增量式算法

  离散化公式:

  注:各符号含义如下

  u(t);;;;; 控制器的输出值。

  e(t);;;;; 控制器输入与设定值之间的误差。

  Kp;;;;;;; 比例系数。

  Ti;;;;;;; 积分时间常数。

  Td;;;;;;; 微分时间常数。

  T;;;;;;;; 调节周期。

  对于增量式算法,可以选择的功能有:

  (1) 滤波的选择

  可以对输入加一个前置滤波器,使得进入控制算法的给定值不突变,而是有一定惯性延迟的缓变量。

  (2) 系统的动态过程加速

  在增量式算法中,比例项与积分项的符号有以下关系:如果被控量继续偏离给定值,则这两项符号相同,而当被控量向给定值方向变化时,则这两项的符号相反。

  由于这一性质,当被控量接近给定值的时候,反号的比例作用阻碍了积分作用,因而避免了积分超调以及随之带来的振荡,这显然是有利于控制的。但如果被控量远未接近给定值,仅刚开始向给定值变化时,由于比例和积分反向,将会减慢控制过程。

  为了加快开始的动态过程,我们可以设定一个偏差范围v,当偏差|e(t)| β时,即被控量接近给定值时,就按正常规律调节,而当|e(t)|>= β时,则不管比例作用为正或为负,都使它向有利于接近给定值的方向调整,即取其值为|e(t)-e(t-1)|,其符号与积分项一致。利用这样的算法,可以加快控制的动态过程。

  (3) PID增量算法的饱和作用及其抑制

  在PID增量算法中,由于执行元件本身是机械或物理的积分储存单元,如果给定值发生突变时,由算法的比例部分和微分部分计算出的控制增量可能比较大,如果该值超过了执行元件所允许的最大限度,那么实际上执行的控制增量将时受到限制时的值,多余的部分将丢失,将使系统的动态过程变长,因此,需要采取一定的措施改善这种情况。

  纠正这种缺陷的方法是采用积累补偿法,当超出执行机构的执行能力时,将其多余部分积累起来,而一旦可能时,再补充执行。

  数字PID控制算法

  首先,将连续的系统离散化。

  计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,因此,连续PID控制算法不能直接使用,需要采用离散化的方法。在计算机PID控制中,使用的是数字PID控制器。

  采样周期T为1ms,采用Z变换对G(S)进行离散化,离散化后的被控对象为:

  Transfer function:

  0.06684 z^2 - 0.1322 z + 0.06538

  z^3 - 2.222 z^2 + 1.445 z - 0.2229

  可得系统的差分方程:

  y(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3;

  num =[0 0.0668 -0.1322 0.0654]

  den =[1.0000 -2.2219 1.4448 -0.2229]

  在输入信号为单位阶跃信号时,运行附录2的数字PID程序,可得系统的响应如下:

  

  在PID参数:kp=10;ki=3000;kd=0; 调节时间0.15s0.2s; 无稳态误差, 超调量4%>2%。其中超调量过大不满足系统的设计要求。

  利用Matlab /Simulink软件,构建了电机控制系统的速度仿真模型。通过仿真结果可以看出系统能平稳运行,具有较好的静、动态特性。在此仿真模型基础上,可以十分便捷地实现进行参数选择、调整及仿真。因此,可以从整体角度出发对伺服系统整体参数的优化和调整进行研究。也为实际伺服系统的设计和调试提供了新的思路

  




关键词: pid算法    

高工
2014-06-12 10:31:26     打赏
2楼
数字PID程序

  %PID Controller

  clear all;

  close all;

  ts=0.001;

  sys=tf([127.4 2817 11930],[1 1501 2021 11730]);

  dsys=c2d(sys,ts,z); %连续离散化

  [num,den]=tfdata(dsys,v);

  u_1=0.0;u_2=0.0;u_3=0.0;

  y_1=0.0;y_2=0.0;y_3=0.0;

  x=[0,0,0];

  error_1=0;

  for k=1:1:1000

  time(k)=k*ts;

  kp=10;ki=3000;kd=0;

  rin(k)=1; %Step Signal

  u(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller

  %Restricting the output of controller

  if u(k)>=10

  u(k)=10;

  end

  if u(k)=-10

  u(k)=-10;

  end

  %Linear model

  yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3;

  error(k)=rin(k)-yout(k);

  %Return of parameters

  u_3=u_2;u_2=u_1;u_1=u(k);

  y_3=y_2;y_2=y_1;y_1=yout(k);

  x(1)=error(k); %Calculating P

  x(2)=(error(k)-error_1)/ts; %Calculating D

  x(3)=x(3)+error(k)*ts; %Calculating I

  error_1=error(k);

  end

  figure(1);

  plot(time,rin,b,time,yout,r);

  xlabel(time(s)),ylabel(rin,yout);

  title(单位阶跃响应曲线)

  grid minor


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]