Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. #include "io.h"
  2. #include "Board.h"
  3.  
  4. #define TU 2//2.55
  5. #define KU 0.998
  6. #define TS 0.1
  7.  
  8. #define KC (0.6*KU*(1-(TS/TU)))
  9. #define TI (TU-TS)/2
  10. #define TD (TU*TU)/((8*TU)-TS)
  11.  
  12. #define Q0 (-1.0-(TD/TS))
  13. #define Q1 (1.0+(2*(TD/TS)))
  14. #define Q2 ((-TD/TS))
  15. #define Q3 (TS/TI)
  16.  
  17. int controller(int dist, int setpoint)
  18. {
  19.  
  20. static float output = 0.0;
  21. static float y0 = 0.0;
  22. static float y1 = 0.0;
  23. static float y2 = 0.0;
  24. static float u = 0.0;
  25. static float u_oud = 0.0;
  26.  
  27. float error = setpoint - dist;
  28. y0 = dist;
  29. //float output = Kc * error;
  30. u = u_oud + KC*(Q0*(y0)+Q1*(y1)+Q2*(y2)+Q3*(error));
  31. //u *= 10;
  32. u_oud = u;
  33. /* if (u > 1000)
  34. {
  35. output = 1000;
  36. }
  37. else if (u < 0)
  38. {
  39. output = 0;
  40. }
  41. else
  42. {
  43. output = u;
  44. }*/
  45.  
  46. output = u;
  47. y2 = y1;
  48. y1 = y0;
  49.  
  50. return output;
  51. }
  52.  
  53. void *mainThread(void *arg0)
  54. {
  55.  
  56. if (initUART() == false)
  57. {
  58. // initUart() failed
  59. while(1);
  60. }
  61. // Samplefrequency = 10 Hz
  62. if (initTimer(10) == false)
  63. {
  64. sendStringUART("initTimer() failed");
  65. while(1);
  66. }
  67.  
  68. initPort();
  69.  
  70. if (initPWM() == false)
  71. {
  72. sendStringUART("initPWM() failed");
  73. while(1);
  74. }
  75.  
  76. while(1)
  77. {
  78. trigger(); // Trigger routine creates a 10 usec trigger pulse for the ultrasonic sensor.
  79. int PWM = controller(distance, 500);
  80. setPWM(PWM);
  81.  
  82. while (tick == false)
  83. {
  84. // wait for next timer tick
  85. }
  86. tick = false;
  87. }
  88.  
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement