Autor Tema: ¿Cómo hago PID con PBP?  (Leído 28945 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
¿Cómo hago PID con PBP?
« en: 19 de Marzo de 2006, 02:02:00 »
Hola.

De nuevo me dirijo a el foro (había estado ocupado con la tesis pero ya estuvo).

Siempre quise hacer un robot controlado por PID.
Desde que estaba en la carrera lo mas que hice fue un "robot" (un carro desarmado con un SN754410 y un 16F872) que al activarse un comparador en RBO (como interrupción) dejara de ir para adelante y cambiara de dirección; todo esto en ensamblador.

Ahora quiero hacer uno algo más sofisticado: con PID.

Apenas estoy en la etapa de recolectar información y no la he leido toda por completo pero esto es lo que tengo:
*Using the PWM (AN564)
*Low-Cost Bidirectional Brushed DC Motor Control Using the PIC16F684 (AN893)
*Implementing a PID Controller Using a PIC18 MCU (AN937)
*Accurate Odometry and Error Modelling for a Mobile Robot (PDF y no recuerdo el enlace)
*Control Industrial. Guía del Estudiante. Versión 1.1 en Castellano (PDF parallax).
*Using a PID-based Technique For Competitive Odometry and Dead-Reckoning
http://www.seattlerobotics.org/encoder/200108/using_a_pid.html#AboutTheRobot
*A Tutorial and Elementary Trajectory Model for the Differential Steering System
of Robot Wheel Actuators
http://rossum.sourceforge.net/papers/DiffSteer/#d1
*Alias: PID based control equations
http://abrobotics.tripod.com/ControlLaws/PID_ControlLaws.htm


Creo eso es lo que tengo hasta ahorita (11:57 PM aqui el día de 18-03-2006).

La pregunta es:

¿Alguien tiene información de cómo realizar rutinas de PID o de lazo cerrado?
¿Tendrán un programa en PBP preferentemente?

Se supone ( y digo "se supone" ) que llevé Sistemas Lineales 1 y 2 y que se debe saber lo de P,PD,PI,PID (OGATA, DORF, DISTEFANO y muchos mas que no vale la pena mencionar, me dieron muchas noches tormentosas).

Cabe mencionar que no quiero ser ningún parásito y se les dará todo el crédito por haber ayudado.

Estaré usando motores de corriente directa controlados con SN754410 o A3959SB.
PIC18F452 o 18F252 (quiero hacerlo con los dos PWMs).

No podré programar porque presté mi PICSTART PLUS y el PIC17C44 que viene dentro se lo sacaron y ya no sirve. Mande pedir la actualización para convertir mi programador viejito en uno que se programe solo (FLASH).

Ya anduve buscando en los foros y no encotré información que pudiera tomar para aplicar (creo encontré algo de Posher creo que se llama, pero está en C y C no se).

Gracias de antemano.

Mario Alberto Camarillo Ramos
Ingeniero en electrónica (¡¡¡¡¡ AL FIN !!!!!)
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: ¿Cómo hago PID con PBP?
« Respuesta #1 en: 16 de Julio de 2006, 22:11:31 »
Hola Mario

Soy estudiante de ing electronica y tengo pensado implementar un proyecto con PID digital, solo que por el momento ando viendo que la cosa es un poco diferente que en lo analogico. He estado leyendo acerca de que cambia un buen el analisis ya que hay tiempos de muesteos y cosas de esas.

Me gustaria saber como es que vaz con tu proyecto y haber si me pudieras ayudar con algo de bibliografia extra que hallas encontrado.

Por el momento ando viendo que proyecto quiero hacer ya que nose bien que realizar.

Gracias

El Rock es cultura
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: ¿Cómo hago PID con PBP?
« Respuesta #2 en: 16 de Julio de 2006, 23:14:16 »
Hola.

¡¡¡¡¡UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUY!!!!!, tenía mucho tiempo de no visitar este tema.

Sobre lo que dices:

Yo también tuve que hacer un PID para mi clase de sistemas lineales 2 y no es tan complicado hacerlo de manera analógica.

Si andas buscando un proyecto y te dan a escoger entre analógico o digital, te recomiendo la analógica. La digital introduce muchas variables que son algo complicadas de procesar.

Si lees la última nota de bibliografía te darás cuenta de lo que se necesita (de una manera muy sencilla) para implementar un PID en un robot, o un motor en este caso.

Te digo esto porque es mas fácil conectar de alguna manera un potenciómetro a un rotor de motor (por una pluma, goma, etc) que colocar un disco (encoder) en la llanta o rotor del motor, posicionar un par infrarrojo para que recoja la señal y "acomodar la señal" para introducirla al µicro. Eso es si quieres mucha resolución y te vas por lo de luz, te puedes ir por lo magnético y colocar sensores de efecto Hall y lo mismo que con lo de luz (pero pierdes algo de resolución).

Con lo analógico solo estás limitado a los grados/resistencia que tenga el potenciómetro (si es de posición) o a las vueltas por resistencia (si es de control de velocidad).

Si tienes el Ogata, por ahi hay un diagrama de lo que te menciono, un motor con sus conexiones para implementar un control.

Lo puedes hacer como la nota de aplicación de la µicrochip, donde miden la fuerza contraelectromotriz (o electromotriz, no recuerdo) del motor y ajustan  RPM/FEM (o FCE).

La ventaja de hacerlo analógico (como todo lo analógico) es que tomas TODO el espacio muestral en tiempo ilimitado:
Lo digital recuerda que son muestras de una señal ya sea continua o discontinua (Series de Fourier si no recuerdo mal). Siempre perderás información de la señal y depende del tiempo de muestreo y cantidad de muestras en ese tiempo.
Si lo haces digital, tu programa debe estar ciclando toda la información y deberás considerar las muestras a tomar como el error, Kp, Kd, Ki, con sus correspondientes tratamientos digitales para cada situación (mira la última referencia en la bibliografía).

Si lo haces analógico no te preocupas por el tiempo de muestra porque siempre lo estás haciendo siempre y cuando el circuito esté alimentado.

Mira, no tengo código porque no me metí de lleno a esto (aparte estoy trabajando y estoy apunto de entrar a una maestría) asi que que no te puedo ayudar con código.
Quizá me meta ahora que regreso el gusanito. :mrgreen:

Yo intenté sacar las características del motor que usé usando este libro:
Build your own combat robot, de Pete Miles.
Digo intenté porque no pude determinar la inductancia, no supe como.

Pero, si tienes interés y los medios, consíguete este:
Mobile Robotic Car Design, de Pushiko Kachoroo.
Este libro es fa si nan te. Te dá todo lo que necesitas saber, cómo sacar la inductancia de un motor (ellos lo compran y rebobinan) todo de todo, gráficas de Matlab, diagramas de flujo, variables de estado, todo.
Lo malo es que usan un DSP de Motorola en C y apenas estoy comprendiendo C (C Primer Plus de Stephen Prata), pero también usan un PIC en ensamblador.

Lo mejor sería que te consiguieras un motor con sus caracteristicas (RPM sin y con carga, corriente máxima, mínima, constante de fuerza, de velocidad, todo) y lo utilizaras para diseñar el control, ya tendrías la planta. La función de transferencia de un motor no la recuerdo pero si ya tienes los valores solo la sustituyes.

Bueno, si te decides por lo analógico pues que te salga.
Si te decides por lo digital pues....... que te salga.

Si ocupas ayuda menciona qué y trataré de ayudar, aunque tengo 2 años de haber salido y mas de no utilizar Bode, Nyquist, Fourier, Laplace, y los demas locos que tormentan la vida del estudiante de ingeniería electrónica.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado LETAL

  • PIC16
  • ***
  • Mensajes: 101
Re: ¿Cómo hago PID con PBP?
« Respuesta #3 en: 27 de Julio de 2006, 08:58:05 »
Quiero implementar un control pid con PBP y dispongo de un 16F877 para hacerlo. Que opinan, son suficientes las características de este micro?

Es necesario que tenga un conversor A/D externo al pic o me basta  con los 8 que trae(son 8 verdad?). Me refiero a si la resolución(10bit) que tienen y la velocidad de muestreo que pueden llevar a cabo es suficiente.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: ¿Cómo hago PID con PBP?
« Respuesta #4 en: 27 de Julio de 2006, 14:56:42 »
Hola.

Pues depende para qué sea lo que lo necesitas.

Si mal no recuerdo son 10 bits justificados a la derecha u 8 justificados a la izquierda........ no lo recuerdo bien.


Si no recuerdo mal creo eran 19.4 o 6 µicrosegundos el tiempo de conversión de un A/D en los PICs 16FXXX a 4 megas (20 para estar seguros).

Sería recomendable que colocaras qué es lo que vas a hacer: control de qué, en base a qué, con respecto a qué.

Lo anterior te lo menciono porque no tiene caso controlar un horno donde la temperatura varia cada minuto porque es mas sencillo decirle al µicro que no se pase de cierta temperatura (recuerda que los PIDs tienden a mantener estable una planta) y cuando se pase activar un sistema de enfriamiento que, cuando llegue a cierta temperatura se apague.

Si es velocidad y son segundos los que dispones, aún ahi se puede hacer trampa como te digo arriba pero, quizá sea recomendable usar un PD o PID (PID casi no se necesita en carritos por su retardo, desestabilizan la planta).

No creo que tengas mayor problema con ese µicro ya que tiene interrupciones en el A/D. Lo único que pudiera ser malo es la memoria (8K si no me falla la memoria, he estado desconectado de los PICs desde Noviembre del 2005, reviso teoría pero no me he puesto a programar).

Lee la última referencia bibliográfica, en ella hay muchiiiiiiiiiiiiiiiiisima información sobre lo que estás buscando.

Como le comenté a la otra persona (pantera), ya no le he dedicado mucho tiempo a este proyecto pero, si se animan, con mucho gusto trataré de ayudar.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado LETAL

  • PIC16
  • ***
  • Mensajes: 101
Re: ¿Cómo hago PID con PBP?
« Respuesta #5 en: 27 de Julio de 2006, 17:50:09 »
Para hacer un controlador de temperatura que por lo que pude ver se modelizan parecido, es decir la forma de la curva es similar en diversos procesos térmicos, aunque pueda cambiar los tiempos.

Estoy en la duda si usar el 16f877A o alguno de los 18F, que opinan?

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: ¿Cómo hago PID con PBP?
« Respuesta #6 en: 28 de Julio de 2006, 03:12:05 »
Con ese µicro está bien supongo.

Si es de temperatura no necesitas estar tomando lecturas en intervalos pequeños, la variación de temperatura no es tan rápida como lo pudiera ser la velocidad de un motor.

Revisa el PDF de Parallax al que hago referencia, ahi viene un artículo de cómo programar un PID para temperaturas, está en BasicStamp pero creo que lo puedes comprender, vienen gráficas y todo (yo medio lo leí pero no le puse mucha atención, le puse mas a la última referencia).
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado LETAL

  • PIC16
  • ***
  • Mensajes: 101
Re: ¿Cómo hago PID con PBP?
« Respuesta #7 en: 08 de Agosto de 2006, 18:28:13 »
Mario piensas que con el 16f877 alcanzará su memoria de programa? porque debo hacer el control de temperatura y manejar el lcd y el teclado por donde introduzco los parámetros.


Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: ¿Cómo hago PID con PBP?
« Respuesta #8 en: 08 de Agosto de 2006, 18:39:22 »
Hola:

Te queda sobrado para eso el 877 LETAL, tiene 8K de memoria, por lo que creo para un control de temperatura no excederas de ese limite.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: ¿Cómo hago PID con PBP?
« Respuesta #9 en: 09 de Agosto de 2006, 16:36:26 »
Hola Letal.

Lord tiene razón, el µicro 16F877 está bien para eso.

* Un puerto para el LCD.
* Un puerto para el teclado (bueno, depende si es por interruptores cruzados o por voltaje).
* Una terminal (o 2) para el sensor.

Con 8 K creo hasta excede en memoria (un 16F872 u 873 estarían bien), pero si es recomendable por la cuestión de los puertos (por el teclado). Si es de voltaje pues solo ocupas una terminal analógica, si no es asi, ocuparás un puerto.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: ¿Cómo hago PID con PBP?
« Respuesta #10 en: 11 de Agosto de 2006, 17:45:56 »
mira si diseñas tu controlador pid digital no te sera nada complicado si tuvieras el diseño de un controlador pid analogo la cual los parametros son lo que buscabas,o ya tienens algun diseño en un libro como el ogata simplemente ese diseño analogo lo puedes digitalizar con el matlab dandote la ecuacion, para usar transformada z la cual para el microcontrolador esa ecuacion en z se transforma en una ecuacion de diferencias , si tienes alguna duda con respecto a como hacerlo en matlab ,mandame los parametros o mejor dicho las ecuacion en laplace de tu pid y te o mando digitalizadoi para que lo uses en el pic de paso la gente aca aprende en caso no sepa , a me olvidaba el problema es solo el punto flotante por lo que lo puedes aproximar a un valor entero , y si es temperatura como decia lord esto se luce por ser un proceso lento y basta un 16f877 sin problemas  8)

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: ¿Cómo hago PID con PBP?
« Respuesta #11 en: 11 de Agosto de 2006, 20:28:22 »
Hola.

