奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語(yǔ)言

PID算法的C語(yǔ)言實(shí)現(xiàn)

時(shí)間:2024-07-19 02:50:40 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

PID算法的C語(yǔ)言實(shí)現(xià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ù)向的飽和類(lèi)似!

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

  下面我以 位置型+抗積分飽和+積分分離的PID控制算法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! ");

  pid.SetSpeed = 0;

  pid.ActualSpeed = 0;

  pid.Err = 0;

  pid.Err_Last = 0;

  pid.Kp = 0.2;

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

  pid.Kd = 0.2;

  pid.Voltage = 0;

  pid.Integral = 0;

  pid.Umax = 400; //正飽和值為400

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

  printf("PID_Init end! ");

  }

  float PID_Cal(float Speed)

  {

  unsigned char index;

  pid.SetSpeed = Speed;

  pid.Err = pid.SetSpeed - pid.ActualSpeed;

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

  {

  if(abs(pid.Err)>200)

  {

  index = 0;

  }

  else

  {

  index = 1;

  if(pid.Err<0)

  {

  pid.Integral += pid.Err; //正飽和只積分負(fù)偏差

  }

  }

  }

  else if(pid.ActualSpeed {

  if(abs(pid.Err)>200)

  {

  index = 0;

  }

  else

  {

  index = 1;

  if(pid.Err>0)

  {

  pid.Integral += pid.Err; //負(fù)飽和只積分正偏差

  }

  }

  }

  else

  {

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

  {

  index = 0;

  }

  else

  {

  index = 1;

  pid.Integral += pid.Err;

  }

  }

  pid.Voltage = pid.Kp*pid.Err +index*pid.Ki*pid.Integral + pid.Kd*(pid.Err - pid.Err_Last);

  pid.Err_Last = pid.Err;

  pid.ActualSpeed = pid.Voltage*1.0;

  return pid.ActualSpeed;

  }

  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)定!

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

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

C語(yǔ)言程序的實(shí)現(xiàn)09-27

C語(yǔ)言的HashTable簡(jiǎn)單實(shí)現(xiàn)04-01

C#實(shí)現(xiàn)協(xié)同過(guò)濾算法的實(shí)例代碼11-30

如何實(shí)現(xiàn)C語(yǔ)言畫(huà)圖教程04-01

最常用的c語(yǔ)言算法有哪些12-05

C++實(shí)現(xiàn)自底向上的歸并排序算法12-03

C語(yǔ)言選擇排序算法及實(shí)例代碼11-25

10個(gè)經(jīng)典的C語(yǔ)言面試基礎(chǔ)算法及代碼12-05

主站蜘蛛池模板: 凭祥市| 黑水县| 临颍县| 鹤峰县| 纳雍县| 雅江县| 贵阳市| 博白县| 逊克县| 营口市| 嘉定区| 高台县| 五指山市| 东兰县| 襄汾县| 肇庆市| 玉屏| 灵璧县| 乳源| 泰来县| 龙岩市| 阿坝县| 达州市| 留坝县| 西盟| 青田县| 荆州市| 防城港市| 改则县| 瑞丽市| 旬邑县| 安乡县| 日照市| 吴江市| 平利县| 梁山县| 将乐县| 微博| 罗定市| 绥化市| 竹溪县|