fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Algoritmo PID

29 Respuestas
9 Usuarios
0 Reactions
10.8 K Visitas
juanjo
Respuestas: 451
Topic starter
(@juanjo)
Ardero
Registrado: hace 18 años

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.

Responder
28 respuestas
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

Vamos ha hacer el planteamiento desde el principio porque veo que no se está entendiendo.

Tenemos dos motores que se controlan con una señal de tensión analógica (para simplificar) de tal forma que si cambiamos esa señal cambiaremos la relación entre las velocidades de los motores. Para simplificar imaginemos que para una señal de 0V los motores van a la velocidad nominal y que esta idealmente es de 90rpm. Si yo pongo una tensión mayor a 0V tendré el motor de la derecha girando más lento y el motor de la izquierda más rápido (giro a la derecha), y si pongo una tensión menor a 0V tendré el motor de la izquierda girando más despacio y el motor de izquiera más rapido (giro a la izquierda). A la señal que controla los motores la llamaremos u(t)

Por otro lado tengo una señal de tensión analogica que vendrá medida por el sensor que cambiará de forma lineal con la desviación de la línea respecto al centro (0V -> para el centro de la línea, >0V para la línea desplazada por la derecha y <0V para la línea desplazada por la izquierda). A esta tensión la llamaremos y(t)

Ahora montamos nuestro sistema PID, tendremos una señal de referencia que es por dónde queremos que vaya la línea ( r(t) ) y una señal de error que es lo que le metemos al PID ( e(t) = r(t) - y(t) ). A la salida del PID tendremos la señal u(t) que será la que entre a los motores.

Una vez claro el sistema (sería más fácil con un dibujo), procedamos:

Parte proporcional: P = kp · e(t)
Parte derivativa: D = kd · derivada (e(t),t)
Parte integral: I = ki · integral ( e(t), t) <-- Termino acumulativo

Si por un desajuste en los motores, uno gira más rápido que el otro tendremos que el robot gira y la señal y(t) se desvía del valor 0 (supongamos que se desvía a la derecha -> y(t) > 0V). Si y(t)>0V --> e(t)= 0 - y(t) < 0V por lo tanto el PID actua para corregir esto creando una señal u(t) < 0V para que gire a la izquierda. Una vez que se ha estabilizado el sistema la señal y(t) = 0, e(t) = 0 pero u(t) < 0V porque el PID estará compensando el error de los motores (para eso está el coeficiente Integral). El error está en pensar que la componente integral se hace cero cuando está centrado, dado que el error integral es acumulativo por lo que sumar 0 deja la suma al valor que estaba anteriormente (no la pone a cero).

Por otro lado da igual que el motor tarde en responder, ya que eso nos importará en las curvas, no en este caso que es una recta suficientemente larga para estabilizar la salida.

Espero que se halla entendido un poco mejor

S2

Ranganok Schahzaman

Responder
juanjo
Respuestas: 451
Topic starter
(@juanjo)
Ardero
Registrado: hace 18 años

Buenas,

Adjunto unas imagenes de dos encoders, uno para realizar test para motores y hayar la H(s) del mismo y el otro para intentar integralo en el motor.

He realizado una prueba con HEDS-5540 y un mabuchi de los pequeños y vaya si hay diferencia entre las características de las tables y las medidas que se optienen. Bueno también hay que indicar que es con sobre tensión, 🙂 Lo interesante es poder recoger los datos qeu entrega el encoder en fracciones de milisegundos o menos para capaturar la respuesta impulsional y después poderla representar, pero es un trabajo un poco comple, seguro que con un PIC y los timers y contadores que tiene se puede enviar los datos por RS-232 al PC.

Adjunto también el encoder más pequeño, bastante delicado, me temo por la precisión qeu tiene el disco que será bastante difícil intentar construir uno.

Responder
joviwap
Respuestas: 301
(@joviwap)
Ardero
Registrado: hace 19 años

Juanjo! veo que ya te han llegado los encoders, el resto de cosas también las tienes?

Responder
juanjo
Respuestas: 451
Topic starter
(@juanjo)
Ardero
Registrado: hace 18 años

Juanjo! veo que ya te han llegado los encoders, el resto de cosas también las tienes?

Si claro, esto llega en 24 horas. Te dí un toque la semana pasada, lo que pasa que con tanta visita tendrás el tiempo muy limitado, 🙂

Este finde voy a Francia, así que si quieres a partir del martes puedes pasarte.

Saludos.

Responder
Página 6 / 6
Compartir: