2023年pid十大算法c語(yǔ)言實(shí)現(xiàn)優(yōu)質(zhì)

格式:DOC 上傳日期:2023-05-03 11:42:47
2023年pid十大算法c語(yǔ)言實(shí)現(xiàn)優(yōu)質(zhì)
時(shí)間:2023-05-03 11:42:47     小編:zdfb

范文為教學(xué)中作為模范的文章,也常常用來(lái)指寫作的模板。常常用于文秘寫作的參考,也可以作為演講材料編寫前的參考。大家想知道怎么樣才能寫一篇比較優(yōu)質(zhì)的范文嗎?下面是小編幫大家整理的優(yōu)質(zhì)范文,僅供參考,大家一起來(lái)看看吧。

pid十大算法c語(yǔ)言實(shí)現(xiàn)篇一

c語(yǔ)言實(shí)習(xí)總結(jié)

推薦度:

c語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)報(bào)告

推薦度:

c語(yǔ)言課程設(shè)計(jì)個(gè)人總結(jié)

推薦度:

c語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告

推薦度:

c語(yǔ)言程序設(shè)計(jì)心得體會(huì)

推薦度:

相關(guān)推薦

積分飽和通俗講就是系統(tǒng)在一個(gè)偏差方向上的飽和,下面一起來(lái)跟著小編學(xué)習(xí)一下pid算法的c語(yǔ)言實(shí)現(xiàn)方法吧,希望可以幫助到大家!

比如一個(gè)系統(tǒng)設(shè)定了輸出不會(huì)超過(guò)100,但因?yàn)槌霈F(xiàn)一個(gè)方向上的偏差積分使得輸出超過(guò)了100,此時(shí)達(dá)到了飽和狀態(tài),如果繼續(xù)在這個(gè)方向上積分會(huì)導(dǎo)致pid控制超過(guò)100系統(tǒng)卻運(yùn)行在100,相當(dāng)于積分調(diào)節(jié)對(duì)系統(tǒng)輸出沒(méi)有作用,就出現(xiàn)失控的狀態(tài),這是系統(tǒng)不能接受的,而且飽和積分越深,退出飽和就越久。上面是在正向的飽和,負(fù)向的飽和類似!

為了解決這個(gè)問(wèn)題,我們采用抗積分飽和算法,其思路就是:如果上一次的輸出控制量超過(guò)了飽和值,飽和值為正,則這一次只積分負(fù)的偏差,飽和值為負(fù),則這一次只積分正的偏差,從而避免系統(tǒng)長(zhǎng)期留在飽和區(qū)!

下面我以 位置型+抗積分飽和+控制算法c語(yǔ)言來(lái)觀察調(diào)節(jié)結(jié)果:(相對(duì)應(yīng)的代碼可以參考以往的文章)

//位置型+抗積分飽和+積分分離 pid控制算法

struct _pid{

float setspeed;

float actualspeed;

float err;

float err_last;

float kp,ki,kd;

float voltage;

float integral;

float umax; //最大正飽和上限值

float umin; //最大負(fù)飽和下限值

}pid;

void pid_init(void)

{

printf("pid_init begin! ");

ed = 0;

speed = 0;

= 0;

_last = 0;

= 0.2;

= 0.1; //增大了積分環(huán)節(jié)的值

= 0.2;

e = 0;

al = 0;

= 400; //正飽和值為400

= -200; //負(fù)飽和值為-200

printf("pid_init end! ");

}

float pid_cal(float speed)

{

unsigned char index;

ed = speed;

= ed - speed;

if(speed>) //如果上一次輸出變量出現(xiàn)正向的飽和

{

if(abs()>200)

{

index = 0;

}

else

{

index = 1;

if(<0)

{

al += ; //正飽和只積分負(fù)偏差

}

}

}

else if(speed {

if(abs()>200)

{

index = 0;

}

else

{

index = 1;

if(>0)

{

al += ; //負(fù)飽和只積分正偏差

}

}

}

else

{

if(abs()>200) //積分分離的pid優(yōu)化,可參考以往的文章

{

index = 0;

}

else

{

index = 1;

al += ;

}

}

e = * +index**al + *( - _last);

_last = ;

speed = e*1.0;

return speed;

}

int main(void)

{

int count = 0 ;

printf("system begin! ");

pid_init();

while(count<1000)

{

float speed = pid_cal(200.0);

printf("-%d-%f-",count,speed);

count++;

}

return 0;

}

最后運(yùn)行結(jié)果:

我們發(fā)現(xiàn),相對(duì)以往的算法,還算法大大提高了調(diào)節(jié)的速度和穩(wěn)定!

s("content_relate");

【pid算法的c語(yǔ)言實(shí)現(xiàn)】相關(guān)文章:

pid算法的c語(yǔ)言實(shí)現(xiàn):抗積分飽和的pid優(yōu)化

10-05

c語(yǔ)言中實(shí)現(xiàn)kmp算法實(shí)例

11-19

希爾排序算法的c語(yǔ)言實(shí)現(xiàn)示例

10-04

c語(yǔ)言實(shí)現(xiàn)歸并排序算法實(shí)例

11-21

6種常見(jiàn)的排序算法的c語(yǔ)言實(shí)現(xiàn)

10-04

c語(yǔ)言的排序算法

10-05

kmp算法的c#實(shí)現(xiàn)方法

09-22

c語(yǔ)言排序的幾種算法

10-03

c#實(shí)現(xiàn)輪詢算法實(shí)例代碼

09-23

【本文地址:http://mlvmservice.com/zuowen/2800884.html】

全文閱讀已結(jié)束,如果需要下載本文請(qǐng)點(diǎn)擊

下載此文檔