EL BLOG SE HA MUDADO, TODA LA INFORMACION SE ENCUENTRA AHORA EN palmacas.com.
Mostrando las entradas con la etiqueta PID. Mostrar todas las entradas
Mostrando las entradas con la etiqueta PID. Mostrar todas las entradas

diciembre 03, 2011

Control PID para motor DC - Programación

En la publicación Control PID para motor DC (Lectura y Potencia) comentaba sobre la primera parte de este proyecto y sobre sus interfaces de lectura y potencia, ahora esta publicación estará dedicada a la programación del controlador en LabVIEW y la comunicación USB entre el PIC y el ordenador.


Para comenzar explicare la estructura del programa en LabVIEW, el programa esta compuesto por un While Loop que permite ejecutar iteraciones continuamente, al inicio del programa se establece la configuración del COM virtual con el que se va a comunicar el programa, es decir datos como el nombre del puerto, velocidad de transmisión y numero de bits en la transmisión. Dentro del While Loop se establece la apertura del puerto y el tamaño del buffer de recepción, luego se hace la conversión del dato de tipo "string" como lo envía el PIC a tipo "int" para ser usado en el PID. En la programación se usaron subVIs para cada uno de los controladores separados y luego sumar su resultado.


El primer controlador es el Proporcional, según la teoría este corresponde unicamente a el error multiplicado por una constante, es decir wk = Kp*Ek. El error es calculado en el programa principal restando el valor muestreado de el valor del set point.


El controlador Integral es mas complejo que el Proporcional, en este se tienen en cuenta el tiempo de muestreo, una constante o tiempo de integración, nuevamente el error, la constante de proporcionalidad y la salida del controlador en la iteración anterior (esta se establece en el programa principal). De esta forma se cumple la formula pk = ((kp*t/ti)*ek)+pk-1 de donde pk es la salida del controlador, kp es la constante de proporcionalidad, t es el tiempo de muestreo, ti es el tiempo de integración, ek es el error y pk-1 es el valor del controlador en ciclo inmediatamente anterior.


El controlador Derivativo tiene la siguiente ecuación qk = (td*kp/t)*(ek-ek-1), en esta ecuación de tiene a qk que es la salida del controlador, td que corresponde al tiempo de derivación, kp es la constante de proporcionalidad, t el periodo de muestreo, ek el error y ek-1 el valor del error en el ciclo inmediatamente anterior.

Luego de los valores de los controladores son sumados y enviados al PIC donde este valor se vera reflejado en el ciclo de trabajo de el PWM que controla el motor. Para evitar posibles ambiguedades en el ciclo de trabajo del PWM se hace una restricción en la que si el valor del PID es superior a 255 el PWM sera de 255 y si es inferior a 0 el PWM sera de 0.



control_pid_front

En el front panel se pueden visualizar y modificar el set point y cada una de las constantes (kp,ti y td), ademas una gráfica de la velocidad y una de la salida del PID. El PIC hace la lectura de la velocidad del motor, establece la comunicación USB, recibe el valor del PID y varia el ciclo útil del PWM.

Para descargar: PID Motor.rar

Si tienes alguna inquietud no dudes en comentar.

noviembre 17, 2011

Control PID para motor DC - Lectura y Potencia

Este semestre estoy cursando la materia de control digital en la universidad, uno de las practicas planteadas fue aplicar un control PID sobre un motor DC. La idea es medir la velocidad del motor y controlarla usando una señal de PWM, el programa de control PID correrá en LabVIEW y las conexiones con el exterior serán manejadas con un microcontrolador PIC18F2550, en esta publicación comentare todo lo referente al proceso de medición de la velocidad y a el manejo de la potencia del motor.


Se utiliza un motor DC de 12000rpm a 24V y 1A (sin carga). Para la practica se alimenta con 15V, voltaje suficiente para que su velocidad máxima sea de unas 7500rpm. Al eje del motor se le adapta un encoder óptico de 40 pasos, la lectura la hace un sensor infrarrojo GP3S62 (herradura), en este caso cada vez que detecta una ranura en el encoder genera un voltaje alto, este voltaje es leído por una entrada del microcontrolador que almacena el numero de pulsos en determinado tiempo y genera la equivalencia en rpm para luego enviarlo al programa de LabVIEW. Para la captura de los pulsos se utiliza el Timer1 y su entrada externa contando pulsos cada 200ms.

En el proceso de lectura se presenta un problema de voltajes ya que en algunos momentos el voltaje alto generado por el sensor es inferior al voltaje que puede leer el microcontrolador y considerar como alto, para solucionar esto se utiliza un disparador smith trigger (74LS14), el funcionamiento de este integrado es fácil de explicar: si el voltaje de entrada es inferior a 3V, el voltaje de salida será de 0V y si el voltaje de entrada es mayor a 3V el voltaje de salida sera de 5V.


Luego de que se procesa el dato de la velocidad del motor y se calcula la magnitud de la salida de el PID en LabVIEW, este dato es enviado al microcontrolador en donde se ve reflejado variando el duty del PWM generado por el microcontrolador. Como se menciono antes el motor se alimenta con 15V así que se usa un MOSFET (IRF540) para manejar este voltaje, para la activación del MOSFET se utiliza un juego de transistores NPN (2N3904) y PNP (2N3906), ademas se aísla este circuito del microcontrolador con un optoacoplador (4N35) ya que su salida es a transistor. Ademas se usa un diodo se marcha libre en paralelo con el motor.


El valor de R3 es de 330Ω, el de R4 y R5 es de 1KΩ y el de R6 debe ser inferior a 50Ω.

En la publicación Control PID para motor DC (Programación) esta disponible el código usado en el microcontrolador y los VIs de LabVIEW.

Si tienes alguna inquietud no dudes en comentar.