Controlador para un motor de CC para mover 18 cm constantemente

1

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?

    
pregunta pi3.14

1 respuesta

1

Parece que solo estás usando la distancia restante como tu variable de control.

También debe usar la velocidad, es decir, la velocidad de llegada de los pulsos o el número de pulsos por ciclo de muestra.

Luego puede usar eso para calcular su velocidad / velocidad de desaceleración requerida y detenerse donde desee, posiblemente incluso hacer retroceder el (los) motor (es) para que actúe como freno si es necesario.

    
respondido por el Trevor_G

Lea otras preguntas en las etiquetas