Mahm

Dependencies:   TextLCD mbed

Committer:
thaisbetina
Date:
Mon Apr 03 20:57:25 2017 +0000
Revision:
0:a8a2492e2740
Hola que tal

Who changed what in which revision?

UserRevisionLine numberNew 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 }