codigo sin probar
Dependencies: mbed CMSIS_DSP_5 TextLCD
main.cpp
- Committer:
- MIGUI
- Date:
- 2018-12-11
- Revision:
- 7:566a2dd5dddd
- Parent:
- 6:84f33f8a9c9d
File content as of revision 7:566a2dd5dddd:
#include "mbed.h" #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 100 float Vrms; float Irms; float P; float Q; float S; float FDP; //BUFFERS DE VOLTAJE float bufferA[longitud]; float bufferB[longitud]; //BUFFERS DE INTENSIDAD float bufferC [longitud]; float bufferD [longitud]; // int contador=0 ; int nbuffer=1 ; int bufferlleno ; int mostrarDato=1 ; float rms ; float Vpp ; //punteros int16_t *pA ; int16_t *pB ; 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]=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 ; contador=0 ; bufferlleno=1; } } else { 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 ; contador=0 ; bufferlleno=1; } } } // vamos a programar un boton como una entrada digital que nos permita seleccionar // el tipo de dato que queremos visualizar en la lcd //primero definimos como digitales las entradas en las que estarán los pulsadores InterruptIn pulsador1(PC_13); InterruptIn pulsador2 (D2); void botonUP () { mostrarDato+=1; if (mostrarDato==9) { mostrarDato=1; } } void botonDOWN () { mostrarDato-=1; if (mostrarDato==0) { mostrarDato=8; } } void mostrar () { } 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 producto=0; for (int n=0; n<longitud; n++) { producto+=datos[n]*datos[n]; } return sqrt((float(producto)/longitud)); } float calcular_potencia_activa(float *datos1,float *datos2, int N); float calcular_potencia_activa(float *datos1,float *datos2, int N) { float sumatorio=0; for (int16_t n=0; n<N; n++) { sumatorio+=datos1[n]*datos2[n]; } return sumatorio/N; } float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P,float S); float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P,float S) { float Q=sqrt(S-P); return Q; } float calcular_potencia_aparente(float Vrms,float Irms); float calcular_potencia_aparente(float Vrms,float Irms) { float S=Vrms*Irms; return S; } float calcular_potencia_reactiva(float *datos1,float *datos2, int N); float calcular_potencia_reactiva(float *datos1,float *datos2, int N) { return 0; } float fdp (float S,float P); float fdp (float S,float P) { float fdp=P/S; return fdp; } int main() { pulsador1.rise(&botonUP); pulsador2.rise(&botonDOWN); 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); 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 //"); } } } }