PID

微积分快速入门

S—路程  V—速度  a—加速度

PID_第1张图片

其中的边长为v和t的长方形的面积为s

积分的结果是一个函数所围成的面积


进阶

PID_第2张图片

积分

s = v * t         v = a * t 

PID_第3张图片

微分

S =  f(t) = v * t      f '(t) = v

v =  f(t) = a * t      f '(t) = a

a = v' = s‘’ 


over




2.积分控制

   PID控制器中的积分对应于图1中误差曲线 与坐标轴包围的面积(图中的灰色部分)。PID控制程序是周期性执行的,执行的周期称为采样周期。计算机的程序用图1中各矩形面积之和来近似精确的积分,图中的TS就是采样周期。

图1  积分运算示意图

   每次PID运算时,在原来的积分值的基础上,增加一个与当前的误差值ev(n)成正比的微小部分。误差为负值时,积分的增量为负。

   手动调节温度时,积分控制相当于根据当时的误差值,周期性地微调电位器的角度,每次调节的角度增量值与当时的误差值成正比。温度低于设定值时误差为正,积分项增大,使加热电流逐渐增大,反之积分项减小。因此只要误差不为零,控制器的输出就会因为积分作用而不断变化。积分调节的“大方向”是正确的,积分项有减小误差的作用。一直要到系统处于稳定状态,这时误差恒为零,比例部分和微分部分均为零,积分部分才不再变化,并且刚好等于稳态时需要的控制器的输出值,对应于上述温度控制系统中电位器转角的位置L。因此积分部分的作用是消除稳态误差,提高控制精度,积分作用一般是必须的。

   PID控制器输出中的积分部分与误差的积分成正比。因为积分时间TI在积分项的分母中,TI越小,积分项变化的速度越快,积分作用越强。





      PID控制是一个二阶线性控制器

    定义:通过调整比例、积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能。

    优点

            a. 技术成熟

       b. 易被人们熟悉和掌握

       c. 不需要建立数学模型

       d. 控制效果好

       e. 鲁棒性

      通常依据控制器输出与执行机构的对应关系,将基本数字PID算法分为位置式PID和增量式PID两种。

1  位置式PID控制算法

基本PID控制器的理想算式为

               (1)

 

式中

u(t)——控制器(也称调节器)的输出;

e(t)——控制器的输入(常常是设定值与被控量之差,即e(t)=r(t)-c(t));

Kp——控制器的比例放大系数;

Ti ——控制器的积分时间;

Td——控制器的微分时间。

设u(k)为第k次采样时刻控制器的输出值,可得离散的PID算式

                                     (2)


 

式中      。

    由于计算机的输出u(k)直接控制执行机构(如阀门),u(k)的值与执行机构的位置(如阀门开

度)一一对应,所以通常称式(2)为位置式PID控制算法。

    位置式PID控制算法的缺点:当前采样时刻的输出与过去的各个状态有关,计算时要对e(k)进

行累加,运算量大;而且控制器的输出u(k)对应的是执行机构的实际位置,如果计算机出现故

障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。

  2  增量式PID控制算法

增量式PID是指数字控制器的输出只是控制量的增量Δu(k)。采用增量式算法时,计算机输出的控制量Δu(k)对应的是本次执行机构位置的增量,而不是对应执行机构的实际位置,因此要求执行机构必须具有对控制量增量的累积功能,才能完成对被控对象的控制操作。执行机构的累积功能可以采用硬件的方法实现;也可以采用软件来实现,如利用算式 u(k)=u(k-1)+Δu(k)程序化来完成。

由式(2)可得增量式PID控制算式

  (3)

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

进一步可以改写成

                                                (4)

式中  、

一般计算机控制系统的采样周期T在选定后就不再改变,所以,一旦确定了Kp、Ti、Td,只要使用前后3次测量的偏差值即可由式(3)或式(4)求出控制增量。

增量式算法优点:①算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;②计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;③手动—自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换。

我的工作是做一个温控系统(不带冷却装置),加热装置就是一般的热水壶。通过采集所得的温度误差,经PID算法得出控制量,再利用控制量去改变由单片机输出的PWM波的占空比。最后将PWM波送到继电器以控制热水壶加热和不加热。
         我个人理解是必须用位置式PID。因为单片机输出的PWM波的占空比不带记忆性,你算一次PID意味着占空比就完全改变,也就是一个全新的值,不带记忆性。而像在执行机构为步进电机的控制系统里,你给一次控制量到步进电机,它就保持在那里。当你下一次再输入控制量到步进电机,它就将这一次的控制量叠加上去,也就是说有记忆性。


float rol = rol_tar + rol_now;  //维持平衡 _tar设为0 
float pit = pit_tar + pit_now;  //_now 为采集到的数值
float yaw = yaw_tar + yaw_now;

        PID_ROL.pout = PID_ROL.P * rol;
PID_PIT.pout = PID_PIT.P * pit;

      PID_ROL.iout += PID_ROL.I * rol;
PID_PIT.iout += PID_PIT.I * pit;
        // 每次PID运算时,增加一个与当前的误差值ev(n)成正比的微小部分

        PID_ROL.dout = PID_ROL.D * MPU6050_GYRO_LAST.X;
PID_PIT.dout = PID_PIT.D * MPU6050_GYRO_LAST.Y;
         //MPU6050_GYRO_LAST.X;上一次加速度计的数值,此为匿名的处理方式

标准的
        PID_ROL.dout = PID_ROL.D * (rol - rol_last);
PID_PIT.dout = PID_PIT.D * (pit - pit_last);


你可能感兴趣的:(四轴)