Estoy trabajando en el diseño de un micro ratón que resuelve un laberinto. El objetivo es llegar al centro del laberinto. El ratón necesita mover una distancia de un bloque a la vez, que es de 18 m. Actualmente, estoy usando un control de posición que calcula el error en la distancia y lo convierte en valor PWM. Entonces, a medida que el error disminuye, el PWM disminuye. A continuación se muestra el código para ello:
if( distanceRight < 60 || distanceLeft < 60) // Encoder Pulses from the left and the right wheel
{
//Finding the error and converting into fraction values to be used as PWM
errorRight = (60.0 - distanceRight)/60;
errorLeft = (60.0 - distanceLeft)/60;
PWM_RightWheel = (errorRight);
PWM_LeftWheel = (errorLeft);
distanceRight = abs(encoder1.getPulses());
distanceLeft = abs(encoder2.getPulses());
}
Pero, aquí está el problema. A veces el ratón se sobrepasa debido a su inercia. El codificador que estoy usando para medir la distancia tiene un máximo de 48 cambios de estado para una revolución. Teniendo en cuenta el radio de la rueda, esto me permite medir con precisión distancias de 0,25 cm.
¿Qué tipo de controlador puedo usar para reducir el problema de sobrepasamiento? Este problema de sobrepasamiento también ocurre cuando uso los codificadores para calcular la distancia mientras gire a la derecha o la izquierda. Nuevamente, en ambos casos, a veces tengo el problema de rebasar.
¿Necesito usar un controlador PID? En caso afirmativo, ¿cómo puedo encontrar la función de transferencia para el movimiento de la rueda e implementarla en el código?