国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標(biāo)題: PID調(diào)節(jié)例程 參考c語(yǔ)言代碼(PID難點(diǎn)在參數(shù),推薦ZN整定法) [打印本頁(yè)]

作者: coolfire    時(shí)間: 2021-6-5 01:12
標(biāo)題: PID調(diào)節(jié)例程 參考c語(yǔ)言代碼(PID難點(diǎn)在參數(shù),推薦ZN整定法)
  1. #include "pid.h"

  2. PID pid; //存放PID算法所需要的數(shù)據(jù)

  3. //          pid.Sv=120;        //用戶設(shè)定溫度
  4. //        pid.Kp=30;         //比例系數(shù)
  5. //        pid.T=500;         //PID計(jì)算周期
  6. //          pid.Ti=5000000;         //積分時(shí)間
  7. //        pid.Td=1000;         //微分時(shí)間
  8. //        pid.pwmcycle=200;        //pwm周期1000
  9. //        pid.OUT0=1;
  10. void PID_Calc()  //pid計(jì)算
  11. {
  12.         float DelEk;
  13.         float ti,ki;
  14.         float td;
  15.         float kd;
  16.         float out;
  17. if(pid.C10ms<(pid.T))  //計(jì)算周期未到
  18. {
  19.     return ;
  20. }

  21. pid.Ek=pid.Sv-pid.Pv;   //當(dāng)前的偏差值 = 設(shè)定值 - 返回值
  22. pid.Pout=pid.Kp*pid.Ek; //比例輸出 = 比例系數(shù)*偏差

  23. pid.SEk+=pid.Ek;        //歷史偏差總和

  24. DelEk=pid.Ek-pid.Ek_1;  //最近兩次偏差之差

  25. ti=pid.T/pid.Ti;  //系數(shù)1

  26. ki=ti*pid.Kp;     // 系數(shù)2

  27.   pid.Iout=ki*pid.SEk*pid.Kp;  //積分輸出 = 系數(shù)2 * 偏差和 * 比例系數(shù)

  28. td=pid.Td/pid.T;   //系數(shù)3

  29. kd=pid.Kp*td;      //系數(shù)4

  30. pid.Dout=kd*DelEk; //微分輸出 = 系數(shù)4 * 最近兩次偏差和

  31. out= pid.Pout+ pid.Iout+ pid.Dout; //PID輸出 = 比例輸出 + 積分輸出 + 微分輸出

  32. ///////////////////////////輸出保護(hù)///////////////////////////////
  33. if(out>pid.pwmcycle)
  34. {
  35.   pid.OUT=pid.pwmcycle;
  36. }
  37. else if(out<0)
  38. {
  39.   pid.OUT=pid.OUT0;
  40. }
  41. else
  42. {
  43.   pid.OUT=out;
  44. }
  45. //pid.OUT+=; //本次的計(jì)算結(jié)果
  46. pid.Ek_1=pid.Ek;  //更新偏差

  47. pid.C10ms=0;
  48. }
復(fù)制代碼







歡迎光臨 ELEOK (http://www.afoofa.cn/) Powered by Discuz! X5.0