Controlando la velocidad del motor con PID cómo escalar PWM a RPM y viceversa

Quiero controlar la velocidad de un motor usando un controlador PID. Mi problema es que el rango válido de PWM que puedo configurar en mi microcontrolador es de 0 a 199 , pero mido la velocidad del motor (usando un codificador) en un rango de ~50 a 6000 RPM.

¿Cómo puedo intercambiar significativamente estos valores?

Ejemplo:

Configuré la velocidad objetivo en 6000 cuando el motor está a 0 RPM. Luego, el PID comienza y en ese momento el error es 6000... por lo que el PID da una salida máxima que será 32767. Pero solo puedo configurar el temporizador PWM de 0 a 200.

Estoy usando el código en la nota de la aplicación AVR221 y allí cada variable tiene un signo entero (sin puntos flotantes). Mi propio microcontrolador es stm32 que puede manejar puntos flotantes de manera eficiente, creo.

Respuestas (4)

No hay necesidad de escalar. Debe limitar la salida de su controlador PID al 0 % y al 99 %, y averiguar qué factores funcionan mejor. Hay I*R, todo tipo de interferencia, aceleración, por lo que el voltaje no está estrictamente relacionado con la velocidad. En realidad, a veces puede parecer que no hay ninguna relación en absoluto. Así que haces PI o PID, y lo ajustas. La mejor práctica es usar también unidades SI en todas partes, pero no es obligatorio.

Por cierto, y esto es muy importante. Debe crear un perfil de movimiento. Lo que en el caso del control de velocidad significa que debe aumentar gradualmente la velocidad de acuerdo con la aceleración. De lo contrario, obtendrá sobreimpulsos y un comportamiento muy inestable, o un control deficiente si reduce su ganancia para calmar el sistema.

En lugar de "necesita limitar la salida de su controlador PID con 0% y 99%", formularía como "usar la salida del controlador PID, fijada entre 0 y 199". Creo que lo hace más claro y más específico para el caso de OP.
Tal vez. Espero que sea lo suficientemente independiente como para investigar más a fondo el tema por sí mismo.
@GregoryKornblum "Por cierto, y esto es muy importante. Debe crear un perfil de movimiento. Lo que en el caso del control de velocidad significa que debe aumentar gradualmente la velocidad de acuerdo con la aceleración. De lo contrario, obtendrá sobreimpulsos y un comportamiento muy inestable, o un control deficiente si reducirá su ganancia para calmar el sistema".
@GregoryKornblum Hola, sé que esta es una vieja pregunta, pero me gustaría preguntarte algo. Estoy trabajando en un PID a PWM y tengo algunos problemas, y cuando leo lo que escribiste en el comentario anterior, tengo una pregunta. ¿Está sugiriendo que cada ciclo de escaneo del bucle PID, que la tasa de cambio del ciclo de trabajo PWM esté limitada a una tasa máxima de cambio? Tengo problemas con un sobreimpulso excesivo sin importar lo que haga, y creo que mi tiempo de bucle PID es quizás demasiado lento, pero lo que ha mencionado podría ser una forma de solucionar este problema.
@ David777 no, esto no es lo que digo. Pero para responder a su pregunta, necesito comprender mejor lo que está haciendo.
@GregoryKornblum Acabo de publicar una pregunta en este momento si desea echar un vistazo.
Oh, hombre, es demasiado largo. Si quieres, envíame un correo electrónico a gregoryk a veriqube-canada.com y encontraré tiempo para conversar mañana. No creo que pueda obtener lo que necesita haciendo una sola pregunta. Parece que necesitas una explicación más detallada.

Por lo general, la salida de una función PID es un número entre 0,0 y 1,0 (0-100 %), puede multiplicar esto por el período de su temporizador para obtener el valor del ciclo de trabajo.

Pero si usa matemáticas enteras, la salida de su función PID es -32768 a 32767, entonces tiene -1.0 a 1.0 con una resolución de 1/32767.

En su caso, divida la salida de 16 bits firmada por 163.

La salida PID es básicamente el aumento requerido en POTENCIA para trazar un camino hacia el punto de referencia requerido: piense en un control de crucero en un automóvil, a medida que la velocidad cae por debajo del punto de referencia, se alimenta más acelerador. La curva de par en la mayoría de los motores de CC sigue un forma parabólica, por lo que a RPM altas y bajas, su entrada de "acelerador" debe ampliarse en consecuencia. Las curvas de par cambian con el voltaje de entrada, por supuesto, por lo que una buena idea para ayudar a estabilizar el sistema sería usar un regulador de voltaje, que ayudará a eliminar al menos un objetivo en movimiento del sistema.

PWM no cambia la velocidad de un motor directamente, cambia el voltaje a través del motor, mientras mantiene el par. La única forma de traducir el ciclo de trabajo de PWM a la velocidad de un motor de manera confiable y precisa es hacer un gráfico usted mismo. Diría que haga al menos 5 puntos y grafique la velocidad contra el ciclo de trabajo en un gráfico.

no lo entiendo Al final, tengo que cambiar el valor de PWM para cambiar la velocidad, entonces, ¿cómo ayudaría ese gráfico?
Establece PWM en 20%, 40%, 60%, 80%, 100% a su vez y mide la velocidad del motor. Eso le permitirá trazar un gráfico para mostrar la relación de PWM con la velocidad del motor.
Esa no sería la solución... debido a la variación en el voltaje del BUS al motor, ese gráfico no tendría sentido. por ejemplo, un día es de 12V y otro día es de 11V ... peor si está en baterías
¡Ah, claro, entonces la entrada al motor varía por todas partes! Eso lo hace más complicado: por lo tanto, debe tener un bucle de control simple en el software que lo controle. Deberá alimentar la velocidad deseada y la velocidad actual o el voltaje de alimentación. Luego póngalo a través de un algoritmo de control, probablemente pueda usar el control proporcional a menos que su configuración se esté cargando muy rápido.