codigo sin probar
Dependencies: mbed CMSIS_DSP_5 TextLCD
main.cpp@5:31e97b4ad087, 2018-12-04 (annotated)
- Committer:
- carmenron
- Date:
- Tue Dec 04 11:53:46 2018 +0000
- Revision:
- 5:31e97b4ad087
- Parent:
- 4:bf6448061982
- Child:
- 6:84f33f8a9c9d
mmmm
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 | 3:bf56d25e3fda | 3 | |
carmenron | 3:bf56d25e3fda | 4 | Ticker timerCapturaMuestreo; |
carmenron | 3:bf56d25e3fda | 5 | Ticker timerMostrar; |
carmenron | 3:bf56d25e3fda | 6 | |
carmenron | 3:bf56d25e3fda | 7 | #define longitud 360 |
carmenron | 3:bf56d25e3fda | 8 | |
carmenron | 3:bf56d25e3fda | 9 | |
MIGUI | 0:fcb220c9cf97 | 10 | |
carmenron | 1:80ebc024450a | 11 | //BUFFERS DE VOLTAJE |
carmenron | 3:bf56d25e3fda | 12 | int16_t bufferA[longitud]; |
carmenron | 3:bf56d25e3fda | 13 | int16_t bufferB[longitud]; |
carmenron | 1:80ebc024450a | 14 | |
carmenron | 1:80ebc024450a | 15 | //BUFFERS DE INTENSIDAD |
carmenron | 3:bf56d25e3fda | 16 | int16_t bufferC [longitud]; |
carmenron | 3:bf56d25e3fda | 17 | int16_t bufferD [longitud]; |
carmenron | 1:80ebc024450a | 18 | |
carmenron | 1:80ebc024450a | 19 | // |
carmenron | 1:80ebc024450a | 20 | int contador=0 ; |
carmenron | 3:bf56d25e3fda | 21 | int nbuffer=1 ; |
carmenron | 1:80ebc024450a | 22 | int bufferlleno ; |
carmenron | 1:80ebc024450a | 23 | int mostrarDato=1 ; |
carmenron | 1:80ebc024450a | 24 | float rms ; |
carmenron | 1:80ebc024450a | 25 | float Vpp ; |
carmenron | 1:80ebc024450a | 26 | |
carmenron | 3:bf56d25e3fda | 27 | //punteros |
carmenron | 1:80ebc024450a | 28 | int32_t *pA ; |
carmenron | 1:80ebc024450a | 29 | int32_t *pB ; |
carmenron | 1:80ebc024450a | 30 | |
carmenron | 3:bf56d25e3fda | 31 | AnalogIn voltaje (A0); //ENTRADA DE VOLTAJE |
carmenron | 3:bf56d25e3fda | 32 | AnalogIn intensidad (A5); //ENTRADA DE INTENSIDAD |
carmenron | 1:80ebc024450a | 33 | |
carmenron | 1:80ebc024450a | 34 | void muestreo () //hay que programar que se ejecute la funcion cada X tiempo (siendo X el tiempo de muestreo) |
carmenron | 1:80ebc024450a | 35 | { |
carmenron | 3:bf56d25e3fda | 36 | if (nbuffer==1) { //si nbuffer=1 entonces se guardan los datos en el buffer A, else buffer B |
carmenron | 3:bf56d25e3fda | 37 | bufferA[contador]=voltaje.read () ; |
carmenron | 3:bf56d25e3fda | 38 | bufferC[contador]=intensidad.read () ; |
carmenron | 3:bf56d25e3fda | 39 | contador=contador+1 ; |
carmenron | 3:bf56d25e3fda | 40 | if (contador==longitud) { |
carmenron | 3:bf56d25e3fda | 41 | nbuffer=0 ; |
carmenron | 3:bf56d25e3fda | 42 | contador=0 ; |
carmenron | 3:bf56d25e3fda | 43 | bufferlleno=1; |
carmenron | 3:bf56d25e3fda | 44 | } |
carmenron | 3:bf56d25e3fda | 45 | } else { |
carmenron | 3:bf56d25e3fda | 46 | bufferB[contador]=voltaje.read () ; |
carmenron | 3:bf56d25e3fda | 47 | bufferD[contador]=intensidad.read () ; |
carmenron | 3:bf56d25e3fda | 48 | contador=contador+1 ; |
carmenron | 3:bf56d25e3fda | 49 | if (contador==longitud) { |
carmenron | 3:bf56d25e3fda | 50 | nbuffer=1 ; |
carmenron | 3:bf56d25e3fda | 51 | contador=0 ; |
carmenron | 3:bf56d25e3fda | 52 | bufferlleno=1; |
carmenron | 3:bf56d25e3fda | 53 | } |
carmenron | 1:80ebc024450a | 54 | } |
carmenron | 1:80ebc024450a | 55 | } |
carmenron | 1:80ebc024450a | 56 | |
carmenron | 1:80ebc024450a | 57 | |
carmenron | 1:80ebc024450a | 58 | // vamos a programar un boton como una entrada digital que nos permita seleccionar |
carmenron | 1:80ebc024450a | 59 | // el tipo de dato que queremos visualizar en la lcd |
carmenron | 1:80ebc024450a | 60 | |
carmenron | 1:80ebc024450a | 61 | //primero definimos como digitales las entradas en las que estarán los pulsadores |
carmenron | 1:80ebc024450a | 62 | |
carmenron | 3:bf56d25e3fda | 63 | InterruptIn pulsador1(PC_13); |
carmenron | 3:bf56d25e3fda | 64 | InterruptIn pulsador2 (D2); |
MIGUI | 0:fcb220c9cf97 | 65 | |
carmenron | 3:bf56d25e3fda | 66 | void botonUP () |
carmenron | 1:80ebc024450a | 67 | { |
carmenron | 3:bf56d25e3fda | 68 | mostrarDato+=1; |
carmenron | 3:bf56d25e3fda | 69 | if (mostrarDato==9) { |
carmenron | 3:bf56d25e3fda | 70 | mostrarDato=1; |
carmenron | 3:bf56d25e3fda | 71 | } |
MIGUI | 0:fcb220c9cf97 | 72 | } |
carmenron | 1:80ebc024450a | 73 | |
carmenron | 3:bf56d25e3fda | 74 | void botonDOWN () |
carmenron | 3:bf56d25e3fda | 75 | { |
carmenron | 3:bf56d25e3fda | 76 | mostrarDato-=1; |
carmenron | 3:bf56d25e3fda | 77 | if (mostrarDato==0) { |
carmenron | 3:bf56d25e3fda | 78 | mostrarDato=8; |
carmenron | 3:bf56d25e3fda | 79 | } |
carmenron | 3:bf56d25e3fda | 80 | } |
carmenron | 1:80ebc024450a | 81 | |
carmenron | 1:80ebc024450a | 82 | void mostrar () |
carmenron | 1:80ebc024450a | 83 | { |
carmenron | 3:bf56d25e3fda | 84 | if (mostrarDato==1) { |
carmenron | 3:bf56d25e3fda | 85 | printf("voltaje:\n"); |
carmenron | 3:bf56d25e3fda | 86 | } else if (mostrarDato==2) { |
carmenron | 3:bf56d25e3fda | 87 | printf("intensidad:\n"); |
carmenron | 3:bf56d25e3fda | 88 | } else if (mostrarDato==3) { |
carmenron | 3:bf56d25e3fda | 89 | printf("potencia activa:\n"); |
carmenron | 3:bf56d25e3fda | 90 | } else if (mostrarDato==4) { |
carmenron | 3:bf56d25e3fda | 91 | printf("potencia reactiva:\n"); |
carmenron | 3:bf56d25e3fda | 92 | } else if (mostrarDato==5) { |
carmenron | 3:bf56d25e3fda | 93 | printf("potencia aparente:\n"); |
carmenron | 3:bf56d25e3fda | 94 | } else if (mostrarDato==6) { |
carmenron | 3:bf56d25e3fda | 95 | printf("energia activa:\n"); |
carmenron | 3:bf56d25e3fda | 96 | } else if (mostrarDato==7) { |
carmenron | 3:bf56d25e3fda | 97 | printf("energia reactiva:\n"); |
carmenron | 3:bf56d25e3fda | 98 | } else if (mostrarDato==8) { |
carmenron | 3:bf56d25e3fda | 99 | printf("factor de potencia:\n"); |
carmenron | 3:bf56d25e3fda | 100 | } |
carmenron | 3:bf56d25e3fda | 101 | |
carmenron | 3:bf56d25e3fda | 102 | |
carmenron | 3:bf56d25e3fda | 103 | } |
carmenron | 3:bf56d25e3fda | 104 | |
carmenron | 3:bf56d25e3fda | 105 | |
carmenron | 3:bf56d25e3fda | 106 | float calcularRMS(int16_t *datos, int N); //definicion del tipo de variable que devuelve la funcion |
carmenron | 3:bf56d25e3fda | 107 | float calcularRMS(int16_t *datos, int N) // definicion de los estamentos de la funcion |
carmenron | 3:bf56d25e3fda | 108 | { |
carmenron | 3:bf56d25e3fda | 109 | float32_t k=7.629394531250000e-05; |
carmenron | 3:bf56d25e3fda | 110 | int64_t producto=0; |
carmenron | 3:bf56d25e3fda | 111 | |
carmenron | 3:bf56d25e3fda | 112 | for (int n=0; n<N; n++) { |
carmenron | 3:bf56d25e3fda | 113 | producto+=datos[n]*datos[n]; |
carmenron | 3:bf56d25e3fda | 114 | } |
carmenron | 3:bf56d25e3fda | 115 | return sqrt((float(producto)/N))*k; |
carmenron | 3:bf56d25e3fda | 116 | |
carmenron | 3:bf56d25e3fda | 117 | } |
carmenron | 3:bf56d25e3fda | 118 | |
carmenron | 3:bf56d25e3fda | 119 | float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N); |
carmenron | 3:bf56d25e3fda | 120 | float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N) |
carmenron | 3:bf56d25e3fda | 121 | { |
carmenron | 3:bf56d25e3fda | 122 | int32_t sumatorio=0; |
carmenron | 3:bf56d25e3fda | 123 | for (int16_t n=0; n<N; n++) |
carmenron | 1:80ebc024450a | 124 | { |
carmenron | 3:bf56d25e3fda | 125 | sumatorio+=sumatorio+datos1[N]*datos2[N]; |
carmenron | 3:bf56d25e3fda | 126 | } |
carmenron | 3:bf56d25e3fda | 127 | return datos1[N]*datos2[N]/N; |
carmenron | 3:bf56d25e3fda | 128 | } |
carmenron | 3:bf56d25e3fda | 129 | |
carmenron | 5:31e97b4ad087 | 130 | float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P); |
carmenron | 5:31e97b4ad087 | 131 | float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P) |
carmenron | 5:31e97b4ad087 | 132 | { |
carmenron | 5:31e97b4ad087 | 133 | float64_t S=Vrms*Irms; |
carmenron | 5:31e97b4ad087 | 134 | float64_t Q=sqrt(S-P); |
carmenron | 5:31e97b4ad087 | 135 | } |
carmenron | 5:31e97b4ad087 | 136 | |
carmenron | 5:31e97b4ad087 | 137 | |
carmenron | 3:bf56d25e3fda | 138 | float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N); |
carmenron | 3:bf56d25e3fda | 139 | float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N) |
carmenron | 3:bf56d25e3fda | 140 | { |
carmenron | 5:31e97b4ad087 | 141 | return 0; |
carmenron | 3:bf56d25e3fda | 142 | } |
carmenron | 3:bf56d25e3fda | 143 | |
carmenron | 3:bf56d25e3fda | 144 | |
carmenron | 3:bf56d25e3fda | 145 | |
carmenron | 3:bf56d25e3fda | 146 | int main() |
carmenron | 3:bf56d25e3fda | 147 | { |
carmenron | 3:bf56d25e3fda | 148 | pulsador1.rise(&botonUP); |
carmenron | 3:bf56d25e3fda | 149 | pulsador2.rise(&botonDOWN); |
carmenron | 4:bf6448061982 | 150 | timerCapturaMuestreo.attach_us(&muestreo,200); |
carmenron | 3:bf56d25e3fda | 151 | timerMostrar.attach(&mostrar,1.0); |
carmenron | 3:bf56d25e3fda | 152 | while(1) { |
carmenron | 3:bf56d25e3fda | 153 | if (bufferlleno==1) { |
carmenron | 3:bf56d25e3fda | 154 | bufferlleno=0; |
carmenron | 3:bf56d25e3fda | 155 | if (nbuffer==0) { |
carmenron | 3:bf56d25e3fda | 156 | float Vrms=calcularRMS(bufferA,longitud); |
carmenron | 3:bf56d25e3fda | 157 | } else { |
carmenron | 3:bf56d25e3fda | 158 | float Vrms=calcularRMS(bufferB,longitud); |
carmenron | 1:80ebc024450a | 159 | } |
carmenron | 1:80ebc024450a | 160 | } |
carmenron | 1:80ebc024450a | 161 | } |
carmenron | 1:80ebc024450a | 162 | } |
carmenron | 1:80ebc024450a | 163 | |
carmenron | 1:80ebc024450a | 164 |