Está en la página 1de 15

IMPLEMENTACION DE UN CONTROLADOR PID CON UNA FPGA PARA POSICIONAR UN MOTOR DC SEMILLERO ADT

EDGAR RODRIGO MANCIPE TOLOZA INTRODUCCION Hoy en da las FPGAs han incrementado su popularidad debido a su fcil adquisicin, confiabilidad y bajos costos en el mercado, como consecuencia de ello se puede evidenciar cada vez ms aplicaciones de las FPGAs en sistemas de control. A pesar de que los microcontroladores solan dominar este campo debido a su bajo costo, las FPGAs se han convertido en una opcin ms llamativa, gracias a su principal ventaja de controlar diferentes sistemas en paralelo, dentro de un solo sistema embebido1. El objetivo de este informe es presentar los pasos para programar un controlador PI con antiwindup dentro de una FPGA, y as controlar un motor de corriente continua mediante modulacin de ancho de pulso (PWM), adems de realizar un aporte e incentivar a todos aquellos interesados en el tema de control por hardware. MATERIALES Tarjeta DE0-Nano con FPGA: Cyclone IV EP4CE22F17C6 de Altera (Fig 1)

Figura 1. DE0-Nano imagen tomada de http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=593&from=enbanner

Allen Houng. Interfacing a DC Motor with an FPGA. Terasic Technologies. Aug 10 , 2011

Motoreductor: Par 18Kgcm - 80RPM - 12Vdc. Con encoder de cuadratura resolucin de reductor: . 8384 pulsos por vuelta. (Fig 2)

Figura 2. Motoreductor con encoder imagen tomada de http://www.dynamoelectronics.com/components/com_virtuemart/shop_image/product/Mot oreductor_18K_4c73f49babdca.png Display LCD HD44780 2x16 monocromtico (Fig 3)

Figura 3. LCD alfanumrico 2x16 imagen tomada de mada http://www.dynamoelectronics.com/components/com_virtuemart/shop_image/product/04-03http://www.dynamoelectronics.com/components/com_virtuemart/shop_image/product/04 02%20LCD%2016x2%20verde.jpg Puente H L293D, 36V, 1.2A (Fig 4) 293D,

Figura 4. Puente H L293D imagen tomada de http://ca.digikey.com/1/1/394544-ic-drvr-p-p-4ch-w-diodes-16-dip-l293d.html http://ca.digikey.com/1/1/394544 l293d.html Adicionalmente se hace necesario el uso de una fuente DC para alimentar la parte de potencia

COMUNICACIN SERIAL Convertidor serial USB FT232R

Figura 5. FT232RL. Imagen tomada del datasheet FT232R USB UART I.C. pag. 7 Adicionalmente se utilizara un convertidor serial USB, con el fin de graficar el error de posicin, tiempo de establecimiento y overshoot en labview, esto ayudara a ver los cambios en el comportamiento del controlador al variar las ganancias. En este documento no se especificara acerca del programa implementado para la comunicacin serial entre FPGA PC con el fin de no extendernos tanto.

DIAGRAMA DE BLOQUES Antes de empezar a programar la FPGA, es necesario definir la estrategia que se va aplicar para controlar el sistema. Para ello se representar con un diagrama de bloques el mtodo aplicado para este caso. En la figura 6 se puede ver un ejemplo de ello.

Figura 6. Diagrama de bloques para el control PI. Fuente: Autor

Para poder graficar la posicin actual en el LCD es necesario tomar la seal del encoder, hacer un acondicionamiento de seal, pasar la seal por una ROM y enviar los comandos al LCD por una maquina de estados, de la siguiente forma:

Figura 7. Diagrama de bloques para graficar en un LCD. Fuente: Autor

PROGRAMACION Una vez definida la estructura a seguir para controlar el motor, se procede a programar la FPGA en HDL(Hardware Description Language) ms explcitamente en Verilog, para ello se utilizar el programa Quartus II 11.1 La programacin se dividir en diferentes submodulos, con el objetivo de tener un cdigo ordenado y fcil de entender.

1. SETPOINT: Primero se programaran 4 posiciones de Set point que sern seleccionadas por 2 dip-switch de la tarjeta DE0-nano. Dado que el encoder utilizado en esta ocasin genera 8384 pulsos por vuelta, se deber calcular el valor para cada posicin deseada.

Adicional a este mtodo de Setpoint por dip-switch, se han agregado dos mdulos que permiten variar el Setpoint con potencimetro a travs del ADC de la DE0-Nano. 2. POSICION ACTUAL

Antes de calcular el error, necesitamos una seal que nos de la posicin actual del motor. Debido a que la posicin del motor viene de un encoder de cuadratura, debemos generar un contador que incremente y disminuya su valor dependiendo del sentido de giro del motor. Para ello se describir el circuito de la figura 8.

Figura 8. Decoder. Imagen tomada de http://www.fpga4fun.com/QuadratureDecoder.html

Quadrature

Una vez se describe dicho circuito, se debe delimitar el mximo y mnimo valor del contador, dependiendo del encoder utilizado. De la siguiente forma:

Despus de hacer esto, ya se tiene un valor guardado en un registro el cual se llamar posicion_actual.

3. ADQUISICION DEL ERROR A continuacin se hace el clculo del error, tomando la seal proveniente del encoder(posicion_actual) y el dato seleccionado como set point.

