久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

PID公式的推導過程及實現代碼

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月12日   【字體:

一、PID框圖: 








n0(t)是要穩定的值
n(t)是當前輸出值
e(t) = n0(t) - n(t)


一、模擬PID控制原理
 
這個公式網絡上很好找:

 

 

 

 二、數字PID控制
由于模擬的微積分運算對應計算機來說是不太好寫代碼的,所以要利用采樣將數據離散化

于是公式就可以轉換為:


 


 其中T為采樣時間,由于T之類的參數是常量,所以將Kp乘入公式中可以轉換成另一種寫法
這個公式叫位置式算法

由于要不斷的累加ej,增加了計算量,所以這個公式又可以轉換為增量式算法:




然后u(k) = u(k-1) + u

三、參數的整定
先將Ti設置為無窮大,Td設置為0,調節Kp
然后再調節Ti,最后是Td

四、實現代碼

typedef struct PID
{
    int  SetPoint;     //設定目標 Desired Value
    long SumError;                //誤差累計
    double  Proportion;         //比例常數 Proportional Cons
    double  Integral;           //積分常數 Integral Const
    double  Derivative;         //微分常數 Derivative Const
    int LastError;               //Error[-1]
    int PrevError;               //Error[-2]
} PID;

/*******************************************************************************
* 函數名稱 : IncPIDCalc
* 函數描述 : 增量式 PID 控制計算
* 函數輸入 : int 當前位置
* 函數輸出 : 無
* 函數返回 : 增量式PID結果
*******************************************************************************/
int IncPIDCalc(int NextPoint)
{
    int iError, iIncpid;
    //當前誤差
    iError = sptr->SetPoint - NextPoint;
    //增量計算
    iIncpid = sptr->Proportion * iError               //E[k]項
              - sptr->Integral   * sptr->LastError     //E[k-1]項
              + sptr->Derivative * sptr->PrevError;   //E[k-2]項
    //存儲誤差,用于下次計算
    sptr->PrevError = sptr->LastError;
    sptr->LastError = iError;
    //返回增量值
    return(iIncpid);
}
/*******************************************************************************
* 函數名稱 : LocPIDCalc
* 函數描述 : 位置式 PID 控制計算
* 函數輸入 : int 當前位置
* 函數輸出 : 無
* 函數返回 : 位置式PID結果
*******************************************************************************/
int LocPIDCalc(int NextPoint)
{
    int  iError,dError;
    iError = sptr->SetPoint - NextPoint;       //偏差
    sptr->SumError += iError;       //積分
    dError = iError - sptr->LastError;     //微分
    sptr->LastError = iError;
    return(sptr->Proportion * iError            //比例項
           + sptr->Integral * sptr->SumError   //積分項
           + sptr->Derivative * dError);        //微分項
}

 



 

關閉窗口

相關文章

主站蜘蛛池模板: 91在线观看免费视频 | 亚洲免费视频一区 | 国产伦精品一区二区三区四区视频 | 亚洲综合色网站 | 日韩久久久久久久久久久 | 美国a级毛片免费视频 | 成人免费一级 | 综合久久久久久久 | 亚洲在线视频 | 我要看黄色录像一级片 | www.国产日本 | 亚洲一区中文字幕 | 亚洲欧美在线免费观看 | 91精品国产综合久久久久久丝袜 | 国产1区在线 | 成人精品鲁一区一区二区 | 精品久久一区二区 | 精品国产一二三区 | 亚洲国产成人av | 久久精品国产v日韩v亚洲 | 欧美日韩在线一区二区 | 日日操操| 一区二区在线 | 国产欧美一级二级三级在线视频 | 中文字幕在线免费观看 | 午夜精品在线 | 91精品久久久久久久久久 | 午夜看电影在线观看 | 在线观看视频一区 | 午夜精品久久久 | 亚洲少妇综合网 | 欧美日韩亚洲视频 | 蜜桃视频在线观看免费视频网站www | 国产成人精品999在线观看 | 日韩在线精品 | 日韩欧美在线观看 | 毛片.com| 亚洲福利在线视频 | 精品欧美色视频网站在线观看 | 91一区二区三区 | 日韩精品一二三 |