Thaís Betina Slaviero
/
mbed_mahm
Mahm
main.cpp@0:a8a2492e2740, 2017-04-03 (annotated)
- Committer:
- thaisbetina
- Date:
- Mon Apr 03 20:57:25 2017 +0000
- Revision:
- 0:a8a2492e2740
Hola que tal
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
thaisbetina | 0:a8a2492e2740 | 1 | #include "mbed.h" |
thaisbetina | 0:a8a2492e2740 | 2 | #include "TextLCD.h" |
thaisbetina | 0:a8a2492e2740 | 3 | |
thaisbetina | 0:a8a2492e2740 | 4 | DigitalOut myled(LED1); |
thaisbetina | 0:a8a2492e2740 | 5 | DigitalIn UP (p11); |
thaisbetina | 0:a8a2492e2740 | 6 | DigitalIn DOWN (p12); |
thaisbetina | 0:a8a2492e2740 | 7 | DigitalIn ENTER (p13); |
thaisbetina | 0:a8a2492e2740 | 8 | DigitalIn BACK (p14); |
thaisbetina | 0:a8a2492e2740 | 9 | //DigitalIn B3 (p15); |
thaisbetina | 0:a8a2492e2740 | 10 | //DigitalIn C3 (p16); |
thaisbetina | 0:a8a2492e2740 | 11 | PwmOut pwm1 (p23); |
thaisbetina | 0:a8a2492e2740 | 12 | PwmOut pwm2 (p22); |
thaisbetina | 0:a8a2492e2740 | 13 | PwmOut pwm3 (p21); |
thaisbetina | 0:a8a2492e2740 | 14 | |
thaisbetina | 0:a8a2492e2740 | 15 | TextLCD lcd(p5, p6, p7, p8, p9, p10, TextLCD::LCD20x4); // RS, E, D4-D7 |
thaisbetina | 0:a8a2492e2740 | 16 | |
thaisbetina | 0:a8a2492e2740 | 17 | DigitalIn sensor (p17); |
thaisbetina | 0:a8a2492e2740 | 18 | DigitalIn sensor2 (p18); |
thaisbetina | 0:a8a2492e2740 | 19 | |
thaisbetina | 0:a8a2492e2740 | 20 | Timer temporizador; |
thaisbetina | 0:a8a2492e2740 | 21 | Timer temporizador2; |
thaisbetina | 0:a8a2492e2740 | 22 | |
thaisbetina | 0:a8a2492e2740 | 23 | #define GAIN 5.0 |
thaisbetina | 0:a8a2492e2740 | 24 | |
thaisbetina | 0:a8a2492e2740 | 25 | int US=0, US2=0,result=0, result2=0, ajusteM3=0, contador=0; |
thaisbetina | 0:a8a2492e2740 | 26 | float tolup, toldown, processValue=0, old_rpm=0,erro=0,output,setPoint=0; |
thaisbetina | 0:a8a2492e2740 | 27 | float tolup2, toldown2, processValue2=0, old_rpm2=0,erro2=0,output2,setPoint2=0; |
thaisbetina | 0:a8a2492e2740 | 28 | |
thaisbetina | 0:a8a2492e2740 | 29 | int main() { |
thaisbetina | 0:a8a2492e2740 | 30 | |
thaisbetina | 0:a8a2492e2740 | 31 | int lastUP=0, lastDOWN=0, lastENTER=0, lastBACK=0; //ultimo B |
thaisbetina | 0:a8a2492e2740 | 32 | |
thaisbetina | 0:a8a2492e2740 | 33 | lcd.locate(2, 0); |
thaisbetina | 0:a8a2492e2740 | 34 | lcd.printf("MAHM COMPONENTES"); |
thaisbetina | 0:a8a2492e2740 | 35 | lcd.locate(0, 1); |
thaisbetina | 0:a8a2492e2740 | 36 | lcd.printf("Dosador 1: RPM"); |
thaisbetina | 0:a8a2492e2740 | 37 | lcd.locate(0, 2); |
thaisbetina | 0:a8a2492e2740 | 38 | lcd.printf("Dosador 2: "); |
thaisbetina | 0:a8a2492e2740 | 39 | lcd.locate(0, 3); |
thaisbetina | 0:a8a2492e2740 | 40 | lcd.printf("Espalhador: "); |
thaisbetina | 0:a8a2492e2740 | 41 | |
thaisbetina | 0:a8a2492e2740 | 42 | |
thaisbetina | 0:a8a2492e2740 | 43 | |
thaisbetina | 0:a8a2492e2740 | 44 | pwm1.period_us(10000); |
thaisbetina | 0:a8a2492e2740 | 45 | pwm1.pulsewidth_us(10000); |
thaisbetina | 0:a8a2492e2740 | 46 | pwm2.period_us(10000); |
thaisbetina | 0:a8a2492e2740 | 47 | pwm2.pulsewidth_us(10000); |
thaisbetina | 0:a8a2492e2740 | 48 | pwm3.period_us(10000); |
thaisbetina | 0:a8a2492e2740 | 49 | pwm3.pulsewidth_us(10000); |
thaisbetina | 0:a8a2492e2740 | 50 | |
thaisbetina | 0:a8a2492e2740 | 51 | result=0; |
thaisbetina | 0:a8a2492e2740 | 52 | processValue=0; |
thaisbetina | 0:a8a2492e2740 | 53 | old_rpm=0; |
thaisbetina | 0:a8a2492e2740 | 54 | US=sensor; |
thaisbetina | 0:a8a2492e2740 | 55 | |
thaisbetina | 0:a8a2492e2740 | 56 | result2=0; |
thaisbetina | 0:a8a2492e2740 | 57 | processValue2=0; |
thaisbetina | 0:a8a2492e2740 | 58 | old_rpm2=0; |
thaisbetina | 0:a8a2492e2740 | 59 | US2=sensor2; |
thaisbetina | 0:a8a2492e2740 | 60 | |
thaisbetina | 0:a8a2492e2740 | 61 | while(1) |
thaisbetina | 0:a8a2492e2740 | 62 | { |
thaisbetina | 0:a8a2492e2740 | 63 | |
thaisbetina | 0:a8a2492e2740 | 64 | if ((ENTER==1) && (lastENTER==0)) |
thaisbetina | 0:a8a2492e2740 | 65 | { |
thaisbetina | 0:a8a2492e2740 | 66 | contador++; |
thaisbetina | 0:a8a2492e2740 | 67 | if(contador >= 4) contador=1; |
thaisbetina | 0:a8a2492e2740 | 68 | } |
thaisbetina | 0:a8a2492e2740 | 69 | lastENTER = ENTER; |
thaisbetina | 0:a8a2492e2740 | 70 | |
thaisbetina | 0:a8a2492e2740 | 71 | if ((BACK==1) && (lastBACK==0)) |
thaisbetina | 0:a8a2492e2740 | 72 | { |
thaisbetina | 0:a8a2492e2740 | 73 | contador--; |
thaisbetina | 0:a8a2492e2740 | 74 | if(contador <= 0) contador=3; |
thaisbetina | 0:a8a2492e2740 | 75 | } |
thaisbetina | 0:a8a2492e2740 | 76 | lastBACK = BACK; |
thaisbetina | 0:a8a2492e2740 | 77 | |
thaisbetina | 0:a8a2492e2740 | 78 | if (contador == 1) |
thaisbetina | 0:a8a2492e2740 | 79 | { |
thaisbetina | 0:a8a2492e2740 | 80 | /*Set Point dos Motores 1 e 2*/ |
thaisbetina | 0:a8a2492e2740 | 81 | if ((UP==1) && (lastUP==0)) |
thaisbetina | 0:a8a2492e2740 | 82 | { |
thaisbetina | 0:a8a2492e2740 | 83 | if(setPoint<50) setPoint++; |
thaisbetina | 0:a8a2492e2740 | 84 | } |
thaisbetina | 0:a8a2492e2740 | 85 | lastUP=UP; |
thaisbetina | 0:a8a2492e2740 | 86 | |
thaisbetina | 0:a8a2492e2740 | 87 | if ((DOWN==1) && (lastDOWN==0)) |
thaisbetina | 0:a8a2492e2740 | 88 | { |
thaisbetina | 0:a8a2492e2740 | 89 | if(setPoint>0) setPoint--; |
thaisbetina | 0:a8a2492e2740 | 90 | } |
thaisbetina | 0:a8a2492e2740 | 91 | lastDOWN=DOWN; |
thaisbetina | 0:a8a2492e2740 | 92 | |
thaisbetina | 0:a8a2492e2740 | 93 | } |
thaisbetina | 0:a8a2492e2740 | 94 | |
thaisbetina | 0:a8a2492e2740 | 95 | lcd.locate(11, 1); |
thaisbetina | 0:a8a2492e2740 | 96 | lcd.printf("%2.1f ", setPoint); |
thaisbetina | 0:a8a2492e2740 | 97 | |
thaisbetina | 0:a8a2492e2740 | 98 | if (contador == 2) |
thaisbetina | 0:a8a2492e2740 | 99 | { |
thaisbetina | 0:a8a2492e2740 | 100 | if ((UP==1) && (lastUP==0)) |
thaisbetina | 0:a8a2492e2740 | 101 | { |
thaisbetina | 0:a8a2492e2740 | 102 | if(setPoint2<50) setPoint2++; |
thaisbetina | 0:a8a2492e2740 | 103 | } |
thaisbetina | 0:a8a2492e2740 | 104 | lastUP=UP; |
thaisbetina | 0:a8a2492e2740 | 105 | |
thaisbetina | 0:a8a2492e2740 | 106 | if ((DOWN==1) && (lastDOWN==0)) |
thaisbetina | 0:a8a2492e2740 | 107 | { |
thaisbetina | 0:a8a2492e2740 | 108 | if(setPoint2>0) setPoint2--; |
thaisbetina | 0:a8a2492e2740 | 109 | } |
thaisbetina | 0:a8a2492e2740 | 110 | lastDOWN=DOWN; |
thaisbetina | 0:a8a2492e2740 | 111 | } |
thaisbetina | 0:a8a2492e2740 | 112 | |
thaisbetina | 0:a8a2492e2740 | 113 | lcd.locate(11, 2); |
thaisbetina | 0:a8a2492e2740 | 114 | lcd.printf("%2.1f ", setPoint2); |
thaisbetina | 0:a8a2492e2740 | 115 | |
thaisbetina | 0:a8a2492e2740 | 116 | |
thaisbetina | 0:a8a2492e2740 | 117 | if (contador == 3) |
thaisbetina | 0:a8a2492e2740 | 118 | { |
thaisbetina | 0:a8a2492e2740 | 119 | /*Ajuste de 0 a 100% Motor 3*/ |
thaisbetina | 0:a8a2492e2740 | 120 | if ((UP==1) && (lastUP==0)) |
thaisbetina | 0:a8a2492e2740 | 121 | { |
thaisbetina | 0:a8a2492e2740 | 122 | if(ajusteM3<100) ajusteM3++; |
thaisbetina | 0:a8a2492e2740 | 123 | pwm3.pulsewidth_us((100-ajusteM3)*100); |
thaisbetina | 0:a8a2492e2740 | 124 | } |
thaisbetina | 0:a8a2492e2740 | 125 | lastUP=UP; |
thaisbetina | 0:a8a2492e2740 | 126 | |
thaisbetina | 0:a8a2492e2740 | 127 | if ((DOWN==1) && (lastDOWN==0)) |
thaisbetina | 0:a8a2492e2740 | 128 | { |
thaisbetina | 0:a8a2492e2740 | 129 | if(ajusteM3>0) ajusteM3--; |
thaisbetina | 0:a8a2492e2740 | 130 | pwm3.pulsewidth_us((100-ajusteM3)*100); |
thaisbetina | 0:a8a2492e2740 | 131 | } |
thaisbetina | 0:a8a2492e2740 | 132 | lastDOWN=DOWN; |
thaisbetina | 0:a8a2492e2740 | 133 | } |
thaisbetina | 0:a8a2492e2740 | 134 | |
thaisbetina | 0:a8a2492e2740 | 135 | lcd.locate(12, 3); |
thaisbetina | 0:a8a2492e2740 | 136 | lcd.printf("%d%% ", ajusteM3); |
thaisbetina | 0:a8a2492e2740 | 137 | |
thaisbetina | 0:a8a2492e2740 | 138 | /*Process Value dos Motores 1 e 2*/ |
thaisbetina | 0:a8a2492e2740 | 139 | /*Motor 1*/ |
thaisbetina | 0:a8a2492e2740 | 140 | if ((sensor==1) && (US==0)){ //borda de subida |
thaisbetina | 0:a8a2492e2740 | 141 | temporizador.stop(); |
thaisbetina | 0:a8a2492e2740 | 142 | result=temporizador.read_ms(); |
thaisbetina | 0:a8a2492e2740 | 143 | temporizador.reset(); |
thaisbetina | 0:a8a2492e2740 | 144 | temporizador.start();} |
thaisbetina | 0:a8a2492e2740 | 145 | |
thaisbetina | 0:a8a2492e2740 | 146 | US=sensor; |
thaisbetina | 0:a8a2492e2740 | 147 | |
thaisbetina | 0:a8a2492e2740 | 148 | if (temporizador.read_ms()>=1000){ //Verifica se o timer esta ligado |
thaisbetina | 0:a8a2492e2740 | 149 | temporizador.stop(); |
thaisbetina | 0:a8a2492e2740 | 150 | temporizador.reset(); |
thaisbetina | 0:a8a2492e2740 | 151 | result=0;} |
thaisbetina | 0:a8a2492e2740 | 152 | |
thaisbetina | 0:a8a2492e2740 | 153 | if (result!=0) processValue=60/(((float)result*12)/1000); //Conversao para RPM |
thaisbetina | 0:a8a2492e2740 | 154 | else processValue=0; |
thaisbetina | 0:a8a2492e2740 | 155 | |
thaisbetina | 0:a8a2492e2740 | 156 | tolup=old_rpm+1; |
thaisbetina | 0:a8a2492e2740 | 157 | toldown=old_rpm-1; |
thaisbetina | 0:a8a2492e2740 | 158 | |
thaisbetina | 0:a8a2492e2740 | 159 | /* lcd.locate(12, 3); |
thaisbetina | 0:a8a2492e2740 | 160 | |
thaisbetina | 0:a8a2492e2740 | 161 | if((processValue>toldown) && (processValue<tolup)){ |
thaisbetina | 0:a8a2492e2740 | 162 | lcd.printf("%2.1f ",old_rpm);} |
thaisbetina | 0:a8a2492e2740 | 163 | |
thaisbetina | 0:a8a2492e2740 | 164 | else{ |
thaisbetina | 0:a8a2492e2740 | 165 | lcd.printf("%2.1f ",processValue); |
thaisbetina | 0:a8a2492e2740 | 166 | old_rpm=processValue;}*/ |
thaisbetina | 0:a8a2492e2740 | 167 | |
thaisbetina | 0:a8a2492e2740 | 168 | |
thaisbetina | 0:a8a2492e2740 | 169 | /*Motor 2*/ |
thaisbetina | 0:a8a2492e2740 | 170 | if ((sensor2==1) && (US2==0)){ //borda de subida |
thaisbetina | 0:a8a2492e2740 | 171 | temporizador2.stop(); |
thaisbetina | 0:a8a2492e2740 | 172 | result2=temporizador2.read_ms(); |
thaisbetina | 0:a8a2492e2740 | 173 | temporizador2.reset(); |
thaisbetina | 0:a8a2492e2740 | 174 | temporizador2.start();} |
thaisbetina | 0:a8a2492e2740 | 175 | |
thaisbetina | 0:a8a2492e2740 | 176 | US2=sensor2; |
thaisbetina | 0:a8a2492e2740 | 177 | |
thaisbetina | 0:a8a2492e2740 | 178 | if (temporizador2.read_ms()>=1000){ //Verifica se o timer esta ligado |
thaisbetina | 0:a8a2492e2740 | 179 | temporizador2.stop(); |
thaisbetina | 0:a8a2492e2740 | 180 | temporizador2.reset(); |
thaisbetina | 0:a8a2492e2740 | 181 | result2=0;} |
thaisbetina | 0:a8a2492e2740 | 182 | |
thaisbetina | 0:a8a2492e2740 | 183 | if (result2!=0) processValue2=60/(((float)result2*12)/1000); //Conversao para RPM |
thaisbetina | 0:a8a2492e2740 | 184 | else processValue2=0; |
thaisbetina | 0:a8a2492e2740 | 185 | |
thaisbetina | 0:a8a2492e2740 | 186 | tolup2=old_rpm2+1; |
thaisbetina | 0:a8a2492e2740 | 187 | toldown2=old_rpm2-1; |
thaisbetina | 0:a8a2492e2740 | 188 | |
thaisbetina | 0:a8a2492e2740 | 189 | /* lcd.locate(17, 3); |
thaisbetina | 0:a8a2492e2740 | 190 | |
thaisbetina | 0:a8a2492e2740 | 191 | if((processValue2>toldown2) && (processValue2<tolup2)){ |
thaisbetina | 0:a8a2492e2740 | 192 | lcd.printf("%2.1f ",old_rpm2);} |
thaisbetina | 0:a8a2492e2740 | 193 | |
thaisbetina | 0:a8a2492e2740 | 194 | else{ |
thaisbetina | 0:a8a2492e2740 | 195 | lcd.printf("%2.1f ",processValue2); |
thaisbetina | 0:a8a2492e2740 | 196 | old_rpm2=processValue2;}*/ |
thaisbetina | 0:a8a2492e2740 | 197 | |
thaisbetina | 0:a8a2492e2740 | 198 | /*Controle Proporcional Motor 1 e 2*/ |
thaisbetina | 0:a8a2492e2740 | 199 | |
thaisbetina | 0:a8a2492e2740 | 200 | erro=setPoint-processValue; |
thaisbetina | 0:a8a2492e2740 | 201 | |
thaisbetina | 0:a8a2492e2740 | 202 | output+=erro*GAIN; |
thaisbetina | 0:a8a2492e2740 | 203 | if(output>10000)output=10000; |
thaisbetina | 0:a8a2492e2740 | 204 | if(output<0)output=0; |
thaisbetina | 0:a8a2492e2740 | 205 | float val = output; |
thaisbetina | 0:a8a2492e2740 | 206 | if(val < 2000)val=0; |
thaisbetina | 0:a8a2492e2740 | 207 | pwm1.pulsewidth_us(10000-val); |
thaisbetina | 0:a8a2492e2740 | 208 | |
thaisbetina | 0:a8a2492e2740 | 209 | erro2=setPoint2-processValue2; |
thaisbetina | 0:a8a2492e2740 | 210 | |
thaisbetina | 0:a8a2492e2740 | 211 | output2+=erro2*GAIN; |
thaisbetina | 0:a8a2492e2740 | 212 | if(output2>10000)output2=10000; |
thaisbetina | 0:a8a2492e2740 | 213 | if(output2<0)output2=0; |
thaisbetina | 0:a8a2492e2740 | 214 | float val2 = output2; |
thaisbetina | 0:a8a2492e2740 | 215 | if(val2 < 2000)val2=0; |
thaisbetina | 0:a8a2492e2740 | 216 | pwm2.pulsewidth_us(10000-val2); |
thaisbetina | 0:a8a2492e2740 | 217 | } |
thaisbetina | 0:a8a2492e2740 | 218 | } |