Controlador Autosintonizable con Microcontrolador

:) Buenas queridos amigos de este gran foro, bueno en esta ocasión me topé con un gran dilema, el querer hacer un controlador pid autosintonizable, básicamente el laboratorio que nos pidió trata de lo siguiente:
1) controlador pid convencional ya sea forma interactivo, paralelo, o clásico.
2) controlador pid con una interfaz con el usuario, tal que puedas cambiar los parámetros del pid en línea, es decir los valores Kp, Ki, Kd, y poder sintonizar asi la mejor performance de tu sistema controlado.
3) controlador pid autosintonizable por el método del relevador, es decir que para cualquier planta el sistema de control oscilara unas 5 veces para poder calcular los parámetros de la planta y así poder calcular los parámetros Kp,Ki,Kd con las tablas de Ziegler y Nichols.


bueno comentarles que todo esto se requiere en un solo microcontrolador y que con unos switchs se pueda seleccionar el tipo de control que se desea realizar, casos 1),2) ó 3)


También decirles amigos que los casos 1) y 2) ya esta embebido en el pic 16f877a y funcionan a la perfección, el problema de todo esto es que la etapa de sintonización por el método del relevador no se como hacerlo :cry: ya voy semanas rompiéndome la cabeza! no encuentro tampocoinformación en la red que sea tan detallada, No sé si tienen algún libro de Karl Astrom o algo que pueda serme útil, bueno adjutaré mi código para aquellos que quizá necesiten, pero por favor ayúdenme ó trabajaremos en ello! Gracias.​
 
Última edición:
En el caso 3) de que sea autosintonisable, supongo que es por el metodo de Ziegler-Nichols a lazo cerado no?, porque existe el metodo a lazo abierto. Recuerdo que los valores de Ki y Kd debian valer cero, y lo que se hacia era ir variando el valor de Kp hasta obtener una oscilacion sostenida a la salida de la planta, luego se entra a una tabla y se sacan los demas valores, te adjunto un PDF de este tema, donde aparecen las formulas que tenes que usar, espero te sirva, saludos.
 

Adjuntos

  • PID.rar
    1.3 MB · Visitas: 30
hola @juanma2468 bueno poder decirte que el señor karl Astrom en 1987 impuso este metodo que tiene el nombre de (autosintonizacion por el metodo del relevador "autotinning with relay method") es un metodo a lazo cerrado que en principio se realiza como 4 a 5 ciclos con el control on/off (relé) hasta que la señal de salida se desfasa 180 grados de la entrada a la planta es decir la salida del relé una vez teniendo ese desfaze que no se como hacerlo se debe medir el Tu y Ku (muy parecido al metodo de ganancia gritica de Ziegler yNichols) y con esos valores calcular con la tabla de Ziegler y Nichols los parametros del PID adjunto una fotografia del libro de mi ingeniero con respecto al tema! gracias
thump_8518592a.jpg

thump_8518595b.jpg

El problema radica en como detectar el periodo de la señal, y como detectar la amplitud o sea el Ku con el microcontrolador pic, o sea en el programa como hacerlo. cualquier duda, con confianza, yo tambien sigo estudiando y si lo logro antes le avisare con gustooo
 
Hola @dquimbert, yo tambien sigo siendo alumno, aun estoy en 5to año de la facultad de ingenieria, y acabo de pasar la materia de Teoria de Control, por lo que entiendo perfectamente por lo que estas pasando, jeje.
Bueno en cuanto al metodo que mencionas, no lo vi en el curso que realice, pero parece no ser muy complicado. En cuanto a como medir el periodo es facil, todos los pic traen un conjunto de timers, de los cuales unos son para temporizadores y otros son para control de eventos, tal como el que precisas. Basicamente lo que tenes que detectar es cuando se produce un cruce por cero, eso lo puedes hacer por alguna pata que posea comparador, de lo cual comparas con cero (masa) y ahi disparas el timer de evento, este incrementara un registro cada cierto tiempo, esto figura en la hoja de datos, y cuando vuelva a pasar por cero lo detiene, entonces ahi obtienes el tiempo entre un cruce por cero y el otro, o sea su pertiodo Tu. Para el caso del valor de Ku, lo mejor seria que muestrearas la salida con un conversor AD del propio micro, y de ese valor muestreado obtendrias el valor de la salida en forma digital. Desde ya cabe decir que todo esto es mas sencillo si lo realizas en lenguaje de C, porque en asambler puede que se te complique luego para hacer los calculos, no es imposible, pero en C te puedo asegurar que sale mucho mas rapido. Bueno espero haberte dado una idea, solo una idea de por donde arrancar, luego te toca leer la hoja de datos a fondo en la seccion de timers y ADC, saludos.
 
hola! juanma! bueno primeramente agradecerte!!! y si la verdad me aclaraste el panorama, seguro estoy ya medio que en shok porque muchos proyectos s e me acumularon! pero bueno, la verdad es que si con tus ideas si se ve que se puede lograr! pero la pequeña desventaja es que recien estoy aprendiendo los modulos de timmers con pic no se usarlo mucho pero de eso si hay bastante informacion, gracias por tu grn ayuda!! loco! ;) cuando lo logre te pasare mi circuito en proteus y mi codigoo un abrazoo!!
 
Me alegro que te haya servido, la idea es que entre todos nos ayudemos cuando algo no nos sale, quisas uno no alcanza a ver el problema y otro sin dificultades lo resuelve sencillamente ya sea porque ya lo vivio o por experiencia en el tema, lo cual es mi caso. En cuanto a lo de los timers no te preocupes que vas a ver que son muy faciles de manejar, cuando leas esa sección vas a ver que no son complicados, y seguro que por internet debe haber muchos ejemplos explicativos del uso, ya sea en otros foros o en este mismo, o en youtube, saludos.
 
Atrás
Arriba