增量式PID程序框架
1. /*****************定义变量**************************/
2. float Kp; //PID调节的比例常数
3. float Ti; //PID调节的积分常数
4. float T; //采样周期
5. float Td; //PID调节的微分时间常数
6. float A;
7. float B;
8. float C;
9. float ek; //偏差e(k)
10. float ek1; //偏差e(k-1)
11. float ek2; //偏差e(k-2)
12. float uk; //u(k)
13. int uk1; //对u(k)四舍五入求整
14. int out; //最终输出的调整量
15. //变量初始化,根据实际情况初始化
16. Kp=;
17. Ti=;
18. T=;
19. Td=;
20. A=Kp*(1+T/Ti+Td/T);
21. B=-Kp*(1+2*Td/T);
22. C=Kp*Td/T;
23. //Ki=Kpt/Ti,微分系数Kd=KpTd/T,根据实验调的结果确定这些参数
24. ek=0;
25. ek1=0;
26. ek2=0;
27. uk=0;
28. uk1=0;
29. 0ut=0;
30. int pid(float ek)
31. {
32. if(gabs(ek) 34. out=0; // 避免误差较小时候频繁调节引起震荡。 35. } //V值可以自己设 36. else 37. { 38. uk=a0*ek+a1*ek1+a2*ek2; 39. ek2=ek1; 40. ek1=ek; 41. uk1=(int)uk; 42. if(uk>0) //小数处理 43. { 44. if(uk-uk1>=0.5) 45. { 46. uk-uk1+1; 47. } 48. } 49. if(uk<0) 50. { 51. if(uk1-uk>=0.5) 52. { 53. uk1=uk1-1; 54. } 55. out=uk1; 56. } 57. return(out); 58. } 59. float gabs(float ek) //取绝对值 60. { 61. if(ek<0) 62. { 63. ek=0-ek; 64. } 65. return ek; 66. } 67. } 因篇幅问题不能全部显示,请点此查看更多更全内容