TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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!!
-
O sea que la función de transferencia es solo un k ? y=k*u :?
-
¿Qué es lo que quieres controlar? ¿Cuál es el tiempo de muestreo?
Si copias los datos que tengas, te echo una mano.
Saludos.
-
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.
-
..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
-
y = u / 8;
Así se consigue salida lineal sin saturaciones.
Por ahora se ajusta a los datos de los que disponemos.
Saludos.
-
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í?
-
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.
-
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.
-
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
-
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.
-
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
-
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.
-
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.
-
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)..
-
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?
-
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.
-
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.
-
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.
-
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?
-
Una interrupción es más estable y precisa.
Saludos.
-
Buenísimo! Voy a trabajar en ello y luego comento los resultados!
Muchas gracias por tu ayuda Picuino!
Saludos