Advertisement
Guest User

Untitled

a guest
Jun 30th, 2015
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. PID_Values.P_Term = PID_Values.Percnt_Error;
  2. PID_Values.P_Term = PID_Parameters.KP * PID_Values.P_Term;
  3.  
  4.  
  5. if(PID_Values.P_Term >= PID_Values.PMAX)
  6. {
  7. PID_Values.P_Term = PID_Values.PMAX;
  8. }
  9. else if(PID_Values.P_Term <= PID_Values.PMIN)
  10. {
  11. PID_Values.P_Term = PID_Values.PMIN;
  12. }
  13.  
  14. PID_Values.PID_Term = PID_Values.P_Term;
  15. PID_Values.PID_Term = PID_Values.PID_Term + PID_Values.I;
  16. PID_Values.PID_Term = PID_Values.PID_Term - PID_Values.D_Term;
  17.  
  18.  
  19.  
  20.  
  21. if(PID_Values.PID_Term >= PID_Values.PIDMAX)
  22. {
  23. PID_Values.PID_Term = PID_Values.PIDMAX;
  24. }
  25. else if(PID_Values.PID_Term <= PID_Values.PIDMIN)
  26. {
  27. PID_Values.PID_Term = PID_Values.PIDMIN;
  28. }
  29.  
  30. if (PID_Values.PID_Term<=0)
  31. {
  32. PID_Values.PIDOutput = 0;
  33. }
  34. else
  35. {
  36. PID_Values.PIDOutput = (PID_Values.PID_Term/PID_Values.PIDMAX)*1000;
  37. }
  38.  
  39.  
  40.  
  41. PID_Values.Percnt_Error1 = PID_Values.Percnt_Error;
  42. PID_Values.ref_freq = (U16) 16*PID_Values.PIDOutput;
  43.  
  44. **Integral/Derivative Calculation**
  45.  
  46. PID_Values.Error_Accum = PID_Values.Error_Accum + PID_Values.Percnt_Error; // Error Accumulation over time
  47.  
  48.  
  49. if(PID_Values.Error_Accum >= PID_Values.Error_AccumMAX)
  50. {
  51. PID_Values.Error_Accum = PID_Values.Error_AccumMAX;
  52. }
  53.  
  54. if(PID_Values.Error_Accum <= PID_Values.Error_AccumMIN)
  55. {
  56. PID_Values.Error_Accum = PID_Values.Error_AccumMIN;
  57. }
  58.  
  59. // NumToString(PID_Values.Error_Accum, (char*)temp1);
  60. // printLcpLine(0, 33, 127, 10, (const U8*)temp1, CENTER);
  61.  
  62. PID_Values.I = PID_Values.Error_Accum* PID_Values.Integral_Time;//(PID_Parameters.IntergrlTime);
  63.  
  64. if(PID_Values.I >= PID_Values.IMAX)
  65. {
  66. PID_Values.I = PID_Values.IMAX;
  67. }
  68. else if(PID_Values.I <= PID_Values.IMIN)
  69. {
  70. PID_Values.I = PID_Values.IMIN;
  71. }
  72. // NumToString(PID_Values.I, (char*)temp1);
  73. // printLcpLine(0, 23, 127, 10, (const U8*)temp1, CENTER);
  74.  
  75. // Derivative calculation
  76.  
  77. PID_Values.D_Term = PID_Parameters.DiffTime * (PID_Values.Percnt_Error - PID_Values.Old_Error);
  78.  
  79. PID_Values.Old_Error = PID_Values.Percnt_Error1;
  80. if(PID_Values.D_Term >= PID_Values.DMAX)
  81. {
  82. PID_Values.D_Term = PID_Values.DMAX;
  83. }
  84. else if(PID_Values.D_Term <=PID_Values.DMIN)
  85. {
  86. PID_Values.D_Term = PID_Values.DMIN;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement