Control PID con microcontroladores PIC

Hola me gustaria saber si es es facil programar en un microcontrolador pic las tecnicas del control PID.
 
ahora tengo un problema distinto, al director de tesis se le dio por que como la cosa es didáctica quiere el controlador implementado en el PC, lo que creo que me facilitara el trabajo.
agradezco por los pdfs que me enviaron los voy revisar ahora, pero de nuevo si alguien conoce los algoritmos o la base de los algoritmos en un lenguaje como Visual Basic
gracias por su colaboración
 
listo la propuesta esta aprobada
ahora pregunto si han trabajado con sistemas de adquisición de datos, si me pueden ayudar con alguna recomendación para el diseño del sistema de adquisición para el controlador.,
estoy mirando que s mejor si hacer adquisición por puerto serial o por paralelo.

gracias :eek: :eek:
 
Por simplicidad tanto a nivel de software como de hardware, es mejor utilizar el puerto paralelo.

Un sistema simple de adquisición de datos por el puerto paralelo solo requiere un conversor análogo digital como el ADC0804 y un acondicionador de señal con amplificador operacionales.
 
Hola, dime que es lo que quieres controlar, cual es tu planta, cual es tu tiempo de estado estacionario, tu sobreimpulso, necesitas error cero en estado estacionario. Me parece que debes de conocer primero tu planta, ósea hallar su función de transferencia, luego saber como quieres que sea la respuesta en estado estacionario y permanente de todo el sistema, en base a eso, escogerás tu controlador, no siempre es necesario un PID a veces con un PI basta para cumplir los requerimientos de tu sistema.

Una ves que sabes lo que quieres, debes ubicar los polos, y ceros, de tu controlador, puedes aplicar por ejemplo, el lugar geométrico de las raíces, que pase por tus polos deseados, y después recién ves que tipo de dispositivo puede cumplir esa tarea si es un PIC o una PC.
 
lo que yo quiero hacer es un controladior didactico que se pueda conectar a cualquier planta y funcione colocandole los parametros de sintonizacion de echo, lo que quiero implementar es el controlador
 
Hola, entonces lo que necesitas es hacer un algoritmo con auto tuning. Hay mucha información al respecto con este tema, aqui no es necesario conocer la planta ya que tu algoritmo se ajustara automaticamente. Basicamente requieres hacer 2 programas, uno que es el que hace la accion de control y otro que es el supervisor, ambos corriendo de manera paralela, el supervisor va ser el encargado de calcular las constantes y pasarlas al controlador, para este calculo hay una serie de reglas, las que puedes encontrar facilmente son las de Ziegler Nichols. Busca Ziegler Nichols tuning.
 
Para pulir el cuento estoy metido en la grande estoy intentando comunicar matlab con el pic 16f877 pero no me sirve implementar en el pic el algoritmo para rs232 necesito colocar el modulo usart a que haga eso.

configurar el usart para que trabaje en rs232, matlab ya tiene un objeto espero configurarlo bien para que funcione.
 
Hola, la desventaja de que uses comunicacion serial es que el tiempo de muestreo va ser algo lento, si puedes mejor usa el puerto paralelo.

Para tu controlador usa transformadorrmada Z en vez de trabajar en el dominio del tiempo o la frecuencia (t o s) ya que las operaciones son mas simples.
 
hola sharky, tengo el mismo problema q tu, es decir tengo q elaborar un pid digital con un microcontrolador q en este caso el q estoy usando es un 16f876a, q tiene un convertidor A/D integrado y luego uso un convertidor externo D/A. he logrado comunicar el pic con el pc con el programa visual basic 5. lo unico q he conseguido es mandar caracteres en codigo ascii al pic mediante usart. te dejo el codigo por si te sirve de ayuda.


Código:
Private Sub Command1_Click()
MSComm1.PortOpen = True
End Sub
---------------------------------------
Private Sub Command2_Click()
MSComm1.PortOpen = False
End Sub
----------------------------------------
Private Sub Command3_Click()
MSComm1.Output = Text1.Text
End Sub

en la zona de objetos as de crear dos botones para abrir y cerra puertos y una caja de texto donde introduciras los datos, tambien tienes q activar en proyecto/componentes la casilla microsoft control comm 5.0 que es un icono con forma de telefono, tambien tienes q crear un icono con el en la zona de objetos. y luego configurarlo para su comunicacion
 
