Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. int kot = 0;
  2. float kot_v_radianih;
  3. float referencna_hitrost = cos(kot_v_radianih) * 100;
  4.  
  5. float pwm = 0;
  6. int cas_med_pulzoma = 0.01;
  7. int prejsnji_cas = 0;
  8. float obrati_na_min = 0.01;
  9. float napaka_prej = 0;
  10.  
  11. float Kp = 1.5;
  12. float Ki = 0.002;
  13. float Kd = 2;
  14. float napaka = 0;
  15.  
  16. void setup() {
  17. pinMode(5, OUTPUT);
  18. pinMode(6, OUTPUT);
  19. pinMode(7, OUTPUT);
  20. pinMode(2, INPUT_PULLUP);
  21. pinMode(3, INPUT_PULLUP);
  22. attachInterrupt(0, encoderISR, RISING);
  23. Serial.begin(9600);
  24. }
  25.  
  26. void loop() {
  27.  
  28. kot_v_radianih = (360/300) * kot * (3.14/360);
  29.  
  30. obrati_na_min = 60. * 1000000./(cas_med_pulzoma*300.);
  31.  
  32. int napaka_zdej = referencna_hitrost - obrati_na_min;
  33. float parameter_Kp = napaka_zdej * Kp;
  34.  
  35. napaka = napaka + napaka_zdej;
  36. napaka = constrain(napaka, -100000, 100000);
  37. float parameter_Ki = Ki * (napaka);
  38.  
  39. float parameter_Kd = napaka_zdej - napaka_prej;
  40. napaka_prej = napaka_zdej;
  41. pwm = parameter_Kp + parameter_Ki + parameter_Kd;
  42. pwm = constrain(pwm, 0, 200);
  43.  
  44. digitalWrite(6, LOW);
  45. digitalWrite(7, HIGH);
  46. analogWrite(5, pwm);
  47. Serial.println(obrati_na_min);
  48. }
  49.  
  50. void encoderISR () {
  51. kot++;
  52. int trenutni_cas = micros();
  53. cas_med_pulzoma = trenutni_cas - prejsnji_cas;
  54. prejsnji_cas = trenutni_cas;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement