codigo sin probar
Dependencies: mbed CMSIS_DSP_5 TextLCD
Diff: main.cpp
- Revision:
- 7:566a2dd5dddd
- Parent:
- 6:84f33f8a9c9d
--- a/main.cpp Tue Dec 11 10:53:55 2018 +0000 +++ b/main.cpp Tue Dec 11 17:41:46 2018 +0000 @@ -2,12 +2,15 @@ #include "arm_math.h" #include "TextLCD.h" +#include "datos_muestreo_corriente.h" +#include "datos_muestreo_voltaje.h" + Ticker timerCapturaMuestreo; Ticker timerMostrar; Serial pc(USBTX, USBRX); // tx, rx -#define longitud 360 +#define longitud 100 float Vrms; float Irms; @@ -17,12 +20,12 @@ float FDP; //BUFFERS DE VOLTAJE -int16_t bufferA[longitud]; -int16_t bufferB[longitud]; +float bufferA[longitud]; +float bufferB[longitud]; //BUFFERS DE INTENSIDAD -int16_t bufferC [longitud]; -int16_t bufferD [longitud]; +float bufferC [longitud]; +float bufferD [longitud]; // int contador=0 ; @@ -36,14 +39,11 @@ int16_t *pA ; int16_t *pB ; -AnalogIn voltaje (A0); //ENTRADA DE VOLTAJE -AnalogIn intensidad (A5); //ENTRADA DE INTENSIDAD - void muestreo () //hay que programar que se ejecute la funcion cada X tiempo (siendo X el tiempo de muestreo) { if (nbuffer==1) { //si nbuffer=1 entonces se guardan los datos en el buffer A, else buffer B - bufferA[contador]=voltaje.read ()*197-325 ; //VOLTAJE - bufferC[contador]=intensidad.read ()*8-14 ; //INTENSIDAD + bufferA[contador]=muestreo_voltaje [contador]*1.971327996035224e+02-3.252691193458119e+02 ; //VOLTAJE + bufferC[contador]=muestreo_intensidad [contador]*7.453035901834493-12.297509238026914 ; //INTENSIDAD contador=contador+1 ; if (contador==longitud) { nbuffer=0 ; @@ -51,8 +51,8 @@ bufferlleno=1; } } else { - bufferB[contador]=voltaje.read ()*197-325 ; //VOLTAJE ; - bufferD[contador]=intensidad.read ()*8-14 ; //INTENSIDAD ; + bufferB[contador]=muestreo_voltaje [contador]*1.971327996035224e+02-3.252691193458119e+02; //VOLTAJE ; + bufferD[contador]=muestreo_intensidad [contador]*7.453035901834493-12.297509238026914 ; //INTENSIDAD ; contador=contador+1 ; if (contador==longitud) { nbuffer=1 ; @@ -89,48 +89,30 @@ void mostrar () { - if (mostrarDato==1) { - pc.printf("voltaje:\n%f",Vrms); - } else if (mostrarDato==2) { - pc.printf("intensidad:\n%f",Irms); - } else if (mostrarDato==3) { - pc.printf("potencia activa:\n%f",P); - } else if (mostrarDato==4) { - pc.printf("potencia reactiva:\n%f",Q); - } else if (mostrarDato==5) { - pc.printf("potencia aparente:\n%f",S); - } else if (mostrarDato==6) { - pc.printf("energia activa:\n%f",0); - } else if (mostrarDato==7) { - pc.printf("energia reactiva:\n%f",0); - } else if (mostrarDato==8) { - pc.printf("factor de potencia:\n%f",FDP); - } } -float calcularRMS(int16_t *datos, int N); //definicion del tipo de variable que devuelve la funcion -float calcularRMS(int16_t *datos, int N) // definicion de los estamentos de la funcion +float calcularRMS(float *datos, int N); //definicion del tipo de variable que devuelve la funcion +float calcularRMS(float *datos, int N) // definicion de los estamentos de la funcion { - float32_t k=5.035400390625000e-05; - int64_t producto=0; - - for (int n=0; n<N; n++) { + float32_t producto=0; + + for (int n=0; n<longitud; n++) { producto+=datos[n]*datos[n]; } - return sqrt((float(producto)/N))*k; - + return sqrt((float(producto)/longitud)); + } -float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N); -float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N) +float calcular_potencia_activa(float *datos1,float *datos2, int N); +float calcular_potencia_activa(float *datos1,float *datos2, int N) { - int32_t sumatorio=0; + float sumatorio=0; for (int16_t n=0; n<N; n++) { - sumatorio+=sumatorio+datos1[N]*datos2[N]; + sumatorio+=datos1[n]*datos2[n]; } - return datos1[N]*datos2[N]/N; + return sumatorio/N; } float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P,float S); @@ -149,8 +131,8 @@ } -float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N); -float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N) +float calcular_potencia_reactiva(float *datos1,float *datos2, int N); +float calcular_potencia_reactiva(float *datos1,float *datos2, int N) { return 0; } @@ -170,27 +152,41 @@ timerCapturaMuestreo.attach_us(&muestreo,200); timerMostrar.attach(&mostrar,1.0); while(1) { + wait (4); if (bufferlleno==1) { bufferlleno=0; if (nbuffer==0) { float Vrms=calcularRMS(bufferA,longitud); + pc.printf("voltaje:\n%f",Vrms,"\t //"); float Irms=calcularRMS(bufferC,longitud); - float P=calcular_potencia_activa(bufferA,bufferC,longitud); + pc.printf("intensidad:\n%f",Irms,"\t //"); + float P=calcular_potencia_activa(bufferA,bufferC,longitud); + pc.printf("potencia activa:\n%f",P,"\t //"); + float S=calcular_potencia_aparente(Vrms,Irms); + pc.printf("potencia aparente:\n%f",S,"\t //"); + float Q=calcular_potencia_reactiva_MAL(Vrms,Irms,P,S); + pc.printf("potencia reactiva:\n%f",Q,"\t //"); + float FDP=fdp(S,P); + pc.printf("FDP:\n%f",FDP,"\t //"); } else - { float Vrms=calcularRMS(bufferB,longitud); + pc.printf("voltaje:\n%f",Vrms,"\t //"); float Irms=calcularRMS(bufferD,longitud); + pc.printf("intensidad:\n%f",Irms,"\t //"); float P=calcular_potencia_activa(bufferB,bufferD,longitud); + pc.printf("potencia activa:\n%f",P,"\t //"); + float S=calcular_potencia_aparente(Vrms,Irms); + pc.printf("potencia aparente:\n%f",S,"\t //"); + float Q=calcular_potencia_reactiva_MAL(Vrms,Irms,P,S); + pc.printf("potencia reactiva:\n%f",Q,"\t //"); + float FDP=fdp(S,P); + pc.printf("FDP:\n%f",FDP,"\t //"); } - - float S=calcular_potencia_aparente(Vrms,Irms); - float Q=calcular_potencia_reactiva_MAL(Vrms,Irms,P,S); - float FDP=fdp(S,P); - } + } } }