TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: NoSepComo en 25 de Abril de 2012, 14:14:29

Título: Ayuda teórico/práctica con un PID
Publicado por: NoSepComo en 25 de Abril de 2012, 14:14:29
Hola a todos,
Tengo que implementar un control PID y lo único que tengo como dato es el tiempo de muestreo de las entradas, y que lo que se pretende es que se regule una entrada que estará entre -127:127 a una salida entre -16:16. Mis apuntes de control electrónico ya quedaron un poco olvidados y os pido ayuda si alguien lo tiene mas fresco sobre como puedo sacar la ecuación en diferencias que define el PID, puesto que no me acuerdo de como sacar las constantes y eso...  :oops:
Gracias a todos por vuestra ayuda.
Saludos!!
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Suky en 25 de Abril de 2012, 14:22:43
O sea que la función de transferencia es solo un k ? y=k*u  :?
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Picuino en 25 de Abril de 2012, 16:44:40
¿Qué es lo que quieres controlar? ¿Cuál es el tiempo de muestreo?
Si copias los datos que tengas, te echo una mano.


Saludos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: NoSepComo en 26 de Abril de 2012, 04:30:05
Hola gente,
Gracias por vuestras respuestas, el tiempo de muestreo es de una décima de segundo, y si suky, yo tampoco lo entiendo bien que la función de salida sea simplemente una constante de proporcionalidad, me resulta raro... Es por un favor que me han pedido, pero no tengo más datos de la planta que esos, o sea que en realidad es omo hacer un mapeo y el PID supongo que lo único que hace es reducir el error debido a la constante de proporcionalidad.
Si podéis sacar algo de esto os lo agradezco, no obstante trataré de coger mas información.
Un saludo a todos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Suky en 26 de Abril de 2012, 10:24:45
..y si suky, yo tampoco lo entiendo bien que la función de salida sea simplemente una constante de proporcionalidad, me resulta raro...

Entonces no tenes nada que controlar. Averigua mejor de que se trata. Puede que te hayan dicho que esos son los rangos mínimos/máximos pero el sistema puede ser de 1º orden. A ciegas no podes calcular nada
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Picuino en 26 de Abril de 2012, 13:42:00
y = u / 8;

Así se consigue salida lineal sin saturaciones.

Por ahora se ajusta a los datos de los que disponemos.

Saludos.


Título: Re: Ayuda teórico/práctica con un PID
Publicado por: NoSepComo en 27 de Abril de 2012, 03:45:51
Según decía suky, el problema es que eso poco control necesita, no es ni un sistema de primer grado. Como implementaría el PID ahí?
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Picuino en 27 de Abril de 2012, 10:16:20
Hay controles que son Todo/nada. La salida sólo puede valer 0 o 1 y sin embargo pueden tener control PID.
Los sistemas de 1er grado pueden ser muy complejos si se añaden retardos (por ejemplo el control de temperatura de un horno)

Pero por ahora es como si te dicen que programes un ordenador que tiene un teclado, un monitor y dos discos duros. ¿Que lo programe? ¿Para hacer qué?

Hace falta saber cuál es el problema. Qué sistema hay que controlar.

Saludos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Suky en 27 de Abril de 2012, 10:27:39
Según decía suky, el problema es que eso poco control necesita, no es ni un sistema de primer grado. Como implementaría el PID ahí?

Es que no hay nada que controlar! Si fuera de 1º grado, 2º etc... La salida, dada una señal escalón como entrada, puede por ejemplo: demorar mucho a establecer su valor final, tener un sobre impulso muy alto, gran oscilación, etc... Y con la aplicación de controles proporcionales, derivados o integrales (http://es.wikipedia.org/wiki/Proporcional_integral_derivativo) vas solucionando esos problemas.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: NoSepComo en 28 de Abril de 2012, 07:41:00
Hola chicos,
Me han dicho que le modelo de la planta a controlar puede ser cualquiera (horno por ejemplo), lo único que les interesa es el tratamiento del escalado (pre y post), osea, que tengo que hacer un programa de ejemplo de un control PID en asm vamos... Siento si os hice perder el tiempo con lo de antes, a mi también me parecía muy raro.
Si tenéis algún ejemplo de implementación de control en asm me ayudaría si me lo pasaseis.
De nuevo gracias y perdonad si os hice molestar.
Un saludo
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: marqueses en 28 de Abril de 2012, 18:40:29
Hola,

no sé de donde sacais que el controlador debe ser solamente P por que la salida sea de rango [-16,16]. Os pongo un ejemplo, control de temperatura con un motor de continua que hace de ventilador. Si se usa un LM35 a entrada al controlador viene siendo la del ADC, luego la entrada variará de 0 a 1024 (10bits) que se pueden traducir de 0 a 5V. La salida, alimentando el motor a través de un L293D a 15V y enviando una señal de PWM, la salida del controlador debería ser de 0 a 4096 (por ejemplo, 0=0%duty cicle y 4096=100%duty cicle).

Por lo tanto, tenemos unas señales originales de entrada que varían de 0 a 1024 y unas de salida que varían de 0 a 4096.

Lo importante es que en la formula del PID estamos hablando de lo mismo y no juntemos la velocidad con el tocino, quiero decir, que hablemos en voltios, o en grados o en una sola unidad tanto para variables de entrada como para variables de salida, realizando la conversión correspondiente antes y después del control PID.

Por ultimo, en ASM no tengo ningún condigo PID, y si trabajas en CCS tengo un par de métodos implementados.

Saludos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Suky en 28 de Abril de 2012, 19:12:45
Si tu sistema es y=10*u, le colocarías un control?  :shock: Otra cosa es que los datos dados sean máximos y mínimos, y la función de transferencia a imaginación  :D
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: NoSepComo en 29 de Abril de 2012, 06:57:45
Gracias marqueses, en CCS yo también tengo algunos de muestra pero necesito ASM. Y si, Suky, es tan sencillo como dices, lo que pasa es que a veces, cuando a uno le cuentan las cosas a medias pues se empieza a hacer pájaros en la cabeza y al final piensa en cosas dificilísimas que no es ni de lejos lo que se necesita jeje  :oops:, pero es como dices, dados los máximos y mínimos, implementar tu el control de la función que te de la gana. Es decir, te dicen que la entrada, ya digitalizada, va de 0 a 256 y lo único que tienes que hacer es desplazarla a -127:127 e implementar el PID que te de la gana, después la salida truncarla para que vaya de -16:16 y finalmente desplazarla para que esté en 0:32 para los actuadores que hay a posteriori.
Por eso si alguien tiene un ejemplo sencillo de algún PID en ASM se lo agradecería si me lo pudiese pasar.
Gracias y un saludo.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: marqueses en 01 de Mayo de 2012, 16:46:08
Si el sistema es y=10*u no se está controlando nada, solo estas dando una salida en función de la de una entrada. El control existe si comparas esa u con un setpoint, donde existirá un error y habrá que aplicar el control PID, aunque hagas I y D =0.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Suky en 01 de Mayo de 2012, 17:29:53
Si el sistema es y=10*u no se está controlando nada, solo estas dando una salida en función de la de una entrada. El control existe si comparas esa u con un setpoint, donde existirá un error y habrá que aplicar el control PID, aunque hagas I y D =0.

u es la señal de entrada al sistema... Al PID ingresa e(t), o sea u(t)-y(t)..
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: marito en 13 de Junio de 2012, 10:41:30
Hola gente, estoy trabajando en un controlador PID para un péndulo invertido y quisiera hacer una consulta.

He ajustado la medición del ángulo de inclinación y la respuesta de los motores es correcta. Pero hasta el momento no he logrado estabilizar el péndulo. Estoy trabajando con control proporcional-derivativo.

Actualmente, tengo unprograma cíclico que no tiene un tiempo fijo. Lo que hago es medir ciclo a ciclo la duración del ciclo anterior y usar ese tiempo para mi control.

La duda que tengo ahora es, el ciclo de mi controlador debería ser fijo o no tiene influencia en el control?

Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Picuino en 13 de Junio de 2012, 10:53:58
Suele ser fijo, pero hay controles que mejoran con tiempo de control no fijo porque así se evitan resonancias.

Siempre que midas bien el tiempo entre ciclos y que sea menor que 0.1 veces el tiempo de respuesta mecánica del sistema, imagino que puede funcionar.

De todas formas con tiempos fijos se simplifica mucho el control ¿Por qué no utilizar tiempo fijo?


Saludos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: marito en 13 de Junio de 2012, 11:09:47
En principio no utilice tiempos fijos porque me pareció más sencillo medir el tiempo de ciclo y pensé que no afectaba el tiempo de ciclo variable al controlador.

Por otro lado no tengo bien en claro que procesos tengo que hacer con un tiempo determinado, es decir, medir señales, controlador, envío de referencia a motores... etc.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Picuino en 13 de Junio de 2012, 11:22:29
En principio no utilice tiempos fijos porque me pareció más sencillo medir el tiempo de ciclo y pensé que no afectaba el tiempo de ciclo variable al controlador.

Por otro lado no tengo bien en claro que procesos tengo que hacer con un tiempo determinado, es decir, medir señales, controlador, envío de referencia a motores... etc.

Hay que hacer todo eso ( medir señales, controlador, envío de referencia a motores... etc. ) por ejemplo 50 veces por segundo.


Saludos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: marito en 13 de Junio de 2012, 11:39:01
Mi programa actual tiene una duración aproximada de 6mseg.

Podría hacer que mi programa se ejecutará cada 10mseg? Que sería más eficiente, llamar con una interrupción o generar un delay al final de mi programa para el próximo ciclo de ejecución?
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: Picuino en 13 de Junio de 2012, 11:55:59
Una interrupción es más estable y precisa.

Saludos.
Título: Re: Ayuda teórico/práctica con un PID
Publicado por: marito en 13 de Junio de 2012, 12:02:40
Buenísimo! Voy a trabajar en ello y luego comento los resultados!

Muchas gracias por tu ayuda Picuino!

Saludos