Control de motor PMDC de circuito cerrado

Me gustaría lograr RPM estáticas precisas (+/-.1% de error) en un motor de CC con escobillas de imán permanente pequeño y de bajo costo (por ejemplo, Mabuchi FA-130 ). El conjunto de motor/engranaje girará en diferentes orientaciones relativas a la gravedad, pero de lo contrario no habrá fuerzas variables en el eje/salida. A partir de la experimentación con una fuente de alimentación de voltaje constante aplicada a un motor similar, mido un error de +/-1% (7750 +/-80 RPM) en condiciones estáticas. Por lo tanto, creo que será necesario un control de circuito cerrado para lograr la precisión deseada.

Para implementar un control de circuito cerrado a bajo costo, estaba planeando hacer un codificador óptico incremental a través de un disco ranurado y un 'fotointerruptor' IR (por ejemplo, OPB610 ). Suponga que el disco tiene 10 ranuras y está instalado en el eje del motor que gira a 6000 RPM, por lo que 1k pulsos/seg. Suponga también que estoy usando un microcontrolador moderno de más de 16 MHz que controla el motor a través de PWM.

1) ¿Qué especificaciones/ecuaciones debo considerar al determinar cuál será la precisión de control del motor resultante? ¿Cómo determinar el retraso en la actualización de la velocidad del motor, así como la resolución del control de velocidad?

2) ¿Existe una forma 'mejor' (y aún más económica) de lograr una retroalimentación de circuito cerrado que el método del codificador óptico descrito (por ejemplo, un codificador magnético)?

Respuestas (2)

He usado pequeños motores Mabuchi de esa manera y obtuve resultados cercanos a lo que necesita usando un sensor de velocidad que es tosco en comparación con su rueda ranurada.

Comience a probar controlando el motor con un tren PWM que puede ajustar manualmente hacia arriba y hacia abajo. Registre el ciclo de trabajo de PWM que lo acerca a 6000 RPM, este será un nivel de potencia inicial. Luego, aumente el nivel de potencia de PWM un bit y bájelo un bit, y registre el cambio de RPM resultante. Según los valores que registre, debería poder predecir cuánta potencia agregar o eliminar de su nivel de potencia central cada 1/10 de rotación cuando la velocidad es demasiado alta o demasiado baja.

A esa velocidad, será necesario cronometrar el intervalo entre ranuras con un temporizador de hardware disponible en la mayoría de los microcontroladores. No podrá medir el error de velocidad de 1/10 de rotación con suficiente precisión usando software. Un error de 1 microsegundo en la medición consumirá su presupuesto de error.

Como se mencionó en los comentarios, si tiene una carga muy dinámica, es posible que desee mejorar el sistema básico de circuito cerrado para adaptarse a las cargas cambiantes. En mi proyecto descubrí que el nivel de potencia central no era el mismo para todos los motores. Así que incorporé una función de integración tal que si la suma de los errores a lo largo del tiempo no era 0, entonces ajustaría mi nivel de potencia central para tratar de equilibrar los errores + y -.

Puede funcionar bien con una carga equilibrada y constante, de lo contrario, el control no sabrá cuándo hay un cambio de carga debido al peso o al equilibrio.

1) Si desea lograr una RPM precisa de +/- 0,1 %, debe verificar que la cantidad de pulsos observados durante un período determinado no se desvíe por la cantidad esperada de pulsos en más de +/- 0,1 %. El número mínimo de pulsos esperados para hacer cumplir esto es 1/.001 = 1000 pulsos, lo que requeriría que los pulsos observados fueran exactamente 1000 también (por ejemplo, si midió 1001 pulsos, ¿cómo sabría si estaba equivocado por 0.1% o .15%?).

Si está recibiendo 1k pulsos/seg, necesitará 1 segundo para recolectar suficientes pulsos para tomar la decisión de si necesita aplicar retroalimentación positiva/negativa a través de PWM. Sin embargo, esto solo garantizará un "promedio" de 100 Hz durante la duración del muestreo y trae a colación la especificación adicional de "fluctuación de frecuencia" que no se mencionó en la pregunta original. No se puede garantizar una frecuencia instantánea, ya que esto requeriría calcular la pendiente de dos muestras infinitesimalmente cercanas. Por lo tanto, la precisión de '+/-.1%' de una RPM/frecuencia debe ir acompañada de la duración del promedio. En este caso, impongamos la duración del promedio de frecuencia como diez revoluciones del eje, o 10*60s/6000RPM = 100ms. Esto es 10 veces menos que la duración de muestreo de 1 s determinada anteriormente,


Tendré que actualizar esta respuesta con las consideraciones del lado del control (resolución PWM, fluctuación del reloj), así como el método de ajuste (es decir, cómo reaccionar cuando los recuentos/períodos observados no son los esperados).