Autor Tema: Calcular RMS por software  (Leído 4879 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Holgorio

  • PIC12
  • **
  • Mensajes: 51
Calcular RMS por software
« en: 23 de Enero de 2019, 13:56:28 »
Hola, en el pasado una vez intente calcular el RMS de una señal por software en un arduino (creo que el arduino murio  :D), pero no fui capaz. Ahora con los simuladores he intentado hacerlo con un IC que te calcula el RMS pero ademas de que no me gusta por que creo que es mucho mas caro así, ademas de que por lo que he ido aprendiendo en estos días, ni siquiera los multimetros usan un IC si no que lo hacen por software, ademas que tengo la espina clavada de que no me saliera, y bueno aunque no puedo hacerlo de manera real, he pensado que si puedo poner las cuentas para calcularlo en base a un hipotetico ADC con su driver de entrada.

he buscado por internet y he visto algunos circuitos como este:

 

* Sin título.png
(102.9 kB, 773x965 - visto 676 veces)


Esto lo que hace es rectificarlo y el RMS de la onda resultante es el doble que el RMS de la principal, pero me parece una manera un poco rara de hacerlo ¿no? no le veo ninguna ventaja.

luego he visto este estilo:

 

* Sin título2.png
(28.56 kB, 856x1188 - visto 642 veces)


Lo que hace es dividirlo a la mitad y elevarlo a la mitad de 3.3 que es lo que suelen tener los micros, esto seria un buen driver para enchufarlo al adc? del micro?

si suponemos que la señal sea de 50Hz, supongo que habría que tomar las muestras, restarles 1.65V, sumarlas, dividirlas entre el numero de muestras y hacerles la raiz cuadrada.

Pero... según me explico el compañero eduardo ademas de otros compañeros y lo que he visto, es que la señal suele tener armonicos y he visto por internet que tambien tienes que tener en cuenta el factor de cresta.

Eduardo dijo que habia que poner un filtro paso de baja para quitar los armonicos, pero...¿cuantas muestras debería tomar? ¿que orden de filtro? y si quisiera por ejemplo X factor de cresta, como se haria? el integrado ad8436 dice que calcula hasta un factor de cresta de 10, no se si lo comprendo muy bien.

¿estos calculos podrían hacerse con un STM32 por ejemplo? como el de la discovery F4 o se necesita algo mas potente o con mas memoria para tomar muchas muestras?

un saludo y muchas gracias

Desconectado Holgorio

  • PIC12
  • **
  • Mensajes: 51
Re:Calcular RMS por software
« Respuesta #1 en: 24 de Enero de 2019, 10:52:55 »
A ver si lo que he aprendido ha servido de algo, he ideado un hipotetico circuito para enchufarlo a un uC de 3.3Voltios, a ver si alguien me puede decir si mis conclusiones y calculos son correctos:

 

* Sin título.png
(49.38 kB, 1125x1078 - visto 662 veces)


He supuesto medir una señal de 50 hz como la de la red, pero claro con una amplitud mucho menor. he colocado un AO para hacer una impedancia de entrada grande, despues he colocado un divisor resistivo de r4 y r5 a la alimentación del uc para bajar la tension a la mitad y subirla por encima de 0 y solo lea valores positivos. ahora viene lo chungo:

Como la tensión de la red, tiene armónicos y picos (por lo que he aprendido en otros post) he colocado un condenador de 15n que junto con R4 forma un filtro paso de baja de algo mas de 1K Hz de corte esto hace que se pueda medir hasta la décima armonica (no se si es mucho o poco), por que seria 50*10=500 y *2 para asegurarse. Los diodos cumplen una doble función, proteger al adc de valores que salgan de su rango y limitar el factor de cresta de los picos.

El factor de cresta es el Vp/VRMS si supongo que el valor RMS es de 1V y que puede tener picos de 3 voltios, tenemos que este sistema podría medir factores de cresta de 3.3 y perturbaciones hasta la decima armónica ¿No?

Por la parte del micro, sería:

No me acuerdo quien me lo dijo creo que fue Eduardo pero no lo encuentro, que lo mejor era colocar un filtro de bajo orden y muestrear en la frecuencia de corte, por lo tanto se muestrea a una muestra por mSeg.

Esto hace que en 1 segundo tengamos 1000 muestras, y cada segundo haríamos el valor cuadrático medio. ¿Serian suficientes estas muestras y tiempo de muestreo?

Si el Adc del uC es de 12bits serán 2 registros de 1 byte cada uno 2 byte por medida que por 1000 son 2000 bytes~2Kbytes ocuparía en memoria el buffer, los micros de ahora normalitos suelen tener 512k o 1024k bytes de flash, no creo que sea un problema la memoria, ¿como de rapido suele ser el ADC de un micro normalito? ¿1 vez cada milisegundo es mucho para un micro normal?

¿estaria bien esto para un circuito real? tanto el software como el hardware? necesitaria mas muestras, menos, mas velocidad?

un saludo

estos calculos y suposiciones son correctos

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #2 en: 24 de Enero de 2019, 15:23:44 »
Los cálculos en tiempo real los puedes hacer con enteros, que es más rápido.

Solo tienes que calcular el cuadrado del valor y sumar el resultado en un acumulador. Calcula unos 500 ciclos en ensamblador.

Tambien te recomiendo que calcules el valor medio en tiempo real.

Al final tienes que hacer algunos cálculos en coma flotante para ajustar el resultado.

Debes tomar al menos el doble de muestras que la máxima frecuencia que pretendas medir. Esto te deja una frecuencia de corte de unos 5kHz para un micro normalito de 8bits.

Con los dspic que tienen instrucciones específicas de multiplicación y suma, puedes llegar a frecuencias 100 veces mayores.

Si quieres rms de frecuencias mayores, tendrás que ir a un circuito especializado.

Ten en cuenta que una frecuencia de corte de 5khz en realidad solo llega a medir 10 armónicos de una señal cuadrada de 500Hz.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #3 en: 24 de Enero de 2019, 15:32:31 »
Un micro normalito toma 20000 muestras/segundo.
Un dspic puede llegar a un millón de muestras por segundo.

No hace falta buffer si calculas en tiempo real.

Desconectado Holgorio

  • PIC12
  • **
  • Mensajes: 51
Re:Calcular RMS por software
« Respuesta #4 en: 25 de Enero de 2019, 03:47:50 »
Hola picuino, gracias por responder

Citar
Si quieres rms de frecuencias mayores, tendrás que ir a un circuito especializado.

Si tengo claro que mientras mas subas mas dificil va a ser, pero como lo que quiero es aprender el proceso, por eso me he centrado en una frecuencia y tipo de señal, y que hay mas común que la red de casa. Así que quiero idear algo que me permita medir la red de casa, bueno despues de ponerle un transformador y bajarlo a 1V rms por ejemplo (o lo que sea)

Entonces voy a tener una señal senoidal, con armonicos (ni idea de que nivel) y entre 40 y 50 Hz ¿no?

Citar
Debes tomar al menos el doble de muestras que la máxima frecuencia que pretendas medir. Esto te deja una frecuencia de corte de unos 5kHz para un micro normalito de 8bits.

Aquí me he perdido, ¿por que 5KHz?

Citar
Un micro normalito toma 20000 muestras/segundo.
Un dspic puede llegar a un millón de muestras por segundo.
Por lo que comentas y sabiendo que sera una señal de 50Hz, o entre unos 40 y 60, no creo que necesite un dspic, aparte de que no los he usado nunca  :D, suelo usar los stm32 de las discovery, creo que era un m4 a 48Mhz.

Citar
Los cálculos en tiempo real los puedes hacer con enteros, que es más rápido.

Solo tienes que calcular el cuadrado del valor y sumar el resultado en un acumulador. Calcula unos 500 ciclos en ensamblador.

También te recomiendo que calcules el valor medio en tiempo real.

Aquí también me he perdido un poco, como se haría en tiempo real. Por ejemplo, el valor medio seria Vmed=sum(valores)/Numero de muestras. Si tienes el Vmed acumulado, y coges un nuevo dato, ¿como lo añades a ese número?

PD: hay alguna forma de poner formulas matematicas en el foro?





Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #5 en: 25 de Enero de 2019, 04:41:03 »
5khz es la velocidad máxima a la que un micro normalito puede hacer los cálculos.


Los STM también tienen instrucciones para acelerar los cálculos. Algunos son más rapidos que los dspic.

Para poner fórmulas yo suelo escribir texto. Fácil y portable, aunque quede feo.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #6 en: 25 de Enero de 2019, 04:50:42 »
Fórmulas.

Mete en un bucle estas formulas y que se ejecuten cada cierto intervalo fijo de tiempo:
RMS = RMS + ADC * ADC
Media = Media + ADC
muestras = muestras + 1

Al final haces los cálculos:
Media = Media / muestras
RMS= sqrt(RMS/muestras - media*media)
« Última modificación: 25 de Enero de 2019, 04:58:37 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #7 en: 25 de Enero de 2019, 04:59:53 »
Esto elimina ka componente de continua y calcula solo la RMS de la alterna.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calcular RMS por software
« Respuesta #8 en: 25 de Enero de 2019, 06:56:48 »
Fórmulas.

Mete en un bucle estas formulas y que se ejecuten cada cierto intervalo fijo de tiempo:
RMS = RMS + ADC * ADC
Media = Media + ADC
muestras = muestras + 1

Al final haces los cálculos:
Media = Media / muestras
RMS= sqrt(RMS/muestras - media*media)

Con eso no haces que muestras sea un numero muy grande al final (o un overflow), dejando la media y por ende el RMS casi nulo? o falta la instruccion de ponerle un limite a muestras ?

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #9 en: 25 de Enero de 2019, 15:08:52 »
Depende de las variables que utilices.
Precisamente muestras es la variable que menos overflow tiene. Puedes utilizar un entero de 16 bits para contar hasta 65000 muestras (unos 6 segundos a máxima velocidad en un micro de 8 bits)

La que más overflow puede tener es la variable RMS.
Utilizando enteros de 32 bits, se valor puede tener overflow cada 700 muestras si se apuran los rangos del ADC. Pero como el overflow se produce en una suma, al menos con ensamblador es muy sencillo y rápido ampliar el rango de la suma a más bits.

Un buen truco consiste en tomar un número de muestras que sea potencia de 2, por ejemplo 1024, de manera que la división final sea muy sencilla. Se realiza simplemente con un desplazamiento de bits.

Un saludo.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #10 en: 25 de Enero de 2019, 15:11:24 »
Killer:

Con la instrucción
muestras = muestras + 1

me refiero a la instrucción c:
muestras++;

Creo que lo has interpretedo como una sucesión tipo Fibonacci.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #11 en: 25 de Enero de 2019, 15:14:30 »
Holgorio, es MUY recomendable que simules todo con una hoja de cálculo (https://es.libreoffice.org) para ver qué valores se obtienen antes de programar el micro.

Un saludo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calcular RMS por software
« Respuesta #12 en: 25 de Enero de 2019, 22:25:56 »
Killer:

Con la instrucción
muestras = muestras + 1

me refiero a la instrucción c:
muestras++;

Creo que lo has interpretedo como una sucesión tipo Fibonacci.

No Picuino... Pero supongamos que esa funcion entra 65000 veces.... entonces muestras va tener el valor 65000 + valor de inicio.
Se entiende el punto que quiero llegar ?... Es decir si continuamos ejecutando ese pseudocodigo una y otra ves llegamos a un numero de muestras muy grandes y que la unica forma que vuelva a un numero pequeño es por un overflow.

A eso me referia  :mrgreen:, sea el tamaño que sea la variable, algun dia se va a producir el overflow con ese pseudocodigo.
« Última modificación: 26 de Enero de 2019, 00:16:40 por KILLERJC »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Calcular RMS por software
« Respuesta #13 en: 26 de Enero de 2019, 05:45:56 »
Ok. Toda la razón.
A veces simplifico demasiado.

Antes del cálculo hay que resetear y poner todas las variables a cero.

Estoy suponiendo que se hace un cálculo de RMS por segundo y a partir de ahí se vuelve a comenzar.

Si quieres hacer un cálculo contínuo, no por lotes, entonces necesitas un buffer circular o una media móvil de cálculos RMS más rapidos.

Otra cosa que acabo de ver, es conveniente que el periodo de cálculo sea múltiplo del periodo de red.

Saludos.

Desconectado Holgorio

  • PIC12
  • **
  • Mensajes: 51
Re:Calcular RMS por software
« Respuesta #14 en: 26 de Enero de 2019, 07:19:20 »
Precisamente me gustaria simularlo, no tengo la intención de momento de llevarlo a la realidad solo de aprender como hacerlo. Pero no se como simularlo,

¿como podría tener los datos de un adc virtual?

¿Por otra parte, el circuito y las conclusiones que puse al principio son correctas? ¿Ese seria el hardware necesario?