所謂PID指的是Proportion-Integral-Differential。翻譯成中文是比例-積分-微分。

記住兩句話: 1、PID是經典控制(使用年代久遠) 2、PID是誤差控制()
對直流電機速度進行定速控制:
1、L293作為電機驅動;2、光電傳感器-作為輸出反饋;3、PWM做為輸入控制。 PID怎么對誤差控制,聽我細細道來:
所謂“誤差”就是命令與輸出的差值。比如你希望控制轉速為4轉/s(PWM波占空比=80%),而事實上控制轉速只有3.5轉/s,則誤差: e=0.5轉,如果實際轉速為4.5轉,則誤差e=-0.5轉(注意正負號)。
該誤差值送到PID控制器,作為PID控制器的輸入。PID控制器的輸出為:誤差乘比例系數Kp+Ki*誤差積分+Kd*誤差微分。
Kp*e + Ki*∫edt + Kd*(de/dt) (式中的t為時間,即對時間積分、微分) 上式為三項求和(希望你能看懂),PID結果后送入電機驅動器。 從上式看出,如果沒有誤差,即e=0,則Kp*e=0;Kd*(de/dt)=0;而Ki*∫edt 不一定為0。三項之和不一定為0。
總之,如果“誤差”存在,PID就會對電機驅動作調整,直到誤差=0。 評價一個控制系統是否優越,有三個指標:快、穩、準。
所謂快,就是要使壓力能快速地達到“命令值”(不知道你的系統要求多少時間) 所謂穩,就是要壓力穩定不波動或波動量小(不知道你的系統允許多大波動) 所謂準,就是要求“命令值”與“輸出值”之間的誤差e小(不知道你的系統允許多大誤差)
對于你的系統來說,要求“快”的話,可以增大Kp、Ki值 要求“準”的話,可以增大Ki值
要求“穩”的話,可以增大Kd值,可以減少壓力波動 仔細分析可以得知:這三個指標是相互矛盾的。 如果太“快”,可能導致不“穩”; 如果太“穩”,可能導致不“快”;
只要系統穩定且存在積分Ki,該系統在靜態是沒有誤差的(會存在動態誤差); 所謂動態誤差,指當“命令值”不為恒值時,“輸出值”跟不上“命令值”而存在的誤差。不管是誰設計的、再好的系統都存在動態誤差,動態誤差體現的是系統的跟蹤特性,比如說,有的音響功放對高頻聲音不敏感,就說明功放跟蹤性能不好。 調整PID參數有兩種方法:1、仿真法;2、“試湊法” 仿真法我想你是不會的,介紹一下“試湊法” “試湊法”設置PID參數的建議步驟:
1、把Ki與Kd設為0,不要積分與微分;
2、把Kp值從0開始慢慢增大,觀察壓力的反應速度是否在你的要求內; 3、當壓力的反應速度達到你的要求,停止增大Kp值; 4、在該Kp值的基礎上減少10%; 5、把Ki值從0開始慢慢增大;
6、當壓力開始波動,停止增大Ki值;
7、在該Ki值的基礎上減少10%;
8、把Kd值從0開始慢慢增大,觀察壓力的反應速度是否在你的要求內
P、I、D參數整定口訣: 參數整定找最佳,從小到大順序查;
先是比例后積分,最后再把微分加;
曲線振蕩很頻繁,比例度盤要放大;
曲線漂浮繞大灣,比例度盤往小扳;
曲線偏離回復慢,積分時間往下降;
曲線波動周期長,積分時間再加長;
曲線振蕩頻率快,先把微分降下來;
動差大來波動慢,微分時間應加長。
這是我在STM32F103RB上做速度PID的PID函數,當然也可以利用ST公司自帶的DSP庫, //======================================================================//Adjust these three factor ,to achieve the best control effect
//P:1~10之間 I:0-5之間 D:0.1~1
float P_Coefficient=4.75;
float I_Coefficient=0.55;
float D_Coefficient=0.2;
#define Diff_Order 4 /* Differential order*/
int Temp,DestTemp,HeatPower;
int Set_Distant;
long int Integral=5; // Points accumulated
float Prev_Error[10]; // Record ten times before the error
float P,I,D;
float Ek,E;
unsigned char FirstFlag=1;
/*******************************************************************************
* Funtion name:PID Control
* Time:2013/3/5
* Author:zhuhao
*******************************************************************************/
float PID_Control(float Error)
{
int i;
float Output;
float Ture;
if(FirstFlag)//The first execution
{
FirstFlag=0;
for(i=0;i<10;i++)
Prev_Error=Error;
}
for(i=0;i<10;i++)
Prev_Error[i+1]=Prev_Error;// Buffer queue
Prev_Error[0]=Error;//
Ek=Error-Prev_Error[Diff_Order];//
E=0.8+Ek*0.2;//IIR
P=P_Coefficient*Error;// Calculate the proportional component
I=I_Coefficient*Integral;// Calculate the integral component
D=D_Coefficient*E;//Calculate the derivative component
Output=(P+I+D);
if(Output>0)
{
Ture=Output;
}
if(Output>=100||Output<=0||Error<-40||Error>40)//Saturated or large deviation integral
{
if(Integral>0&&Error<0)
Integral+=Error;
if(Integral<0&&Error>0)
Integral+=Error;
}
else
Integral+=Error;
if(Integral<-10) Integral=-10;
if(Integral>10) Integral=10;
if (Output>=100)
Output=99;
else if(Output<=0)
Output=Ture;
return Output;
}經過試驗發現通過PID函數的調節,設定轉速與實際轉速相差無幾,一般在0;01~0.05轉左右,抗干擾好
串口數據波形分析儀軟件可以到51黑搜索