Actualmente estoy trabajando en un proyecto de robot de balanceo utilizando Arduino Uno. Puedo lograr que el robot se equilibre, pero uno de sus motores tiene la tendencia a girar más que el otro.
Estoy usando el controlador de motor L298N con 2 x 30: 1 Metal Gearmotor 37Dx68L mm con 64 CPR Encoder de polulu.com. También he intentado compensar la diferencia de velocidad al monitorear el valor del codificador en cada motor. Desafortunadamente, la lógica de compensación parece contradecir el control de PWM necesario para equilibrar el robot y hace que oscile bastante.
Actualmente estoy usando el siguiente código para equilibrar la velocidad del motor:
dPos = leftCounterCurr - rightCounterCurr;
if(dPos > 10) {
leftPWM = u + k*abs(dPos);
rightPWM = u - k*abs(dPos);
}
else if(dPos < -10) {
leftPWM = u - k*abs(dPos);
rightPWM = u + k*abs(dPos);
}
dPos se refiere a la diferencia en los valores de los dos codificadores. leftPWM y rightPWM son los valores de PWM para controlar el motor izquierdo y derecho respectivamente. u es la salida del control PID y se ajusta mediante cierto valor de ganancia para compensar la diferencia en la velocidad del motor.
Espero que alguien con experiencias similares pueda ayudarme. Gracias de antemano.
Edición 1: @Marko hice alguna caracterización de mis motores hoy. Pensé que lo publicaría aquí en caso de que alguien pudiera encontrarlo útil. Los resultados se muestran a continuación. Parece que con un ajuste de capacitancia adecuado, puedo hacer que los motores den respuestas casi similares. Sin embargo, creo que todavía hay una necesidad de usar un bucle de control para un mejor rendimiento.
Por ejemplo, si el motor izquierdo tiene un condensador de 0.3uF en sus terminales, mientras que el motor derecho tiene un capacitor de 0.2uF en su terminal, podemos observar que las dos curvas de respuesta están muy juntas.
Otra cosa que noté fue que el motor no se movería para un ciclo de trabajo por debajo del 20%. Y parece ser un problema universal con el control PWM de los motores de escobillas de CC ... o al menos todavía no he encontrado ningún método para superar este comportamiento.