Electronando, también había pensado en eso, cambiar laplace a Z, el problema se originaba cuando quería implementar esa ecuación en programación.

Como lo mencioné en los mensajes anteriores, la forma de aplicar las ecuaciones analógicas es diferente a las digitales (me refiero a la práctica).

Las analógicas solo pones la ecuación, armas el circuito y listo.
Las digitales debes encontrar un tiempo de muestreo, acondicionar la señal de entrada, etc.

Yo usaba el Matlab para hacer lo que tu dices (Ogata) y también para hacer filtros digitales (usando Matlab) pero ya no lo recuerdo.

¿Me puedes dar un ejemplo de cómo harías eso que dices?
No importa la ecuación. Haz una simple (todo igual a 1).

Gracias.


PD: Ahora que me regresen el programador y algunas cosas prestadas retomaré el tema he iré publicando resultados.

La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado saracatunga

  • PIC10
  • *
  • Mensajes: 39
Re: ¿Cómo hago PID con PBP?
« Respuesta #12 en: 12 de Agosto de 2006, 17:08:06 »
Para el controlador de temperatura que planta se supone se toma com referencia, de primer o segundo orden. Mi surgió la duda porque ví procesos térmicos modelados comp plantas de primer o de segundo orden justificándose en que en general se modela así.
Pero porque una o la otra, cual conviene? y otra pregunta como podría modelarla sacando el modelo yo o algún ejemplo concreto desarrollado referido a temperatura.