Dado que el error puede ser negativo, es necesario describir un circuito que funcione como valor absoluto para el error, mediante el complemento a dos a travs de un mux 2:1

4. ACCION DE CONTROL Para describir el circuito que funcionara como controlador PI es necesario utilizar una maquina de estados en donde se hace cada muestreo, se asigna la muestra y el error anterior de la siguiente forma.

Hay que tener en cuenta que la sintonizacin del controlador, depender del tipo de motor que se est utilizando, por lo cual los valores de Kp, Ki y T podran variar segn el caso, adems de dichas constantes, tambin se debe incluir la frecuencia del reloj encargado de realizar el tiempo de muestreo. Para este caso las ganancias son las siguientes Kp=6, Ki=2, T=0.01s. la ecuacin en diferencias descreita, hace referencia a un PID, sin embargo en esta aplicacin mantendremos la ganancia derivativa Kp=0, por lo cual queda como un control PI.

5. ANTI-WINDUP Debido a que los cambios rpidos en el Setpoint pueden saturar el controlador, es necesario utilizar un anti-windup para ello. Los valores de saturacin son 0 y 64000 el mnimo y el mximo valor del PWM. Cuando la muestra se satura, se desactiva la parte integral y solo funciona la parte proporcional hasta que baje la saturacin. Prximamente en otro proyecto se empleara la tcnica de Armstrong para realizar el anti-windup.

6. PWM Para crear el modulador de ancho de pulso, se tom el concepto de PWM anlogo en donde se usa un comparador con una seal triangular y una seal de continua, en la imagen se puede ver un ejemplo de ello.

Figura 9. Representacin de un PWM anlogo. Fuente: Autor En este caso dentro de la FPGA generaremos una rampa a partir de un contador y utilizaremos un comparador. La rampa de 16 bits generada ser nuestra seal dientes de sierra cuyo valor oscila entre 0 y 65535. El contador de la rampa funciona con un reloj de 50Mhz, por lo cual la frecuencia de la seal de salida PWM ser de 763Hz. Para nuestro caso, la seal DC ser el resultado de la ecuacin en diferencias m_k

7. SENTIDO DE GIRO Para la lgica del sentido de giro se utilizara el bit de signo de la seal de error, dependiendo del valor de este, se asignara la seal de salida del PWM a uno de los dos pines de control del puente H.

Sin embargo hay que tener en cuenta que el controlador al ser digital, el error debe tener una zona muerta, en donde la accin de control no funcione dentro de dicho rango, esto se hace con el objetivo de no convertir el control PI en un control ON-OFF para un error muy pequeo. A continuacin se describirn los pasos para graficar la posicin en el LCD a partir de los pulsos provenientes del Encoder de cuadratura.

8. ROM PARA LOS GRADOS A partir del contador proveniente del modulo encoder_cuadratura, se va a seleccionar un valor que lo represente en el display, para ello hacemos pasar dicho contador por una ROM de posiciones, de esta forma obtendremos un valor en ascii para las unidades, decenas y centenas.

9. MAQUINA DE ESTADOS PARA GRAFICAR EN LCD Una vez obtenidos los valores que representan las unidades decenas y centenas, se construye una maquina de estados que realizara el proceso de graficar en el lcd

Como se puede ver los primeros 7 estados son instrucciones para inicializar el display, y los siguientes son para graficar el ascii seleccionado. Adems los dos primeros bit del registro senal, hacen referencia al comando de escribir.

10. COMPROBACION DEL CONTROLADOR EN LABVIEW En esta etapa del documento se mostrara una pequea prueba del funcionamiento del controlador en labview, para ello se hizo necesario describir un modulo adicional de comunicacin serial USB e implementarlo con el integrado FT232R, los detalles de este modulo no se mostraran en este documento.

PRUEBA 1 Entrada: escaln Kp=5 Ki=0 SetPoint: 180 Kd=0

Se puede observar el error de posicin cuando la ganancia integral es 0 y la ganancia proporcional es pequea. PRUEBA 2 Entrada: escaln Kp=10 Ki=0 SetPoint: 180 Kd=0

Al incrementar la ganancia proporcional, solo logramos acercarnos un poco ms a la posicin deseada, y aumentar la velocidad del motor, pero aun insiste el error de posicin.

PRUEBA 3 Entrada: escaln Kp=5 Ki=3 SetPoint: 180 Kd=0

Al encender la parte integral, el controlador corrige el error de posicin, sin embargo se genera un pequeo porcentaje de overshoot, la baja ganancia proporcional hace que el motor se demore en alcanzar la posicin deseada. PRUEBA 4 Entrada: escaln Kp=10 Ki=3 SetPoint: 180 Kd=0

Al incrementar la ganancia proporcional e integral, obtenemos una respuesta ms rpida y cercana a la establecida por el setpoint

PRUEBA 2 Entrada: escaln Kp=10 Ki=17 SetPoint: 180 Kd=0

Incrementar demasiado la ganancia integral, puede llevar a oscilaciones antes de llegar al rgimen permanente.

REFERENCIAS BIBLIOGRAFICAS [1] Allen Houng. Interfacing a DC Motor with an FPGA. Terasic Technologies. Aug 10 , 2011 http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=49&No=577 [2] https://sites.google.com/site/semilleroadt/home [3] Jean P. Nicolle Quadrature Decoder. Febrero 13 2008. http://www.fpga4fun.com/QuadratureDecoder.html [4] Antonio Visioli. Practical PID control. Springer-Verlag London Limited 2006