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

記住兩句話: 1、PID是經(jīng)典控制(使用年代久遠(yuǎn)) 2、PID是誤差控制()
對(duì)直流電機(jī)速度進(jìn)行定速控制:
1、L293作為電機(jī)驅(qū)動(dòng);2、光電傳感器-作為輸出反饋;3、PWM做為輸入控制。 PID怎么對(duì)誤差控制,聽(tīng)我細(xì)細(xì)道來(lái):
所謂“誤差”就是命令與輸出的差值。比如你希望控制轉(zhuǎn)速為4轉(zhuǎn)/s(PWM波占空比=80%),而事實(shí)上控制轉(zhuǎn)速只有3.5轉(zhuǎn)/s,則誤差: e=0.5轉(zhuǎn),如果實(shí)際轉(zhuǎn)速為4.5轉(zhuǎn),則誤差e=-0.5轉(zhuǎn)(注意正負(fù)號(hào))。
該誤差值送到PID控制器,作為PID控制器的輸入。PID控制器的輸出為:誤差乘比例系數(shù)Kp+Ki*誤差積分+Kd*誤差微分。
Kp*e + Ki*∫edt + Kd*(de/dt) (式中的t為時(shí)間,即對(duì)時(shí)間積分、微分) 上式為三項(xiàng)求和(希望你能看懂),PID結(jié)果后送入電機(jī)驅(qū)動(dòng)器。 從上式看出,如果沒(méi)有誤差,即e=0,則Kp*e=0;Kd*(de/dt)=0;而Ki*∫edt 不一定為0。三項(xiàng)之和不一定為0。
總之,如果“誤差”存在,PID就會(huì)對(duì)電機(jī)驅(qū)動(dòng)作調(diào)整,直到誤差=0。 評(píng)價(jià)一個(gè)控制系統(tǒng)是否優(yōu)越,有三個(gè)指標(biāo):快、穩(wěn)、準(zhǔn)。
所謂快,就是要使壓力能快速地達(dá)到“命令值”(不知道你的系統(tǒng)要求多少時(shí)間) 所謂穩(wěn),就是要壓力穩(wěn)定不波動(dòng)或波動(dòng)量。ú恢滥愕南到y(tǒng)允許多大波動(dòng)) 所謂準(zhǔn),就是要求“命令值”與“輸出值”之間的誤差e。ú恢滥愕南到y(tǒng)允許多大誤差)
對(duì)于你的系統(tǒng)來(lái)說(shuō),要求“快”的話,可以增大Kp、Ki值 要求“準(zhǔn)”的話,可以增大Ki值
要求“穩(wěn)”的話,可以增大Kd值,可以減少壓力波動(dòng) 仔細(xì)分析可以得知:這三個(gè)指標(biāo)是相互矛盾的。 如果太“快”,可能導(dǎo)致不“穩(wěn)”; 如果太“穩(wěn)”,可能導(dǎo)致不“快”;
只要系統(tǒng)穩(wěn)定且存在積分Ki,該系統(tǒng)在靜態(tài)是沒(méi)有誤差的(會(huì)存在動(dòng)態(tài)誤差); 所謂動(dòng)態(tài)誤差,指當(dāng)“命令值”不為恒值時(shí),“輸出值”跟不上“命令值”而存在的誤差。不管是誰(shuí)設(shè)計(jì)的、再好的系統(tǒng)都存在動(dòng)態(tài)誤差,動(dòng)態(tài)誤差體現(xiàn)的是系統(tǒng)的跟蹤特性,比如說(shuō),有的音響功放對(duì)高頻聲音不敏感,就說(shuō)明功放跟蹤性能不好。 調(diào)整PID參數(shù)有兩種方法:1、仿真法;2、“試湊法” 仿真法我想你是不會(huì)的,介紹一下“試湊法” “試湊法”設(shè)置PID參數(shù)的建議步驟:
1、把Ki與Kd設(shè)為0,不要積分與微分;
2、把Kp值從0開始慢慢增大,觀察壓力的反應(yīng)速度是否在你的要求內(nèi); 3、當(dāng)壓力的反應(yīng)速度達(dá)到你的要求,停止增大Kp值; 4、在該Kp值的基礎(chǔ)上減少10%; 5、把Ki值從0開始慢慢增大;
6、當(dāng)壓力開始波動(dòng),停止增大Ki值;
7、在該Ki值的基礎(chǔ)上減少10%;
8、把Kd值從0開始慢慢增大,觀察壓力的反應(yīng)速度是否在你的要求內(nèi)
P、I、D參數(shù)整定口訣: 參數(shù)整定找最佳,從小到大順序查;
先是比例后積分,最后再把微分加;
曲線振蕩很頻繁,比例度盤要放大;
曲線漂浮繞大灣,比例度盤往小扳;
曲線偏離回復(fù)慢,積分時(shí)間往下降;
曲線波動(dòng)周期長(zhǎng),積分時(shí)間再加長(zhǎng);
曲線振蕩頻率快,先把微分降下來(lái);
動(dòng)差大來(lái)波動(dòng)慢,微分時(shí)間應(yīng)加長(zhǎng)。
這是我在STM32F103RB上做速度PID的PID函數(shù),當(dāng)然也可以利用ST公司自帶的DSP庫(kù), //======================================================================//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;
}經(jīng)過(guò)試驗(yàn)發(fā)現(xiàn)通過(guò)PID函數(shù)的調(diào)節(jié),設(shè)定轉(zhuǎn)速與實(shí)際轉(zhuǎn)速相差無(wú)幾,一般在0;01~0.05轉(zhuǎn)左右,抗干擾好
串口數(shù)據(jù)波形分析儀軟件可以到51黑搜索