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
main.cpp@0:6e11c5a96cde, 2014-03-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |