Advertisement
Guest User

Untitled

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