PID算法完全讲解.doc

PID算法完全讲解.doc

ID:49761836

大小:57.00 KB

页数:16页

时间:2020-03-04

PID算法完全讲解.doc_第1页
PID算法完全讲解.doc_第2页
PID算法完全讲解.doc_第3页
PID算法完全讲解.doc_第4页
PID算法完全讲解.doc_第5页
资源描述:

《PID算法完全讲解.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.PID算法完全讲解#includetypedefunsignedchar     uChar8;     typedefunsignedint      uInt16;typedefunsignedlongint uInt32; sbitConOut=P1^1;    //加热丝接到P1.1口 typedefstructPID_Value{    uInt32liEkVal[3];         //差值保存,给定和反馈的差值    uChar8uEkFlag[3];         //符号,1则对应的为

2、负数,0为对应的为正数       uChar8uKP_Coe;            //比例系数    uChar8uKI_Coe;            //积分常数    uChar8uKD_Coe;            //微分常数    uInt16iPriVal;            //上一时刻值    uInt16iSetVal;            //设定值    uInt16iCurVal;            //实际值}PID_ValueStr; PID_ValueStrPID;       

3、       //定义一个结构体,这个结构体用来存算法中要用到的各种数据页脚.bitg_bPIDRunFlag=0;         //PID运行标志位,PID算法不是一直在运算。而是每隔一定时间,算一次。/*********************************************************/*函数名称:PID_Operation()                                 /*函数功能:PID运算                   /*入口参数:无(隐形输入,系数、设定

4、值等)                     /*出口参数:无(隐形输出,U(k))/*函数说明:U(k)+KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)]                                     *********************************************************/voidPID_Operation(void){    uInt32Temp[3]={0};  //中间临时变量    uInt32Po

5、stSum=0;    //正数和    uInt32NegSum=0;     //负数和    if(PID.iSetVal>PID.iCurVal)               //设定值大于实际值否?    {        if(PID.iSetVal-PID.iCurVal>10)     //偏差大于10否?页脚.            PID.iPriVal=100;                 //偏差大于10为上限幅值输出(全速加热)        else                        

6、           //否则慢慢来        {            Temp[0]=PID.iSetVal-PID.iCurVal;   //偏差<=10,计算E(k)            PID.uEkFlag[1]=0;                    //E(k)为正数,因为设定值大于实际值            /*数值进行移位,注意顺序,否则会覆盖掉前面的数值*/            PID.liEkVal[2]=PID.liEkVal[1];            PID.liEkVal[1]=P

7、ID.liEkVal[0];            PID.liEkVal[0]=Temp[0];            /*===================================================================*/            if(PID.liEkVal[0]>PID.liEkVal[1])             //E(k)>E(k-1)否?            {                Temp[0]=PID.liEkVal[0]-PID.liEkVa

8、l[1]; //E(k)>E(k-1)                PID.uEkFlag[0]=0;                        //E(k)-E(k-1)为正数页脚.            }                       

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。