Tarea para manejo de Encoder, el cual incrementa y decrementa los parámetros del PID y presionando el boton suena
Dependencies: Debounced QEI TextLCD mbed
main.cpp
- Committer:
- diego_carvajal
- Date:
- 2014-04-04
- Revision:
- 0:a7b349b8861d
File content as of revision 0:a7b349b8861d:
/* Tarea No. 4 Diego Fernando Carvajal Castrillón Santiago Lopez Restrepo Ingeniería de Control Practica realizada para aprendizaje de manejo de Encoder. El desarrollo de esta esta dado por el aumento y disminución de los datos del controlador PID, además que al presionar el boton del Encoder suene mediante un PWM. */ #include "mbed.h" #include "DebouncedIn.h" #include "TextLCD.h" #include "QEI.h" QEI wheel (PTA16, PTA17, NC, 48); TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 DebouncedIn botonEncoder(PTC5); PwmOut Pwm(PTA5); float periodo=0.001; float dureza=0.1; int Spbias=0,Sp=0,Kpbias=0,Kp=0,Ki=0,Kibias=0,Kd=0,Kdbias=0,Enc; int C1=0x0E; // solo muestra el curzor int i; // indice de la variable int PWMmodule(float pp,float Dd) { Pwm.period(periodo); Pwm.write(dureza); wait(0.3); Pwm.write(0); return 0; } int main() { lcd.writeCommand(C1); lcd.locate(0,0); lcd.printf("Sp=0"); lcd.locate(8,0); lcd.printf("Kp=0"); lcd.locate(0,1); lcd.printf("Ki=0"); lcd.locate(8,1); lcd.printf("Kd=0"); while(1) { Enc=wheel.getPulses(); switch(i) { case 0: Kdbias=Kd; lcd.locate(3,0); lcd.printf("%d",Sp); Sp=Spbias+Enc; if(Sp<0) { Sp=0; wheel.reset(); Enc=0; } break; case 1: Spbias=Sp; lcd.locate(11,0); lcd.printf("%d",Kp); Kp=Kpbias+Enc; if(Kp<0) { Kp=0; wheel.reset(); Enc=0; } break; case 2: Kpbias=Kp; lcd.locate(3,1); lcd.printf("%d",Ki); Ki=Kibias+Enc; if(Ki<0) { Ki=0; wheel.reset(); Enc=0; } break; case 3: Kibias=Ki; lcd.locate(11,1); lcd.printf("%d",Kd); Kd=Kdbias+Enc; if(Kd<0) { Kd=0; wheel.reset(); Enc=0; } break; } if(botonEncoder.falling()) { PWMmodule(periodo,dureza); wait(0.2); wheel.reset(); i++; if(i>3) { i=0; } switch (i) { case 0: lcd.locate(2,0); lcd.printf("="); break; case 1: lcd.locate(10,0); lcd.printf("="); break; case 2: lcd.locate(2,1); lcd.printf("="); break; case 3: lcd.locate(10,1); lcd.printf("="); break; } } } }