Horno de Reflujo

Dependencies:   Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed

Committer:
EstebanLage
Date:
Tue Jun 05 17:37:09 2018 +0000
Revision:
0:7b257afa105f
Tarea 4 Horno de Reflujo Ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EstebanLage 0:7b257afa105f 1 #include "mbed.h"
EstebanLage 0:7b257afa105f 2 #include "DebouncedIn.h"
EstebanLage 0:7b257afa105f 3 #include "TextLCD.h"
EstebanLage 0:7b257afa105f 4 #include "QEI.h"
EstebanLage 0:7b257afa105f 5 #include "Rtc_Ds1307.h"
EstebanLage 0:7b257afa105f 6
EstebanLage 0:7b257afa105f 7
EstebanLage 0:7b257afa105f 8 TextLCD lcd(PTB0, PTB1, PTB2, PTB3, PTC2, PTC1); // rs, e, d4, d5, d6, d7
EstebanLage 0:7b257afa105f 9 Rtc_Ds1307 rtc(PTE0, PTE1);
EstebanLage 0:7b257afa105f 10 QEI wheel (PTD7, PTD6, NC, 30);
EstebanLage 0:7b257afa105f 11 DebouncedIn button_enco(PTC5);
EstebanLage 0:7b257afa105f 12 PwmOut PIDWM(PTC9);
EstebanLage 0:7b257afa105f 13 PwmOut PIDANAL(PTE24);
EstebanLage 0:7b257afa105f 14 DigitalOut Sel(PTE31);
EstebanLage 0:7b257afa105f 15 AnalogIn y(PTE16);
EstebanLage 0:7b257afa105f 16 float periodo;
EstebanLage 0:7b257afa105f 17 float Frecuencia=200;
EstebanLage 0:7b257afa105f 18 int C1=0x0C;
EstebanLage 0:7b257afa105f 19 int m;
EstebanLage 0:7b257afa105f 20 int Conf=0; //
EstebanLage 0:7b257afa105f 21 int Lugar=0; // Definen el punto en el cual va el programa
EstebanLage 0:7b257afa105f 22 int i=0;
EstebanLage 0:7b257afa105f 23 int Ref = 0, Kp = 0, Ti = 0, Td = 0;
EstebanLage 0:7b257afa105f 24 float t1 = 0, t2 = 0, t3 = 0, ai = 0, ap = 0, ad = 0, pid = 0, med = 0, RefPID = 0,Taza = 0, o = 0;
EstebanLage 0:7b257afa105f 25 float err = 0, err_v = 0;
EstebanLage 0:7b257afa105f 26
EstebanLage 0:7b257afa105f 27 int main()
EstebanLage 0:7b257afa105f 28 {
EstebanLage 0:7b257afa105f 29 Rtc_Ds1307::Time_rtc tm = {};
EstebanLage 0:7b257afa105f 30 lcd.cls();
EstebanLage 0:7b257afa105f 31 lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
EstebanLage 0:7b257afa105f 32 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 33 lcd.printf("--ANALOG --PWM");
EstebanLage 0:7b257afa105f 34
EstebanLage 0:7b257afa105f 35 periodo=(1/Frecuencia);
EstebanLage 0:7b257afa105f 36 rtc.getTime(tm); //lee el tiempo del DS1307
EstebanLage 0:7b257afa105f 37 Sel = 1;
EstebanLage 0:7b257afa105f 38 while(1)
EstebanLage 0:7b257afa105f 39 {
EstebanLage 0:7b257afa105f 40 switch (Lugar)
EstebanLage 0:7b257afa105f 41 {
EstebanLage 0:7b257afa105f 42 case 0:
EstebanLage 0:7b257afa105f 43 m=wheel.getPulses(); // m son los datos del encoder
EstebanLage 0:7b257afa105f 44 if(m!=0 && Conf==0){
EstebanLage 0:7b257afa105f 45 Conf=1;
EstebanLage 0:7b257afa105f 46 wheel.reset();
EstebanLage 0:7b257afa105f 47 m=0;
EstebanLage 0:7b257afa105f 48 }
EstebanLage 0:7b257afa105f 49
EstebanLage 0:7b257afa105f 50 if(m!=0 && Conf==1){
EstebanLage 0:7b257afa105f 51 Conf=0;
EstebanLage 0:7b257afa105f 52 wheel.reset();
EstebanLage 0:7b257afa105f 53 m=0;
EstebanLage 0:7b257afa105f 54 }
EstebanLage 0:7b257afa105f 55 if(Conf==0){
EstebanLage 0:7b257afa105f 56
EstebanLage 0:7b257afa105f 57 lcd.locate(11,0);
EstebanLage 0:7b257afa105f 58 lcd.printf("-");
EstebanLage 0:7b257afa105f 59 lcd.locate(1,0);
EstebanLage 0:7b257afa105f 60 lcd.printf(">");
EstebanLage 0:7b257afa105f 61 lcd.locate(0,1);
EstebanLage 0:7b257afa105f 62 wait(0.1);
EstebanLage 0:7b257afa105f 63
EstebanLage 0:7b257afa105f 64 }
EstebanLage 0:7b257afa105f 65
EstebanLage 0:7b257afa105f 66 if(Conf==1){
EstebanLage 0:7b257afa105f 67
EstebanLage 0:7b257afa105f 68 lcd.locate(1,0);
EstebanLage 0:7b257afa105f 69 lcd.printf("-");
EstebanLage 0:7b257afa105f 70 lcd.locate(11,0);
EstebanLage 0:7b257afa105f 71 lcd.printf(">");
EstebanLage 0:7b257afa105f 72 lcd.locate(0,1);
EstebanLage 0:7b257afa105f 73 wait(0.1);
EstebanLage 0:7b257afa105f 74 }
EstebanLage 0:7b257afa105f 75
EstebanLage 0:7b257afa105f 76 if (button_enco.falling()){ //si se pulsa boton encoder
EstebanLage 0:7b257afa105f 77 Lugar++;
EstebanLage 0:7b257afa105f 78 m=0;
EstebanLage 0:7b257afa105f 79 }
EstebanLage 0:7b257afa105f 80
EstebanLage 0:7b257afa105f 81 break;
EstebanLage 0:7b257afa105f 82
EstebanLage 0:7b257afa105f 83 case 1:
EstebanLage 0:7b257afa105f 84 switch(i)
EstebanLage 0:7b257afa105f 85 {
EstebanLage 0:7b257afa105f 86 case 0:
EstebanLage 0:7b257afa105f 87
EstebanLage 0:7b257afa105f 88
EstebanLage 0:7b257afa105f 89 if(Conf==0)
EstebanLage 0:7b257afa105f 90 {
EstebanLage 0:7b257afa105f 91 lcd.cls();
EstebanLage 0:7b257afa105f 92 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 93 lcd.printf("Parametros");
EstebanLage 0:7b257afa105f 94 wait(1);
EstebanLage 0:7b257afa105f 95 i++;
EstebanLage 0:7b257afa105f 96 m=0;
EstebanLage 0:7b257afa105f 97 lcd.cls();
EstebanLage 0:7b257afa105f 98 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 99 lcd.printf("Ref: Kp: ");
EstebanLage 0:7b257afa105f 100 lcd.locate(0,1);
EstebanLage 0:7b257afa105f 101 lcd.printf("Ti: Td: ");
EstebanLage 0:7b257afa105f 102 }
EstebanLage 0:7b257afa105f 103
EstebanLage 0:7b257afa105f 104 if(Conf==1)
EstebanLage 0:7b257afa105f 105 {
EstebanLage 0:7b257afa105f 106 lcd.cls();
EstebanLage 0:7b257afa105f 107 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 108 lcd.printf("Parametros");
EstebanLage 0:7b257afa105f 109 wait(1);
EstebanLage 0:7b257afa105f 110 i++;
EstebanLage 0:7b257afa105f 111 m=0;
EstebanLage 0:7b257afa105f 112 lcd.cls();
EstebanLage 0:7b257afa105f 113 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 114 lcd.printf("Ref: Kp: ");
EstebanLage 0:7b257afa105f 115 lcd.locate(0,1);
EstebanLage 0:7b257afa105f 116 lcd.printf("Ti: Td: ");
EstebanLage 0:7b257afa105f 117 }
EstebanLage 0:7b257afa105f 118
EstebanLage 0:7b257afa105f 119 break;
EstebanLage 0:7b257afa105f 120
EstebanLage 0:7b257afa105f 121 case 1:
EstebanLage 0:7b257afa105f 122 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 123 if (m!=0)
EstebanLage 0:7b257afa105f 124 {
EstebanLage 0:7b257afa105f 125 Ref=Ref+m;
EstebanLage 0:7b257afa105f 126 if(Ref>99)
EstebanLage 0:7b257afa105f 127 {
EstebanLage 0:7b257afa105f 128 Ref=99; // Configuracion de la ref para analg
EstebanLage 0:7b257afa105f 129 }
EstebanLage 0:7b257afa105f 130 if(Ref<0)
EstebanLage 0:7b257afa105f 131 {
EstebanLage 0:7b257afa105f 132 Ref=0;
EstebanLage 0:7b257afa105f 133 }
EstebanLage 0:7b257afa105f 134
EstebanLage 0:7b257afa105f 135 wheel.reset();
EstebanLage 0:7b257afa105f 136 m=0;
EstebanLage 0:7b257afa105f 137 }
EstebanLage 0:7b257afa105f 138 lcd.locate(5,0);
EstebanLage 0:7b257afa105f 139 lcd.printf("%02d",Ref);
EstebanLage 0:7b257afa105f 140
EstebanLage 0:7b257afa105f 141 if (button_enco.falling())
EstebanLage 0:7b257afa105f 142 {
EstebanLage 0:7b257afa105f 143 i++;
EstebanLage 0:7b257afa105f 144 m=0;
EstebanLage 0:7b257afa105f 145 lcd.locate(13,0);
EstebanLage 0:7b257afa105f 146 //tm.mon=1;
EstebanLage 0:7b257afa105f 147 }
EstebanLage 0:7b257afa105f 148
EstebanLage 0:7b257afa105f 149 break;
EstebanLage 0:7b257afa105f 150
EstebanLage 0:7b257afa105f 151 case 2:
EstebanLage 0:7b257afa105f 152 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 153 if (m!=0)
EstebanLage 0:7b257afa105f 154 {
EstebanLage 0:7b257afa105f 155 Kp=Kp+m;
EstebanLage 0:7b257afa105f 156 if(Kp>99)
EstebanLage 0:7b257afa105f 157 {
EstebanLage 0:7b257afa105f 158 Kp=99;
EstebanLage 0:7b257afa105f 159 }
EstebanLage 0:7b257afa105f 160 if(Kp<0) // Configuracion de Kp para analg
EstebanLage 0:7b257afa105f 161 {
EstebanLage 0:7b257afa105f 162 Kp=0;
EstebanLage 0:7b257afa105f 163 }
EstebanLage 0:7b257afa105f 164
EstebanLage 0:7b257afa105f 165 wheel.reset();
EstebanLage 0:7b257afa105f 166 m=0;
EstebanLage 0:7b257afa105f 167 }
EstebanLage 0:7b257afa105f 168 lcd.locate(13,0);
EstebanLage 0:7b257afa105f 169 lcd.printf("%02d",Kp);
EstebanLage 0:7b257afa105f 170
EstebanLage 0:7b257afa105f 171 if (button_enco.falling())
EstebanLage 0:7b257afa105f 172 {
EstebanLage 0:7b257afa105f 173 i++;
EstebanLage 0:7b257afa105f 174 m=0;
EstebanLage 0:7b257afa105f 175 lcd.locate(4,1);
EstebanLage 0:7b257afa105f 176 }
EstebanLage 0:7b257afa105f 177
EstebanLage 0:7b257afa105f 178 break;
EstebanLage 0:7b257afa105f 179
EstebanLage 0:7b257afa105f 180 case 3:
EstebanLage 0:7b257afa105f 181 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 182 if (m!=0)
EstebanLage 0:7b257afa105f 183 {
EstebanLage 0:7b257afa105f 184 Ti=Ti+m; // Configuracion de Ti para analg
EstebanLage 0:7b257afa105f 185
EstebanLage 0:7b257afa105f 186 if(Ti>99)
EstebanLage 0:7b257afa105f 187 {
EstebanLage 0:7b257afa105f 188 Ti=99;
EstebanLage 0:7b257afa105f 189 }
EstebanLage 0:7b257afa105f 190 if(Ti<0)
EstebanLage 0:7b257afa105f 191 {
EstebanLage 0:7b257afa105f 192 Ti=0;
EstebanLage 0:7b257afa105f 193 }
EstebanLage 0:7b257afa105f 194
EstebanLage 0:7b257afa105f 195 wheel.reset();
EstebanLage 0:7b257afa105f 196 m=0;
EstebanLage 0:7b257afa105f 197 }
EstebanLage 0:7b257afa105f 198 lcd.locate(4,1);
EstebanLage 0:7b257afa105f 199 lcd.printf("%02d",Ti);
EstebanLage 0:7b257afa105f 200
EstebanLage 0:7b257afa105f 201 if (button_enco.falling())
EstebanLage 0:7b257afa105f 202 {
EstebanLage 0:7b257afa105f 203 i++;
EstebanLage 0:7b257afa105f 204 m=0;
EstebanLage 0:7b257afa105f 205 lcd.locate(13,1);
EstebanLage 0:7b257afa105f 206
EstebanLage 0:7b257afa105f 207 }
EstebanLage 0:7b257afa105f 208
EstebanLage 0:7b257afa105f 209 break;
EstebanLage 0:7b257afa105f 210
EstebanLage 0:7b257afa105f 211 case 4:
EstebanLage 0:7b257afa105f 212 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 213
EstebanLage 0:7b257afa105f 214 if (m!=0)
EstebanLage 0:7b257afa105f 215 {
EstebanLage 0:7b257afa105f 216 Td=Td+m; // Configuracion de Ti para analg
EstebanLage 0:7b257afa105f 217
EstebanLage 0:7b257afa105f 218 if(Td>99)
EstebanLage 0:7b257afa105f 219 {
EstebanLage 0:7b257afa105f 220 Td=99;
EstebanLage 0:7b257afa105f 221 }
EstebanLage 0:7b257afa105f 222 if(Td<0) // Configuracion de Td para analg
EstebanLage 0:7b257afa105f 223 {
EstebanLage 0:7b257afa105f 224 Td=0;
EstebanLage 0:7b257afa105f 225 }
EstebanLage 0:7b257afa105f 226
EstebanLage 0:7b257afa105f 227 wheel.reset();
EstebanLage 0:7b257afa105f 228 m=0;
EstebanLage 0:7b257afa105f 229 }
EstebanLage 0:7b257afa105f 230 lcd.locate(13,1);
EstebanLage 0:7b257afa105f 231 lcd.printf("%02d",Td);
EstebanLage 0:7b257afa105f 232
EstebanLage 0:7b257afa105f 233 if (button_enco.falling())
EstebanLage 0:7b257afa105f 234 {
EstebanLage 0:7b257afa105f 235 i++;
EstebanLage 0:7b257afa105f 236 m=0;
EstebanLage 0:7b257afa105f 237 lcd.cls();
EstebanLage 0:7b257afa105f 238 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 239 lcd.printf("t1: t2: ");
EstebanLage 0:7b257afa105f 240 lcd.locate(0,1);
EstebanLage 0:7b257afa105f 241 lcd.printf("t3: ");
EstebanLage 0:7b257afa105f 242 lcd.locate(4,0);
EstebanLage 0:7b257afa105f 243 }
EstebanLage 0:7b257afa105f 244 break;
EstebanLage 0:7b257afa105f 245
EstebanLage 0:7b257afa105f 246 case 5:
EstebanLage 0:7b257afa105f 247 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 248 if (m!=0)
EstebanLage 0:7b257afa105f 249 {
EstebanLage 0:7b257afa105f 250 t1=t1+m; // Configuracion de Ti para analg
EstebanLage 0:7b257afa105f 251 if(t1>60)
EstebanLage 0:7b257afa105f 252 {
EstebanLage 0:7b257afa105f 253 t1=60;
EstebanLage 0:7b257afa105f 254 }
EstebanLage 0:7b257afa105f 255 if(t1<0) // Configuracion de Td para analg
EstebanLage 0:7b257afa105f 256 {
EstebanLage 0:7b257afa105f 257 t1=0;
EstebanLage 0:7b257afa105f 258 }
EstebanLage 0:7b257afa105f 259
EstebanLage 0:7b257afa105f 260 wheel.reset();
EstebanLage 0:7b257afa105f 261 m=0;
EstebanLage 0:7b257afa105f 262 }
EstebanLage 0:7b257afa105f 263 lcd.locate(4,0);
EstebanLage 0:7b257afa105f 264 lcd.printf("%.1f",t1);
EstebanLage 0:7b257afa105f 265
EstebanLage 0:7b257afa105f 266
EstebanLage 0:7b257afa105f 267 if (button_enco.falling())
EstebanLage 0:7b257afa105f 268 {
EstebanLage 0:7b257afa105f 269 i++;
EstebanLage 0:7b257afa105f 270 m=0;
EstebanLage 0:7b257afa105f 271 lcd.locate(12,0);
EstebanLage 0:7b257afa105f 272 }
EstebanLage 0:7b257afa105f 273
EstebanLage 0:7b257afa105f 274 break;
EstebanLage 0:7b257afa105f 275
EstebanLage 0:7b257afa105f 276 case 6:
EstebanLage 0:7b257afa105f 277 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 278
EstebanLage 0:7b257afa105f 279 if (m!=0)
EstebanLage 0:7b257afa105f 280 {
EstebanLage 0:7b257afa105f 281 t2=t2+m; // Configuracion de Ti para anal
EstebanLage 0:7b257afa105f 282 if(t2>60)
EstebanLage 0:7b257afa105f 283 {
EstebanLage 0:7b257afa105f 284 t2=60;
EstebanLage 0:7b257afa105f 285 }
EstebanLage 0:7b257afa105f 286 if(t2<0) // Configuracion de Td para analg
EstebanLage 0:7b257afa105f 287 {
EstebanLage 0:7b257afa105f 288 t2=0;
EstebanLage 0:7b257afa105f 289 }
EstebanLage 0:7b257afa105f 290
EstebanLage 0:7b257afa105f 291 wheel.reset();
EstebanLage 0:7b257afa105f 292 m=0;
EstebanLage 0:7b257afa105f 293 }
EstebanLage 0:7b257afa105f 294 lcd.locate(12,0);
EstebanLage 0:7b257afa105f 295 lcd.printf("%.1f",t2);
EstebanLage 0:7b257afa105f 296
EstebanLage 0:7b257afa105f 297
EstebanLage 0:7b257afa105f 298 if (button_enco.falling())
EstebanLage 0:7b257afa105f 299 {
EstebanLage 0:7b257afa105f 300 i++;
EstebanLage 0:7b257afa105f 301 m=0;
EstebanLage 0:7b257afa105f 302 lcd.locate(4,1);
EstebanLage 0:7b257afa105f 303 }
EstebanLage 0:7b257afa105f 304
EstebanLage 0:7b257afa105f 305 break;
EstebanLage 0:7b257afa105f 306
EstebanLage 0:7b257afa105f 307 case 7:
EstebanLage 0:7b257afa105f 308 m=wheel.getPulses();
EstebanLage 0:7b257afa105f 309
EstebanLage 0:7b257afa105f 310 if (m!=0)
EstebanLage 0:7b257afa105f 311 {
EstebanLage 0:7b257afa105f 312 t3=t3+m; // Configuracion de Ti para analg
EstebanLage 0:7b257afa105f 313 if(t3>60)
EstebanLage 0:7b257afa105f 314 {
EstebanLage 0:7b257afa105f 315 t3=60;
EstebanLage 0:7b257afa105f 316 }
EstebanLage 0:7b257afa105f 317 if(t3<0) // Configuracion de Td para analg
EstebanLage 0:7b257afa105f 318 {
EstebanLage 0:7b257afa105f 319 t3=0;
EstebanLage 0:7b257afa105f 320 }
EstebanLage 0:7b257afa105f 321
EstebanLage 0:7b257afa105f 322 wheel.reset();
EstebanLage 0:7b257afa105f 323 m=0;
EstebanLage 0:7b257afa105f 324 }
EstebanLage 0:7b257afa105f 325 lcd.locate(4,1);
EstebanLage 0:7b257afa105f 326 lcd.printf("%.1f",t3);
EstebanLage 0:7b257afa105f 327
EstebanLage 0:7b257afa105f 328 if (button_enco.falling())
EstebanLage 0:7b257afa105f 329 {
EstebanLage 0:7b257afa105f 330 ///////////////////
EstebanLage 0:7b257afa105f 331 if(Conf==0 || Conf==1)
EstebanLage 0:7b257afa105f 332 {
EstebanLage 0:7b257afa105f 333 lcd.cls();
EstebanLage 0:7b257afa105f 334 lcd.locate(0,0);
EstebanLage 0:7b257afa105f 335 lcd.printf(" Parametros OK ");
EstebanLage 0:7b257afa105f 336 wait(1);
EstebanLage 0:7b257afa105f 337 i=0;
EstebanLage 0:7b257afa105f 338 m=0;
EstebanLage 0:7b257afa105f 339 Lugar++;
EstebanLage 0:7b257afa105f 340 lcd.cls();
EstebanLage 0:7b257afa105f 341 tm.sec = 0;
EstebanLage 0:7b257afa105f 342 tm.min = 0;
EstebanLage 0:7b257afa105f 343 tm.hour = 1;
EstebanLage 0:7b257afa105f 344 tm.date = 1;
EstebanLage 0:7b257afa105f 345 tm.mon = 1;
EstebanLage 0:7b257afa105f 346 tm.year = 2000;
EstebanLage 0:7b257afa105f 347 PIDWM.pulsewidth(0);
EstebanLage 0:7b257afa105f 348 rtc.setTime(tm,false,false);
EstebanLage 0:7b257afa105f 349 rtc.startClock();
EstebanLage 0:7b257afa105f 350
EstebanLage 0:7b257afa105f 351 }
EstebanLage 0:7b257afa105f 352 ///////////////////
EstebanLage 0:7b257afa105f 353 }
EstebanLage 0:7b257afa105f 354 break;
EstebanLage 0:7b257afa105f 355 }
EstebanLage 0:7b257afa105f 356 break;
EstebanLage 0:7b257afa105f 357 case 2:
EstebanLage 0:7b257afa105f 358 if (Conf == 1 || Conf == 0){
EstebanLage 0:7b257afa105f 359
EstebanLage 0:7b257afa105f 360 lop1: med = y.read()*100;
EstebanLage 0:7b257afa105f 361 rtc.getTime(tm);
EstebanLage 0:7b257afa105f 362 if ((tm.sec)<t1)
EstebanLage 0:7b257afa105f 363 {
EstebanLage 0:7b257afa105f 364 Taza = Ref/t1;
EstebanLage 0:7b257afa105f 365 RefPID = tm.sec*Taza;
EstebanLage 0:7b257afa105f 366 }
EstebanLage 0:7b257afa105f 367 if ((tm.sec)>=t1 && (tm.sec)<=(t2+t1)){
EstebanLage 0:7b257afa105f 368 RefPID = Ref;
EstebanLage 0:7b257afa105f 369 }
EstebanLage 0:7b257afa105f 370 if ((tm.sec)>(t2+t1)){
EstebanLage 0:7b257afa105f 371 if (RefPID<23){
EstebanLage 0:7b257afa105f 372 RefPID=23;
EstebanLage 0:7b257afa105f 373 }
EstebanLage 0:7b257afa105f 374 else if (RefPID>23){
EstebanLage 0:7b257afa105f 375 Taza = (23-Ref)/t3/60;
EstebanLage 0:7b257afa105f 376 RefPID = RefPID + tm.sec*Taza;
EstebanLage 0:7b257afa105f 377 }
EstebanLage 0:7b257afa105f 378 }
EstebanLage 0:7b257afa105f 379 if ((tm.sec)>(t1+t2+t3) && med < 23){
EstebanLage 0:7b257afa105f 380 RefPID = 23;
EstebanLage 0:7b257afa105f 381 }
EstebanLage 0:7b257afa105f 382 err = (RefPID-med); //se calcula el error
EstebanLage 0:7b257afa105f 383 ap = Kp*err*0.01f; //se calcula la accion proporcinal
EstebanLage 0:7b257afa105f 384 ai =(Ti*err*0.01f)+ai; //calculo de la integral del error
EstebanLage 0:7b257afa105f 385 ad = Td*(err-err_v)*0.01f; //calculo de la accion derivativa
EstebanLage 0:7b257afa105f 386 pid = (ap+ai+ad);
EstebanLage 0:7b257afa105f 387 // se verifica que pid sea positivo **************************************
EstebanLage 0:7b257afa105f 388 if(pid<=0)
EstebanLage 0:7b257afa105f 389 {
EstebanLage 0:7b257afa105f 390 pid=0;
EstebanLage 0:7b257afa105f 391 }
EstebanLage 0:7b257afa105f 392
EstebanLage 0:7b257afa105f 393 // se verifica que pid sea menor o igual la valor maximo *****************
EstebanLage 0:7b257afa105f 394 if (pid > 100)
EstebanLage 0:7b257afa105f 395 {
EstebanLage 0:7b257afa105f 396 pid=100;
EstebanLage 0:7b257afa105f 397 }
EstebanLage 0:7b257afa105f 398
EstebanLage 0:7b257afa105f 399
EstebanLage 0:7b257afa105f 400 //se muestran las variables******************************************
EstebanLage 0:7b257afa105f 401 lcd.locate(1,0);
EstebanLage 0:7b257afa105f 402 lcd.printf("err: med:");
EstebanLage 0:7b257afa105f 403 lcd.locate(4,0);
EstebanLage 0:7b257afa105f 404 lcd.printf("%3.0f",err);
EstebanLage 0:7b257afa105f 405 lcd.locate(13,0);
EstebanLage 0:7b257afa105f 406 lcd.printf("%3.0f",med);
EstebanLage 0:7b257afa105f 407 lcd.locate(1,1);
EstebanLage 0:7b257afa105f 408 lcd.printf("Ref: pid:");
EstebanLage 0:7b257afa105f 409 lcd.locate(4,1);
EstebanLage 0:7b257afa105f 410 lcd.printf("%3.0f",RefPID);
EstebanLage 0:7b257afa105f 411 lcd.locate(13,1);
EstebanLage 0:7b257afa105f 412 lcd.printf("%3.0f",pid);
EstebanLage 0:7b257afa105f 413
EstebanLage 0:7b257afa105f 414
EstebanLage 0:7b257afa105f 415
EstebanLage 0:7b257afa105f 416
EstebanLage 0:7b257afa105f 417 //Normalizacion de la salida
EstebanLage 0:7b257afa105f 418 // se actualizan las variables *******************************************
EstebanLage 0:7b257afa105f 419 err_v = err;
EstebanLage 0:7b257afa105f 420 o = pid/100;
EstebanLage 0:7b257afa105f 421 PIDWM.pulsewidth(o*periodo);
EstebanLage 0:7b257afa105f 422 // se envia el valor pid a puerto analogico de salida (D/A) **************
EstebanLage 0:7b257afa105f 423
EstebanLage 0:7b257afa105f 424 // se repite el ciclo
EstebanLage 0:7b257afa105f 425 wait_ms(100);
EstebanLage 0:7b257afa105f 426 goto lop1;
EstebanLage 0:7b257afa105f 427 }
EstebanLage 0:7b257afa105f 428 }
EstebanLage 0:7b257afa105f 429 }
EstebanLage 0:7b257afa105f 430 }
EstebanLage 0:7b257afa105f 431