codigo sin probar

Dependencies:   mbed CMSIS_DSP_5 TextLCD

Revision:
7:566a2dd5dddd
Parent:
6:84f33f8a9c9d
--- a/main.cpp	Tue Dec 11 10:53:55 2018 +0000
+++ b/main.cpp	Tue Dec 11 17:41:46 2018 +0000
@@ -2,12 +2,15 @@
 #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 360
+#define longitud 100
 
 float Vrms;
 float Irms;
@@ -17,12 +20,12 @@
 float FDP;
 
 //BUFFERS DE VOLTAJE
-int16_t bufferA[longitud];
-int16_t bufferB[longitud];
+float bufferA[longitud];
+float bufferB[longitud];
 
 //BUFFERS DE INTENSIDAD
-int16_t bufferC [longitud];
-int16_t bufferD [longitud];
+float bufferC [longitud];
+float bufferD [longitud];
 
 //
 int contador=0 ;
@@ -36,14 +39,11 @@
 int16_t *pA ;
 int16_t *pB ;
 
-AnalogIn voltaje (A0); //ENTRADA DE VOLTAJE
-AnalogIn intensidad (A5); //ENTRADA DE INTENSIDAD
-
 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]=voltaje.read ()*197-325 ; //VOLTAJE
-        bufferC[contador]=intensidad.read ()*8-14 ;  //INTENSIDAD
+        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 ;
@@ -51,8 +51,8 @@
             bufferlleno=1;
         }
     } else {
-        bufferB[contador]=voltaje.read ()*197-325 ; //VOLTAJE ;
-        bufferD[contador]=intensidad.read ()*8-14 ;  //INTENSIDAD ;
+        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 ;
@@ -89,48 +89,30 @@
 
 void mostrar ()
 {
-    if (mostrarDato==1) {
-        pc.printf("voltaje:\n%f",Vrms);
-    } else if (mostrarDato==2) {
-        pc.printf("intensidad:\n%f",Irms);
-    } else if  (mostrarDato==3) {
-        pc.printf("potencia activa:\n%f",P);
-    } else if (mostrarDato==4) {
-        pc.printf("potencia reactiva:\n%f",Q);
-    } else if (mostrarDato==5) {
-        pc.printf("potencia aparente:\n%f",S);
-    } else if (mostrarDato==6) {
-        pc.printf("energia activa:\n%f",0);
-    } else if (mostrarDato==7) {
-        pc.printf("energia reactiva:\n%f",0);
-    } else if (mostrarDato==8) {
-        pc.printf("factor de potencia:\n%f",FDP);
-    }
 }
 
 
-float calcularRMS(int16_t *datos, int N); //definicion del tipo de variable que devuelve la funcion
-float calcularRMS(int16_t *datos, int N)   // definicion de los estamentos de la funcion
+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 k=5.035400390625000e-05;
-    int64_t producto=0;
-
-    for (int n=0; n<N; n++) {
+    float32_t producto=0;
+    
+    for (int n=0; n<longitud; n++) {
         producto+=datos[n]*datos[n];
     }
-    return sqrt((float(producto)/N))*k;
-
+    return sqrt((float(producto)/longitud));
+    
 }
 
-float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N);
-float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N)
+float calcular_potencia_activa(float *datos1,float *datos2, int N);
+float calcular_potencia_activa(float *datos1,float *datos2, int N)
 {
-    int32_t sumatorio=0;
+    float sumatorio=0;
     for (int16_t n=0; n<N; n++)
     {
-        sumatorio+=sumatorio+datos1[N]*datos2[N];
+        sumatorio+=datos1[n]*datos2[n];
     }
-    return datos1[N]*datos2[N]/N;
+    return sumatorio/N;
 }
     
 float calcular_potencia_reactiva_MAL(float Vrms,float Irms,float P,float S);
@@ -149,8 +131,8 @@
 }
     
     
-float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N);
-float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N)
+float calcular_potencia_reactiva(float *datos1,float *datos2, int N);
+float calcular_potencia_reactiva(float *datos1,float *datos2, int N)
 {
     return 0;
 }
@@ -170,27 +152,41 @@
     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);
-                float P=calcular_potencia_activa(bufferA,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 //");
             }
-            
-            float S=calcular_potencia_aparente(Vrms,Irms);
-            float Q=calcular_potencia_reactiva_MAL(Vrms,Irms,P,S);
-            float FDP=fdp(S,P);
-        }
+            }        
     }
 }