ddd

Dependencies:   mbed CMSIS_DSP_5

main.cpp

Committer:
daniferca
Date:
2021-12-09
Revision:
9:6fcbc011ef60
Parent:
8:99642487de6f
Child:
10:d475a24f4530

File content as of revision 9:6fcbc011ef60:

#include "mbed.h"
#include "datos.h"

#define longitudTrama 500

Timer timer;
float resultado;
int tiempo;

struct estructuraMedidas 
{ 
   float vrms; 
   float irms;  
   float potenciaActiva; 
   float potenciaReactiva;  
   float potenciaAparente;  
   float energiaConsumida;
   float factorDePotencia;
};

float calcularRMS(int16_t *datos, int longitud);

void calcularDatos(int16_t *datosV, int16_t *datosI, int longitud, estructuraMedidas *medidas);


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);
    timer.stop();
    printf("**** Datos calculados en %d us ****\n",timer.read_us());
    printf("**** El valor Vrms es %f ****\n",medidas.vrms);
    printf("**** El valor Irms es %f ****\n",medidas.irms);
    printf("**** La potencia activa es %f ****\n",medidas.potenciaActiva);
    printf("**** La potencia reactiva es %f ****\n",medidas.potenciaReactiva);
    printf("**** La potencia aparente es %f ****\n",medidas.potenciaAparente);
    printf("**** La energia consumida es %f ****\n",medidas.energiaConsumida);
    printf("**** El factor de potencia es es %f ****\n",medidas.factorDePotencia);

}

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;
   

   
   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);

        
        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;
        
        
        
        
        
}