Cómo medir la distribución de energía

Quiero evaluar el flujo de energía en un sistema alimentado por batería. Entonces, cuando el sistema ejecuta una tarea específica, se puede obtener la distribución de energía entre las diferentes cargas (similar a un diagrama de Sankey ). Para esto sería suficiente una escala de tiempo en el rango de [100..10] ms en los datos procesados.
La energía eléctrica se puede calcular como W = t 0 t 1 tu ( t ) i ( t ) d t . Por lo tanto, medir el voltaje y la corriente a una frecuencia de muestreo determinada proporcionará los datos necesarios. Para su posterior procesamiento en una PC, se debe registrar el voltaje y la corriente.

Como se puede ver en la imagen, la fuente de alimentación convierte la entrada de las baterías a 24V constantes. Los controladores de motor utilizan una modulación de ancho de pulso (PWM) de 40 kHz para controlar los motores de corriente continua sin escobillas (BLDC). En un sistema de este tipo pueden existir hasta 9 combinaciones de motor/controlador. Hay más cargas alimentadas por la fuente de alimentación que muestran solo cambios lentos en el "consumo" de energía. La medición será controlada por un Arduino Due (84 MHz). Es probable que los ADC tengan varios canales y se conecten a través de SPI.

ingrese la descripción de la imagen aquí

Mi preocupación es medir con buena precisión sin encontrar un cuello de botella en el procesamiento:
la velocidad del bus (SPI) a los ADC, el procesamiento de datos (ambos limitados por el microcontrolador) y, especialmente, la velocidad de escritura en la tarjeta SD (limitada por Arduino lib <700 kB/s? )

El voltaje de las baterías solo cambia lentamente bajo carga y, por lo tanto, la tasa de muestreo puede ser baja. Sin embargo, los motores muestran múltiples armónicos en respuesta al PWM de 40 kHz.
Teniendo en cuenta el criterio de Nyquist, la frecuencia de medición tendría que ser más del doble que la señal de interés más rápida (aquí, el armónico n-ésimo con una magnitud significativa). Otras señales necesitan un filtro de paso bajo para evitar el aliasing.

Pregunta 1: ¿Qué pasos de medición y procesamiento se pueden tomar para mantener la precisión mientras se reduce la demanda en los cuellos de botella?
Mis pensamientos son:

  • Usar promedios aritméticos en un intervalo establecido Δ T para reducir los datos a registrar: W ¯ = tu ¯ i ¯ Δ T
  • Escribir datos binarios en la tarjeta SD en lugar de texto sin formato.
  • Midiendo solo una fase por motor, suponiendo que las fases se accionan de la misma manera mientras se mantiene una velocidad constante a un par constante. Por lo tanto, este enfoque está limitado por las condiciones.

Pregunta 2: ¿Es posible obtener una buena aproximación midiendo más lento que la frecuencia PWM?
Entiendo que el submuestreo no es aplicable aquí, ya que usa el alias de una banda de frecuencia más alta en una banda de frecuencia más baja vacía .

Mi opinión es que, si los controladores de 40 kHz están inyectando ruido en sus suministros, deberían tener estranguladores de entrada de modo común y/u otros medios para filtrar este fenómeno agregado.
Eso posiblemente fue descrito poco claro por mí. Esos armónicos aparecen cuando mido entre el controlador y el motor. El problema es que no puedo medir entre la fuente de alimentación y un solo controlador de motor debido a la construcción existente.
Mida entre la batería y la fuente de alimentación y ahórrese muchas molestias. Debido a que el voltaje se mantiene constante / varía lentamente, puede filtrar la corriente de paso bajo y aún así medir la potencia / energía con precisión.
@Andy alias El concepto es obtener la distribución de energía con respecto a todas o la mayoría de las cargas durante una tarea determinada. Por lo tanto, es necesaria la medición en múltiples ubicaciones. He actualizado mi pregunta para reflejar esto. Estoy de acuerdo, que medir la batería sería una tarea mucho más fácil.
@tomnexus Es el segundo caso que indicó: una escala de tiempo de alrededor de 50 ms para los valores registrados sería buena y preferible si la precisión no sufre demasiado.

Respuestas (1)

Para medir el consumo de energía de cada motor, debe medir el voltaje y la corriente antes que el controlador del motor.

(La potencia trifásica después del controlador será muy difícil de medir).

Tanto las mediciones de voltaje como las de corriente deberán filtrarse para eliminar la señal de 40 kHz, que de lo contrario causará todo tipo de problemas, como anticipa correctamente.

Afortunadamente, 40 kHz está muy lejos de su probable frecuencia de muestreo de alrededor de 50 Hz. Un filtro RC de primer orden con su codo a 40 Hz atenuará el voltaje de ondulación de 50 kHz unas 30 veces, lo que podría ser suficiente. Un inductor y dos condensadores serán mucho mejores.

El voltaje es bastante fácil de medir: como una buena fuente de baja impedancia, puede construir un filtro simple y alimentarlo a su ADC. Solo necesita una medición de voltaje después de la fuente de alimentación de 24 V. La ondulación en el voltaje debería ser bastante pequeña de todos modos.

La corriente es un poco más complicada. Podría usar una resistencia de detección en el cable de tierra y un amplificador operacional para amplificar el pequeño voltaje, luego el filtro. En algunos ajustes de torque, la corriente podría ser realmente una onda cuadrada a 40 kHz, será difícil de medir y filtrar. Podría ser una idea filtrar la línea de alimentación con un LC, solo para eliminar parte de la ondulación, y luego filtrar la salida de detección nuevamente antes del ADC.

Una última idea digital sería muestrear más rápido de lo necesario, tal vez a 1 kHz, y promediarlos en el Arduino. El alias seguirá siendo un problema, sin embargo, si aleatoriza el tiempo de las muestras, puede promediar la señal de 40 kHz, evitando que se aliase correctamente en su banda de interés. Algunos experimentos aquí serían valiosos.

Su respuesta definitivamente me ayudó con esta tarea. Iré por un muestreo y un promedio más rápidos. Encontré una interfaz analógica (MCP3910) que podría promediar internamente pero solo tiene 2 canales. Así que será otro con más canales y el Arduino consigue algo de trabajo. Además, configuraré un filtro activo para obtener una caída más pronunciada.