您的当前位置:首页正文

增量式PID程序框架

来源:个人技术集锦


增量式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)33. { //不做调整

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. }

因篇幅问题不能全部显示,请点此查看更多更全内容