Esta es mi primera publicación. Soy un tipo de software que intenta hacer hardware, así que sé gentil :)
Circuito
Estoy diseñando un pequeño circuito (ver foto, y perdón por el esquema desordenado) que es simple y simple es un montón de MOSFETS y controladores de compuerta diseñados para cambiar cargas resistivas (almohadillas térmicas en este caso) desde un microcontrolador. Los elementos calefactores a menudo tienen una resistencia muy baja, y para mantener la potencia al nivel deseado, los MOSFETS se conmutan usando PWM.
Medición
Además del aspecto puramente funcional, también hay un enfoque educativo. Quiero poder obtener algunos comentarios sobre el consumo actual. Y mi enfoque ingenuo era simplemente agregar algunos IC de sensores de derivación actuales. Cuando uso un multímetro para medir el voltaje de salida del sensor, obtengo algo que se parece a la corriente promedio (con conmutación PWM) debido a la "lentitud" del amperímetro. Pero cuando conecto la misma salida a un ADC atmega328p, obtengo algunas malas lecturas: la velocidad aquí pone una lectura en cualquier lugar de la onda cuadrada PWM.
Entonces, mi pregunta es ¿cómo hago para medir la corriente (promedio) al cambiar con PWM?
Parece que el diseño está bien, pero podría haber pasado por alto algo tanto en el diseño como en la forma en que el ADC uC debería usarse en este contexto.
Respuestas:
A veces lo que parece simple no es tan simple. Tiene que realizar una medición bastante compleja, pero desea un resultado simple. Lo que quieres medir no es constante, varía en el tiempo. Dependiendo de su nivel de requerimiento, podría calcular una o varias propiedades del consumo actual. Estas propiedades lo ayudarán a monitorear mejor el sistema. Te propongo 3 soluciones diferentes, en complejidad ascendente.
Solución 1: promedio
Desea obtener un resultado de un valor -> obtenga el promedio en el tiempo. Como ya propuso @akellyirl, use un filtro de paso bajo. Calcule
float y = alpha*input + (1-alpha)*y
para cada muestra, dondealpha
está el factor de suavizado. Ver Wikipedia para los detalles.Solución 2: Max + Promedio
Es interesante obtener el promedio y el valor máximo. Monitorear el valor máximo podría ser interesante para el dimensionamiento de componentes, por ejemplo.
Solución 3: Desviación estándar + Max + Promedio
¿Por qué?
Ver abajo los cuadros. Hay 3 señales de diferentes formas. Un triángulo , un seno y una señal de pico . Todos son periódicos con el mismo período, la misma amplitud , el mismo promedio y el mismo mínimo y máximo . Pero, tienen formas diferentes, y de hecho tienen una historia completamente diferente ...
Una de las diferencias es la desviación estándar. Es por eso que le sugiero que extienda sus medidas e incluya la desviación estándar. El problema es que la forma estándar de calcularlo consume mucha CPU. Con suerte, hay una solución.
¿Cómo?
Usa el método del histograma . Cree un histograma de todas las mediciones y extraiga de manera eficiente las estadísticas (mín., Máx., Promedio, desviación estándar) del conjunto de datos. El histograma agrupa valores que tienen el mismo valor o el mismo rango de valores. La ventaja es evitar almacenar todas las muestras (aumento del conteo en el tiempo) y tener un cálculo rápido en un número limitado de datos.
Antes de comenzar a adquirir mediciones, cree una matriz para almacenar el histograma. Es una matriz entera de 1 dimensión, de tamaño 32 por ejemplo:
int histo[32];
Dependiendo del rango del amperímetro, adapte la siguiente función. Por ejemplo, si el rango es de 256 mA, significa que el bin 0 del histograma se incrementará en un valor entre 0 y 8 mA, el bin 1 en un valor entre 8 y 16 mA, etc ... Entonces, necesitará un número entero para representar el número del contenedor de histograma:
short int index;
Cada vez que obtenga una muestra, busque el índice bin correspondiente:
index = (short int) floor(yi);
E incremente este bin:
histo[index] += 1;
Para calcular la media, ejecute este ciclo:
Para calcular la desviación estándar, ejecute este ciclo:
La estrategia del método del histograma es realizar operaciones lentas en un número reducido de bins, en lugar de todas las muestras de señales adquiridas. Cuanto más largo sea el tamaño de la muestra, mejor. Si desea más detalles, lea esta página interesante El histograma, Pmf y Pdf .
fuente
Entiende el problema correctamente: necesita obtener el "promedio" de la PWM, al igual que el medidor que está utilizando para las mediciones.
Podría usar un filtro RC en las señales A1,2,3 cuya constante de tiempo es al menos diez veces su período PWM. Eso significa que si su período PWM fue de 10 microsegundos, entonces la constante de tiempo RC debería ser de 100 microsegundos. Por ejemplo 10kOhms x 10nF = 100us
Una mejor solución es filtrar las señales digitalmente en el microcontrolador de esta manera:
Cambie el valor "0.99" para cambiar la constante de tiempo de este filtro digital.
fuente