Me pareció que estoy dentro del hilo por eso pibliqué aquí. Está relacionado.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: ¿Cómo hago PID con PBP?
« Respuesta #13 en: 13 de Agosto de 2006, 19:16:47 »
Hola.

Pues mira, con respecto a tu pregunta:
Pero porque una o la otra, cual conviene?

No tengo una respuesta a tu pregunta ya que este tipo de procesos (en los cuales he estado en contacto, puede haber mas) no necesito aplicar un controlador PD o PI o PID, con un simple P es suficiente debido a la variación tan lenta que tienen.
Es mas, si no recuerdo mal, hasta con un simple circuito de ventana se puede controlar el proceso.

Lo anterior claro es en el mundo analógico, en el digital es otra cosa:
como podría modelarla sacando el modelo yo o algún ejemplo concreto desarrollado referido a temperatura.
Esa es la pregunta del millón.

Puedes aplicar estímulos como calentar la planta o, si es un proceso encendido/apagado, hacer variaciones a la temperatura para saber su comportamiento. Existen maneras de uno determinar o (en el peor de los casos) suponer el comportamiento de un proceso. Eso es algo que aún no he podido del todo aterrizar porque si bien es cierto Ogata, Dorf, Distefano y compañia proponen problemas "reales" con ecuaciónes, ¿de dónde salieron? ¿cómo las sacaron? ¿siempre es asi?.

