codigo sin probar

Dependencies:   mbed CMSIS_DSP_5 TextLCD

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?

UserRevisionLine numberNew 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