Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola,
Como sabréis estamos intentando construir un velocista en ARDE Madrid. Seguro que habréis visto las fotos o videos del driver o de la estructura con la reductora para un motor económico.
Bien, pues como no todo siempre queda perfecto una de las reductoras tiene menor rendimiento que la otra y eso hace que para una de las ruedas con una tensión de 0.5 V en el motor hace girar la rueda y en el otro pues hace falta hasta 0.8 V (además un motor está alimentado digamos en "directa" y el otro en "inversa"). El driver que hemos realizado tiene para tomar medidas de la corriente que circula por el motor y la tensión aplicada en el motor en cada momento, también sería fácil tener una lectura de las vueltas que da la rueda. Creo que con estas entradas se podrá realizar el control.
Mi intención es realizar pruebas de velocidad en línea recta, pero sin colocar los sensores para detectar la línea. Sería interesante compensar los distintos rendimientos de las reductoras y hacer que el avance de ambas ruedas del robot sea el mismo, en este caso el robot irá en línea recta.
Controlando esto podremos realizar pruebas de velocidad para el robot.
Si alguien tiene información sobre fórmulas, página web donde este bien explicado el tema o algún pdf bastante completo sería de ayuda. Y ya se que en google se encuentra todo, pero es mejor ir a leer directamente al lugar adecuado y no estar recopilando poco a poco la información y mirando decenas de sitios.
Gracias.
Juanjo, creo que tú mismo ya te contestas en parte.
Este problema suele ser normal en un diferencial que se monta uno mismo, a un motor le cuesta más que a otro mantener la misma velocidad. La mejor manera de solucionarlo es usando un encoder en cada rueda. En vez de controlar simplemente el pwm que le mandas a cada motor, debes controlar la velocidad a la que gira cada rueda. Esto complica bastante el funcionamento, ya que ahora, tienes 3 bucles de control pid, uno para cada rueda y otro para los sensores. Pero de ese modo te aseguras que el robot responde como tú quieres.
Yo hice para una pràctica una cosa parecida a la que comentas. Tenia dos motores diferentes, y con uno conectaba directamente el valor de un Potenciometro muestreado hacia el driver, mientras que el otro motor, cojia de dos enconders, un o por motor, y con la PIC calculaba la diferencia de velocidades y aceleraba mas o menos para igualar las velocidades.
No use ningun PID, porque la practica no lo requeria y me daba un poco de palo, pero el error que tenia era bastante pequeño. El algoritmo era algo asi como:
Mientras (tiempox < tiempo Y){
cuenta_vueltas motor1();
cuenta_vueltas motor2();
si(diferencia_motores() > 3){
frena();
}sino{
acelera();
}
Obviamente, un PID seria lo mejor... PAra lo del PID, mirate el metodo Ziegler-Nichols si no conoces la funcion que tienes que controlar, y luego para pasar a digital transformada Z. PAra los motores, si buscas un poco por internet, encontraras la funcion de planta que tiene.
Hace un tiempo, hubo un post muy largo que hablaban de eso.... pero creo que lo hacian ya directamente con una formula y en digital directamente.
Hola,
Unas cosillas:
- Juanjo, yo tengo apuntes que te pueden ir bien (en pdf) mándame un privado o un mail con tu dirección y te los envío.
- dragonet80 no entiendo porque te complicas:
Esto complica bastante el funcionamento, ya que ahora, tienes 3 bucles de control pid, uno para cada rueda y otro para los sensores. Pero de ese modo te aseguras que el robot responde como tú quieres.
Con un sólo PID ya se corrigen los defectos de las ruedas, lo único malo es que el PID no trabaja demasiado bien con elementos discretos (sensores).
- Lorth si tienes la función de planta es tontería usar el PID con un control de estados o directamente un compensador de planta (la propia función de planta restando en el bucle) ya lo tendrías resuelto.
S2
Ranganok Schahzaman
dragonet80 no entiendo porque te complicas:
Esto complica bastante el funcionamento, ya que ahora, tienes 3 bucles de control pid, uno para cada rueda y otro para los sensores. Pero de ese modo te aseguras que el robot responde como tú quieres.
Con un sólo PID ya se corrigen los defectos de las ruedas, lo único malo es que el PID no trabaja demasiado bien con elementos discretos (sensores).
No, el PID no te corrige ese defecto.
Te hará un control oscilante alrededor del valor deseado y esa oscilación dependerá de la diferencia que haya entre un motor y otro. Pero nunca hará que el robot vaya en linea recta perfectamente. Para eso la única opción es controlando cuanto avanza cada rueda (suponiendo que no resbalen) y para eso se usan los encoders.
Hay una opción "cutre" para usar "a lo rápido". Consiste en calibrar el robot con un pwm diferente para cada motor de manera que vaya recto. Entonces se usan esos valores como base. Lo malo es que en curvas o para otras velocidades ya no garantiza que funcionen simétricos.