Pages: [1]   Go Down
Author Topic: Control motor segun ángulo con PID  (Read 870 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos,

Estoy en el primer paso de realizar un balancín para avanzar hacia el quadricoptero.
Tengo el código para el IMU (en realidad FREEIMU). El problema lo tengo cuando implemento la libreria PID: la salida me da valores... ilógicos (según mi parecer)

Para hacer las pruebas tengo puesto en Input del PID la variable pitch del giroscópio: Input = pitch;
El Setpoint en 0.00: Setpoint = 0.00;
Y según he leído la librería PID ya viene configurada para darte la Output entre 0 y 255. De momento simplemente imprimo la Output por el puerto serie para no arriesgarme con el motor, quería por lo menos ver que los resultados eran coherentes.

El problema está en que cuando inclino el sensor ya desde el principio la variable Output simplemente va subiendo más o menos a 1 unidad/seg. (jugando con kp, ki y kd consigo que suba a 2 unidades/seg. mas o menos).

Independientemente de lo inclinado que esté el sensor, la variable no para de augmentar (hasta 255).

A parte, cuando vuelvo a poner el sensor estable en horizontal yo tengo entendido que la Output deberia ser 0.0 ya que es el mismo valor que tengo en Setpoint, pero prácticamente lo que hace es mantenerse en el último valor al que ascendió. Para conseguir el 0 tengo que inclinar el sensor en sentivo inverso para que vaya bajando al mismo ritmo al que subió...

Supongo que no estaré utilizando bién el PID; o las variables no las tengo como Input las querría.... (las tengo en radianes)(en grados me daba el mismo resultado).

Álguien tiene experiéncia con la libreria PID??? Necesito ayuda, llevo varias semanas sin encontrarle solución...

Para referencias: Sketch FREEIMU
la librería PID es la de ARDUINO

Muchas gracias por su tiempo
Logged

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 37
Posts: 2172
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Los resultados tienen cierto sentido:
Si lo inclinas, el PID comienza a regular hacia un sentido y como el control no tiene efecto sigue hasta llegar al tope. Cuando lo pones en horizontal, y con la variable a tope sigues en un punto estable, con lo que el PID no necesita corregir porque a 255 es estable. Al inclinarlo en sentido contrario, lógicamente, baja.

En resumen, tu variable de control no esta cerrando el bucle de control!

Que quieres más velocidad de cambio, sube la Kp, el término constante.
Logged

   

Málaga, Spain
Offline Offline
Edison Member
*
Karma: 37
Posts: 2172
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Aquí te dejo un enlace del blog de un colega del foro muy interesante y bien explicado.
http://real2electronics.blogspot.fr/2011/07/maqueta-de-control-pid-con-arduino.html?m=1
Logged

   

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

fm tiene razón. El PID implica un sistema de lazo cerrado, por lo que debe haber retroalimentación. Como no tienes el motos conectado y simplemente lo sigues inclinando el sistema va a fallar. ¿Has probado conectando el servo en el bañancín? ¿cómo va tu proyecto?
Logged

Pages: [1]   Go Up
Jump to: