一個簡單的PID控制算法


回校后要進行校電子設計競賽,把以前做過的溫控系統PID算法重溫下。

比例(P)、積分(I)、微分(D)控制算法各有作用:
比例,反應系統的基本(當前)偏差e(t),系數大,可以加快調節,減小誤差,但過大的比例使系統穩定性下降,甚至造成系統不穩定;
積分,反應系統的累計偏差,使系統消除穩態誤差,提高無差度,因為有誤差,積分調節就進行,直至無誤差;
微分,反映系統偏差信號的變化率e(t)-e(t-1),具有預見性,能預見偏差變化的趨勢,產生超前的控制作用,在偏差還沒有形成之前,已被微分調節作用消除,因此可以改善系統的動態性能。但是微分對噪聲干擾有放大作用,加強微分對系統抗干擾不利。積分和微分都不能單獨起作用,必須與比例控制配合。

以溫控系統為例:

比例調節,還沒有加熱到預定溫度,就繼續增加占空比,誤差越大占空比增加的越厲害。微分調節,當實際溫度越來越離目標溫度近的時候,微分調節會拉下占空 比,避免沖過目標溫度。積分調節,當溫度穩定在目標溫度之上一小點時,比例調節和微分調節無效,積分誤差越來越大,進行積分調節,消除穩態誤差。

void SetPID(double p,i,d)
{
    Kp = p;
    Ki = i * 10.0;
    Kd = d / 10.0;
}
void PIDCompute()
{
    double error;
    double sumerror;      
    double derror;
    double lasterror = 27.0;
    error = settemp - temp;  //設定溫度 - 當前溫度
    sumerror += error;
    derror = error - lasterror;
    output = Kp * error + Ki * sumerror + Ki * derror;
    lasterror = error;
}

編程時只是設定它們的大概數值,在系統運行時通過反復調試來確定最佳值。

程序開始時:SetPID(44.5,0.7,0.1);

在單片機中斷里每秒執行 PIDCompute() 一次。我的程序每秒鍾采集一次當前溫度,調節一次占空比。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM