ddd

Dependencies:   mbed CMSIS_DSP_5

Files at this revision

API Documentation at this revision

Comitter:
davidmateos
Date:
Sat Dec 18 17:19:26 2021 +0000
Parent:
9:6fcbc011ef60
Commit message:
ddd

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 6fcbc011ef60 -r d475a24f4530 main.cpp
--- a/main.cpp	Thu Dec 09 19:50:42 2021 +0000
+++ b/main.cpp	Sat Dec 18 17:19:26 2021 +0000
@@ -7,15 +7,14 @@
 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 +24,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,71 +51,65 @@
 
 float calcularRMS(int16_t *datos, int longitud)
 {
-  float sumatorio;
-   
-   const float constante =6.6/65536.0*6.6/65536.0;
-   int16_t dato;
-   int64_t sum = 0;
-   int32_t mult;
-   
+    float sumatorio;
+
+    const float constante =6.6/65536.0*6.6/65536.0;
+    int16_t dato;
+    int64_t sum = 0;
+    int32_t mult;
+
+
 
-   
-   for (int n = 0; n<longitud;n++){
-       dato = datos[n];
-       mult=dato*dato;
-       sum+=mult; 
-        }
-        
-        sumatorio = sum*constante/longitud;
-        return sqrt(sumatorio);
-    
+    for (int n = 0; n<longitud; n++) {
+        dato = datos[n];
+        mult=dato*dato;
+        sum+=mult;
+    }
+
+    sumatorio = sum*constante/longitud;
+    return sqrt(sumatorio);
+
 }
 
 void calcularDatos(int16_t *datosV, int16_t *datosI, int longitud, estructuraMedidas *medidas)
 {
-    
-    float sumatorio2 = 0.0;
-
-   
-   
-   for (int n = 0; n<longitud;n++){
-       sumatorio2 = sumatorio2 + (datosI[n]*6.6/65536.0)*(datosI[n]*6.6/65536.0);
-        }
-        sumatorio2 = sumatorio2/longitud;
-        (*medidas).irms = sqrt(sumatorio2);
-
-        
-          float sumatorio3 = 0.0;
-   
-   
-   
-   for (int n = 0; n<longitud;n++){
-       sumatorio3 = sumatorio3 + (datosV[n]*6.6/65536.0)*(datosV[n]*6.6/65536.0);
-        }
-        sumatorio3 = sumatorio3/longitud;
-        (*medidas).vrms = sqrt(sumatorio3);
+    int16_t voltajes;
+    int32_t product_volt;
+    int64_t sumatorio_volt=0;
+    float resultado_v;
+    int16_t intens;
+    int32_t product_i;
+    int64_t sumatorio_i=0;
+    float resultado_i;
+    int32_t pot;
+    int64_t sumatorio_pot=0;
+    float resultado_pot;
+    float cte=6.6/65536.0*6.6/65536.0;
 
-        
-        float sumatorio4 = 0.0;
-        
-        sumatorio4 = sqrt(sumatorio2)*sqrt(sumatorio3);
-        (*medidas).potenciaAparente = sumatorio4;
-        
-        
-        
-        
-        
-        (*medidas).potenciaActiva = sumatorio2*sumatorio3;
-        
-  
-        
-        (*medidas).potenciaReactiva = sqrt((sumatorio4)*(sumatorio4))-((sumatorio2*sumatorio3)*(sumatorio2*sumatorio3));
-        
-        (*medidas).factorDePotencia = (sumatorio2*sumatorio3)/sumatorio4;
-        
-        
-        
-        
-        
-}    
+    for (int n=0;n<longitud;n++){
+            
+            voltajes=datosV[n];
+            product_volt=voltajes*voltajes;
+            sumatorio_volt+=product_volt;
+            
+            intens=datosI[n];
+            product_i=intens*intens;
+            sumatorio_i+=product_i;
+            
+            pot=voltajes*intens;
+            sumatorio_pot+=pot;
+            
+        }
+        resultado_v=sumatorio_volt*cte/longitud;
+        resultado_i=sumatorio_i*cte/longitud;
+        resultado_pot=sumatorio_pot*cte/longitud;
+    
+    (*medidas).vrms=sqrt(resultado_v);    
+    (*medidas).irms=sqrt(resultado_i);
+    (*medidas).potenciaActiva=resultado_pot;
+    (*medidas).potenciaAparente=(*medidas).vrms*(*medidas).irms;
+    (*medidas).potenciaReactiva=sqrt(-((*medidas).potenciaActiva*(*medidas).potenciaActiva)+((*medidas).potenciaAparente*(*medidas).potenciaAparente));
+    (*medidas).factorDePotencia=(*medidas).potenciaActiva/(*medidas).potenciaAparente;
 
+}
+