回校后要進行校電子設計競賽,把以前做過的溫控系統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() 一次。我的程序每秒鍾采集一次當前溫度,調節一次占空比。