重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
本篇文章給大家分享的是有關(guān)什么是PID算法及PID算法源代碼怎么寫(xiě),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
阿克塞哈薩克族自治ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
明接到這樣一個(gè)任務(wù):
有一個(gè)水缸點(diǎn)漏水(而且漏水的速度還不一定固定不變),
要求水面高度維持在某個(gè)位置,
一旦發(fā)現(xiàn)水面高度低于要求位置,就要往水缸里加水。
小明接到任務(wù)后就一直守在水缸旁邊,
時(shí)間長(zhǎng)就覺(jué)得無(wú)聊,就跑到房里看小說(shuō)了,
每30分鐘來(lái)檢查一次水面高度。水漏得太快,
每次小明來(lái)檢查時(shí),水都快漏完了,離要求的高度相差很遠(yuǎn)
,小明改為每3分鐘來(lái)檢查一次,結(jié)果每次來(lái)水都沒(méi)怎么漏
,不需要加水,來(lái)得太頻繁做的是無(wú)用功。幾次試驗(yàn)后,
確定每10分鐘來(lái)檢查一次。這個(gè)檢查時(shí)間就稱為采樣周期。
開(kāi)始小明用瓢加水,水龍頭離水缸有十幾米的距離,
經(jīng)常要跑好幾趟才加夠水,于是小明又改為用桶加,
一加就是一桶,跑的次數(shù)少了,加水的速度也快了,
但好幾次將缸給加溢出了,不小心弄濕了幾次鞋,小明又動(dòng)腦筋,
我不用瓢也不用桶,老子用盆,幾次下來(lái),發(fā)現(xiàn)剛剛好,不用跑太多次,
也不會(huì)讓水溢出。這個(gè)加水工具的大小就稱為比例系數(shù)。
小明又發(fā)現(xiàn)水雖然不會(huì)加過(guò)量溢出了,有時(shí)會(huì)高過(guò)要求位置比較多
,還是有打濕鞋的危險(xiǎn)。他又想了個(gè)辦法,在水缸上裝一個(gè)漏斗,
每次加水不直接倒進(jìn)水缸,而是倒進(jìn)漏斗讓它慢慢加。這樣溢出的問(wèn)題解決了,
但加水的速度又慢了,有時(shí)還趕不上漏水的速度。
于是他試著變換不同大小口徑的漏斗來(lái)控制加水的速度
,最后終于找到了滿意的漏斗。漏斗的時(shí)間就稱為積分時(shí)間 。
小明終于喘了一口,但任務(wù)的要求突然嚴(yán)了,
水位控制的及時(shí)性要求大大提高,一旦水位過(guò)低,
必須立即將水加到要求位置,而且不能高出太多,否則不給工錢(qián)。
小明又為難了!于是他又開(kāi)努腦筋,終于讓它想到一個(gè)辦法,常放一盆備用水在旁邊,
一發(fā)現(xiàn)水位低了,不經(jīng)過(guò)漏斗就是一盆水下去,這樣及時(shí)性是保證了,但水位有時(shí)會(huì)高多了。
他又在要求水面位置上面一點(diǎn)將水鑿一孔,再接一根管子到下面的備用桶里這樣多出的水會(huì)從上面的孔里漏出來(lái)。
這個(gè)水漏出的快慢就稱為微分時(shí)間。
大學(xué)時(shí)代做機(jī)器人時(shí)用的PID算法源代碼:
#define PID_Uint struct pid_uint
PID_Uint
{
int
U_kk;
int
ekk;
int
ekkk;
int
Ur; //限幅輸出值,需初始化
int
Un; //不靈敏區(qū)
//int
multiple; //PID系數(shù)的放大倍數(shù),用整形數(shù)據(jù)的情況下,提高PID參數(shù)的設(shè)置精度 固定為256
int
Kp; //比例,從小往大調(diào)
int
Ti; //積分,從大往小調(diào)
int
Td; //微分,用巡線板時(shí)設(shè)為0
int
k1; //
int
k2;
int
k3;
};
void Init_PID_uint(PID_Uint *p)
{
p->k1=(p->Kp)+(p->Kp)*1024/(p->Ti)+(p->Kp)*(p->Td)/1024;
p->k2=(p->Kp)+2*(p->Kp)*(p->Td)/1024;
p->k3=(p->Kp)*(p->Td)/1024;
}
void reset_Uk(PID_Uint *p)
{
p->U_kk=0;
p->ekk=0;
p->ekkk=0;
}
int PID_common(int set,int jiance,PID_Uint *p)
{
int
ek,U_k=0;
ek=jiance-set;
if((ek>(p->Un))||(ek<-(p->Un))) //積分不靈敏區(qū)
U_k=(p->U_kk)+(p->k1)*ek-(p->k2)*(p->ekk)+(p->k3)*(p->ekkk);
p->U_kk=U_k;
p->ekkk=p->ekk;
p->ekk=ek;
if(U_k>(p->Ur))
以上就是什么是PID算法及PID算法源代碼怎么寫(xiě),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。