原创 增量式PID控制C语言代码

2009-5-8 20:56 8050 11 13 分类: 工业电子

增量式PID控制C语言代码 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


增量式PID控制公式:


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />0ad7f76e-e688-4fab-836a-b9c3135faec0.jpg


 


上面u(k)是控制量增量,增量式PID”就是直接以这个增量进行控制。


至于参数的整定,根据响应的情况调,比如,响应慢了,我就增大kp,或者减小kd,超调大了,就减小kp或增大点kd,这个规律你可以看看PID三个参数的作用:)


 


////////////////////////////////////////////////////////////////


// 定义PID参数结构体


///////////////////////////////////////////////////////////////


typedef struct PID {              //结构体定义


        int  SetPoint            //设定值


        int  Proportion;         // Proportion 比例系数


        int  Integral;            // Integral   积分系数


        int  Derivative;          // Derivative  微分系数


        int  LastError;          // Error[-1]  前一拍误差


        int  PreError;           // Error[-2]  前两拍误差


} PID;


 


main()


{


  PID vPID;                        //定义结构变量名


PIDInit ( &vPID );                 //Initialize Structure


vPID.Proportion = 10;             //Set PID Coefficients  


  vPID.Integral   = 10;             // Set PID Integral


  vPID.Derivative = 10;             // Set PID Derivative


  vPID. SetPoint =                 //根据实际情况设定


 


  while(1)


{


       Verror=Measure();               //得到AD的输出值


       Error =vPID. SetPoint- Verror;   //与设定值比较,得到误差值


tempi=PIDCal(&vPID, Error;


       laser.Value+=tempi;          // ValueNum[2]为共同体,共同体名laser


LASERH=laser.Num[0];


LASERL=laser.Num[1];


  }


}


 


///////////////////////////////////////////////////////////////////////


//Title:PID参数初始化


//Description: Proportion="0"


//           Integral=0


//           LastError=0


//Input: PIDPI控制常数和之前的误差量(PID *pp


//Return:


//////////////////////////////////////////////////////////////////////


void PIDInit (PID *pp)                     //PID参数初始化,都置0


   {                                           


     memset ( pp,0,sizeof(PID));


 


//memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。


// memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,


//第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)


//其函数原型为: void *memset(void*intunsigned)


//头文件<string.h>


   }


 


///////////////////////////////////////////////////////////////////////


//Title:增量式PID算法程序


//Description:给出一个误差增量


//Input: PIDPI控制常数和之前的误差量(PID *pp& 当前误差量(ThisError


//Return: 误差增量templ


//////////////////////////////////////////////////////////////////////


int PIDCal( PID *pp, int ThisError ){


 //增量式PID算法(需要控制的不是控制量的绝对值,而是控制量的增量)


    int pError,dError,iError;


long templ;


    pError = ThisError-pp->LastError;


    iError = ThisError;


    dError = ThisError-2*(pp->LastError)+pp->PreError;


   


//增量计算


    templ=pp->Proportion*pError + pp->Integral*iError+pp->Derivative*dError;  //增量


   


    //存储误差用于下次运算


    pp->PreError  = pp->LastError;


    pp->LastError = ThisError;


 


    return ((int)(templ>>8));


}


 


参考自:http://blog.sina.com.cn/s/blog_408540af0100asu3.html

文章评论3条评论)

登录后参与讨论

用户377235 2015-6-16 11:13

请问楼主,用TDC-GPX数据总线28位转16位时,写32位数写两次读两次,每次出来的结果都是只有高位正确,低位不正确。写16位数,读出来是正确的。为什么?有解决的方法吗

用户1758762 2014-6-5 08:33

多谢楼主

coyoo 2013-1-14 09:22

to gothico: 我当时也是在网上搜索到的,当时看完就算,把一些认为对自己有用的胶片截图都放这里了,所以我手上也没有原版PPT,你可以按我这里的内容在网上搜索下,应该不难找到的。

用户242029 2013-1-11 15:23

楼主,可否共享下文中的PPT?十分感谢!gothico@126.com

用户316630 2011-4-20 13:32

向楼主致敬!感谢!

用户1393282 2009-8-2 20:14

hehe ,看看
相关推荐阅读
藤井树 2015-10-12 14:43
印制电路板的抗干扰设计 zz
印制电路板的抗干扰设计     作者:中船重工集团第707所 肖麟芬   摘   要:本文以印制电路板的电磁兼容性为核心,分析了电磁干扰的产生机理...
藤井树 2013-10-22 15:32
2010.5.30 黄草梁上包饺子一日登山活动——摘韭菜篇
        上次桃花节的时候也有野韭菜,那时候的我连草和韭菜叶分不清,才回去的韭菜也不敢吃,哈哈,这次可算真正见识了韭菜,黄草梁也叫韭菜梁,因为满山遍野都是野韭菜而闻名,比较圆比较粗的就是野韭...
藤井树 2013-10-22 15:28
2010.5.30 黄草梁上包饺子一日登山活动——包饺子篇
摘韭菜回来,大家已经忙开了 我也装模作样地“工作着” 哈哈,还不让我包,包饺子是技术活,一定要皮薄馅厚才有资格包,像我这样的只能旁观了 摘的韭菜应该足够了,旁边那个袋子是我摘来带回学校的 ...
藤井树 2013-08-09 15:19
datasheet下载网站整理(查IC芯片手册)【原创】
*************************************************************************         作为电子工程师,芯片的dat...
藤井树 2010-06-04 00:21
陈伟宁王辉一家捐助渠道(北京菲亚特—英菲尼迪)
       王辉的最新消息请关注 http://chenweining.org/       目前事故责任认定已经出来了——陈家全责。        发信人: program (程序), 信区: D...
藤井树 2010-06-01 13:43
2010.5.30 黄草梁上包饺子一日登山活动——美景篇
这天不得不说的是天空,蓝蓝的天空,白白的云    绿油油的山脊  我、洪涛哥哥、huangna妹妹还有她同事小艾走在黄草梁上    在蓝天白云下合影       阳光照过来,景色真美 象鼻山,走不...
我要评论
3
11
关闭 站长推荐上一条 /2 下一条