pid_control.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "pid_control.h"
  2. #include <iostream>
  3. pid_control::pid_control() {
  4. }
  5. pid_control::PID_position::PID_position():kp(0),ki(0),kd(0),target(0),actual(0),integral(0)
  6. {
  7. e=target-actual;
  8. e_pre=e;
  9. }
  10. pid_control::PID_position::PID_position(float p,float i,float d):kp(p),ki(i),kd(d),target(0),actual(0),integral(0)
  11. {
  12. e=target-actual;
  13. e_pre=e;
  14. }
  15. float pid_control::PID_position::pid_control(float tar,float act)
  16. {
  17. float u;
  18. target=tar;
  19. actual=act;
  20. e=target-actual;
  21. integral+=e;
  22. u=kp*e+ki*integral+kd*(e-e_pre);
  23. e_pre=e;
  24. return u;
  25. }
  26. void pid_control::PID_position::pid_show()
  27. {
  28. using std::cout;
  29. using std::endl;
  30. cout<<"The infomation of this position PID controller is as following:"<<endl;
  31. cout<<" Kp="<<kp<<endl;
  32. cout<<" Ki="<<ki<<endl;
  33. cout<<" Kd="<<kd<<endl;
  34. cout<<" integral="<<integral<<endl;
  35. cout<<" target="<<target<<endl;
  36. cout<<" actual="<<actual<<endl;
  37. cout<<" e="<<e<<endl;
  38. cout<<" e_pre="<<e_pre<<endl;
  39. }
  40. //增量PID
  41. pid_control::PID_incremental::PID_incremental():kp(0),ki(0),kd(0),e_pre_1(0),e_pre_2(0),target(0),actual(0)
  42. {
  43. A=kp+ki+kd;
  44. B=-2*kd-kp;
  45. C=kd;
  46. e=target-actual;
  47. }
  48. pid_control::PID_incremental::PID_incremental(float p,float i,float d):kp(p),ki(i),kd(d),e_pre_1(0),e_pre_2(0),target(0),actual(0)
  49. {
  50. A=kp+ki+kd;
  51. B=-2*kd-kp;
  52. C=kd;
  53. e=target-actual;
  54. }
  55. float pid_control::PID_incremental::pid_control(float tar,float act)
  56. {
  57. float u_increment;
  58. target=tar;
  59. actual=act;
  60. e=target-actual;
  61. u_increment=A*e+B*e_pre_1+C*e_pre_2;
  62. e_pre_2=e_pre_1;
  63. e_pre_1=e;
  64. return u_increment;
  65. }
  66. void pid_control::PID_incremental::pid_show()
  67. {
  68. using std::cout;
  69. using std::endl;
  70. cout<<"The infomation of this incremental PID controller is as following:"<<endl;
  71. cout<<" Kp="<<kp<<endl;
  72. cout<<" Ki="<<ki<<endl;
  73. cout<<" Kd="<<kd<<endl;
  74. cout<<" target="<<target<<endl;
  75. cout<<" actual="<<actual<<endl;
  76. cout<<" e="<<e<<endl;
  77. cout<<"e_pre_1="<<e_pre_1<<endl;
  78. cout<<"e_pre_2="<<e_pre_2<<endl;
  79. }