a

Dependencies:   mbed TextLCD

Committer:
alexmar97
Date:
Fri Nov 29 12:52:32 2019 +0000
Revision:
0:ebc3999f6ef4
Child:
1:b1d6185f85c8
proyecto; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexmar97 0:ebc3999f6ef4 1 #include "mbed.h"
alexmar97 0:ebc3999f6ef4 2 #define bufferLength 500
alexmar97 0:ebc3999f6ef4 3 #include "math.h"
alexmar97 0:ebc3999f6ef4 4 #include "TextLCD.h"
alexmar97 0:ebc3999f6ef4 5
alexmar97 0:ebc3999f6ef4 6 #define muestras 100
alexmar97 0:ebc3999f6ef4 7 TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7
alexmar97 0:ebc3999f6ef4 8 Serial pc(USBTX, USBRX); // tx, rx
alexmar97 0:ebc3999f6ef4 9 struct eResultados {
alexmar97 0:ebc3999f6ef4 10 float Vrms;
alexmar97 0:ebc3999f6ef4 11 float Vmax;
alexmar97 0:ebc3999f6ef4 12 float Vmin;
alexmar97 0:ebc3999f6ef4 13 };
alexmar97 0:ebc3999f6ef4 14 struct estructuraMedidas
alexmar97 0:ebc3999f6ef4 15 {
alexmar97 0:ebc3999f6ef4 16 float vrms;
alexmar97 0:ebc3999f6ef4 17 float irms;
alexmar97 0:ebc3999f6ef4 18 float potenciaActiva;
alexmar97 0:ebc3999f6ef4 19 float potenciaReactiva;
alexmar97 0:ebc3999f6ef4 20 float potenciaAparente;
alexmar97 0:ebc3999f6ef4 21 float energiaConsumida;
alexmar97 0:ebc3999f6ef4 22 float factorDePotencia;
alexmar97 0:ebc3999f6ef4 23 };
alexmar97 0:ebc3999f6ef4 24 //struct Vectores{
alexmar97 0:ebc3999f6ef4 25 // float vTensionA[muestras];
alexmar97 0:ebc3999f6ef4 26 //float vTensionB[muestras];
alexmar97 0:ebc3999f6ef4 27 // float vIntensidadA[muestras];
alexmar97 0:ebc3999f6ef4 28 // float vIntensidadB[muestras];
alexmar97 0:ebc3999f6ef4 29 }vectores;
alexmar97 0:ebc3999f6ef4 30 AnalogIn adc_in(A0);
alexmar97 0:ebc3999f6ef4 31 AnalogIn int_in(A1);
alexmar97 0:ebc3999f6ef4 32 AnalogOut dac_out(A2);
alexmar97 0:ebc3999f6ef4 33 AnalogOut int_out(A3);
alexmar97 0:ebc3999f6ef4 34 InterruptIn boton(USER_BUTTON);
alexmar97 0:ebc3999f6ef4 35
alexmar97 0:ebc3999f6ef4 36 Ticker tMuestrea;
alexmar97 0:ebc3999f6ef4 37 Ticker tVisualiza;
alexmar97 0:ebc3999f6ef4 38 void visualiza();
alexmar97 0:ebc3999f6ef4 39 void procesado(int length, uint16_t *entrada, uint16_t *entrada2);
alexmar97 0:ebc3999f6ef4 40 void calcularRMS(uint16_t *buffer, int longitud,eResultados *resul);
alexmar97 0:ebc3999f6ef4 41 int flag=0;
alexmar97 0:ebc3999f6ef4 42 int contador=0;
alexmar97 0:ebc3999f6ef4 43 int bufferActivo=0;
alexmar97 0:ebc3999f6ef4 44
alexmar97 0:ebc3999f6ef4 45 struct buffers {
alexmar97 0:ebc3999f6ef4 46 uint16_t 1A[muestras];
alexmar97 0:ebc3999f6ef4 47 uint16_t 1B[muestras];
alexmar97 0:ebc3999f6ef4 48 uint16_t 2A[muestras];
alexmar97 0:ebc3999f6ef4 49 uint16_t 2B[muestras];
alexmar97 0:ebc3999f6ef4 50 };
alexmar97 0:ebc3999f6ef4 51
alexmar97 0:ebc3999f6ef4 52 bool bufferActivo=0;
alexmar97 0:ebc3999f6ef4 53 void muestrea();
alexmar97 0:ebc3999f6ef4 54
alexmar97 0:ebc3999f6ef4 55 buffers bufferEntrada;
alexmar97 0:ebc3999f6ef4 56 buffers bufferSalida;
alexmar97 0:ebc3999f6ef4 57
alexmar97 0:ebc3999f6ef4 58 eResultados resultados;
alexmar97 0:ebc3999f6ef4 59
alexmar97 0:ebc3999f6ef4 60 int main()
alexmar97 0:ebc3999f6ef4 61 {
alexmar97 0:ebc3999f6ef4 62
alexmar97 0:ebc3999f6ef4 63 tMuestrea.attach_us(&muestrea, 100);
alexmar97 0:ebc3999f6ef4 64 tVisualiza.attach(&visualiza, 5);
alexmar97 0:ebc3999f6ef4 65
alexmar97 0:ebc3999f6ef4 66 while(1) {
alexmar97 0:ebc3999f6ef4 67 if (flag) {
alexmar97 0:ebc3999f6ef4 68 flag=0;
alexmar97 0:ebc3999f6ef4 69 if(bufferActivo==1) {
alexmar97 0:ebc3999f6ef4 70 procesado(muestras,(uint16_t *)&bufferEntrada.1A,(uint16_t *)&bufferEntrada.2A);
alexmar97 0:ebc3999f6ef4 71 } else {
alexmar97 0:ebc3999f6ef4 72 procesado(muestras,(uint16_t *)&bufferEntrada.1B,(uint16_t *)&bufferEntrada.2B);
alexmar97 0:ebc3999f6ef4 73 }
alexmar97 0:ebc3999f6ef4 74
alexmar97 0:ebc3999f6ef4 75
alexmar97 0:ebc3999f6ef4 76 }
alexmar97 0:ebc3999f6ef4 77
alexmar97 0:ebc3999f6ef4 78
alexmar97 0:ebc3999f6ef4 79 wait_us(1);
alexmar97 0:ebc3999f6ef4 80 }
alexmar97 0:ebc3999f6ef4 81 }
alexmar97 0:ebc3999f6ef4 82
alexmar97 0:ebc3999f6ef4 83 void muestrea()
alexmar97 0:ebc3999f6ef4 84 {
alexmar97 0:ebc3999f6ef4 85 uint16_t dato=adc_in.read_u16();
alexmar97 0:ebc3999f6ef4 86 uint16_t dato2=int_in.read_u16();
alexmar97 0:ebc3999f6ef4 87 if (bufferActivo==0) {
alexmar97 0:ebc3999f6ef4 88
alexmar97 0:ebc3999f6ef4 89 bufferEntrada.1A[contador]=dato;
alexmar97 0:ebc3999f6ef4 90
alexmar97 0:ebc3999f6ef4 91 bufferEntrada.2A[contador]=dato2;
alexmar97 0:ebc3999f6ef4 92
alexmar97 0:ebc3999f6ef4 93 }
alexmar97 0:ebc3999f6ef4 94
alexmar97 0:ebc3999f6ef4 95 else {
alexmar97 0:ebc3999f6ef4 96
alexmar97 0:ebc3999f6ef4 97 bufferEntrada.1B[contador]=dato;
alexmar97 0:ebc3999f6ef4 98
alexmar97 0:ebc3999f6ef4 99 bufferEntrada.2B[contador]=dato2;
alexmar97 0:ebc3999f6ef4 100
alexmar97 0:ebc3999f6ef4 101 }
alexmar97 0:ebc3999f6ef4 102
alexmar97 0:ebc3999f6ef4 103 contador++;
alexmar97 0:ebc3999f6ef4 104 if(contador==muestras) {
alexmar97 0:ebc3999f6ef4 105 bufferActivo=!bufferActivo;
alexmar97 0:ebc3999f6ef4 106 contador=0;
alexmar97 0:ebc3999f6ef4 107 flag=1;
alexmar97 0:ebc3999f6ef4 108 }
alexmar97 0:ebc3999f6ef4 109
alexmar97 0:ebc3999f6ef4 110 }
alexmar97 0:ebc3999f6ef4 111 void procesado(int length, uint16_t *entrada, uint16_t *entrada2)
alexmar97 0:ebc3999f6ef4 112 //{
alexmar97 0:ebc3999f6ef4 113 // for (int i=0; i<length; i++) {
alexmar97 0:ebc3999f6ef4 114 // salida[i]=entrada[i];
alexmar97 0:ebc3999f6ef4 115 //}
alexmar97 0:ebc3999f6ef4 116
alexmar97 0:ebc3999f6ef4 117 // calcularRMS(entrada,length,&resultados);
alexmar97 0:ebc3999f6ef4 118 void calcularDatos(int16_t *entrada, int16_t *entrada2, int longitud, estructuraMedidas *medidas);
alexmar97 0:ebc3999f6ef4 119
alexmar97 0:ebc3999f6ef4 120
alexmar97 0:ebc3999f6ef4 121 }
alexmar97 0:ebc3999f6ef4 122 void calcularRMS(uint16_t *buffer, int longitud,eResultados *resul)
alexmar97 0:ebc3999f6ef4 123 {
alexmar97 0:ebc3999f6ef4 124 float cons=0.00005035400390625;
alexmar97 0:ebc3999f6ef4 125 float cons1=1.007080078125e-4;
alexmar97 0:ebc3999f6ef4 126 float cons2=cons*cons;
alexmar97 0:ebc3999f6ef4 127
alexmar97 0:ebc3999f6ef4 128 float res;
alexmar97 0:ebc3999f6ef4 129 float Vmax=0;
alexmar97 0:ebc3999f6ef4 130 float Vmin=65535;
alexmar97 0:ebc3999f6ef4 131
alexmar97 0:ebc3999f6ef4 132 uint64_t suma=0;
alexmar97 0:ebc3999f6ef4 133
alexmar97 0:ebc3999f6ef4 134
alexmar97 0:ebc3999f6ef4 135
alexmar97 0:ebc3999f6ef4 136 for (int i=0; i<longitud; i++) {
alexmar97 0:ebc3999f6ef4 137
alexmar97 0:ebc3999f6ef4 138 suma+=buffer[i]*buffer[i];
alexmar97 0:ebc3999f6ef4 139 if (Vmax<buffer[i]) {
alexmar97 0:ebc3999f6ef4 140 Vmax=buffer[i];
alexmar97 0:ebc3999f6ef4 141 }
alexmar97 0:ebc3999f6ef4 142 if (Vmin>buffer[i]) {
alexmar97 0:ebc3999f6ef4 143 Vmin=buffer[i];
alexmar97 0:ebc3999f6ef4 144 }
alexmar97 0:ebc3999f6ef4 145 }
alexmar97 0:ebc3999f6ef4 146
alexmar97 0:ebc3999f6ef4 147
alexmar97 0:ebc3999f6ef4 148 res=cons1*sqrt(((float)suma)/longitud);
alexmar97 0:ebc3999f6ef4 149 resul->Vrms=res;
alexmar97 0:ebc3999f6ef4 150 resul->Vmax=Vmax*cons;
alexmar97 0:ebc3999f6ef4 151 resul->Vmin=Vmin*cons;
alexmar97 0:ebc3999f6ef4 152 }
alexmar97 0:ebc3999f6ef4 153
alexmar97 0:ebc3999f6ef4 154 void visualiza(){
alexmar97 0:ebc3999f6ef4 155 printf ("El valor maxima es %f\n",resultados.Vmax);
alexmar97 0:ebc3999f6ef4 156 printf ("El valor minimo es %f\n",resultados.Vmin);
alexmar97 0:ebc3999f6ef4 157 printf ("El valor RMS es %f\n\n",resultados.Vrms);
alexmar97 0:ebc3999f6ef4 158
alexmar97 0:ebc3999f6ef4 159 }
alexmar97 0:ebc3999f6ef4 160 void calcularDatos(int16_t *datosV, int16_t *datosI, int longitud, estructuraMedidas *medidas)
alexmar97 0:ebc3999f6ef4 161 {
alexmar97 0:ebc3999f6ef4 162 float cons=1.007080078125e-4;
alexmar97 0:ebc3999f6ef4 163 float cons2=cons*cons;
alexmar97 0:ebc3999f6ef4 164
alexmar97 0:ebc3999f6ef4 165 int64_t sumaV=0;
alexmar97 0:ebc3999f6ef4 166 int64_t sumaI=0;
alexmar97 0:ebc3999f6ef4 167 int64_t sumaP=0;
alexmar97 0:ebc3999f6ef4 168
alexmar97 0:ebc3999f6ef4 169
alexmar97 0:ebc3999f6ef4 170
alexmar97 0:ebc3999f6ef4 171 float datoV;
alexmar97 0:ebc3999f6ef4 172 float datoI;
alexmar97 0:ebc3999f6ef4 173 float datoP;
alexmar97 0:ebc3999f6ef4 174 float datoS;
alexmar97 0:ebc3999f6ef4 175 float datoQ;
alexmar97 0:ebc3999f6ef4 176
alexmar97 0:ebc3999f6ef4 177
alexmar97 0:ebc3999f6ef4 178 for (int i=0; i<longitud; i++) {
alexmar97 0:ebc3999f6ef4 179
alexmar97 0:ebc3999f6ef4 180 sumaV+=datosV[i]*datosV[i];
alexmar97 0:ebc3999f6ef4 181 sumaI+=datosI[i]*datosI[i];
alexmar97 0:ebc3999f6ef4 182 sumaP+=datosV[i]*datosI[i];
alexmar97 0:ebc3999f6ef4 183 }
alexmar97 0:ebc3999f6ef4 184
alexmar97 0:ebc3999f6ef4 185 datoV = cons*sqrt(((float)sumaV)/longitud);
alexmar97 0:ebc3999f6ef4 186 datoI = cons*sqrt(((float)sumaI)/longitud);
alexmar97 0:ebc3999f6ef4 187 datoP = cons2*((float)sumaP)/longitud;
alexmar97 0:ebc3999f6ef4 188 datoS=datoV*datoI;
alexmar97 0:ebc3999f6ef4 189 datoQ = sqrt((datoS*datoS)-(datoP*datoP));
alexmar97 0:ebc3999f6ef4 190
alexmar97 0:ebc3999f6ef4 191 (*medidas).energiaConsumida = datoP/datoI;
alexmar97 0:ebc3999f6ef4 192 (*medidas).factorDePotencia = datoP/datoS;
alexmar97 0:ebc3999f6ef4 193 (*medidas).potenciaAparente = datoS;
alexmar97 0:ebc3999f6ef4 194 (*medidas).potenciaActiva = datoP;
alexmar97 0:ebc3999f6ef4 195 (*medidas).potenciaReactiva = datoQ;
alexmar97 0:ebc3999f6ef4 196 (*medidas).vrms = datoV;
alexmar97 0:ebc3999f6ef4 197 (*medidas).irms = datoI;
alexmar97 0:ebc3999f6ef4 198 (*medidas).factorDePotencia = datoP/datoS;
alexmar97 0:ebc3999f6ef4 199 }