Programa para ejecutar un PWM con un PID. Al presionar un boton que incrementa los valores de Kp, Ti y Td, suena mediante un PWM

Dependencies:   Debounced TextLCD mbed

Committer:
diego_carvajal
Date:
Sat Mar 29 19:38:30 2014 +0000
Revision:
0:6e11c5a96cde
Programa para ejecutar un PWM con un PID

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diego_carvajal 0:6e11c5a96cde 1 #include "mbed.h"
diego_carvajal 0:6e11c5a96cde 2 #include "DebouncedIn.h"
diego_carvajal 0:6e11c5a96cde 3 #include "TextLCD.h"
diego_carvajal 0:6e11c5a96cde 4
diego_carvajal 0:6e11c5a96cde 5 AnalogIn Vin(PTC2);
diego_carvajal 0:6e11c5a96cde 6 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
diego_carvajal 0:6e11c5a96cde 7
diego_carvajal 0:6e11c5a96cde 8 DigitalOut led1(LED1);
diego_carvajal 0:6e11c5a96cde 9 DigitalOut led2(LED2);
diego_carvajal 0:6e11c5a96cde 10 DigitalOut led3(LED3);
diego_carvajal 0:6e11c5a96cde 11 DebouncedIn button1(PTC6);
diego_carvajal 0:6e11c5a96cde 12 DebouncedIn button2(PTC10);
diego_carvajal 0:6e11c5a96cde 13 DebouncedIn button3(PTC11);
diego_carvajal 0:6e11c5a96cde 14 PwmOut Pwm(PTD6);
diego_carvajal 0:6e11c5a96cde 15
diego_carvajal 0:6e11c5a96cde 16
diego_carvajal 0:6e11c5a96cde 17
diego_carvajal 0:6e11c5a96cde 18
diego_carvajal 0:6e11c5a96cde 19 //int C1=0x0F;
diego_carvajal 0:6e11c5a96cde 20 int sp=0,kp=0,kd=0,ki=0,p=1;
diego_carvajal 0:6e11c5a96cde 21 float periodo=0.01;
diego_carvajal 0:6e11c5a96cde 22 int main()
diego_carvajal 0:6e11c5a96cde 23 {
diego_carvajal 0:6e11c5a96cde 24 Pwm.period(periodo); //Establezco el periodo para el PWM
diego_carvajal 0:6e11c5a96cde 25
diego_carvajal 0:6e11c5a96cde 26 lcd.cls();
diego_carvajal 0:6e11c5a96cde 27 //lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
diego_carvajal 0:6e11c5a96cde 28 lcd.locate(8,0);
diego_carvajal 0:6e11c5a96cde 29 lcd.printf("kp=%d", kp);
diego_carvajal 0:6e11c5a96cde 30 lcd.locate(0,1);
diego_carvajal 0:6e11c5a96cde 31 lcd.printf("Ki=%d", ki);
diego_carvajal 0:6e11c5a96cde 32 lcd.locate(8,1);
diego_carvajal 0:6e11c5a96cde 33 lcd.printf("Kd=%d", kd);
diego_carvajal 0:6e11c5a96cde 34 lcd.locate(0,0);
diego_carvajal 0:6e11c5a96cde 35 lcd.printf("Sp=%d", sp);
diego_carvajal 0:6e11c5a96cde 36
diego_carvajal 0:6e11c5a96cde 37 while(1)
diego_carvajal 0:6e11c5a96cde 38 {
diego_carvajal 0:6e11c5a96cde 39 if (button1.falling())
diego_carvajal 0:6e11c5a96cde 40 {
diego_carvajal 0:6e11c5a96cde 41 // Genero el PWM haciendo esperar cada que se oprime un boton
diego_carvajal 0:6e11c5a96cde 42 Pwm.write(0.3);
diego_carvajal 0:6e11c5a96cde 43 wait(0.03);
diego_carvajal 0:6e11c5a96cde 44 Pwm.write(0);
diego_carvajal 0:6e11c5a96cde 45 wait(0.03);
diego_carvajal 0:6e11c5a96cde 46 led1 =!led1;
diego_carvajal 0:6e11c5a96cde 47 if (p==1)
diego_carvajal 0:6e11c5a96cde 48 {
diego_carvajal 0:6e11c5a96cde 49 ++sp;
diego_carvajal 0:6e11c5a96cde 50 lcd.locate(3,0);
diego_carvajal 0:6e11c5a96cde 51 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 52 lcd.locate(3,0);
diego_carvajal 0:6e11c5a96cde 53 lcd.printf("%d", sp);
diego_carvajal 0:6e11c5a96cde 54 }
diego_carvajal 0:6e11c5a96cde 55 else if (p==2)
diego_carvajal 0:6e11c5a96cde 56 {
diego_carvajal 0:6e11c5a96cde 57 ++kp;
diego_carvajal 0:6e11c5a96cde 58 lcd.locate(11,0);
diego_carvajal 0:6e11c5a96cde 59 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 60 lcd.locate(11,0);
diego_carvajal 0:6e11c5a96cde 61 lcd.printf("%d", kp);
diego_carvajal 0:6e11c5a96cde 62 }
diego_carvajal 0:6e11c5a96cde 63 else if (p==3)
diego_carvajal 0:6e11c5a96cde 64 {
diego_carvajal 0:6e11c5a96cde 65 ++ki;
diego_carvajal 0:6e11c5a96cde 66 lcd.locate(3,1);
diego_carvajal 0:6e11c5a96cde 67 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 68 lcd.locate(3,1);
diego_carvajal 0:6e11c5a96cde 69 lcd.printf("%d", ki);
diego_carvajal 0:6e11c5a96cde 70 }
diego_carvajal 0:6e11c5a96cde 71 else if (p==4)
diego_carvajal 0:6e11c5a96cde 72 {
diego_carvajal 0:6e11c5a96cde 73 ++kd;
diego_carvajal 0:6e11c5a96cde 74 lcd.locate(11,1);
diego_carvajal 0:6e11c5a96cde 75 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 76 lcd.locate(11,1);
diego_carvajal 0:6e11c5a96cde 77 lcd.printf("%d", kd);
diego_carvajal 0:6e11c5a96cde 78 }
diego_carvajal 0:6e11c5a96cde 79 }
diego_carvajal 0:6e11c5a96cde 80 if (button2.falling())
diego_carvajal 0:6e11c5a96cde 81 {
diego_carvajal 0:6e11c5a96cde 82 // Genero el PWM haciendo esperar cada que se oprime un boton
diego_carvajal 0:6e11c5a96cde 83 Pwm.write(0.3);
diego_carvajal 0:6e11c5a96cde 84 wait(0.03);
diego_carvajal 0:6e11c5a96cde 85 Pwm.write(0);
diego_carvajal 0:6e11c5a96cde 86 wait(0.03);
diego_carvajal 0:6e11c5a96cde 87 led2 =!led2;
diego_carvajal 0:6e11c5a96cde 88 if (p==1)
diego_carvajal 0:6e11c5a96cde 89 {
diego_carvajal 0:6e11c5a96cde 90 if (sp==0) // no mostrar nada
diego_carvajal 0:6e11c5a96cde 91 {
diego_carvajal 0:6e11c5a96cde 92 }
diego_carvajal 0:6e11c5a96cde 93 else
diego_carvajal 0:6e11c5a96cde 94 {
diego_carvajal 0:6e11c5a96cde 95 --sp;
diego_carvajal 0:6e11c5a96cde 96 lcd.locate(3,0);
diego_carvajal 0:6e11c5a96cde 97 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 98 lcd.locate(3,0);
diego_carvajal 0:6e11c5a96cde 99 lcd.printf("%d", sp);
diego_carvajal 0:6e11c5a96cde 100 }
diego_carvajal 0:6e11c5a96cde 101 }
diego_carvajal 0:6e11c5a96cde 102 if (p==2)
diego_carvajal 0:6e11c5a96cde 103 {
diego_carvajal 0:6e11c5a96cde 104 if (kp==0) // no mostrar nada
diego_carvajal 0:6e11c5a96cde 105 {
diego_carvajal 0:6e11c5a96cde 106 }
diego_carvajal 0:6e11c5a96cde 107 else
diego_carvajal 0:6e11c5a96cde 108 {
diego_carvajal 0:6e11c5a96cde 109 --kp;
diego_carvajal 0:6e11c5a96cde 110 lcd.locate(11,0);
diego_carvajal 0:6e11c5a96cde 111 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 112 lcd.locate(11,0);
diego_carvajal 0:6e11c5a96cde 113 lcd.printf("%d", kp);
diego_carvajal 0:6e11c5a96cde 114 }
diego_carvajal 0:6e11c5a96cde 115 }
diego_carvajal 0:6e11c5a96cde 116 if (p==3)
diego_carvajal 0:6e11c5a96cde 117 {
diego_carvajal 0:6e11c5a96cde 118 if (ki==0) // no mostrar nada
diego_carvajal 0:6e11c5a96cde 119 {
diego_carvajal 0:6e11c5a96cde 120 }
diego_carvajal 0:6e11c5a96cde 121 else
diego_carvajal 0:6e11c5a96cde 122 {
diego_carvajal 0:6e11c5a96cde 123 --ki;
diego_carvajal 0:6e11c5a96cde 124 lcd.locate(3,1);
diego_carvajal 0:6e11c5a96cde 125 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 126 lcd.locate(3,1);
diego_carvajal 0:6e11c5a96cde 127 lcd.printf("%d", ki);
diego_carvajal 0:6e11c5a96cde 128 }
diego_carvajal 0:6e11c5a96cde 129 }
diego_carvajal 0:6e11c5a96cde 130 if (p==4)
diego_carvajal 0:6e11c5a96cde 131 {
diego_carvajal 0:6e11c5a96cde 132 if (kd==0) // no mostrar nada
diego_carvajal 0:6e11c5a96cde 133 {
diego_carvajal 0:6e11c5a96cde 134 }
diego_carvajal 0:6e11c5a96cde 135 else
diego_carvajal 0:6e11c5a96cde 136 {
diego_carvajal 0:6e11c5a96cde 137 --kd;
diego_carvajal 0:6e11c5a96cde 138 lcd.locate(11,1);
diego_carvajal 0:6e11c5a96cde 139 lcd.printf(" ");
diego_carvajal 0:6e11c5a96cde 140 lcd.locate(11,1);
diego_carvajal 0:6e11c5a96cde 141 lcd.printf("%d", kd);
diego_carvajal 0:6e11c5a96cde 142 }
diego_carvajal 0:6e11c5a96cde 143 }
diego_carvajal 0:6e11c5a96cde 144 }
diego_carvajal 0:6e11c5a96cde 145 if (button3.falling())
diego_carvajal 0:6e11c5a96cde 146 {
diego_carvajal 0:6e11c5a96cde 147 // Genero el PWM haciendo esperar cada que se oprime un boton
diego_carvajal 0:6e11c5a96cde 148 Pwm.write(0.3);
diego_carvajal 0:6e11c5a96cde 149 wait(0.03);
diego_carvajal 0:6e11c5a96cde 150 Pwm.write(0);
diego_carvajal 0:6e11c5a96cde 151 wait(0.03);
diego_carvajal 0:6e11c5a96cde 152 led3 =!led3;
diego_carvajal 0:6e11c5a96cde 153 if (p==1)
diego_carvajal 0:6e11c5a96cde 154 {
diego_carvajal 0:6e11c5a96cde 155 ++p;
diego_carvajal 0:6e11c5a96cde 156 lcd.locate(11,0);
diego_carvajal 0:6e11c5a96cde 157 lcd.printf("%d", kp);
diego_carvajal 0:6e11c5a96cde 158
diego_carvajal 0:6e11c5a96cde 159
diego_carvajal 0:6e11c5a96cde 160 }
diego_carvajal 0:6e11c5a96cde 161 else if (p==2)
diego_carvajal 0:6e11c5a96cde 162 {
diego_carvajal 0:6e11c5a96cde 163 ++p;
diego_carvajal 0:6e11c5a96cde 164 lcd.locate(3,1);
diego_carvajal 0:6e11c5a96cde 165 lcd.printf("%d", ki);
diego_carvajal 0:6e11c5a96cde 166 lcd.locate(3,1);
diego_carvajal 0:6e11c5a96cde 167
diego_carvajal 0:6e11c5a96cde 168 }
diego_carvajal 0:6e11c5a96cde 169 else if (p==3)
diego_carvajal 0:6e11c5a96cde 170 {
diego_carvajal 0:6e11c5a96cde 171 ++p;
diego_carvajal 0:6e11c5a96cde 172 lcd.locate(11,1);
diego_carvajal 0:6e11c5a96cde 173 lcd.printf("%d", kd);
diego_carvajal 0:6e11c5a96cde 174
diego_carvajal 0:6e11c5a96cde 175
diego_carvajal 0:6e11c5a96cde 176 }
diego_carvajal 0:6e11c5a96cde 177 else if (p==4)
diego_carvajal 0:6e11c5a96cde 178 {
diego_carvajal 0:6e11c5a96cde 179 p=1;
diego_carvajal 0:6e11c5a96cde 180 lcd.locate(3,0);
diego_carvajal 0:6e11c5a96cde 181 lcd.printf("%d", sp);
diego_carvajal 0:6e11c5a96cde 182
diego_carvajal 0:6e11c5a96cde 183
diego_carvajal 0:6e11c5a96cde 184 }
diego_carvajal 0:6e11c5a96cde 185 }
diego_carvajal 0:6e11c5a96cde 186 }
diego_carvajal 0:6e11c5a96cde 187 }