codigo sin probar

Dependencies:   mbed CMSIS_DSP_5 TextLCD

Committer:
MIGUI
Date:
Tue Dec 11 17:41:46 2018 +0000
Revision:
7:566a2dd5dddd
Parent:
6:84f33f8a9c9d
PROGRAMA DE PRUEBA PARA EL PROYECTO DEL MASTER. SE PUEDEN INTRODUCIR LOS VALORES DE MUESTRO DE FORMA FICTICIA METIENDOLOS EN LOS FICHEROS DATOS DE MUESTRO.H

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MIGUI 0:fcb220c9cf97 1 #include "mbed.h"
carmenron 3:bf56d25e3fda 2 #include "arm_math.h"
carmenron 6:84f33f8a9c9d 3 #include "TextLCD.h"
carmenron 3:bf56d25e3fda 4
MIGUI 7:566a2dd5dddd 5 #include "datos_muestreo_corriente.h"
MIGUI 7:566a2dd5dddd 6 #include "datos_muestreo_voltaje.h"
MIGUI 7:566a2dd5dddd 7
carmenron 3:bf56d25e3fda 8 Ticker timerCapturaMuestreo;
carmenron 3:bf56d25e3fda 9 Ticker timerMostrar;
carmenron 3:bf56d25e3fda 10
carmenron 6:84f33f8a9c9d 11 Serial pc(USBTX, USBRX); // tx, rx
carmenron 6:84f33f8a9c9d 12
MIGUI 7:566a2dd5dddd 13 #define longitud 100
carmenron 3:bf56d25e3fda 14
carmenron 6:84f33f8a9c9d 15 float Vrms;
carmenron 6:84f33f8a9c9d 16 float Irms;
carmenron 6:84f33f8a9c9d 17 float P;
carmenron 6:84f33f8a9c9d 18 float Q;
carmenron 6:84f33f8a9c9d 19 float S;
carmenron 6:84f33f8a9c9d 20 float FDP;
MIGUI 0:fcb220c9cf97 21
carmenron 1:80ebc024450a 22 //BUFFERS DE VOLTAJE
MIGUI 7:566a2dd5dddd 23 float bufferA[longitud];
MIGUI 7:566a2dd5dddd 24 float bufferB[longitud];
carmenron 1:80ebc024450a 25
carmenron 1:80ebc024450a 26 //BUFFERS DE INTENSIDAD
MIGUI 7:566a2dd5dddd 27 float bufferC [longitud];
MIGUI 7:566a2dd5dddd 28 float bufferD [longitud];
carmenron 1:80ebc024450a 29
carmenron 1:80ebc024450a 30 //
carmenron 1:80ebc024450a 31 int contador=0 ;
carmenron 3:bf56d25e3fda 32 int nbuffer=1 ;
carmenron 1:80ebc024450a 33 int bufferlleno ;
carmenron 1:80ebc024450a 34 int mostrarDato=1 ;
carmenron 1:80ebc024450a 35 float rms ;
carmenron 1:80ebc024450a 36 float Vpp ;
carmenron 1:80ebc024450a 37
carmenron 3:bf56d25e3fda 38 //punteros
carmenron 6:84f33f8a9c9d 39 int16_t *pA ;
carmenron 6:84f33f8a9c9d 40 int16_t *pB ;
carmenron 1:80ebc024450a 41
carmenron 1:80ebc024450a 42 void muestreo () //hay que programar que se ejecute la funcion cada X tiempo (siendo X el tiempo de muestreo)
carmenron 1:80ebc024450a 43 {
carmenron 3:bf56d25e3fda 44 if (nbuffer==1) { //si nbuffer=1 entonces se guardan los datos en el buffer A, else buffer B
MIGUI 7:566a2dd5dddd 45 bufferA[contador]=muestreo_voltaje [contador]*1.971327996035224e+02-3.252691193458119e+02 ; //VOLTAJE
MIGUI 7:566a2dd5dddd 46 bufferC[contador]=muestreo_intensidad [contador]*7.453035901834493-12.297509238026914 ; //INTENSIDAD
carmenron 3:bf56d25e3fda 47 contador=contador+1 ;
carmenron 3:bf56d25e3fda 48 if (contador==longitud) {
carmenron 3:bf56d25e3fda 49 nbuffer=0 ;
carmenron 3:bf56d25e3fda 50 contador=0 ;
carmenron 3:bf56d25e3fda 51 bufferlleno=1;
carmenron 3:bf56d25e3fda 52 }
carmenron 3:bf56d25e3fda 53 } else {
MIGUI 7:566a2dd5dddd 54 bufferB[contador]=muestreo_voltaje [contador]*1.971327996035224e+02-3.252691193458119e+02; //VOLTAJE ;
MIGUI 7:566a2dd5dddd 55 bufferD[contador]=muestreo_intensidad [contador]*7.453035901834493-12.297509238026914 ; //INTENSIDAD ;
carmenron 3:bf56d25e3fda 56 contador=contador+1 ;
carmenron 3:bf56d25e3fda 57 if (contador==longitud) {
carmenron 3:bf56d25e3fda 58 nbuffer=1 ;
carmenron 3:bf56d25e3fda 59 contador=0 ;
carmenron 3:bf56d25e3fda 60 bufferlleno=1;
carmenron 3:bf56d25e3fda 61 }
carmenron 1:80ebc024450a 62 }
carmenron 1:80ebc024450a 63 }
carmenron 1:80ebc024450a 64
carmenron 1:80ebc024450a 65
carmenron 1:80ebc024450a 66 // vamos a programar un boton como una entrada digital que nos permita seleccionar
carmenron 1:80ebc024450a 67 // el tipo de dato que queremos visualizar en la lcd
carmenron 1:80ebc024450a 68
carmenron 1:80ebc024450a 69 //primero definimos como digitales las entradas en las que estarán los pulsadores
carmenron 1:80ebc024450a 70
carmenron 3:bf56d25e3fda 71 InterruptIn pulsador1(PC_13);
carmenron 3:bf56d25e3fda 72 InterruptIn pulsador2 (D2);
MIGUI 0:fcb220c9cf97 73
carmenron 3:bf56d25e3fda 74 void botonUP ()
carmenron 1:80ebc024450a 75 {
carmenron 3:bf56d25e3fda 76 mostrarDato+=1;
carmenron 3:bf56d25e3fda 77 if (mostrarDato==9) {
carmenron 3:bf56d25e3fda 78 mostrarDato=1;
carmenron 3:bf56d25e3fda 79 }
MIGUI 0:fcb220c9cf97 80 }
carmenron 1:80ebc024450a 81
carmenron 3:bf56d25e3fda 82 void botonDOWN ()
carmenron 3:bf56d25e3fda 83 {
carmenron 3:bf56d25e3fda 84 mostrarDato-=1;
carmenron 3:bf56d25e3fda 85 if (mostrarDato==0) {
carmenron 3:bf56d25e3fda 86 mostrarDato=8;
carmenron 3:bf56d25e3fda 87 }
carmenron 3:bf56d25e3fda 88 }
carmenron 1:80ebc024450a 89
carmenron 1:80ebc024450a 90 void mostrar ()
carmenron 1:80ebc024450a 91 {
carmenron 3:bf56d25e3fda 92 }
carmenron 3:bf56d25e3fda 93
carmenron 3:bf56d25e3fda 94
MIGUI 7:566a2dd5dddd 95 float calcularRMS(float *datos, int N); //definicion del tipo de variable que devuelve la funcion
MIGUI 7:566a2dd5dddd 96 float calcularRMS(float *datos, int N) // definicion de los estamentos de la funcion
carmenron 3:bf56d25e3fda 97 {
MIGUI 7:566a2dd5dddd 98 float32_t producto=0;
MIGUI 7:566a2dd5dddd 99
MIGUI 7:566a2dd5dddd 100 for (int n=0; n<longitud; n++) {
carmenron 3:bf56d25e3fda 101 producto+=datos[n]*datos[n];
carmenron 3:bf56d25e3fda 102 }
MIGUI 7:566a2dd5dddd 103 return sqrt((float(producto)/longitud));
MIGUI 7:566a2dd5dddd 104
carmenron 3:bf56d25e3fda 105 }
carmenron 3:bf56d25e3fda 106
MIGUI 7:566a2dd5dddd 107 float calcular_potencia_activa(float *datos1,float *datos2, int N);
MIGUI 7:566a2dd5dddd 108 float calcular_potencia_activa(float *datos1,float *datos2, int N)
carmenron 3:bf56d25e3fda 109 {
MIGUI 7:566a2dd5dddd 110 float sumatorio=0;
carmenron 3:bf56d25e3fda 111 for (int16_t n=0; n<N; n++)
carmenron 1:80ebc024450a 112 {
MIGUI 7:566a2dd5dddd 113 sumatorio+=datos1[n]*datos2[n];
carmenron 3:bf56d25e3fda 114 }
MIGUI 7:566a2dd5dddd 115 return sumatorio/N;
carmenron 3:bf56d25e3fda 116 }
carmenron 3:bf56d25e3fda 117
carmenron 6:84f33f8a9c9d 118 float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P,float S);
carmenron 6:84f33f8a9c9d 119 float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P,float S)
carmenron 5:31e97b4ad087 120 {
carmenron 6:84f33f8a9c9d 121 float Q=sqrt(S-P);
carmenron 6:84f33f8a9c9d 122 return Q;
carmenron 6:84f33f8a9c9d 123 }
carmenron 6:84f33f8a9c9d 124
carmenron 6:84f33f8a9c9d 125
carmenron 6:84f33f8a9c9d 126 float calcular_potencia_aparente(float Vrms,float Irms);
carmenron 6:84f33f8a9c9d 127 float calcular_potencia_aparente(float Vrms,float Irms)
carmenron 6:84f33f8a9c9d 128 {
carmenron 6:84f33f8a9c9d 129 float S=Vrms*Irms;
carmenron 6:84f33f8a9c9d 130 return S;
carmenron 5:31e97b4ad087 131 }
carmenron 5:31e97b4ad087 132
carmenron 5:31e97b4ad087 133
MIGUI 7:566a2dd5dddd 134 float calcular_potencia_reactiva(float *datos1,float *datos2, int N);
MIGUI 7:566a2dd5dddd 135 float calcular_potencia_reactiva(float *datos1,float *datos2, int N)
carmenron 3:bf56d25e3fda 136 {
carmenron 5:31e97b4ad087 137 return 0;
carmenron 3:bf56d25e3fda 138 }
carmenron 3:bf56d25e3fda 139
carmenron 6:84f33f8a9c9d 140 float fdp (float S,float P);
carmenron 6:84f33f8a9c9d 141 float fdp (float S,float P)
carmenron 6:84f33f8a9c9d 142 {
carmenron 6:84f33f8a9c9d 143 float fdp=P/S;
carmenron 6:84f33f8a9c9d 144 return fdp;
carmenron 6:84f33f8a9c9d 145 }
carmenron 3:bf56d25e3fda 146
carmenron 3:bf56d25e3fda 147
carmenron 3:bf56d25e3fda 148 int main()
carmenron 3:bf56d25e3fda 149 {
carmenron 3:bf56d25e3fda 150 pulsador1.rise(&botonUP);
carmenron 3:bf56d25e3fda 151 pulsador2.rise(&botonDOWN);
carmenron 4:bf6448061982 152 timerCapturaMuestreo.attach_us(&muestreo,200);
carmenron 3:bf56d25e3fda 153 timerMostrar.attach(&mostrar,1.0);
carmenron 3:bf56d25e3fda 154 while(1) {
MIGUI 7:566a2dd5dddd 155 wait (4);
carmenron 3:bf56d25e3fda 156 if (bufferlleno==1) {
carmenron 3:bf56d25e3fda 157 bufferlleno=0;
carmenron 6:84f33f8a9c9d 158 if (nbuffer==0)
carmenron 6:84f33f8a9c9d 159 {
carmenron 3:bf56d25e3fda 160 float Vrms=calcularRMS(bufferA,longitud);
MIGUI 7:566a2dd5dddd 161 pc.printf("voltaje:\n%f",Vrms,"\t //");
carmenron 6:84f33f8a9c9d 162 float Irms=calcularRMS(bufferC,longitud);
MIGUI 7:566a2dd5dddd 163 pc.printf("intensidad:\n%f",Irms,"\t //");
MIGUI 7:566a2dd5dddd 164 float P=calcular_potencia_activa(bufferA,bufferC,longitud);
MIGUI 7:566a2dd5dddd 165 pc.printf("potencia activa:\n%f",P,"\t //");
MIGUI 7:566a2dd5dddd 166 float S=calcular_potencia_aparente(Vrms,Irms);
MIGUI 7:566a2dd5dddd 167 pc.printf("potencia aparente:\n%f",S,"\t //");
MIGUI 7:566a2dd5dddd 168 float Q=calcular_potencia_reactiva_MAL(Vrms,Irms,P,S);
MIGUI 7:566a2dd5dddd 169 pc.printf("potencia reactiva:\n%f",Q,"\t //");
MIGUI 7:566a2dd5dddd 170 float FDP=fdp(S,P);
MIGUI 7:566a2dd5dddd 171 pc.printf("FDP:\n%f",FDP,"\t //");
carmenron 6:84f33f8a9c9d 172 }
carmenron 6:84f33f8a9c9d 173
carmenron 6:84f33f8a9c9d 174 else
carmenron 6:84f33f8a9c9d 175 {
carmenron 3:bf56d25e3fda 176 float Vrms=calcularRMS(bufferB,longitud);
MIGUI 7:566a2dd5dddd 177 pc.printf("voltaje:\n%f",Vrms,"\t //");
carmenron 6:84f33f8a9c9d 178 float Irms=calcularRMS(bufferD,longitud);
MIGUI 7:566a2dd5dddd 179 pc.printf("intensidad:\n%f",Irms,"\t //");
carmenron 6:84f33f8a9c9d 180 float P=calcular_potencia_activa(bufferB,bufferD,longitud);
MIGUI 7:566a2dd5dddd 181 pc.printf("potencia activa:\n%f",P,"\t //");
MIGUI 7:566a2dd5dddd 182 float S=calcular_potencia_aparente(Vrms,Irms);
MIGUI 7:566a2dd5dddd 183 pc.printf("potencia aparente:\n%f",S,"\t //");
MIGUI 7:566a2dd5dddd 184 float Q=calcular_potencia_reactiva_MAL(Vrms,Irms,P,S);
MIGUI 7:566a2dd5dddd 185 pc.printf("potencia reactiva:\n%f",Q,"\t //");
MIGUI 7:566a2dd5dddd 186 float FDP=fdp(S,P);
MIGUI 7:566a2dd5dddd 187 pc.printf("FDP:\n%f",FDP,"\t //");
carmenron 1:80ebc024450a 188 }
MIGUI 7:566a2dd5dddd 189 }
carmenron 1:80ebc024450a 190 }
carmenron 1:80ebc024450a 191 }
carmenron 1:80ebc024450a 192
carmenron 1:80ebc024450a 193