hOLA AGATHE

Dependencies:   mbed CMSIS_DSP_5

main.cpp

Committer:
aitor01
Date:
2021-12-16
Revision:
10:4ee4ca605836
Parent:
9:7460651183ac

File content as of revision 10:4ee4ca605836:

#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 cont = 6.6/65536.0*6.6/65536.0;
    int16_t dato=0.0;
    float dato_1=0.0;
    int32_t producto=0.0;
    int64_t sumatorio=0.0;

    for (int n=0; n<longitud; n++) {
        dato=datos[n];
        producto=dato*dato;
        sumatorio+= producto;
    }
    dato_1=cont*sumatorio/longitud;

    return sqrt(dato_1);
}

void calcularDatos(int16_t *datosV, int16_t *datosI, int longitud, estructuraMedidas *medidas)
{
    float cont =6.6/65536.0*6.6/65536.0;
    int16_t dato_v=0.0;
    int32_t mult_v=0.0;
    int64_t sumatorio_v=0.0;
    float emaitza_v=0.0;
    int32_t dato_p=0.0;
    int64_t sumatorio_p=0.0;
    float emaitza_p=0.0;
    int16_t dato_i=0.0;
    int32_t mult_i=0.0;
    int64_t sumatorio_i=0.0;
    float emaitza_i=0.0;

    for (int n=0; n<longitud; n++) {
        //Cálculo voltaje
        dato_v = datosV[n];
        mult_v = dato_v*dato_v;
        sumatorio_v+=mult_v;
        //Cálculo intensidad
        dato_i = datosI[n];
        mult_i = dato_i*dato_i;
        sumatorio_i+=mult_i;
        //Cálculo de potencia
        dato_p=dato_v*dato_i;
        sumatorio_p+=dato_p;
    }
    //misma estructura que arriba
    emaitza_v=sumatorio_v*cont/longitud;
    emaitza_i=sumatorio_i*cont/longitud;
    emaitza_p=sumatorio_p*cont/longitud;

    //mandar dato a medidas
    medidas->vrms=sqrt(emaitza_v);
    medidas->irms=sqrt(emaitza_i);
    medidas->potenciaActiva=emaitza_p;
    medidas->potenciaAparente=medidas->vrms*medidas->irms;
    medidas->potenciaReactiva=sqrt(-(medidas->potenciaActiva*medidas->potenciaActiva)+(medidas->potenciaAparente*medidas->potenciaAparente));

    //medidas->energiaConsumida Esta nos dijiste que habia que calcular el tiempo y que no hicieramos
    medidas->factorDePotencia=medidas->potenciaActiva/medidas->potenciaAparente;
}