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
11.4 K Visitas
juanjo
Respuestas: 451
Topic starter
(@juanjo)
Ardero
Registrado: hace 19 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 20 años

dragonet80, como ya he dicho antes el problema del PID es que no se lleva demasiado bien con los sensores discretos, ya que prefiere una información contínua (o en su defecto muy seguida), así que el PID oscilará pero no porque no pueda llegar a compensar el error de la diferencia de motores, sino porque no hay resolución suficiente para hacerlo (lo que provoca un aumento muy acusado de la incertidumbre que da lugar a esas oscilaciones.

Resumiendo, no es problema del algoritmo, es problema del uso del mismo (no está pensado para eso).

S2

Ranganok Schahzaman

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

Gracias,

Ranganok te envío el mensaje.

Hasta ahora lo que he estado viendo sobre el PID es este tema de la wiki:
http://es.wikipedia.org/wiki/Proporcional_integral_derivativo

Lo único que he hecho sobre este tema es realizar un bucle cerrado para controlar un motor de DC conociendo la funcón de transferencia del motor ( H(s) ) mediante operacionales (analógico), vamos un bucle muy sencillo.

Respecto a analizar las funciones de transferencia no tengo ningún problema, pero soy consciente que cuando se realiza control digital y no analógico aparecen polos que no son facilmente deducibles.

Una de las opciones que tengo es calcular la H(s) del motor, simplemente poniendo un sensor de efecto hall puedo saber las rmp y obtener la respuesta cuando le aplico una señal cuadrada, solo he de quitarle un polo si no recuerdo mal por que la entrada no es una delta, si no un escalón.

Respecto al control digital actualmente no se definir el lazo completo, además habrá una parte que será con G(z) y no se muy bien como hacer los cálculos finales.

Bueno espero que al final se llegue a agluna conclusión. Lo bueno es que ahora tengo el material para experimentar.

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

Una pregunta más.

Sería adecuado poner un PIC con cada uno de los drivers para que controle el motor y comunicarte con el driver + controlador por SPI indicandole la velocidad. ¿Hay algún problema conlos tiempos?

Creo que la mejor información que me vendría serían ejemplos donde se mezclen contorles digitales con controles analógicos, para ver como resuelve el tema de H(z) y H(s), por que tener que transofrmar todo a un dominio me parece que es un poco laborioso.

Responder
dragonet80
Respuestas: 1328
(@dragonet80)
Ardero
Registrado: hace 18 años

Ranganok, creo que hablamos de cosas diferentes. A ver si puedo explicarlo claro:

Disponemos de un robot de tipo diferencial con dos motores independientes y un conjunto sensor que nos da un error sobre la línea.
Tenemos una reductora mal ajustada o dos motores no totalmente idénticos (situación bastante probable con montajes caseros).
Que es lo que pasa cuando el robot está totalmente centrado sobre la línea? Que el control PID manda el mismo valor de pwm a cada motor. Al estar descompensados/desajustados uno gira más rápido que el otro. Esto provoca que el robot gire, aún estando centrado. Entonces el control PID actua de nuevo para compensar ese giro. Y se repite el proceso indefinidamente, produciendo una oscilación contínua. Eso sí, dependiendo de la resolución del conjunto sensor y de la respuesta del motor-controlPID está oscilación será más o menos apreciable, pero NUNCA inevitable. Aumentar la velocidad de muestreo no elimina este efecto, si tu conjunto motor-controlPID puede actuar más rápido, lo disimulará mejor, pero es imposible eliminarlo.

La única forma de asegurar un movimiento totalmente rectilineo usando motores DC, pasa por conocer y controlar la velocidad exacta de cada rueda. Y para eso necesitamos un "enconder" sea del tipo que sea.
Otra opción pasa por utilizar otro tipo de motores, por ejemplo, los paso a paso.

Todo esto, además, lo digo desde la experiencia de haberlo montado, comprobado y sufrido. Ahora estoy en la fase de solucionarlo.

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 20 años

dragonet80 ya te había entendido, y es por lo que digo que el PID no es para señales discretas. Voy a poner tu ejemplo llevandolo al infinito:

El motor al estar desajustado hace que el robot gire, pero como al momento el PID se da cuenta corrige ese desajuste (gira en sentido contrario). Si el sensor es discreto no se dará cuenta hasta pasado un tiempo T, por lo que tendremos una oscilación, si hacemos que T tienda a 0 (señal analógica) la oscilación cada vez será menor hasta desaparecer (en analógico el giro de ajuste del PID compensa al giro de desajuste del la reductora).

S2

Ranganok Schahzaman

Responder
Página 2 / 6
Compartir: