codigo sin probar
Dependencies: mbed CMSIS_DSP_5 TextLCD
main.cpp@7:566a2dd5dddd, 2018-12-11 (annotated)
- 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?
User | Revision | Line number | New 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 |