Lamento no poder responder a esto, en cierta manera me siento algo responsable porque abrí el tema y no he podido contribuir en la medida que quisiera.
Lo que la mayoría pregunta no es algo tan sencillo de responder para mi (quizá para alguien si pero para mi no) porque ya dejé mucho tiempo pasar (como 3 años) de que no agarro un curso de control.

Muchas de las preguntas que hacen (en mi particular punto de vista) son propias de una licenciatura o ingeniería y, aunque soy ingeniero, me he desconectado un poco de esto.

Es por eso la razón del tema, para poder aprender y (en la medida de lo posible) enseñar.

Las personas que estén interesadas en control de temperatura pero sin PID y en ensamblador consulten esto:  http://www.elecdesign.com/Articles/ArticleID/2476/2476.html

Es un termómetro que fue usado en una empresa de aqui (creo). Es uno de los 20 artículos mas solicitados de electronic design y fue escrito por el profesor de µicros (Ricardo) y dos compañeros de la escuela (medio los conocí, salieron muuuucho antes que yo).

Tal vez alguno de los moderadores mueva el enlace al foro de ensamblador pero creo que es relativo al tema.

Espero que tanto bla bla bla no te haya mareado y, como ya le respondí a todos, cuando tenga avances los haré llegar.  8)

Saludos.
« Última modificación: 13 de Agosto de 2006, 19:22:46 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: ¿Cómo hago PID con PBP?
« Respuesta #14 en: 14 de Agosto de 2006, 00:35:52 »
aca pongo un ejemplo super sencillo para poder pasar un pid analogico a uno digital y poder implementarlo en su pic sin problemas el unico como verarn sera el punto flotante creo con el proton se puede solucionar
>> P = tf([1 2],[1 1 10])
 
Transfer function:
   s + 2
------------
s^2 + s + 10


>> q=c2d(P,0.5)
 
Transfer function:
    0.423 z - 0.1046
------------------------
z^2 - 0.01487 z + 0.6065
 
Sampling time: 0.5

al numerador y denominador le multiplico por z^-2

quedara:

    0.423 z^-1 - 0.1046z^-2
-------------------------------------
1 - 0.01487 z^-1 + 0.6065z^-2

y la ecuacion en diferencias que se implementa en los filtros digitales(practicamente el pid ,pi,p es uno de ellos) reales es la siguiente

o se podria añadir estos coeficientes al pic para un pid de temperatura :
Y(n) -0.01487Y(n-1)+0.6065Y(n-2)=0.423U(n-1)-0.1046U(n)

hay muchas de las ecuaciones estan en los help de matlab la cuestion es tener la paciencia para poder leerlos y recordar
claro espero sea de ayuda y si alguyien tiene mayor experiencia en el tema pueda ayudar 8)