Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. #include "io.h"
  2.  
  3.  
  4.  
  5.  
  6. /*
  7. #define Q0 -1.09//(-1-(TD/TS))
  8. #define Q1 (1+((2*TD)/TS))
  9. #define Q2 (-(TD/TS))
  10. #define Q3 (TS/TI)
  11. */
  12.  
  13.  
  14. /*
  15. #define Q0 (1+(TD/TS))
  16. #define Q1 (-1+((2*TD)/TS)-(TS/TI))
  17. #define Q2 ((TD/TS))
  18. */
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. #define N 3
  26.  
  27.  
  28. void *mainThread(void *arg0)
  29. {
  30. const float TSYS = 42.15;
  31. const float KSYS = 1.51;
  32. const float TETA = 1.75;
  33.  
  34. const float TS = 0.1;
  35.  
  36. const float SET = 50.0;
  37.  
  38. const float KC = ((1.2*TSYS)/(KSYS*TETA));
  39. const float TI = (2.0*TETA);
  40. const float TD = (0.5*TETA); //0
  41.  
  42.  
  43. const float Q0 = (-1.0-(TD/TS));
  44. const float Q1 = (1.0+(2*(TD/TS)));
  45. const float Q2 = ((-TD/TS));
  46. const float Q3 = (TS/TI);
  47.  
  48.  
  49. if (initUART() == false)
  50. {
  51. // initUart() failed
  52. while(1);
  53. }
  54. // Samplefrequency = 10 Hz
  55. if (initTimer(10) == false)
  56. {
  57. sendStringUART("initTimer() failed");
  58. while(1);
  59. }
  60. if (initADC() == false)
  61. {
  62. sendStringUART("initADC() failed");
  63. while(1);
  64. }
  65. if (initPWM() == false)
  66. {
  67. sendStringUART("initPWM() failed");
  68. while(1);
  69. }
  70. int ticks = 0; // counter for ticks
  71.  
  72. float dutyCycle = 0.0;
  73. float r = 200.0;
  74. float y0 = 0.0;
  75. float y1 = 0.0;
  76. float y2 = 0.0;
  77. float u = 0.0;
  78. float u_oud = 0.0;
  79.  
  80. while(1)
  81. {
  82. y0 = readADC();
  83.  
  84. float e = (r-y1);
  85.  
  86. //dutyCycle = dutyCycleOud + KC*(Q0*y[0]+Q1*y[1]+Q2*y[2]+Q3*(r-y[1]));
  87.  
  88. u = u_oud + KC*(Q0*(y0)+Q1*(y1)+Q2*(y2)+Q3*(e));
  89.  
  90. if(u > 1000)
  91. {
  92. dutyCycle = 1000;
  93. }
  94. else if(u < 0)
  95. {
  96. dutyCycle = 0;
  97. }
  98. else
  99. {
  100. dutyCycle = u;
  101. }
  102. u_oud = u;
  103. setPWM((int)dutyCycle);
  104.  
  105. y2 = y1;
  106. y1 = y0;
  107.  
  108.  
  109. if (y0 == INT16_MIN)
  110. {
  111. sendStringUART("readADC failed!");
  112. }
  113. else
  114. {
  115. sendIntIntUART((int)dutyCycle / 10, y0);
  116. }
  117.  
  118. if (tick == true)
  119. {
  120. sendStringUART("The calculation is not fast enough");
  121. }
  122. while (tick == false)
  123. {
  124. // wait for next timer tick
  125. }
  126. tick = false;
  127. }
  128.  
  129. return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement