lemueltra

pd_disc_f2

Oct 2nd, 2019
273
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 = 150;
  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. const int corr_pin = A1;
  20. int pot = 0;
  21. int corrente = 0;
  22. int mVperAmp = 66;
  23. int ACSoffset = 2500;
  24. double mV = 0;
  25. double Amp = 0;
  26.  
  27. void setup() {
  28.   Serial.begin(9600);
  29.  
  30.   pinMode(pwm, OUTPUT);
  31.   pinMode(8, OUTPUT);
  32.   pinMode(9, OUTPUT);
  33. }
  34.  
  35. void loop(){
  36.   pd_calc();
  37.  
  38.   if (angulo < setpoint) {
  39.     digitalWrite(8, LOW);
  40.     digitalWrite(9, HIGH);
  41.   }
  42.   else {
  43.     digitalWrite(8, HIGH);
  44.     digitalWrite(9, LOW);
  45.   }
  46.  
  47.   analogWrite(11, termo_pd_escalonado);
  48.   //Serial.print("ANG");
  49.   //Serial.println(angulo);
  50.   delay(20);
  51. }
  52.  
  53. void pd_calc(){
  54.   pot = analogRead(pot_pin);
  55.   angulo = map(pot, 0, 1023, 0, 180);  
  56.   corrente = analogRead(corr_pin);
  57.   mV = (corrente / 1024.0) * 5000;
  58.   Amp = ((mV - ACSoffset) / mVperAmp);
  59.   Serial.println(Amp);
  60.  
  61.   if (angulo > 165 or angulo < 15){
  62.     //Serial.println("FREIO");
  63.     digitalWrite(8, LOW);
  64.     digitalWrite(9, LOW);
  65.     termo_pd_escalonado = 0;
  66.   }        
  67.   else {
  68.     erro = setpoint - angulo;
  69.     //Serial.print("ERR");
  70.     //Serial.println(erro);
  71.     delta_erro = erro - ultimo_erro;
  72.     termo_pd = (Kp * erro) + (Kd * delta_erro);
  73.     termo_pd = constrain(termo_pd, -255, 255);
  74.     termo_pd_escalonado = abs(termo_pd);
  75.     ultimo_erro = erro;
  76.   }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment