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

Committer:
diego_carvajal
Date:
Fri Apr 04 16:57:20 2014 +0000
Revision:
0:a7b349b8861d
Tarea_Encoder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diego_carvajal 0:a7b349b8861d 1 /* Tarea No. 4
diego_carvajal 0:a7b349b8861d 2 Diego Fernando Carvajal Castrillón
diego_carvajal 0:a7b349b8861d 3 Santiago Lopez Restrepo
diego_carvajal 0:a7b349b8861d 4 Ingeniería de Control
diego_carvajal 0:a7b349b8861d 5
diego_carvajal 0:a7b349b8861d 6
diego_carvajal 0:a7b349b8861d 7 Practica realizada para aprendizaje de manejo de Encoder. El desarrollo
diego_carvajal 0:a7b349b8861d 8 de esta esta dado por el aumento y disminución de los datos del
diego_carvajal 0:a7b349b8861d 9 controlador PID, además que al presionar el boton del Encoder suene
diego_carvajal 0:a7b349b8861d 10 mediante un PWM.
diego_carvajal 0:a7b349b8861d 11 */
diego_carvajal 0:a7b349b8861d 12
diego_carvajal 0:a7b349b8861d 13
diego_carvajal 0:a7b349b8861d 14 #include "mbed.h"
diego_carvajal 0:a7b349b8861d 15 #include "DebouncedIn.h"
diego_carvajal 0:a7b349b8861d 16 #include "TextLCD.h"
diego_carvajal 0:a7b349b8861d 17 #include "QEI.h"
diego_carvajal 0:a7b349b8861d 18
diego_carvajal 0:a7b349b8861d 19
diego_carvajal 0:a7b349b8861d 20 QEI wheel (PTA16, PTA17, NC, 48);
diego_carvajal 0:a7b349b8861d 21 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
diego_carvajal 0:a7b349b8861d 22
diego_carvajal 0:a7b349b8861d 23
diego_carvajal 0:a7b349b8861d 24 DebouncedIn botonEncoder(PTC5);
diego_carvajal 0:a7b349b8861d 25 PwmOut Pwm(PTA5);
diego_carvajal 0:a7b349b8861d 26
diego_carvajal 0:a7b349b8861d 27
diego_carvajal 0:a7b349b8861d 28 float periodo=0.001;
diego_carvajal 0:a7b349b8861d 29 float dureza=0.1;
diego_carvajal 0:a7b349b8861d 30 int Spbias=0,Sp=0,Kpbias=0,Kp=0,Ki=0,Kibias=0,Kd=0,Kdbias=0,Enc;
diego_carvajal 0:a7b349b8861d 31 int C1=0x0E; // solo muestra el curzor
diego_carvajal 0:a7b349b8861d 32 int i; // indice de la variable
diego_carvajal 0:a7b349b8861d 33
diego_carvajal 0:a7b349b8861d 34 int PWMmodule(float pp,float Dd)
diego_carvajal 0:a7b349b8861d 35 {
diego_carvajal 0:a7b349b8861d 36 Pwm.period(periodo);
diego_carvajal 0:a7b349b8861d 37 Pwm.write(dureza);
diego_carvajal 0:a7b349b8861d 38 wait(0.3);
diego_carvajal 0:a7b349b8861d 39 Pwm.write(0);
diego_carvajal 0:a7b349b8861d 40 return 0;
diego_carvajal 0:a7b349b8861d 41 }
diego_carvajal 0:a7b349b8861d 42
diego_carvajal 0:a7b349b8861d 43 int main()
diego_carvajal 0:a7b349b8861d 44
diego_carvajal 0:a7b349b8861d 45 {
diego_carvajal 0:a7b349b8861d 46 lcd.writeCommand(C1);
diego_carvajal 0:a7b349b8861d 47 lcd.locate(0,0);
diego_carvajal 0:a7b349b8861d 48 lcd.printf("Sp=0");
diego_carvajal 0:a7b349b8861d 49 lcd.locate(8,0);
diego_carvajal 0:a7b349b8861d 50 lcd.printf("Kp=0");
diego_carvajal 0:a7b349b8861d 51 lcd.locate(0,1);
diego_carvajal 0:a7b349b8861d 52 lcd.printf("Ki=0");
diego_carvajal 0:a7b349b8861d 53 lcd.locate(8,1);
diego_carvajal 0:a7b349b8861d 54 lcd.printf("Kd=0");
diego_carvajal 0:a7b349b8861d 55
diego_carvajal 0:a7b349b8861d 56 while(1)
diego_carvajal 0:a7b349b8861d 57 {
diego_carvajal 0:a7b349b8861d 58 Enc=wheel.getPulses();
diego_carvajal 0:a7b349b8861d 59
diego_carvajal 0:a7b349b8861d 60
diego_carvajal 0:a7b349b8861d 61 switch(i) {
diego_carvajal 0:a7b349b8861d 62
diego_carvajal 0:a7b349b8861d 63 case 0:
diego_carvajal 0:a7b349b8861d 64 Kdbias=Kd;
diego_carvajal 0:a7b349b8861d 65
diego_carvajal 0:a7b349b8861d 66 lcd.locate(3,0);
diego_carvajal 0:a7b349b8861d 67 lcd.printf("%d",Sp);
diego_carvajal 0:a7b349b8861d 68
diego_carvajal 0:a7b349b8861d 69 Sp=Spbias+Enc;
diego_carvajal 0:a7b349b8861d 70 if(Sp<0)
diego_carvajal 0:a7b349b8861d 71 {
diego_carvajal 0:a7b349b8861d 72 Sp=0;
diego_carvajal 0:a7b349b8861d 73 wheel.reset();
diego_carvajal 0:a7b349b8861d 74 Enc=0;
diego_carvajal 0:a7b349b8861d 75 }
diego_carvajal 0:a7b349b8861d 76 break;
diego_carvajal 0:a7b349b8861d 77 case 1:
diego_carvajal 0:a7b349b8861d 78 Spbias=Sp;
diego_carvajal 0:a7b349b8861d 79 lcd.locate(11,0);
diego_carvajal 0:a7b349b8861d 80 lcd.printf("%d",Kp);
diego_carvajal 0:a7b349b8861d 81
diego_carvajal 0:a7b349b8861d 82 Kp=Kpbias+Enc;
diego_carvajal 0:a7b349b8861d 83 if(Kp<0)
diego_carvajal 0:a7b349b8861d 84 {
diego_carvajal 0:a7b349b8861d 85 Kp=0;
diego_carvajal 0:a7b349b8861d 86 wheel.reset();
diego_carvajal 0:a7b349b8861d 87 Enc=0;
diego_carvajal 0:a7b349b8861d 88 }
diego_carvajal 0:a7b349b8861d 89 break;
diego_carvajal 0:a7b349b8861d 90 case 2:
diego_carvajal 0:a7b349b8861d 91 Kpbias=Kp;
diego_carvajal 0:a7b349b8861d 92 lcd.locate(3,1);
diego_carvajal 0:a7b349b8861d 93 lcd.printf("%d",Ki);
diego_carvajal 0:a7b349b8861d 94
diego_carvajal 0:a7b349b8861d 95 Ki=Kibias+Enc;
diego_carvajal 0:a7b349b8861d 96 if(Ki<0)
diego_carvajal 0:a7b349b8861d 97 {
diego_carvajal 0:a7b349b8861d 98 Ki=0;
diego_carvajal 0:a7b349b8861d 99 wheel.reset();
diego_carvajal 0:a7b349b8861d 100 Enc=0;
diego_carvajal 0:a7b349b8861d 101 }
diego_carvajal 0:a7b349b8861d 102
diego_carvajal 0:a7b349b8861d 103 break;
diego_carvajal 0:a7b349b8861d 104 case 3:
diego_carvajal 0:a7b349b8861d 105 Kibias=Ki;
diego_carvajal 0:a7b349b8861d 106
diego_carvajal 0:a7b349b8861d 107 lcd.locate(11,1);
diego_carvajal 0:a7b349b8861d 108 lcd.printf("%d",Kd);
diego_carvajal 0:a7b349b8861d 109 Kd=Kdbias+Enc;
diego_carvajal 0:a7b349b8861d 110 if(Kd<0)
diego_carvajal 0:a7b349b8861d 111 {
diego_carvajal 0:a7b349b8861d 112 Kd=0;
diego_carvajal 0:a7b349b8861d 113 wheel.reset();
diego_carvajal 0:a7b349b8861d 114 Enc=0;
diego_carvajal 0:a7b349b8861d 115 }
diego_carvajal 0:a7b349b8861d 116
diego_carvajal 0:a7b349b8861d 117 break;
diego_carvajal 0:a7b349b8861d 118 }
diego_carvajal 0:a7b349b8861d 119
diego_carvajal 0:a7b349b8861d 120
diego_carvajal 0:a7b349b8861d 121
diego_carvajal 0:a7b349b8861d 122
diego_carvajal 0:a7b349b8861d 123 if(botonEncoder.falling())
diego_carvajal 0:a7b349b8861d 124 {
diego_carvajal 0:a7b349b8861d 125 PWMmodule(periodo,dureza);
diego_carvajal 0:a7b349b8861d 126 wait(0.2);
diego_carvajal 0:a7b349b8861d 127 wheel.reset();
diego_carvajal 0:a7b349b8861d 128 i++;
diego_carvajal 0:a7b349b8861d 129 if(i>3)
diego_carvajal 0:a7b349b8861d 130 {
diego_carvajal 0:a7b349b8861d 131 i=0;
diego_carvajal 0:a7b349b8861d 132 }
diego_carvajal 0:a7b349b8861d 133 switch (i)
diego_carvajal 0:a7b349b8861d 134 {
diego_carvajal 0:a7b349b8861d 135 case 0:
diego_carvajal 0:a7b349b8861d 136 lcd.locate(2,0);
diego_carvajal 0:a7b349b8861d 137 lcd.printf("=");
diego_carvajal 0:a7b349b8861d 138 break;
diego_carvajal 0:a7b349b8861d 139 case 1:
diego_carvajal 0:a7b349b8861d 140 lcd.locate(10,0);
diego_carvajal 0:a7b349b8861d 141 lcd.printf("=");
diego_carvajal 0:a7b349b8861d 142 break;
diego_carvajal 0:a7b349b8861d 143 case 2:
diego_carvajal 0:a7b349b8861d 144 lcd.locate(2,1);
diego_carvajal 0:a7b349b8861d 145 lcd.printf("=");
diego_carvajal 0:a7b349b8861d 146 break;
diego_carvajal 0:a7b349b8861d 147 case 3:
diego_carvajal 0:a7b349b8861d 148 lcd.locate(10,1);
diego_carvajal 0:a7b349b8861d 149 lcd.printf("=");
diego_carvajal 0:a7b349b8861d 150 break;
diego_carvajal 0:a7b349b8861d 151
diego_carvajal 0:a7b349b8861d 152
diego_carvajal 0:a7b349b8861d 153 }
diego_carvajal 0:a7b349b8861d 154 }
diego_carvajal 0:a7b349b8861d 155 }
diego_carvajal 0:a7b349b8861d 156 }