El_clan_zoncillo / Mbed 2 deprecated Proyecto_final

Dependencies:   mbed TextLCD

Committer:
freind00
Date:
Tue Dec 18 07:33:19 2018 +0000
Revision:
3:3620f948d5e0
Child:
4:c9f7e9a96324
18/12/18

Who changed what in which revision?

UserRevisionLine numberNew contents of line
freind00 3:3620f948d5e0 1 #include "mbed.h"
freind00 3:3620f948d5e0 2 #include "math.h"
freind00 3:3620f948d5e0 3 #define constanteTension 1.4709e-06
freind00 3:3620f948d5e0 4 #define constanteIntensidad 1.423595702690060e-09
freind00 3:3620f948d5e0 5
freind00 3:3620f948d5e0 6 Serial pc(USBTX, USBRX); // tx, rx
freind00 3:3620f948d5e0 7
freind00 3:3620f948d5e0 8 #define vectormuestras 100
freind00 3:3620f948d5e0 9
freind00 3:3620f948d5e0 10 //datos para la simulación
freind00 3:3620f948d5e0 11 uint16_t SimulaADCTension[vectormuestras]={60202,60330,58625,59923,58998,57466,57255,57119,57170,56327,53777,54359,53219,51091,50453,47815,46978,46509,44763,43549,41361,38513,38484,36990,34806,33279,31567,29193,28053,25447,24892,21968,20909,18951,17602,17651,16065,14052,14118,11186,10956, 9896, 9801, 9096, 7219, 7250, 6692, 6723, 6585, 6516, 5513, 6368, 6477, 5763, 6043, 7267, 8753, 8192, 9443, 9583,11577,11624,13236,14810,16455,17921,18496,19134,20656,22417,25159,25612,28368,28898,31937,32470,33848,35633,38022,39382,40758,43294,44352,45782,47961,48101,50367,51624,52074,53559,53615,54518,56322,57580,58557,57530,58872,59042,58397,59201};
freind00 3:3620f948d5e0 12 uint16_t SimulaADCIntensidad[vectormuestras]={50233,51231,50075,49752,48077,47954,47431,47039,45074,43363,42265,42317,41528,40167,38300,38291,36222,35848,32856,31874,31756,30792,29301,27121,25643,25859,24596,22473,21324,20488,20525,19587,18219,17412,16095,16230,15805,14552,14084,13718,13018,13552,13830,13742,13402,12494,13483,12590,12865,13365,13717,15102,14670,16809,17329,18512,18492,19710,21125,21425,21959,24420,23675,25403,27867,27863,28974,29835,32658,32356,33992,36355,36794,38237,39365,40761,40570,42662,42741,45341,45347,47276,46952,48428,49884,48802,49433,49915,51705,51945,51311,52919,52741,51751,51769,51843,53002,51405,51402,51047};
freind00 3:3620f948d5e0 13
freind00 3:3620f948d5e0 14 //datos para la simulación
freind00 3:3620f948d5e0 15 uint16_t SimulaADCMedio[muestras]={33393,33574,32027,33589,33031,31969,32328,32861,33677,33691,32088,33703,33676,32739,33364,32057,32613,33594,33348,33681,33077,31846,33461,33630,33123,33280,33251,32554,33077,32115,33177,31838,32325,31867,31968,33410,33155,32405,33662,31843,32646,32533,33295,33354,32146,32748,32660,33059,33184,33274,32323,33125,33076,32098,32011,32765,33681,32451,32937,32220,33267,32282,32780,33163,33544,33680,32862,32050,32072,32286,33445,32280,33392,32259,33620,32470,32165,32274,32998,32715,32473,33425,32937,32867,33597,32343,33279,33272,32531,32903,31926,31882,32829,33322,33630,32033,32905,32707,31799,32445};
freind00 3:3620f948d5e0 16
freind00 3:3620f948d5e0 17 int16_t vTensionA[vectormuestras];
freind00 3:3620f948d5e0 18 int16_t vTensionB[vectormuestras];
freind00 3:3620f948d5e0 19
freind00 3:3620f948d5e0 20 int16_t iIntensidadA[vectormuestras];
freind00 3:3620f948d5e0 21 int16_t iIntensidadB[vectormuestras];
freind00 3:3620f948d5e0 22
freind00 3:3620f948d5e0 23 int contador=0;
freind00 3:3620f948d5e0 24
freind00 3:3620f948d5e0 25 int pulsador=0;
freind00 3:3620f948d5e0 26
freind00 3:3620f948d5e0 27 int16_t medidaTension;
freind00 3:3620f948d5e0 28 int16_t medidaIntensidad;
freind00 3:3620f948d5e0 29 int16_t medidaOffset;
freind00 3:3620f948d5e0 30 int16_t medidaTensionSinOffset;
freind00 3:3620f948d5e0 31 int16_t medidaIntensidadSinOffset;
freind00 3:3620f948d5e0 32 int bufferActivo=0;
freind00 3:3620f948d5e0 33 int flag=0;
freind00 3:3620f948d5e0 34 int16_t measV=0;
freind00 3:3620f948d5e0 35 int16_t measI=0;
freind00 3:3620f948d5e0 36 int32_t producto=0;
freind00 3:3620f948d5e0 37 int64_t sumatorioV=0;
freind00 3:3620f948d5e0 38 int64_t sumatorioI=0;
freind00 3:3620f948d5e0 39 int64_t sumatorioPA=0;
freind00 3:3620f948d5e0 40
freind00 3:3620f948d5e0 41 float VRMS=0;
freind00 3:3620f948d5e0 42 float IRMS=0;
freind00 3:3620f948d5e0 43 float P_activa=0;
freind00 3:3620f948d5e0 44 float P_reactiva=0;
freind00 3:3620f948d5e0 45 float P_aparente=0;
freind00 3:3620f948d5e0 46 float Consumo_Pact=0;
freind00 3:3620f948d5e0 47 float Consumo_Preact=0;
freind00 3:3620f948d5e0 48 float FP=0;
freind00 3:3620f948d5e0 49
freind00 3:3620f948d5e0 50
freind00 3:3620f948d5e0 51 //Para la simulacion
freind00 3:3620f948d5e0 52 uint16_t adcTension()
freind00 3:3620f948d5e0 53 {
freind00 3:3620f948d5e0 54 return SimulaADCTension[contador];
freind00 3:3620f948d5e0 55 }
freind00 3:3620f948d5e0 56
freind00 3:3620f948d5e0 57 uint16_t adcIntensidad()
freind00 3:3620f948d5e0 58 {
freind00 3:3620f948d5e0 59 return SimulaADCIntensidad[contador];
freind00 3:3620f948d5e0 60 }
freind00 3:3620f948d5e0 61
freind00 3:3620f948d5e0 62 //Para la simulacion
freind00 3:3620f948d5e0 63 uint16_t adcMedio()
freind00 3:3620f948d5e0 64 {
freind00 3:3620f948d5e0 65 return SimulaADCMedio[contador];
freind00 3:3620f948d5e0 66 }
freind00 3:3620f948d5e0 67
freind00 3:3620f948d5e0 68 //Cambio de boton
freind00 3:3620f948d5e0 69 void cambio_boton()
freind00 3:3620f948d5e0 70 {
freind00 3:3620f948d5e0 71 pulsador++;
freind00 3:3620f948d5e0 72 if(pulsador>8) {
freind00 3:3620f948d5e0 73 pulsador=0;
freind00 3:3620f948d5e0 74 }
freind00 3:3620f948d5e0 75 }
freind00 3:3620f948d5e0 76
freind00 3:3620f948d5e0 77 //Visualización por pantalla
freind00 3:3620f948d5e0 78 void visualizacion()//función mostrar
freind00 3:3620f948d5e0 79 {
freind00 3:3620f948d5e0 80 if(pulsador==0){
freind00 3:3620f948d5e0 81 printf("VRMS: %3.4f\n\r", VRMS);
freind00 3:3620f948d5e0 82 }
freind00 3:3620f948d5e0 83
freind00 3:3620f948d5e0 84 else if pulsador ==1 {
freind00 3:3620f948d5e0 85 printf("IRMS: %3.4f\n\r", IRMS);
freind00 3:3620f948d5e0 86 }
freind00 3:3620f948d5e0 87
freind00 3:3620f948d5e0 88 else if pulsador ==2 {
freind00 3:3620f948d5e0 89 printf("Pot. activa: %3.4f\n\r", P_activa);
freind00 3:3620f948d5e0 90 }
freind00 3:3620f948d5e0 91
freind00 3:3620f948d5e0 92 else if pulsador ==3 {
freind00 3:3620f948d5e0 93 printf("Pot. reactiva: %3.4f\n\r", P_reactiva);
freind00 3:3620f948d5e0 94 }
freind00 3:3620f948d5e0 95
freind00 3:3620f948d5e0 96 else if pulsador ==4 {
freind00 3:3620f948d5e0 97 printf("Pot. aparente: %3.4f\n\r", P_aparente);
freind00 3:3620f948d5e0 98 }
freind00 3:3620f948d5e0 99
freind00 3:3620f948d5e0 100 else if pulsador ==5 {
freind00 3:3620f948d5e0 101 printf("Consumo Pot. A: %3.4f\n\r", Consumo_Pact);
freind00 3:3620f948d5e0 102 }
freind00 3:3620f948d5e0 103
freind00 3:3620f948d5e0 104 else if pulsador ==6 {
freind00 3:3620f948d5e0 105 printf("Consumo Pot. R: %3.4f\n\r", Consumo_Preact);
freind00 3:3620f948d5e0 106 }
freind00 3:3620f948d5e0 107
freind00 3:3620f948d5e0 108 else if pulsador ==7 {
freind00 3:3620f948d5e0 109 printf("Factor de potencia: %3.4f\n\r", FP);
freind00 3:3620f948d5e0 110 }
freind00 3:3620f948d5e0 111
freind00 3:3620f948d5e0 112 }
freind00 3:3620f948d5e0 113
freind00 3:3620f948d5e0 114
freind00 3:3620f948d5e0 115 //Captura de valores mediante muestreo
freind00 3:3620f948d5e0 116 void captura() //función muestreo
freind00 3:3620f948d5e0 117 {
freind00 3:3620f948d5e0 118 medidaTension=(int16_t)(adcTension()^0x8000);
freind00 3:3620f948d5e0 119 medidaIntensidad=(int16_t)(adcIntensidad()^0x8000);
freind00 3:3620f948d5e0 120 medidaOffset=(int16_t)(adcMedio()^0x8000);
freind00 3:3620f948d5e0 121 medidaTensionSinOffset=medidaTension-medidaOffset;
freind00 3:3620f948d5e0 122 medidaIntensidadSinOffset=medidaIntensidad-medidaOffset;
freind00 3:3620f948d5e0 123
freind00 3:3620f948d5e0 124 if(bufferActivo) {
freind00 3:3620f948d5e0 125 vTensionA[contador] = medidaTensionSinOffset;
freind00 3:3620f948d5e0 126 vIntensidadA[contador] = medidaIntensidadSinOffset;
freind00 3:3620f948d5e0 127 } else {
freind00 3:3620f948d5e0 128 vTensionB[contador] = medidaTensionSinOffset;
freind00 3:3620f948d5e0 129 vIntensidadB[contador] = medidaIntensidadSinOffset;
freind00 3:3620f948d5e0 130 }
freind00 3:3620f948d5e0 131
freind00 3:3620f948d5e0 132 contador++;
freind00 3:3620f948d5e0 133 if(contador==vectormuestras){
freind00 3:3620f948d5e0 134 contador=0;
freind00 3:3620f948d5e0 135 bufferActivo=!bufferActivo;
freind00 3:3620f948d5e0 136 flag=1;//buffer lleno
freind00 3:3620f948d5e0 137 }
freind00 3:3620f948d5e0 138 }
freind00 3:3620f948d5e0 139
freind00 3:3620f948d5e0 140 void calculos()//Cálculo de los valores
freind00 3:3620f948d5e0 141 {
freind00 3:3620f948d5e0 142 while(1) {//bucle para siempre
freind00 3:3620f948d5e0 143 if(flag) {//mira si el buffer esta lleno
freind00 3:3620f948d5e0 144 flag=0;//Borra la variable buffer lleno
freind00 3:3620f948d5e0 145 measV=0;
freind00 3:3620f948d5e0 146 measI=0;
freind00 3:3620f948d5e0 147 producto=0;
freind00 3:3620f948d5e0 148 sumatorioV=0;
freind00 3:3620f948d5e0 149 sumatorioI=0;
freind00 3:3620f948d5e0 150 sumatorioPA=0;
freind00 3:3620f948d5e0 151
freind00 3:3620f948d5e0 152 for (int b=0; b<muestras; b++) {//VRMS
freind00 3:3620f948d5e0 153 if (!bufferActivo) {
freind00 3:3620f948d5e0 154 measV=vTensionA[b];
freind00 3:3620f948d5e0 155 measI=iIntensidadA[b];
freind00 3:3620f948d5e0 156 } else {
freind00 3:3620f948d5e0 157 measV=vTensionB[b];
freind00 3:3620f948d5e0 158 measI=iIntensidadB[b];
freind00 3:3620f948d5e0 159 }
freind00 3:3620f948d5e0 160 producto=measV*measV;
freind00 3:3620f948d5e0 161 sumatorioV+=producto;//calcula el valor VPP
freind00 3:3620f948d5e0 162 producto=measI*measI;
freind00 3:3620f948d5e0 163 sumatorioI+=producto;
freind00 3:3620f948d5e0 164 producto=measV*measI;
freind00 3:3620f948d5e0 165 sumatorioPA+=producto;
freind00 3:3620f948d5e0 166 }
freind00 3:3620f948d5e0 167
freind00 3:3620f948d5e0 168 if(pulsador==0){
freind00 3:3620f948d5e0 169 VRMS=sqrt(constanteTension*sumatorioV);
freind00 3:3620f948d5e0 170 }
freind00 3:3620f948d5e0 171
freind00 3:3620f948d5e0 172 else if (pulsador ==1) {
freind00 3:3620f948d5e0 173 IRMS=sqrt(constanteIntensidad*sumatorioI);
freind00 3:3620f948d5e0 174 }
freind00 3:3620f948d5e0 175
freind00 3:3620f948d5e0 176 else if (pulsador ==2) {
freind00 3:3620f948d5e0 177 P_activa=sqrt(constanteTension*constanteIntensidad)*sumatorioPA;
freind00 3:3620f948d5e0 178 }
freind00 3:3620f948d5e0 179
freind00 3:3620f948d5e0 180 else if (pulsador ==3) {
freind00 3:3620f948d5e0 181 P_aparente=VRMS*IRMS;
freind00 3:3620f948d5e0 182 }
freind00 3:3620f948d5e0 183
freind00 3:3620f948d5e0 184 else if (pulsador ==4) {
freind00 3:3620f948d5e0 185 P_reactiva=sqrt(P_aparente*P_aparente)-(P_aparente*P_aparente);
freind00 3:3620f948d5e0 186 }
freind00 3:3620f948d5e0 187
freind00 3:3620f948d5e0 188 else if (pulsador ==5) {
freind00 3:3620f948d5e0 189 Consumo_Pact=Consumo_Pact+P_activa*20e-3/(3600*1000);
freind00 3:3620f948d5e0 190 }
freind00 3:3620f948d5e0 191
freind00 3:3620f948d5e0 192 else if (pulsador ==6) {
freind00 3:3620f948d5e0 193 Consumo_Preact=Consumo_Preact+P_reactiva*20e-3/(3600*1000);
freind00 3:3620f948d5e0 194 }
freind00 3:3620f948d5e0 195
freind00 3:3620f948d5e0 196 else if (pulsador ==7) {
freind00 3:3620f948d5e0 197 FP=P_activa/P_aparente;
freind00 3:3620f948d5e0 198 }
freind00 3:3620f948d5e0 199 }
freind00 3:3620f948d5e0 200 }
freind00 3:3620f948d5e0 201
freind00 3:3620f948d5e0 202
freind00 3:3620f948d5e0 203 int main()
freind00 3:3620f948d5e0 204 {
freind00 3:3620f948d5e0 205 Ticker timerCaptura;
freind00 3:3620f948d5e0 206 Ticker timerVisualizacion;
freind00 3:3620f948d5e0 207 timerCaptura.attach_us(&captura,200);//Hace que la función muestreo se ejecute cada 200us
freind00 3:3620f948d5e0 208 //Hace que la función boton se ejecute cada vez que se pulse el botón
freind00 3:3620f948d5e0 209 timerVisualizacion.attach(&visualizacion,1.0);//Hace que la función mostrar se ejecute cada segundo
freind00 3:3620f948d5e0 210 //Llamar a la función de cálculos
freind00 3:3620f948d5e0 211 button.rise(&cambio_boton); //Llama al funcion cambio de menú (cambio botón)
freind00 3:3620f948d5e0 212
freind00 3:3620f948d5e0 213 }