Control PID para seguimiento de consigna de Horno, entrada de parámetros a través de un encoder.

Dependencies:   Debounced QEI RTC-DS1307 TextLCD mbed

Fork of Reloj_alarma by Gustavo Ramirez

Committer:
SantiagoUnal97
Date:
Tue Jun 05 05:39:25 2018 +0000
Revision:
2:a4b764672482
Parent:
1:0639f31dd59f
Control PID para Horno

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SantiagoUnal97 2:a4b764672482 1 /*
SantiagoUnal97 2:a4b764672482 2 ESTE PROGRAMA PERMITE CONFIGURAR EL SIGUMINETO DE UNA CONSIGNA A TRAVES DE CONTROLADOR PID,PARA UN HORNO DE REFLUJO
SantiagoUnal97 2:a4b764672482 3 SE USA LA SALIDA ANALOGA Y PWM DE LA TARJETA, SEGUN SE DESEE.
SantiagoUnal97 2:a4b764672482 4 ESTA TAREA FUE DESARROLLADA POR SANTIAGO GOMEZ ESTRADA,JUAN FERNANDO ZAPATA Y MATEO
SantiagoUnal97 2:a4b764672482 5 PARA LA MATERIA DE PROCESADORES DE LA UNIVERSIDAD NACIONAL DE COLOMBIA SEDE MEDELLÍN, PRIMER SEMESTRE DEL AÑO 2018
SantiagoUnal97 2:a4b764672482 6 */
Jepalacioh 0:c2ed510ee88d 7 #include "mbed.h"
Jepalacioh 0:c2ed510ee88d 8 #include "DebouncedIn.h"
Jepalacioh 0:c2ed510ee88d 9 #include "TextLCD.h"
Jepalacioh 0:c2ed510ee88d 10 #include "QEI.h"
Jepalacioh 0:c2ed510ee88d 11 #include "Rtc_Ds1307.h"
SantiagoUnal97 2:a4b764672482 12 #include "string.h"
SantiagoUnal97 2:a4b764672482 13
SantiagoUnal97 2:a4b764672482 14 Serial pc(USBTX, USBRX);
Jepalacioh 0:c2ed510ee88d 15
Jepalacioh 0:c2ed510ee88d 16 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
Jepalacioh 0:c2ed510ee88d 17 Rtc_Ds1307 rtc(PTE0, PTE1);
Jepalacioh 0:c2ed510ee88d 18 QEI wheel (PTA16, PTA17, NC, 48);
SantiagoUnal97 2:a4b764672482 19 DebouncedIn button_enco(PTC5);
SantiagoUnal97 2:a4b764672482 20 DigitalOut myled(LED3);
SantiagoUnal97 2:a4b764672482 21 AnalogIn y(PTB3);//entrada analoga
SantiagoUnal97 2:a4b764672482 22 AnalogOut u(PTE30);//salida analoga OJO solo se le pueden drenar 1.5mA en circuitos use un Buffer
SantiagoUnal97 2:a4b764672482 23 PwmOut Upwm(PTE29);
Jepalacioh 0:c2ed510ee88d 24
SantiagoUnal97 2:a4b764672482 25 int dato; // tiempo de cada dato que se lee
SantiagoUnal97 2:a4b764672482 26 int pul_low;
Jepalacioh 0:c2ed510ee88d 27
SantiagoUnal97 2:a4b764672482 28 char r;
SantiagoUnal97 2:a4b764672482 29
Jepalacioh 0:c2ed510ee88d 30
SantiagoUnal97 2:a4b764672482 31 int mode=0;
SantiagoUnal97 2:a4b764672482 32 int code;
SantiagoUnal97 2:a4b764672482 33
SantiagoUnal97 2:a4b764672482 34
SantiagoUnal97 2:a4b764672482 35 //
Jepalacioh 0:c2ed510ee88d 36 int C1=0x0C;
tony63 1:0639f31dd59f 37 int m;
Jepalacioh 0:c2ed510ee88d 38 int Conf=0; // 0: Alarma y 1:Reloj
Jepalacioh 0:c2ed510ee88d 39 int Lugar=0; // Definen el punto en el cual va el programa
Jepalacioh 0:c2ed510ee88d 40 int i=0;
SantiagoUnal97 2:a4b764672482 41 int j=1;
SantiagoUnal97 2:a4b764672482 42 float periodo;
SantiagoUnal97 2:a4b764672482 43 float Frecuencia = 2000;
SantiagoUnal97 2:a4b764672482 44 int cont=0;
Jepalacioh 0:c2ed510ee88d 45 int visual=0;
SantiagoUnal97 2:a4b764672482 46 int alarma=0;
SantiagoUnal97 2:a4b764672482 47 float pid,o,ai,ad,ap,med,err;
SantiagoUnal97 2:a4b764672482 48 float err_v;
SantiagoUnal97 2:a4b764672482 49 int sp=0,Ki=0,Kp=0,Kd=0,pos=1;
SantiagoUnal97 2:a4b764672482 50 int t1=0,t2=0,t3=0,T1=0,T2=0,T3=0;
Jepalacioh 0:c2ed510ee88d 51
Jepalacioh 0:c2ed510ee88d 52 int main()
Jepalacioh 0:c2ed510ee88d 53 {
SantiagoUnal97 2:a4b764672482 54 myled=1;
SantiagoUnal97 2:a4b764672482 55 j=1;
SantiagoUnal97 2:a4b764672482 56 Rtc_Ds1307::Time_rtc tm2 = {};
SantiagoUnal97 2:a4b764672482 57
SantiagoUnal97 2:a4b764672482 58
Jepalacioh 0:c2ed510ee88d 59 lcd.cls();
Jepalacioh 0:c2ed510ee88d 60 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
Jepalacioh 0:c2ed510ee88d 61 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 62 lcd.printf("--Control --Consig");
Jepalacioh 0:c2ed510ee88d 63
Jepalacioh 0:c2ed510ee88d 64 periodo=(1/Frecuencia);
SantiagoUnal97 2:a4b764672482 65 Upwm.period(periodo);
SantiagoUnal97 2:a4b764672482 66 Upwm.pulsewidth(0);
Jepalacioh 0:c2ed510ee88d 67
SantiagoUnal97 2:a4b764672482 68
Jepalacioh 0:c2ed510ee88d 69 while(1)
Jepalacioh 0:c2ed510ee88d 70 {
SantiagoUnal97 2:a4b764672482 71
Jepalacioh 0:c2ed510ee88d 72 switch (Lugar)
Jepalacioh 0:c2ed510ee88d 73 {
Jepalacioh 0:c2ed510ee88d 74 case 0:
tony63 1:0639f31dd59f 75 m=wheel.getPulses(); // m son los datos del encoder
Jepalacioh 0:c2ed510ee88d 76 if(m!=0 && Conf==0){
Jepalacioh 0:c2ed510ee88d 77 Conf=1;
Jepalacioh 0:c2ed510ee88d 78 wheel.reset();
Jepalacioh 0:c2ed510ee88d 79 m=0;
Jepalacioh 0:c2ed510ee88d 80 }
Jepalacioh 0:c2ed510ee88d 81
SantiagoUnal97 2:a4b764672482 82 if(m!=0 && Conf==1){
Jepalacioh 0:c2ed510ee88d 83 Conf=0;
Jepalacioh 0:c2ed510ee88d 84 wheel.reset();
Jepalacioh 0:c2ed510ee88d 85 m=0;
Jepalacioh 0:c2ed510ee88d 86 }
Jepalacioh 0:c2ed510ee88d 87
Jepalacioh 0:c2ed510ee88d 88 if(Conf==0){
Jepalacioh 0:c2ed510ee88d 89
Jepalacioh 0:c2ed510ee88d 90 lcd.locate(11,0);
Jepalacioh 0:c2ed510ee88d 91 lcd.printf("-");
Jepalacioh 0:c2ed510ee88d 92 lcd.locate(1,0);
Jepalacioh 0:c2ed510ee88d 93 lcd.printf(">");
Jepalacioh 0:c2ed510ee88d 94 lcd.locate(0,1);
Jepalacioh 0:c2ed510ee88d 95 wait(0.1);
Jepalacioh 0:c2ed510ee88d 96
Jepalacioh 0:c2ed510ee88d 97 }
Jepalacioh 0:c2ed510ee88d 98
Jepalacioh 0:c2ed510ee88d 99 if(Conf==1){
Jepalacioh 0:c2ed510ee88d 100
Jepalacioh 0:c2ed510ee88d 101 lcd.locate(1,0);
Jepalacioh 0:c2ed510ee88d 102 lcd.printf("-");
Jepalacioh 0:c2ed510ee88d 103 lcd.locate(11,0);
Jepalacioh 0:c2ed510ee88d 104 lcd.printf(">");
Jepalacioh 0:c2ed510ee88d 105 lcd.locate(0,1);
Jepalacioh 0:c2ed510ee88d 106 wait(0.1);
Jepalacioh 0:c2ed510ee88d 107 }
Jepalacioh 0:c2ed510ee88d 108
tony63 1:0639f31dd59f 109 if (button_enco.falling()){ //si se pulsa boton encoder
Jepalacioh 0:c2ed510ee88d 110 Lugar++;
Jepalacioh 0:c2ed510ee88d 111 m=0;
Jepalacioh 0:c2ed510ee88d 112 }
Jepalacioh 0:c2ed510ee88d 113
Jepalacioh 0:c2ed510ee88d 114 break;
Jepalacioh 0:c2ed510ee88d 115
Jepalacioh 0:c2ed510ee88d 116 case 1:
Jepalacioh 0:c2ed510ee88d 117 switch(i)
Jepalacioh 0:c2ed510ee88d 118 {
SantiagoUnal97 2:a4b764672482 119 case 0:
SantiagoUnal97 2:a4b764672482 120 if(Conf==0) // control
Jepalacioh 0:c2ed510ee88d 121 {
Jepalacioh 0:c2ed510ee88d 122 lcd.cls();
Jepalacioh 0:c2ed510ee88d 123 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 124 lcd.printf("Config. Control ");
Jepalacioh 0:c2ed510ee88d 125 wait(1);
SantiagoUnal97 2:a4b764672482 126 lcd.cls();
Jepalacioh 0:c2ed510ee88d 127 i++;
Jepalacioh 0:c2ed510ee88d 128 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 129 lcd.printf("Kp: ");
SantiagoUnal97 2:a4b764672482 130 m=0;
Jepalacioh 0:c2ed510ee88d 131 }
Jepalacioh 0:c2ed510ee88d 132
SantiagoUnal97 2:a4b764672482 133 if(Conf==1) //consignas
Jepalacioh 0:c2ed510ee88d 134 {
Jepalacioh 0:c2ed510ee88d 135 lcd.cls();
Jepalacioh 0:c2ed510ee88d 136 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 137 lcd.printf("Config.consig ");
Jepalacioh 0:c2ed510ee88d 138 wait(1);
SantiagoUnal97 2:a4b764672482 139 i=5;
Jepalacioh 0:c2ed510ee88d 140 lcd.cls();
Jepalacioh 0:c2ed510ee88d 141 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 142 lcd.printf("t1: ");
SantiagoUnal97 2:a4b764672482 143 m=0;
tony63 1:0639f31dd59f 144
Jepalacioh 0:c2ed510ee88d 145 }
Jepalacioh 0:c2ed510ee88d 146
Jepalacioh 0:c2ed510ee88d 147 break;
Jepalacioh 0:c2ed510ee88d 148
SantiagoUnal97 2:a4b764672482 149 case 1: //Kp
Jepalacioh 0:c2ed510ee88d 150 m=wheel.getPulses();
Jepalacioh 0:c2ed510ee88d 151 if (m!=0)
Jepalacioh 0:c2ed510ee88d 152 {
SantiagoUnal97 2:a4b764672482 153 Kp=Kp+m;
SantiagoUnal97 2:a4b764672482 154
SantiagoUnal97 2:a4b764672482 155
Jepalacioh 0:c2ed510ee88d 156
Jepalacioh 0:c2ed510ee88d 157 wheel.reset();
Jepalacioh 0:c2ed510ee88d 158 m=0;
Jepalacioh 0:c2ed510ee88d 159 }
SantiagoUnal97 2:a4b764672482 160
Jepalacioh 0:c2ed510ee88d 161 lcd.locate(5,0);
SantiagoUnal97 2:a4b764672482 162 lcd.printf("%d ",Kp);
SantiagoUnal97 2:a4b764672482 163
SantiagoUnal97 2:a4b764672482 164
Jepalacioh 0:c2ed510ee88d 165
Jepalacioh 0:c2ed510ee88d 166 if (button_enco.falling())
Jepalacioh 0:c2ed510ee88d 167 {
Jepalacioh 0:c2ed510ee88d 168 i++;
Jepalacioh 0:c2ed510ee88d 169 m=0;
Jepalacioh 0:c2ed510ee88d 170 lcd.cls();
Jepalacioh 0:c2ed510ee88d 171 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 172 lcd.printf("Ki: ");
Jepalacioh 0:c2ed510ee88d 173 }
Jepalacioh 0:c2ed510ee88d 174
Jepalacioh 0:c2ed510ee88d 175 break;
SantiagoUnal97 2:a4b764672482 176 case 2: // Ki
SantiagoUnal97 2:a4b764672482 177 m=0;
Jepalacioh 0:c2ed510ee88d 178 m=wheel.getPulses();
Jepalacioh 0:c2ed510ee88d 179 if (m!=0)
Jepalacioh 0:c2ed510ee88d 180 {
SantiagoUnal97 2:a4b764672482 181 Ki=Ki+m;
SantiagoUnal97 2:a4b764672482 182
Jepalacioh 0:c2ed510ee88d 183
Jepalacioh 0:c2ed510ee88d 184 wheel.reset();
Jepalacioh 0:c2ed510ee88d 185 m=0;
Jepalacioh 0:c2ed510ee88d 186 }
Jepalacioh 0:c2ed510ee88d 187 lcd.locate(5,0);
SantiagoUnal97 2:a4b764672482 188 lcd.printf("%d ",Ki);
Jepalacioh 0:c2ed510ee88d 189
Jepalacioh 0:c2ed510ee88d 190 if (button_enco.falling())
Jepalacioh 0:c2ed510ee88d 191 {
Jepalacioh 0:c2ed510ee88d 192 i++;
Jepalacioh 0:c2ed510ee88d 193 m=0;
Jepalacioh 0:c2ed510ee88d 194 lcd.cls();
Jepalacioh 0:c2ed510ee88d 195 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 196 lcd.printf("Kd: ");
tony63 1:0639f31dd59f 197
Jepalacioh 0:c2ed510ee88d 198 }
Jepalacioh 0:c2ed510ee88d 199 break;
SantiagoUnal97 2:a4b764672482 200 case 3: // Kd
Jepalacioh 0:c2ed510ee88d 201 m=wheel.getPulses();
Jepalacioh 0:c2ed510ee88d 202 if (m!=0)
Jepalacioh 0:c2ed510ee88d 203 {
SantiagoUnal97 2:a4b764672482 204 Kd=Kd+m;
Jepalacioh 0:c2ed510ee88d 205
Jepalacioh 0:c2ed510ee88d 206
Jepalacioh 0:c2ed510ee88d 207 wheel.reset();
Jepalacioh 0:c2ed510ee88d 208 m=0;
Jepalacioh 0:c2ed510ee88d 209 }
SantiagoUnal97 2:a4b764672482 210 lcd.locate(7,0);
SantiagoUnal97 2:a4b764672482 211 lcd.printf("%d",Kd);
Jepalacioh 0:c2ed510ee88d 212
Jepalacioh 0:c2ed510ee88d 213 if (button_enco.falling())
Jepalacioh 0:c2ed510ee88d 214 {
Jepalacioh 0:c2ed510ee88d 215 i++;
Jepalacioh 0:c2ed510ee88d 216 m=0;
Jepalacioh 0:c2ed510ee88d 217 lcd.cls();
Jepalacioh 0:c2ed510ee88d 218 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 219 lcd.printf("sp: ");
tony63 1:0639f31dd59f 220
Jepalacioh 0:c2ed510ee88d 221 }
Jepalacioh 0:c2ed510ee88d 222
Jepalacioh 0:c2ed510ee88d 223 break;
Jepalacioh 0:c2ed510ee88d 224
SantiagoUnal97 2:a4b764672482 225 case 4: //set point
SantiagoUnal97 2:a4b764672482 226 m=wheel.getPulses();
Jepalacioh 0:c2ed510ee88d 227 if (m!=0)
Jepalacioh 0:c2ed510ee88d 228 {
SantiagoUnal97 2:a4b764672482 229 sp=sp+m;
SantiagoUnal97 2:a4b764672482 230
SantiagoUnal97 2:a4b764672482 231
Jepalacioh 0:c2ed510ee88d 232
Jepalacioh 0:c2ed510ee88d 233 wheel.reset();
Jepalacioh 0:c2ed510ee88d 234 m=0;
Jepalacioh 0:c2ed510ee88d 235 }
Jepalacioh 0:c2ed510ee88d 236 lcd.locate(6,0);
SantiagoUnal97 2:a4b764672482 237 lcd.printf("%d",sp);
Jepalacioh 0:c2ed510ee88d 238
Jepalacioh 0:c2ed510ee88d 239 if (button_enco.falling())
Jepalacioh 0:c2ed510ee88d 240 {
SantiagoUnal97 2:a4b764672482 241
Jepalacioh 0:c2ed510ee88d 242 lcd.cls();
Jepalacioh 0:c2ed510ee88d 243 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 244 lcd.printf("Control config. ");
SantiagoUnal97 2:a4b764672482 245 wait(1);
SantiagoUnal97 2:a4b764672482 246 i=0;
SantiagoUnal97 2:a4b764672482 247 m=0;
SantiagoUnal97 2:a4b764672482 248 Lugar=0;
SantiagoUnal97 2:a4b764672482 249 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 250 lcd.printf("--Control --Consig");
SantiagoUnal97 2:a4b764672482 251
Jepalacioh 0:c2ed510ee88d 252 }
Jepalacioh 0:c2ed510ee88d 253
Jepalacioh 0:c2ed510ee88d 254 break;
Jepalacioh 0:c2ed510ee88d 255
SantiagoUnal97 2:a4b764672482 256
SantiagoUnal97 2:a4b764672482 257
SantiagoUnal97 2:a4b764672482 258
SantiagoUnal97 2:a4b764672482 259
SantiagoUnal97 2:a4b764672482 260
SantiagoUnal97 2:a4b764672482 261 case 5: //t1
Jepalacioh 0:c2ed510ee88d 262 m=wheel.getPulses();
Jepalacioh 0:c2ed510ee88d 263 if (m!=0)
Jepalacioh 0:c2ed510ee88d 264 {
SantiagoUnal97 2:a4b764672482 265 t1=t1+m;
SantiagoUnal97 2:a4b764672482 266
SantiagoUnal97 2:a4b764672482 267
SantiagoUnal97 2:a4b764672482 268 wheel.reset();
SantiagoUnal97 2:a4b764672482 269 m=0;
SantiagoUnal97 2:a4b764672482 270 }
SantiagoUnal97 2:a4b764672482 271 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 272 lcd.printf("%d",t1);
SantiagoUnal97 2:a4b764672482 273
SantiagoUnal97 2:a4b764672482 274 if (button_enco.falling())
SantiagoUnal97 2:a4b764672482 275 {
SantiagoUnal97 2:a4b764672482 276 ///////////////////
SantiagoUnal97 2:a4b764672482 277 i++;
SantiagoUnal97 2:a4b764672482 278 m=0;
SantiagoUnal97 2:a4b764672482 279 lcd.cls();
SantiagoUnal97 2:a4b764672482 280 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 281 lcd.printf("t2: ");
SantiagoUnal97 2:a4b764672482 282
SantiagoUnal97 2:a4b764672482 283 ///////////////////
SantiagoUnal97 2:a4b764672482 284 }
SantiagoUnal97 2:a4b764672482 285
SantiagoUnal97 2:a4b764672482 286 break;
SantiagoUnal97 2:a4b764672482 287 case 6: //t2
SantiagoUnal97 2:a4b764672482 288 m=wheel.getPulses();
SantiagoUnal97 2:a4b764672482 289 if (m!=0)
SantiagoUnal97 2:a4b764672482 290 {
SantiagoUnal97 2:a4b764672482 291 t2=t2+m;
SantiagoUnal97 2:a4b764672482 292
Jepalacioh 0:c2ed510ee88d 293
Jepalacioh 0:c2ed510ee88d 294 wheel.reset();
Jepalacioh 0:c2ed510ee88d 295 m=0;
Jepalacioh 0:c2ed510ee88d 296 }
Jepalacioh 0:c2ed510ee88d 297 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 298 lcd.printf("%d",t2);
Jepalacioh 0:c2ed510ee88d 299
Jepalacioh 0:c2ed510ee88d 300 if (button_enco.falling())
Jepalacioh 0:c2ed510ee88d 301 {
SantiagoUnal97 2:a4b764672482 302 ///////////////////
Jepalacioh 0:c2ed510ee88d 303 i++;
Jepalacioh 0:c2ed510ee88d 304 m=0;
Jepalacioh 0:c2ed510ee88d 305 lcd.cls();
Jepalacioh 0:c2ed510ee88d 306 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 307 lcd.printf("t3: ");
SantiagoUnal97 2:a4b764672482 308
SantiagoUnal97 2:a4b764672482 309 ///////////////////
Jepalacioh 0:c2ed510ee88d 310 }
Jepalacioh 0:c2ed510ee88d 311
Jepalacioh 0:c2ed510ee88d 312 break;
SantiagoUnal97 2:a4b764672482 313 case 7: //t3
Jepalacioh 0:c2ed510ee88d 314 m=wheel.getPulses();
Jepalacioh 0:c2ed510ee88d 315 if (m!=0)
Jepalacioh 0:c2ed510ee88d 316 {
SantiagoUnal97 2:a4b764672482 317 t3=t3+m;
SantiagoUnal97 2:a4b764672482 318
SantiagoUnal97 2:a4b764672482 319
SantiagoUnal97 2:a4b764672482 320 wheel.reset();
SantiagoUnal97 2:a4b764672482 321 m=0;
SantiagoUnal97 2:a4b764672482 322 }
SantiagoUnal97 2:a4b764672482 323 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 324 lcd.printf("%d",t3);
SantiagoUnal97 2:a4b764672482 325
SantiagoUnal97 2:a4b764672482 326 if (button_enco.falling())
SantiagoUnal97 2:a4b764672482 327 {
SantiagoUnal97 2:a4b764672482 328 ///////////////////
SantiagoUnal97 2:a4b764672482 329 i++;
SantiagoUnal97 2:a4b764672482 330 m=0;
SantiagoUnal97 2:a4b764672482 331 lcd.cls();
SantiagoUnal97 2:a4b764672482 332 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 333 lcd.printf("T1: ");
SantiagoUnal97 2:a4b764672482 334
SantiagoUnal97 2:a4b764672482 335 ///////////////////
SantiagoUnal97 2:a4b764672482 336 }
SantiagoUnal97 2:a4b764672482 337
SantiagoUnal97 2:a4b764672482 338 break;
SantiagoUnal97 2:a4b764672482 339 case 8: //T1
SantiagoUnal97 2:a4b764672482 340 m=wheel.getPulses();
SantiagoUnal97 2:a4b764672482 341 if (m!=0)
SantiagoUnal97 2:a4b764672482 342 {
SantiagoUnal97 2:a4b764672482 343 T1=T1+m;
SantiagoUnal97 2:a4b764672482 344
Jepalacioh 0:c2ed510ee88d 345
Jepalacioh 0:c2ed510ee88d 346 wheel.reset();
Jepalacioh 0:c2ed510ee88d 347 m=0;
Jepalacioh 0:c2ed510ee88d 348 }
SantiagoUnal97 2:a4b764672482 349 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 350 lcd.printf("%d",T1);
Jepalacioh 0:c2ed510ee88d 351
Jepalacioh 0:c2ed510ee88d 352 if (button_enco.falling())
Jepalacioh 0:c2ed510ee88d 353 {
Jepalacioh 0:c2ed510ee88d 354 ///////////////////
SantiagoUnal97 2:a4b764672482 355 i++;
SantiagoUnal97 2:a4b764672482 356 m=0;
SantiagoUnal97 2:a4b764672482 357 lcd.cls();
SantiagoUnal97 2:a4b764672482 358 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 359 lcd.printf("T2: ");
SantiagoUnal97 2:a4b764672482 360
SantiagoUnal97 2:a4b764672482 361 ///////////////////
SantiagoUnal97 2:a4b764672482 362 }
SantiagoUnal97 2:a4b764672482 363
SantiagoUnal97 2:a4b764672482 364 break;
SantiagoUnal97 2:a4b764672482 365 case 9: //t2
SantiagoUnal97 2:a4b764672482 366 m=wheel.getPulses();
SantiagoUnal97 2:a4b764672482 367 if (m!=0)
SantiagoUnal97 2:a4b764672482 368 {
SantiagoUnal97 2:a4b764672482 369 T2=T2+m;
SantiagoUnal97 2:a4b764672482 370
SantiagoUnal97 2:a4b764672482 371
SantiagoUnal97 2:a4b764672482 372 wheel.reset();
SantiagoUnal97 2:a4b764672482 373 m=0;
SantiagoUnal97 2:a4b764672482 374 }
SantiagoUnal97 2:a4b764672482 375 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 376 lcd.printf("%d",T2);
SantiagoUnal97 2:a4b764672482 377
SantiagoUnal97 2:a4b764672482 378 if (button_enco.falling())
SantiagoUnal97 2:a4b764672482 379 {
SantiagoUnal97 2:a4b764672482 380 ///////////////////
SantiagoUnal97 2:a4b764672482 381 i++;
SantiagoUnal97 2:a4b764672482 382 m=0;
SantiagoUnal97 2:a4b764672482 383 lcd.cls();
SantiagoUnal97 2:a4b764672482 384 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 385 lcd.printf("T3: ");
SantiagoUnal97 2:a4b764672482 386
SantiagoUnal97 2:a4b764672482 387 ///////////////////
SantiagoUnal97 2:a4b764672482 388 }
SantiagoUnal97 2:a4b764672482 389
SantiagoUnal97 2:a4b764672482 390 break;
SantiagoUnal97 2:a4b764672482 391 case 10: //T3
SantiagoUnal97 2:a4b764672482 392 m=wheel.getPulses();
SantiagoUnal97 2:a4b764672482 393 if (m!=0)
SantiagoUnal97 2:a4b764672482 394 {
SantiagoUnal97 2:a4b764672482 395 T3=T3+m;
SantiagoUnal97 2:a4b764672482 396
SantiagoUnal97 2:a4b764672482 397
SantiagoUnal97 2:a4b764672482 398 wheel.reset();
SantiagoUnal97 2:a4b764672482 399 m=0;
SantiagoUnal97 2:a4b764672482 400 }
SantiagoUnal97 2:a4b764672482 401 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 402 lcd.printf("%d",T3);
SantiagoUnal97 2:a4b764672482 403
SantiagoUnal97 2:a4b764672482 404 if (button_enco.falling())
SantiagoUnal97 2:a4b764672482 405 {
SantiagoUnal97 2:a4b764672482 406 ///////////////////
SantiagoUnal97 2:a4b764672482 407 Lugar++;
SantiagoUnal97 2:a4b764672482 408 m=0;
SantiagoUnal97 2:a4b764672482 409 lcd.cls();
SantiagoUnal97 2:a4b764672482 410
Jepalacioh 0:c2ed510ee88d 411
Jepalacioh 0:c2ed510ee88d 412 ///////////////////
Jepalacioh 0:c2ed510ee88d 413 }
Jepalacioh 0:c2ed510ee88d 414
Jepalacioh 0:c2ed510ee88d 415 break;
Jepalacioh 0:c2ed510ee88d 416
Jepalacioh 0:c2ed510ee88d 417 }
Jepalacioh 0:c2ed510ee88d 418 break;
Jepalacioh 0:c2ed510ee88d 419
SantiagoUnal97 2:a4b764672482 420 case 2: // MOSTRAR EL TIEMPO Y LA ALARMA, Y COMPROBAMOS ESTADO DE LA ALARMA
SantiagoUnal97 2:a4b764672482 421 rtc.getTime(tm2); //LECTURA RTC
SantiagoUnal97 2:a4b764672482 422 if(cont==0)
SantiagoUnal97 2:a4b764672482 423 { tm2.min=0;
SantiagoUnal97 2:a4b764672482 424 tm2.sec=0;
SantiagoUnal97 2:a4b764672482 425 cont++;
SantiagoUnal97 2:a4b764672482 426 rtc.setTime(tm2, false, false);
SantiagoUnal97 2:a4b764672482 427 rtc.startClock();
SantiagoUnal97 2:a4b764672482 428
SantiagoUnal97 2:a4b764672482 429
SantiagoUnal97 2:a4b764672482 430 }
Jepalacioh 0:c2ed510ee88d 431 if(visual==0)
SantiagoUnal97 2:a4b764672482 432 {
Jepalacioh 0:c2ed510ee88d 433 lcd.locate(0,0);
SantiagoUnal97 2:a4b764672482 434 lcd.printf("tiempo: ");
Jepalacioh 0:c2ed510ee88d 435 lcd.locate(8,0);
SantiagoUnal97 2:a4b764672482 436
SantiagoUnal97 2:a4b764672482 437 lcd.printf("%02d:",tm2.min);
SantiagoUnal97 2:a4b764672482 438 lcd.printf("%02d",tm2.sec);
Jepalacioh 0:c2ed510ee88d 439 lcd.locate(0,1);
SantiagoUnal97 2:a4b764672482 440 lcd.printf("%d",sp);
SantiagoUnal97 2:a4b764672482 441
SantiagoUnal97 2:a4b764672482 442
Jepalacioh 0:c2ed510ee88d 443 wait(0.1);
Jepalacioh 0:c2ed510ee88d 444 //////////
Jepalacioh 0:c2ed510ee88d 445
Jepalacioh 0:c2ed510ee88d 446 }
SantiagoUnal97 2:a4b764672482 447 med = y.read()*999;
SantiagoUnal97 2:a4b764672482 448 err = (sp-med); //se calcula el error
SantiagoUnal97 2:a4b764672482 449 ap = Kp*err*0.01f; //se calcula la accion proporcinal
SantiagoUnal97 2:a4b764672482 450 ai =(Ki*err*0.01f)+ai; //calculo de la integral del error
SantiagoUnal97 2:a4b764672482 451 ad = Kd*(err-err_v)*0.01f; //calculo de la accion derivativa
SantiagoUnal97 2:a4b764672482 452 pid = (ap+ai+ad);
SantiagoUnal97 2:a4b764672482 453 // se verifica que pid sea positivo **************************************
SantiagoUnal97 2:a4b764672482 454 if(pid<=0)
Jepalacioh 0:c2ed510ee88d 455 {
SantiagoUnal97 2:a4b764672482 456 pid=0;
Jepalacioh 0:c2ed510ee88d 457 }
SantiagoUnal97 2:a4b764672482 458
SantiagoUnal97 2:a4b764672482 459 // se verifica que pid sea menor o igual la valor maximo *****************
SantiagoUnal97 2:a4b764672482 460 if (pid > 999)
SantiagoUnal97 2:a4b764672482 461 {
SantiagoUnal97 2:a4b764672482 462 pid=999;
SantiagoUnal97 2:a4b764672482 463 }
SantiagoUnal97 2:a4b764672482 464
SantiagoUnal97 2:a4b764672482 465
SantiagoUnal97 2:a4b764672482 466 //se muestran las variables******************************************
Jepalacioh 0:c2ed510ee88d 467
SantiagoUnal97 2:a4b764672482 468 lcd.locate(4,1);
SantiagoUnal97 2:a4b764672482 469 lcd.printf("%3.0f",err);
SantiagoUnal97 2:a4b764672482 470
SantiagoUnal97 2:a4b764672482 471 lcd.locate(11,1);
SantiagoUnal97 2:a4b764672482 472 lcd.printf("%3.0f",pid);
SantiagoUnal97 2:a4b764672482 473
SantiagoUnal97 2:a4b764672482 474
SantiagoUnal97 2:a4b764672482 475
SantiagoUnal97 2:a4b764672482 476
SantiagoUnal97 2:a4b764672482 477 //Normalizacion de la salida
SantiagoUnal97 2:a4b764672482 478 // se actualizan las variables *******************************************
SantiagoUnal97 2:a4b764672482 479 err_v = err;
SantiagoUnal97 2:a4b764672482 480 o = pid/999;
SantiagoUnal97 2:a4b764672482 481 u.write(o);
SantiagoUnal97 2:a4b764672482 482 // se envia el valor pid a puerto analogico de salida (D/A) **************
SantiagoUnal97 2:a4b764672482 483 Upwm.pulsewidth(o*periodo);//salida pwm
SantiagoUnal97 2:a4b764672482 484 // se repite el ciclo
SantiagoUnal97 2:a4b764672482 485 wait_ms(300);
SantiagoUnal97 2:a4b764672482 486
SantiagoUnal97 2:a4b764672482 487
SantiagoUnal97 2:a4b764672482 488
Jepalacioh 0:c2ed510ee88d 489
Jepalacioh 0:c2ed510ee88d 490 break;
Jepalacioh 0:c2ed510ee88d 491
Jepalacioh 0:c2ed510ee88d 492
SantiagoUnal97 2:a4b764672482 493 }
SantiagoUnal97 2:a4b764672482 494
SantiagoUnal97 2:a4b764672482 495 }
Jepalacioh 0:c2ed510ee88d 496 }