Hola, mi situacion es muy parecida. Soy estudiante y mi proyecto de tesis es realizar un controlador PID autosintonizable. Aun no entiendo muy bien de ello, lo debo implementar en un PIC, se que puedo hacerlo mediante el metodo de Ziegler-Nichols. Con lo que tengo problemas es con el programa, aun no lo empiezo por que no se muy bien, de manera general que deberia de hacer. Me encantaria una respuesta. Gracias
 
Compañeros.

He leído los mensajes anteriores del foro pero no ha sido concreto no ha llevado a un resultado optimo.estoy implementando un Pid en un Microcontrolador y controlar una planta y voy a colocar los avances de mí trabajo espero que les sirva.

Creo que en este caso debemos tener conceptos claros de teoría de control continuo y su diferencia con el control discreto, para llevar esto a cabo, debido a que tenemos que controlar una planta que estará siempre en continuo con un Pid con Micro que será digital y corresponde en tiempo discreto.

Antes de comenzar previo a esto debemos tener en cuenta lo siguiente:

Para realizar este montaje debemos de tener simuladores y programas de diseño electrónico como

De diseño: Matlab, Orcad 10, o Proteus, Mplab u otro simulador o compilador para el PIC que vamos a utilizar.

Consideraciones para escoger PIC:

Lo mas importante es tener un PIC con las rutinas básica con suma, resta, multiplicación y división pro OJO, deben de ser con mínimo 3 decimales, esto nos lleva a tener en un PIC básico una rutina bien robusta para realizar estas operaciones, yo recomendaría un PIC que al menos tenga Punto Flotante, para no complicar estas rutinas que de cierto modo son complejas.

Esta es una visión general del proyecto.poco a poco ir redactando en el foro los avances de mi proyecto que en estos momentos esta ejecutado en un 90%

Sean Un poco pacientes que debo de organizar el material para que alguien que no sea tan experto en control lo pueda utilizar, como también cabe aclarar que no esta aplicando a un problema especifico del diseño del Pid, como a un motor, un actuados o lo que sea, va dirigido a cualquier cosa siempre y cuando sepamos la función de transferencia.
 
Creo que el control PID si es que se hace en un procesador de 8 bits es mejor hacerlo en lenguaje C, si el procesador es de 16 se peude hacer en lenguaje maquina, usando variables de coma flotante. El algoritmo PID no es muy complicado sobretodo si se hace en lenguaje C. El verdadero problema es la sintonizacion, ya que un PID sin sintonizar puede llegar a ser muy deficiente incluso peor que un control solo proporcional.

Para sintonizar el PID se puede hacer manualmente o de forma automatica, la forma manual no nos interesa, pues se tendria que hacer a cada rato, ya que todos los procesos varian de cuando en cuando y hay muchos procesos diferentes. Para hacer un algoritmo de sintonizacion automatico o autotune, el metodo mas usado por la industria es el metodo por RELE que se basa en el metodo de siegler nichols de lazo cerrado.

Aun no entiendo bien este metodo, si alguien sabe bien como hacerlo en C o otro lenguaje puede ayudarnos. Copio a continuacion una expicacion de este metodo:

Está basado en un selector que permite al operador seleccionar entre el modo de control PID (selector en posición A) y el modo de ajuste automático de parámetros o auto-ajuste (selector en posición B).
Cuando se demanda la función de ajuste, se pone el selector a B, lo que significa que
se activa la realimentación con relé y se desconecta el regulador PID. Cuando se obtiene
un ciclo límite estable, se calculan los parámetros del PID y luego se conecta el
controlador PID al proceso con los parámetros calculados.
La realimentación con relé consiste en provocar una oscilación pequeña pero
mantenida en un proceso por lo demás estable. La frecuencia y la ganancia límites del
proceso se determinan según el período de las oscilaciones y los cambios de amplitud
observados en la variable del proceso.
Una condición aproximada para la oscilación se puede determinar asumiendo que
existe un ciclo límite con periodo Tu y frecuencia ωu = 2π /Tu tal que la salida del relé es
una onda periódica, cuadrada y simétrica.

De este texto puedo determinar que se pone un control proporcional P, con una ganancia determinada, luego cuando haya un cruce por 0 se desconecta el control P, hasta que haya otro cruce por 0, y asi hasta que se llegue a una oscilacion. Cuando esto ocurra se toma el periodo y se usa en las formulas de siegles nichols. Para esto se podria utilizar un timer de un PIC y un control P simple..

Asi el algoritmo seria:

activar control P y activar arrancar timer1
¿ cruce por 0 del ADC ?
-NO: no hacer nada y seguir esperando cruce por cero
-SI: -guardar tiempo de timer 1 en una variable
-cambiar control P a inactivo (o activo en caso de venir desactivado)
-¿dato guardado de timer 1 = dato ahora obtenido?
-Si es igual: calculamos las constantes para el PID
-No es igual: regresamos al bucle de espera de paso por cero.
 
