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