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

0

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

¿Cómo puedo intercambiar estos valores de manera significativa?

Ejemplo:

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

Estoy utilizando el código en la nota de aplicación AVR221 y allí todas las variables llevan un entero con signo ( sin puntos flotantes). Mi propio microcontrolador es stm32 que puede manejar puntos flotantes de manera eficiente, creo.

    
pregunta DEKKER

3 respuestas

1

No hay necesidad de escalar. Debe limitar la salida de su controlador PID con 0% y 99%, y averiguar qué factores funcionan mejor. Existe 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. Así que haces PI o PID, y lo afinas. La mejor práctica es también usar unidades SI en todas partes, pero no es obligatorio.

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

    
respondido por el Gregory Kornblum
0

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 su período de temporizador para obtener el valor del ciclo de trabajo.

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

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

    
respondido por el Jeroen3
-1

PWM no cambia la velocidad de un motor directamente, cambia el voltaje a través del motor, mientras mantiene el par. La única manera 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. Yo diría que hacer al menos 5 puntos, y trazar la velocidad en función del ciclo de trabajo en un gráfico.

    
respondido por el Puffafish

Lea otras preguntas en las etiquetas