zoukankan      html  css  js  c++  java
  • PID专题及C语言的实现

    注意:任何算法使用程序表示,都得将算法离散化,以下的算法公式及代码都是将连续函数离散化后的表示结果。

    问题一:位置式pid与增量式pid差别?

           位置式PID将误差累加,增量式PID与当前及前两派误差有关。

    问题二:位置式PID计算公式是什么?

       

    问题三:增量式PID计算公式是什么?

             由问题二的位置式的PID计算公式可知,u(k)和u(k-1)的计算公式。将二者做差,即得到增量式PID的计算公式。

          

    问题四:位置式PID实现C语言代码?

        typedef struct{

            float kp,ki,kd;

            float ek,ek1,ek2;       //ek1 是 ek 的前一次误差

            float eSUM;

        }PID;

      结构体PID的初始化:

             PID pid = {10.0,10.0,0.0,0.0,0.0,0.0};

    float PID_Loc(float SetValue,    float ActualValue, PID *pid){

              float PIDLoc;

               pid->ek  =  SetValue  -  ActualValue;

               pid->eSum += pid->ek;   //累计误差

               PIDLoc  =  (pid->kp*pid-ek) 

                             +  (pid->ki*pid->eSUM) 

                             +  [pid->kd*(pid->ek1   -   pid->ek)]

                pid->ek1 = pid->ek;

                return PIDLoc;

    }

    问题五:增量式PID的实现代码?该pid计算结果如何使用?

                     //PID结构体的定义见问题四,

    float  PID_Inc(float SetValue,  float ActualValue,  PID *pid){

          float PIDInc;

          pid->ek  =   SetValue  -  ActualValue;

          PIDInc  =  [pid->kp  *  (pid->ek  -  pid->ek1)]

                      +   (pid->ki  *  pid->ek)

                      +  [pid->kd  *  (pid->ek  -  2*pid->ek1  +  pid->ek2)];

         //注意:可以将公式化简,这是一种思维,不要简单的将下面化简的kp,ki,kd。理解为书上的PID。这里是提了公因式的

         PIDInc  =  (pid->kp  *  pid->ek)

                      -  (pid->ki   *   pid->ek1)

                     +  (pid->kd  *   pid->ek2)

          pid->ek2  =  pid->ek1;

          pid->ek1  =  pid->ek;

          return PIDInc;

    }    //由于计算结果是属于增量,那么计算后,该PIDInc需要叠加到原PWM的占空比上面,具体是还是看具体情况。

    问题六:为什么在使用增量式PID的时候,反馈的调节现象是正反馈?

             增量式的pid,在实际的应用上,需要根据具体的情况判断是还是,弄错了就成为了反馈。

    问题七:实际应用中,PID三个参数该如何确定?

                  先调P值,P从小往大了调,调到临界振荡,取临界振荡的70%

                  再调I值,I值从大往小了调,调到消除稳定误差。

                  D值,视情况来调。默认为零。

     参考文献:

     [1] 何俊龙,杜封.微缩智能车路径跟踪的增量式PID控制[J].天津职业技术师范大学学报.2018,28(2):5-9

     

           

  • 相关阅读:
    <<SQL Server 2005 高级程序设计>> 学习笔记(4)
    ASP.NET发布网站的二个小问题总结
    Android AlertDialog 实例
    SQL2005 导入其它服务器数据
    Android sysout.exit(0) 和finish()区别
    <<SQL Server 2005 高级程序设计>> 学习笔记(3)
    ASP.NET上传多个文件
    <<SQL Server 2005 高级程序设计>> 学习笔记(1)
    SurfaceView 间取得焦点
    图像处理类
  • 原文地址:https://www.cnblogs.com/cjyc/p/11010573.html
Copyright © 2011-2022 走看看