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

 找回密碼
 注冊
搜索

PID調節例程 參考c語言代碼(PID難點在參數,推薦ZN整定法)

[復制鏈接]
樓主
coolfire 發表于 2021-6-5 01:12:39 | 只看該作者 |倒序瀏覽 |閱讀模式
  1. #include "pid.h"

  2. PID pid; //存放PID算法所需要的數據

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

  21. pid.Ek=pid.Sv-pid.Pv;   //當前的偏差值 = 設定值 - 返回值
  22. pid.Pout=pid.Kp*pid.Ek; //比例輸出 = 比例系數*偏差

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

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

  25. ti=pid.T/pid.Ti;  //系數1

  26. ki=ti*pid.Kp;     // 系數2

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

  28. td=pid.Td/pid.T;   //系數3

  29. kd=pid.Kp*td;      //系數4

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

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

  32. ///////////////////////////輸出保護///////////////////////////////
  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+=; //本次的計算結果
  46. pid.Ek_1=pid.Ek;  //更新偏差

  47. pid.C10ms=0;
  48. }
復制代碼


您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 09:59

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表