Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed CMSIS_DSP_5
Revision 9:4e97d55bba0b, committed 2019-10-25
- 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); + + +} +