lemueltra

pd_disc_f

Oct 1st, 2019
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. double angulo = 0;
  2.  
  3. double pwm = 11;
  4. const int dir1 = 8;
  5. const int dir2 = 9;
  6.  
  7. double setpoint = 20;
  8. //double Kp = 10.3;
  9. double Kp = 5;
  10. double Kd = 10;//0.0512;
  11.  
  12. float ultimo_erro = 0;
  13. float erro = 0;
  14. float delta_erro = 0;
  15. float termo_pd = 0;
  16. float termo_pd_escalonado = 0;
  17.  
  18. const int pot_pin = A0;
  19. int pot = 0;
  20. int pmin = 97, pmax = 982, d2 = 180, d1 = 0;
  21. void setup() {
  22.   Serial.begin(9600);
  23.  
  24.   pinMode(pwm, OUTPUT);
  25.   pinMode(8, OUTPUT);
  26.   pinMode(9, OUTPUT);
  27. }
  28.  
  29. void loop(){
  30.   pd_calc();
  31.  
  32.   if (angulo < setpoint) {
  33.     digitalWrite(8, LOW);
  34.     digitalWrite(9, HIGH);
  35.   }
  36.   else {
  37.     digitalWrite(8, HIGH);
  38.     digitalWrite(9, LOW);
  39.   }
  40.  
  41.   analogWrite(11, termo_pd_escalonado);
  42.   //Serial.print("ANG");
  43.   //Serial.println(angulo);
  44.   delay(20);
  45. }
  46.  
  47. void pd_calc(){
  48.   pot = analogRead(pot_pin);
  49.   angulo = map(pot, 0, 1023, 0, 180);  
  50.   if (angulo > 165 or angulo < 15){
  51.     Serial.println("FREIO");
  52.     digitalWrite(8, LOW);
  53.     digitalWrite(9, LOW);
  54.     termo_pd_escalonado = 0;
  55.   }        
  56.   else {
  57.     erro = setpoint - angulo;
  58.     Serial.print("ERR");
  59.     Serial.println(erro);
  60.     delta_erro = erro - ultimo_erro;
  61.     termo_pd = (Kp * erro) + (Kd * delta_erro);
  62.     termo_pd = constrain(termo_pd, -255, 255);
  63.     termo_pd_escalonado = abs(termo_pd);
  64.     ultimo_erro = erro;
  65.   }
  66. }
Add Comment
Please, Sign In to add comment