ingreso de parametros a controlador PID con un ENCODER .

Dependencies:   DebounceIn Debounced QEI TextLCD2 mbed

/media/uploads/caaruizze/2013-12-07_08.00.53.jpg

main.cpp

Committer:
caaruizze
Date:
2013-11-18
Revision:
2:7fd0465280d2
Parent:
1:30696e4d196b
Child:
3:c87c88124d37

File content as of revision 2:7fd0465280d2:

#include "mbed.h"
#include "QEI.h"
#include "TextLCD.h"
#include "DebouncedIn.h"
#include "DebounceIn.h"
AnalogIn Vin(PTC2);
AnalogOut Vo(PTE30);
QEI wheel (PTD5, PTD0, NC, 624);
TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
DebouncedIn b1(PTC9); 
DebounceIn b2(PTC17);
int x=1,i,d,f,g,h=0,m=0,l=0,k=0,j=0;
int C1=0x0e;
float kp, ki, kd, sp ,err, med, yr, pid, ap, ai, ad, err_v ,Sp;
int main()
{
lcd.writeCommand(C1); // escribe el comando C1
lcd.locate(0,0);
lcd.printf("Sp:%d",i);
lcd.locate(8,0);
lcd.printf("Kp:%d",d);
lcd.locate(0,1);
lcd.printf("Ki:%d",f);
lcd.locate(8,1);
lcd.printf("Kd:%d",g);

    while(1) {
    j=wheel.getPulses();  
     if(b1.falling())
     {
         x=x+1;
     }
    if(j<0)
    {
    wheel.reset();
    j=0;
    }
 
//condicionales para ubicación en pantalla y escritura
    if(x==1)
    { 
    i=j+h;
        if(i<0)
        {
         i=0;
        }
       wait(0.1);
       lcd.locate(3,0);
       lcd.printf("    ");   
       lcd.locate(3,0);
       lcd.printf("%d",i);   
    }
    if(x==2)
    {   
    d=(j)-(i)+h+m;
         if(d<0)
        {
            d=0;    
        } 
         
    wait(0.1);
    lcd.locate(11,0);
    lcd.printf("    ");
    lcd.locate(11,0);
    lcd.printf("%d",d);          
}
    if(x==3)
    {
    f=j-d-i+h+m+l;
        if(f<0)
         {
            f=0;
         }
   wait(0.1);
   lcd.locate(3,1);
   lcd.printf("    ");
   lcd.locate(3,1);   
    lcd.printf("%d",f);
    }
   if(x==4)
      {
       g=j-(i+d+f)+h+m+l+k;
          if(g<0)
            {
            g=0;
            }
    wait(0.1);
    lcd.locate(11,1);
    lcd.printf("    ");
    lcd.locate(11,1);
    lcd.printf("%d",g);
    }
    if(x>4)
    {   
        x=1;
        h=i;
        m=d;
        l=f;
        k=g;    
        wheel.reset();
    }
    if(b2.read()==0)
    {
        goto PID;
    }
}//while
    PID:
     
        wait(0.5); // espera 1 segundo
        lcd.cls();      // borra lcd
        wait(0.2);
        lcd.printf("DATOS GUARDADOS!");
        wait(1);
        lcd.cls();
      
           lcd.locate(0,0);
           lcd.printf("Er:");
           lcd.locate(8,0);
           lcd.printf("Me:");        
           lcd.locate(0,1);
           lcd.printf("Sp:");
           lcd.locate(8,1);
           lcd.printf("CO:");  
           
    while(1)
    {//whilePID
    wait(0.1);         
                   sp=h;
                   kp=m;
                   kd=l;
                   ki=g;
           
           Sp=(sp*3.3)/100;
               med=Vin*3.3;
               err = (Sp-med);
               ap = kp*err;
               ai =(ki*err)+ai;

               ad = kd*(err-err_v);
           pid = (ap+ai+ad);
             if  (pid<0)
           {
            pid=0;
           }
           if (pid>99)
           {
             pid=100;
           }
           
           Vo=pid/100;
                       
                                           
                                lcd.locate(3,0);
                                lcd.printf("     ");            
           lcd.locate(3,0);
           lcd.printf("%.1f",err);
                                lcd.locate(11,0);
                                lcd.printf("     ");            
           lcd.locate(11,0);
           lcd.printf("%.1f",med);
                                lcd.locate(3,1);
                                lcd.printf("     "); 
           lcd.locate(3,1);
           lcd.printf("%.1f",Sp);
                                lcd.locate(11,1);
                                lcd.printf("     ");            
           lcd.locate(11,1);
           lcd.printf("%.1f",pid);
           
                err_v = err;
    }//whilePID


}//main