He configurado un controlador PID para controlar la posición del eje de un motor de CC con escobillas que controlo a través de PWM y un codificador óptico. Básicamente estoy reconstruyendo un servo RC.
Ahora que creo que he encontrado los parámetros de sintonización correctos (los tres parámetros no son cero), estoy enfrentando otro problema: el eje llega al ángulo deseado con cierta aproximación (mire la barra negra en < a href="https://www.instagram.com/p/BTg25HngIDo/"> enlace ), luego deja de moverse más. Escucho un "crescendo de zumbido" en el motor, que termina después de unos segundos y se mueve un poco más, pero ahora demasiado. Así que hay otro crescendo vibrante, y así sucesivamente. Casi nunca llega exactamente al ángulo deseado.
Al mirar la salida de salida / error, veo que durante el zumbido, el controlador está enviando valores PWM pequeños, demasiado pequeños para arrancar el motor (como pude experimentar solo, vea enlace ). Supongo que esto es algún tipo de no linealidad, mientras que un PID solo puede funcionar con procesos lineales. Debido a que el motor se detiene en una posición cercana, el error se acumula en la rama I y también lo hace la salida, hasta que se alcanza un umbral.
¿Cuál es el enfoque habitual para resolver este problema? Estoy pensando en linealizar la salida como se sugiere en esta respuesta (es decir, implementar una función de "zona muerta" para que el motor nunca recibe valores de PWM pequeños), pero me preocupa que el linealizador agregue más variables independientes en el sistema.