JHJ / Mbed 2 deprecated ejercicioVrms2

Dependencies:   mbed CMSIS_DSP_5

Files at this revision

API Documentation at this revision

Comitter:
jesusnavarro
Date:
Fri Oct 25 10:50:22 2019 +0000
Parent:
8:99642487de6f
Commit message:
ejercicio vrms, irms...

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 99642487de6f -r 4e97d55bba0b main.cpp
--- a/main.cpp	Thu Oct 17 21:12:26 2019 +0000
+++ b/main.cpp	Fri Oct 25 10:50:22 2019 +0000
@@ -2,20 +2,20 @@
 #include "datos.h"
 
 #define longitudTrama 500
+#define frecuencia_muestreo 1000 // añadido por nosotros, 1000 muestreos/segundo
 
 Timer timer;
 float resultado;
 int tiempo;
 
-struct estructuraMedidas 
-{ 
-   float vrms; 
-   float irms;  
-   float potenciaActiva; 
-   float potenciaReactiva;  
-   float potenciaAparente;  
-   float energiaConsumida;
-   float factorDePotencia;
+struct estructuraMedidas {
+    float vrms;
+    float irms;
+    float potenciaActiva;
+    float potenciaReactiva;
+    float potenciaAparente;
+    float energiaConsumida;
+    float factorDePotencia;
 };
 
 float calcularRMS(int16_t *datos, int longitud);
@@ -25,16 +25,16 @@
 
 int main()
 {
- 
+
     timer.reset();
     timer.start();
     resultado=calcularRMS(datos, longitudTrama);
     timer.stop();
     printf("****El valor Vrms es %f calculado en %d us ****\n",resultado,timer.read_us());
-    
+
     estructuraMedidas medidas;
     medidas.energiaConsumida=0;
-    
+
     timer.reset();
     timer.start();
     calcularDatos(datosV,datosI,longitudTrama,&medidas);
@@ -52,11 +52,40 @@
 
 float calcularRMS(int16_t *datos, int longitud)
 {
-    return 0.0;
+    float constante=0.1007080078125e-3;  //6.6/(2^16));
+    int64_t sumatorio=0; // añadido
+    for(int i=0; i<longitud; i++) {      // bucle for añadido
+        sumatorio = sumatorio+(datos[i]*datos[i]);
+    }
+
+    return constante*sqrt(((float)sumatorio)/longitud); // para calcular Vrms
+
 }
 
 void calcularDatos(int16_t *datosV, int16_t *datosI, int longitud, estructuraMedidas *medidas)
 {
-    
-}    
+    //(*medidas).POTENCA // PARA ACCEDER A LA POTENCIA CON EL PUNTERO
+    float constante = 0.1007080078125e-3; // (6.6/2^16)
+    float constanteP_ac = 1.014210283756256103515625e-8;  // (6.6/2^16)^2
+    int64_t sumatorioV = 0;
+    int64_t sumatorioI = 0;
+    int64_t sumatorioP_ac = 0;
+
+    for(int i=0; i<longitud; i++) {
+        sumatorioV = sumatorioV+(datosV[i]*datosV[i]);
+        sumatorioI = sumatorioI+(datosI[i]*datosI[i]);
+        sumatorioP_ac = sumatorioP_ac+datosV[i]*datosI[i];
 
+    }
+
+    medidas->vrms = constante*sqrt(((float)sumatorioV)/longitud) ;
+    medidas->irms = constante*sqrt(((float)sumatorioI)/longitud); // para calcular Irms
+    medidas->potenciaActiva = constanteP_ac*((float)sumatorioP_ac)/longitud;
+    medidas->potenciaAparente = (medidas->vrms)*(medidas->irms);
+    medidas->potenciaReactiva = sqrt((medidas->potenciaAparente)*(medidas->potenciaAparente)-(medidas->potenciaActiva)*(medidas->potenciaActiva));
+    medidas->energiaConsumida = (medidas->potenciaActiva)/frecuencia_muestreo;
+    medidas->factorDePotencia = (medidas->potenciaActiva)/(medidas->potenciaAparente);
+
+
+}
+