Hola , soy estudiante de instrumentacion y control, y tengo el siguiente proyecto.
implementar un control proporcional para controlar temperatura en un DSP 30F3014

tengo dudas totales de como implementar el control proporcional, he mirado los pdfs que hay en el foro y me han dado algunas ideas, pero estan aplicados a los microcontroladores. si alguien me puede ayudarcon información sobre el tema se lo agradesco mucho.
gracias.
 
estperez dijo:
Hola , soy estudiante de instrumentacion y control, y tengo el siguiente proyecto.
implementar un control proporcional para controlar temperatura en un DSP 30F3014

tengo dudas totales de como implementar el control proporcional, he mirado los pdfs que hay en el foro y me han dado algunas ideas, pero estan aplicados a los microcontroladores. si alguien me puede ayudarcon información sobre el tema se lo agradesco mucho.
gracias.

Y cual es el problema que estén aplicados a microcontroladores, si las ecuaciones del PID son las mismas aunque sea un amplificador operacional?
En un control, proporcional se tiene: u[k] = Kp * e[k]
donde u es la acción de control calculada, Kp es la ganancia proporcional y e es el error entre el set-point y la salida de la planta. Y claro, k indica en cual período de muestreo estamos...
Lo escribas en un DSP, un uC o en la PC el código es exactamente el mismo!
Si esto no te queda claro...no me cabe duda que deberías tomar un libro y estudiar, por que lo que has preguntado es muy ELEMENTAL.

Saludos!
 
muchas gracias por tu explicacion ezavalla, es logico que si soy un estudiante pregunte cosas elementales, pero bueno... de todas maneras me aclaraste un parte de el camino.

pero entonces se me general otras dudas:
Como utilizo la accion de control calculada?, mejor dicho, como se configura el conversor digital-analogo del dsp, yo he hecho practicas con entradas analogas, pero no con salidas analogas.

muchas gracias.
 
estperez dijo:
es logico que si soy un estudiante pregunte cosas elementales..

No sé que tan lógica sea la pregunta que vos has hecho...
Te repito, un controlador proporcional es una multiplicación y nada mas...sin importar la plataforma que se use y eso es lo que hay que tener claro....a menos que alguien te haya dicho que en un DSP es algo diferente...cosa que es mentira.

estperez dijo:
Como utilizo la accion de control calculada?, mejor dicho, como se configura el conversor digital-analogo del dsp, yo he hecho practicas con entradas analogas, pero no con salidas analogas.

No tengo idea, nunca he usado ese DSP. No sé cuanto bits de resolución tiene, y tampoco conozco el programa que estas haciendo...es decir...tengo los ojos cerrados, así que vas a tener que leer la información del chip y del lenguaje de programación que uses (supongo que será C o C++) para ver que dice respecto a como configurar el DAC. Hay que tener cuidado, por que si trabajás en punto flotante...el DAC recibe como valor un entero cuya longitud válida y signo depende de la resolución que tenga y los niveles de tensión que puede tomar la salida. Si no escalás el resultado a mandar al DAC (la u[k]) de acuerdo a esto...vas a tener problemas.

Saludos!
 
Saludos compañeros, hace tiempo implemente un control PID para regular la velocidad de un motor DC pequeño con encoder (era solo para experimentar) y los resultados fueron excelentes todo gobernado por un PIC, ahora quiero hacer un pequeño PCB router CNC, pero no sé como aplicar el control PID al motor DC.

El Software a utilizar sería el Match3, y la forma de manejar el motor sería como un motor paso a paso.

Por ejemplo si tuviera un motor paso a paso que tiene una resolución 10 pasos X revolución y por cada paso el EJE avanza 0.1mm, entonces si quisiera avanzar 1mm el Software tendría que enviar 10 pulsos al driver para que el motor avance 10 pasos, Ahora mi duda como empiezo a diseñar el control PID para un motor DC?

He pensado en lo siguiente:

Suponiendo que tengo un motor Dc con un encoder incremental de 100 Pulsos por Revolución y por cada revolución el EJE avanza 1mm, y configurando el Software para que por cada pulso enviado al pic avance el EJE 0.1mm, entonces si quisiera avanzar 1mm el Software tendría que enviar 10 pulsos por lo tanto el valor del Setpoint sería de "100". Esto es correcto?

Espero que me entiendan..
 
Atrás
Arriba