Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 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. u = u_oud + KC*(Q0*(y0)+Q1*(y1)+Q2*(y2)+Q3*(error));
  30. u_oud = u;
  31. if (u > 1000)
  32. {
  33. output = 1000;
  34. }
  35. else if (u < 0)
  36. {
  37. output = 0;
  38. }
  39. else
  40. {
  41. output = u;
  42. }
  43.  
  44. //output = u;
  45. y2 = y1;
  46. y1 = y0;
  47.  
  48. return output;
  49. }
  50.  
  51. void *mainThread(void *arg0)
  52. {
  53.  
  54. if (initUART() == false)
  55. {
  56. // initUart() failed
  57. while(1);
  58. }
  59. // Samplefrequency = 10 Hz
  60. if (initTimer(10) == false)
  61. {
  62. sendStringUART("initTimer() failed");
  63. while(1);
  64. }
  65.  
  66. initPort();
  67.  
  68. if (initPWM() == false)
  69. {
  70. sendStringUART("initPWM() failed");
  71. while(1);
  72. }
  73.  
  74. while(1)
  75. {
  76. trigger(); // Trigger routine creates a 10 usec trigger pulse for the ultrasonic sensor.
  77. int PWM = controller(distance, 500);
  78. setPWM(PWM);
  79. sendIntIntUART(PWM, distance);
  80.  
  81. while (tick == false)
  82. {
  83. // wait for next timer tick
  84. }
  85. tick = false;
  86. }
  87.  
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement