Implementación Hardware de un Sistema de Control Digital para un Sistema de Péndulo Invertido AUTOR: Joan Marc Berga Cabello DIRECTORES: Enrique Cantó Navarro, Abdelali El Aroudi FECHA: Marzo / 2012 Control de un Sistema de Péndulo Invertido Índice general 1. MEMORIA .......................................................................................................................5 1.1 Objeto del Proyecto ................................................................................................... 6 1.2 Alcance del Proyecto ................................................................................................6 1.3 Antecedentes ..............................................................................................................6 1.4 Definiciones y abreviaturas .....................................................................................7 1.5 Descripción de la planta ...........................................................................................8 1.6 Modelado de la planta ...............................................................................................9 1.6.1.1 Obtención de las ecuaciones diferenciales: El conjunto carro-pendulo ....... 9 1.6.1.2 Obtención de las ecuaciones diferenciales: El motor de CC ....................... 12 1.6.2 Transformación al plano s: Obtención de la función de transferencia de la planta H(s)..................................................................................................................... 13 1.6.3.1 Transformación al plano z: Obtención de la función de transferencia de la planta H(z)..................................................................................................................... 16 1.6.3.2 Transformación al plano z: La transformada z modificada .......................... 19 1.6.4.1 Representación en el espacio de estados en tiempo continuo ................... 21 1.6.4.2 Representación en el espacio de estados en tiempo discreto .................... 23 1.7 Diseño de sistemas de control.............................................................................. 25 1.7.1 Control mediante el LGR .................................................................................... 25 1.7.1.1 Estabilización de la planta........................................................................... 27 1.7.1.2 Introduciendo especificaciones: Contornos y error en estado estacionario ............................................................................................................... 28 1.7.1.3 Ejemplo de controlador................................................................................ 32 1.7.1.4 Simulaciones de la planta-controlador con retardos de transporte. ........ 38 1.7.2 Control en el espacio de estados: método de ubicación de polos. ................ 44 1.7.2.1 Controlabilidad y observabilidad ................................................................. 45 1.7.2.2 Obtención de la matriz de ganancia de realimentación de estado K ...... 48 1.8 El hardware ............................................................................................................... 50 1.8.1 Sistema electrónico ............................................................................................ 51 1.8.1.1.1 Eligiendo el microcontrolador .................................................................. 51 1.8.1.1.2 La familia dsPIC30F ................................................................................. 54 1.8.1.1.3 El dsPIC30F4011 ...................................................................................... 56 1.8.1.1.3.1 El QEI.................................................................................................. 56 1.8.1.1.3.2 El módulo PWM ................................................................................. 63 2 Control de un Sistema de Péndulo Invertido 1.8.1.2 El motor de DC............................................................................................. 71 1.8.1.3 El codificador incremental ........................................................................... 72 1.8.1.4 La placa de circuito impreso ....................................................................... 74 1.8.2 Sistema mecánico: El conjunto péndulo-carro-soporte ................................... 78 1.9 El software ................................................................................................................ 81 1.9.1 Entorno de programación y consideraciones previas ...................................... 81 1.9.2 Configurando los periféricos: el QEI.................................................................. 82 1.9.3 Configurando los periféricos: el módulo PWM ................................................. 83 1.9.4 Subrutinas relativas al cálculo de la posición del péndulo .............................. 85 1.9.5 Programa principal .............................................................................................. 88 1.10 Resultados .............................................................................................................. 91 1.11 Bibliografía .............................................................................................................. 92 2. ANEXOS ....................................................................................................................... 93 2.1 Ficheros de MATLAB .............................................................................................. 94 2.2 Código fuente ........................................................................................................... 98 2.3 Levantamiento del péndulo ................................................................................. 101 2.4 Manual de prácticas .............................................................................................. 108 2.4.1 Consideraciones previas .................................................................................. 108 2.4.2 Creando un proyecto en MPLAB ..................................................................... 109 2.4.3 Breve descripción del sistema ......................................................................... 109 2.4.4 Ejercicios propuestos: Estudio previo ............................................................. 112 2.4.5 Ejercicios propuestos: Implementación de controladores en la maqueta.... 113 3. PLANOS ..................................................................................................................... 115 3.1 Carro: C1 ................................................................................................................. 116 3.2 Piezas 1: P4,.., P9 ................................................................................................... 117 3.3 Piezas 2: C2............................................................................................................. 118 3.4 Piezas 3: C3............................................................................................................. 119 3.5 Soporte: P16 ........................................................................................................... 120 3.6 Maqueta: Conjunto ................................................................................................ 121 3.7 Esquema eléctrico ................................................................................................. 122 3.8 Aspecto de las mascaras de C.I.......................................................................... 123 4. PRESUPUESTO......................................................................................................... 125 4.1 Mediciones .............................................................................................................. 126 4.1.1 Capítulo 1: Componentes electrónicos ........................................................... 126 3 Control de un Sistema de Péndulo Invertido 4.1.2 Capítulo 2: Cables y conectores...................................................................... 129 4.1.3 Capítulo3: Elementos mecánicos de la maqueta........................................... 131 4.1.4 Capítulo 4: Placas de circuito impreso............................................................ 133 4.2 Presupuesto ............................................................................................................ 134 4.2.1 Capítulo 1: Componentes electrónicos ........................................................... 134 4.2.2 Capítulo 2: Cables y conectores...................................................................... 136 4.2.3 Capítulo 3: Elementos mecánicos de la maqueta.......................................... 137 4.2.4 Capítulo 4: Placas de circuito impreso............................................................ 139 4.3 Resumen del presupuesto ................................................................................... 140 4 1. MEMORIA Control de un Sistema de Péndulo Invertido 1.1 Objeto del Proyecto El objetivo de este proyecto, es realizar una maqueta de péndulo invertido preparada para experimentar con algoritmos de control en tiempo discreto. Se realizará también, el estudio de la planta y se aplicará un sistema regulador entorno a la posición de equilibrio superior del péndulo. 1.2 Alcance del Proyecto Para la resolución de este reto se pueden emplear diversos algoritmos de control, más o menos sofisticados, con variedad de respuestas o prestaciones. Este proyecto presentará estudios y realización de algoritmos de control mediante métodos clásicos y modernos. En concreto se usará el método del lugar geométrico de las raíces y el método de ubicación de polos. Estos se complementaran mediante el empleo de herramientas de MATLAB para obtener y simular los controladores. Finalmente se implementará en la maqueta un sistema regulador mediante el método del lugar geométrico de las raíces, entorno de la posición de equilibrio superior. 1.3 Antecedentes Este proyecto es conocido en el mundo del control y abarca diversas aplicaciones, desde el control de posición de un propulsor primario espacial, hasta el equilibrio de maquinaria y robots, como el patín eléctrico (tipo Segway). No obstante, el objetivo de este proyecto no es la aplicación comercial, sino el estudio de algoritmos de control. En nuestro caso, se ha optado por una planta cuyo péndulo puede realizar movimientos en el plano X y en el plano Y. No obstante, existen diversas variantes del experimento, como el mismo pero con 3 grados de libertad, el péndulo de Furuta, varios péndulos acoplados uno encima del otro,..etc. Al construir esta maqueta, dejo abierto el camino para el estudio de todo tipo de algoritmos y facilito el estudio a quién pudiera aprovechar el prototipo para fines parecidos. 6 Control de un Sistema de Péndulo Invertido 1.4 Definiciones y abreviaturas RISC: (Reduced Instruction Set Computer) Arquitectura de los microcontroladores caracterizados por un juego de instrucciones sencillo, y alta velocidad de ejecución de estas. Planta en equilibrio: Según [1] y cito textualmente: “Un sistema de control está en equilibrio si, en ausencia de cualquier perturbación o entrada, la salida permanece en el mismo estado”. Estabilidad absoluta: Para referirme a ella usaré el término estabilidad a lo largo del proyecto. Según [1] y cito textualmente: “Un sistema de control lineal e invariante con el tiempo es estable si la salida termina por regresar a su estado de equilibrio cuando el sistema está sujeto a una condición inicial”. DSP: (Procesador Digital de Señales) Es un sistema basado en un procesador o microprocesador que posee un juego de instrucciones, un hardware y un software optimizados para aplicaciones que requieran operaciones numéricas a muy alta velocidad. Debido a esto es especialmente útil para el procesado y representación de señales en tiempo real. MCU: Abreviación de microcontrolador. PWM: (Modulación por ancho de pulsos) Es una técnica en la que se modifica el ciclo de trabajo de una señal periódica, para controlar la cantidad de energía que se envía a una carga. ICD2: (MPLAB® ICD 2 In-Circuit Debugger) Debugger y programador para microcontroladores y DSP’s de Microchip. PICkit 2 : Debugger y programador para microcontroladores y DSP’s de Microchip, de bajo coste. ZOH: (zero-order hold) Retenedor que construye una señal en tiempo continuo a partir de una seña discreta, manteniendo constante el valor de cada muestra. OrCAD: Grupo de programas de Cadence, entre los cuales se encuentran programas para el diseño y simulación de placas de circuito impreso. cpr: (cuentas por revolución o pulsos por revolución) Hace referencia a los pulsos que ocurren en una corona de un encoder, por revolución. Se ha de tener en cuenta que cada pulso genera dos flancos. 7 Control de un Sistema de Péndulo Invertido 1.5 Descripción de la planta Para realizar un control sobre algún sistema se requiere conocer bien la planta. Según el problema y el resultado deseado podremos ser más o menos restrictivos a la hora de modelar la planta y difícilmente hallaremos un análisis que incorpore todas las características del mundo real al que nos enfrentamos. Tras la experimentación, veremos una relación clara entre el modelo empleado para la planta junto con el control realizado y la respuesta real. Esta planta se compone por un carro, que se mueve libremente dentro de un segmento en el plano x. Sujeto a este, está una barra (péndulo) con una articulación rotacional. Nuestra entrada es la fuerza que se aplica al carro horizontalmente y la salida que deseamos controlar es el ángulo del péndulo. Si aplicamos una condición inicial al péndulo, la barra alcanza la posición de equilibrio inferior (definida como ±180º) en régimen permanente. Podemos imaginar con una respuesta de segundo orden. Es por lo tanto una posición estable del péndulo. No obstante, buscamos elevar el péndulo hasta la posición de equilibrio superior (0º), que es una posición de equilibrio inestable, puesto que en aplicar al sistema una condición inicial no vuelve a su posición de reposo inicial. Como actuador usaremos un motor de cc, unido al carro con un sistema engranaje-correa. Por lo tanto tratamos con un sistema inestable, y como mas adelante observaremos, un sistema no lineal. Tanto los estudios que se presentan en este proyecto mediante las técnicas clásicas, como las modernas trataran con un sistema regulador monovariable. En ambos casos se trabajará con sistemas discretos. 8 Control de un Sistema de Péndulo Invertido 1.6 Modelado de la planta En este apartado se realizarán estudios referentes al modelado de la planta, para su posterior uso en la obtención y simulación de controladores. En los apartados 1.6.1.1 y 1.6.1.2 se obtendrán las ecuaciones diferenciales descriptoras del sistema. En el apartado 1.6.2 se obtendrá la función de transferencia de la planta 𝐻𝐻(𝑠𝑠). En los apartados 1.6.3.1 y 1.6.3.2 se discretizará la función 𝐻𝐻(𝑠𝑠) a 𝐻𝐻(𝑧𝑧) y 𝐻𝐻(𝑧𝑧, 𝑚𝑚) respectivamente. Esta última incluye el efecto del retardo en la ejecución del programa del controlador. Finalmente en los apartados 1.6.4.1 y 1.6.4.2 se obtendrán las ecuaciones del sistema continuo y discreto en el espacio de estados. 1.6.1.1 Obtención de las ecuaciones diferenciales: El conjunto carropendulo Primeramente obtendremos las ecuaciones que describen el comportamiento de la planta en lazo abierto, sin el controlador ni el motor. Para modelar la planta existen diversos métodos. Se ha optado por incluir el método expuesto en [1] (p.68-70), dada su elegancia y simplicidad: Figura 6-1. Diagrama de cuerpo libre de la planta 9 Control de un Sistema de Péndulo Invertido Sea 𝜃𝜃 el ángulo de la barra respecto de la línea vertical. Sean además las coordenadas (𝑥𝑥, 𝑦𝑦) del centro de gravedad de la barra del péndulo (𝑥𝑥𝐺𝐺 , 𝑦𝑦𝐺𝐺 ). De este modo, 𝑥𝑥𝐺𝐺 = 𝑥𝑥 + 𝑙𝑙 sin 𝜃𝜃 𝑦𝑦𝐺𝐺 = 𝑙𝑙 cos 𝜃𝜃 Para obtener las ecuaciones de movimiento para el sistema, considérese el diagrama de cuerpo libre que aparece en la Figura 6-1 (b). El movimiento rotacional de la barra del péndulo alrededor de su centro de gravedad se describe mediante 𝐼𝐼𝜃𝜃̈ = 𝑉𝑉𝑉𝑉 sin 𝜃𝜃 − 𝐻𝐻𝐻𝐻 cos 𝜃𝜃 (6.1) donde 𝐼𝐼 , es el momento de inercia de la barra alrededor de su centro de gravedad. El movimiento horizontal del centro de gravead de la barra del péndulo se obtiene mediante 𝑚𝑚 𝑑𝑑 2 (𝑥𝑥 + 𝑙𝑙 sin 𝜃𝜃 ) = 𝐻𝐻 𝑑𝑑𝑡𝑡 2 (6.2) El movimiento vertical del centro de gravedad de la barra del péndulo es 𝑚𝑚 𝑑𝑑 2 (𝑙𝑙 cos 𝜃𝜃 ) = 𝑉𝑉 − 𝑚𝑚𝑚𝑚 𝑑𝑑𝑡𝑡 2 (6.3) El movimiento horizontal del carro se describe mediante 𝑀𝑀 𝑑𝑑 2 𝑥𝑥 = 𝑢𝑢 − 𝐻𝐻 𝑑𝑑𝑡𝑡 2 (6.4) Como se debe mantener el péndulo invertido en posición vertical, se puede suponer que 𝜃𝜃(𝑡𝑡) y 𝜃𝜃̇(𝑡𝑡) son pequeños, de forma que sin 𝜃𝜃 ≑ 0, cos 𝜃𝜃 = 1 y 𝜃𝜃𝜃𝜃̇ 2 = 0 . Entonces, las Ecuaciones (6.1) a (6.3) se linealizan del modo siguiente: 𝐼𝐼𝜃𝜃̈ = 𝑉𝑉𝑉𝑉𝑉𝑉 − 𝐻𝐻𝐻𝐻 (6.5) 10 Control de un Sistema de Péndulo Invertido 𝑚𝑚�𝑥𝑥̈ + 𝑙𝑙𝜃𝜃̈ � = 𝐻𝐻 0 = 𝑉𝑉 − 𝑚𝑚𝑚𝑚 (6.6) (6.7) A partir de las Ecuaciones (6.4) a (6.7), se obtiene (𝑀𝑀 + 𝑚𝑚)𝑥𝑥̈ + 𝑚𝑚𝑚𝑚𝜃𝜃̈ = 𝑢𝑢 (6.8) 𝐼𝐼𝜃𝜃̈ = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 − 𝐻𝐻𝐻𝐻 = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 − 𝑙𝑙�𝑚𝑚𝑥𝑥̈ + 𝑚𝑚𝑚𝑚𝜃𝜃̈ � o bien (𝐼𝐼 + 𝑚𝑚𝑙𝑙 2 )𝜃𝜃̈ + 𝑚𝑚𝑚𝑚𝑥𝑥̈ = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 (6.9) Eliminando la inercia respecto del centro de gravedad del péndulo, simplificaremos considerablemente las ecuaciones de estado, tanto como la función de transferencia del sistema. Si esto fuera un problema a la hora de aplicar el controlador, podemos concentrar la masa en el extremo superior del péndulo, añadiendo una bola. Estas son las ecuaciones resultantes: (𝑀𝑀 + 𝑚𝑚)𝑥𝑥̈ + 𝑚𝑚𝑚𝑚𝜃𝜃̈ = 𝑢𝑢 (6.10) 𝑚𝑚𝑙𝑙 2 𝜃𝜃̈ + 𝑚𝑚𝑚𝑚𝑥𝑥̈ = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 (6.11) 11 Control de un Sistema de Péndulo Invertido 1.6.1.2 Obtención de las ecuaciones diferenciales: El motor de CC El motor elegido como actuador para la planta es un motor de CC de imanes permanentes, y se controla actuando sobre la tensión de armadura. Debemos encontrar la ecuación que describa la relación entre la tensión de armadura y la fuerza que aplica el motor al carro. La Figura 6-2 describe el comportamiento de la malla del rotor del motor. Figura 6-2. Circuito equivalente del motor DC La ecuación diferencial del motor de la Figura 6-2 es 𝑉𝑉𝑉𝑉 = 𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅 + 𝐿𝐿𝐿𝐿 𝑑𝑑𝑑𝑑𝑑𝑑 + 𝐸𝐸 𝑑𝑑𝑑𝑑 (6.12) Para hallar la fuerza, primero debemos encontrar la ecuación que describa el par motor en función de la velocidad del motor y de la tensión de armadura aplicada. Teniendo en cuenta que la excitación de flujo es constante (dado a los imanes permanentes), tenemos 𝐸𝐸 = 𝐾𝐾 · 𝑛𝑛 ; 𝑇𝑇𝑇𝑇 = 𝑃𝑃𝑃𝑃 , 𝑛𝑛 𝑇𝑇𝑇𝑇 = 𝐸𝐸 𝑃𝑃𝑃𝑃 = 𝐸𝐸 · 𝐼𝐼𝐼𝐼 𝐼𝐼𝐼𝐼 = 𝐾𝐾𝐾𝐾𝐾𝐾 𝑛𝑛 (6.13) (6.14) (6.15) 12 Control de un Sistema de Péndulo Invertido Si tomamos en consideración solo los efectos en estado estacionario, puesto que los polos del motor son mucho más rápidos que los de la planta del conjunto carro-péndulo, podemos eliminar la derivada de (6.12). Si juntamos la ecuación resultante con (6.13) y (6.15) tenemos 𝑇𝑇𝑇𝑇 = 𝐾𝐾 𝐾𝐾 2 𝑉𝑉𝑉𝑉 − 𝑛𝑛; 𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅 (6.16) Con el par motor y el radio del eje de este, podemos calcular la fuerza que se aplica sobre el carro. Aprovechemos el radio para convertir la velocidad angular a lineal 𝑢𝑢 = 𝑇𝑇𝑇𝑇 𝐾𝐾 𝐾𝐾 2 𝐾𝐾 𝐾𝐾 2 = 𝑉𝑉𝑉𝑉 − 𝑛𝑛 = 𝑉𝑉𝑉𝑉 − 𝑥𝑥̇ 𝑟𝑟 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅𝑟𝑟 2 (6.17) 1.6.2 Transformación al plano s: Obtención de la función de transferencia de la planta H(s) Una vez obtenidas las ecuaciones que describen el comportamiento del motor y del péndulo observando los parámetros deseados, ya hay lo necesario para obtener la función de transferencia que relacione la diferencia de ángulo con la tensión aplicada al motor. Retomando las ecuaciones del sistema (6.10) y (6.17) obtenidas previamente y eliminando la variable 𝑢𝑢 se obtiene (𝑀𝑀 + 𝑚𝑚)𝑥𝑥̈ + 𝑚𝑚𝑚𝑚𝜃𝜃̈ = 𝐾𝐾 𝐾𝐾 2 𝑉𝑉𝑉𝑉 − 𝑥𝑥̇ 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅𝑟𝑟 2 (6.18) Al transformar (6.11) y (6.18) al dominio s, considerando condiciones iniciales nulas se obtiene 𝐾𝐾 𝐾𝐾 2 (𝑀𝑀 + 𝑚𝑚)𝑠𝑠 𝑋𝑋(𝑠𝑠) + 𝑚𝑚𝑚𝑚𝑠𝑠 𝜃𝜃(𝑠𝑠) = 𝑉𝑉(𝑠𝑠) − 𝑠𝑠𝑠𝑠(𝑠𝑠) 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑎𝑎𝑟𝑟 2 (6.19) 𝑚𝑚𝑙𝑙 2 𝑠𝑠 2 𝜃𝜃(𝑠𝑠) + 𝑚𝑚𝑚𝑚𝑠𝑠 2 𝑋𝑋(𝑠𝑠) = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚(𝑠𝑠) (6.20) 2 2 13 Control de un Sistema de Péndulo Invertido Ordenando (6.19) por variables y reformulando (6.20) para sustituirla en (6.19) y eliminar 𝑋𝑋(𝑠𝑠), tenemos �(𝑀𝑀 + 𝑚𝑚)𝑠𝑠 2 + 𝑋𝑋 (𝑠𝑠) = 𝐾𝐾 2 𝐾𝐾 𝑠𝑠� 𝑋𝑋(𝑠𝑠) + 𝑚𝑚𝑚𝑚𝑠𝑠 2 𝜃𝜃(𝑠𝑠) = 𝑉𝑉(𝑠𝑠) 2 𝑅𝑅𝑅𝑅𝑟𝑟 𝑅𝑅𝑅𝑅𝑅𝑅 (6.21) 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 (𝑠𝑠) − 𝑚𝑚𝑙𝑙 2 𝑠𝑠 2 𝜃𝜃(𝑠𝑠) 𝑔𝑔 − 𝑙𝑙𝑠𝑠 2 � � 𝜃𝜃 (𝑠𝑠) = 𝑚𝑚𝑚𝑚𝑠𝑠 2 𝑠𝑠 2 (6.22) Sustituyendo (6.22) en (6.21) �(𝑀𝑀 + 𝑚𝑚)𝑠𝑠 2 + 𝐾𝐾 2 𝑔𝑔 − 𝑙𝑙𝑠𝑠 2 𝐾𝐾 � � 𝜃𝜃 (𝑠𝑠) + 𝑚𝑚𝑚𝑚𝑠𝑠 2 𝜃𝜃(𝑠𝑠) = 𝑠𝑠� 𝑉𝑉(𝑠𝑠) 2 2 𝑅𝑅𝑅𝑅𝑟𝑟 𝑠𝑠 𝑅𝑅𝑅𝑅𝑅𝑅 Operando �(𝑀𝑀 + 𝑚𝑚)𝑔𝑔 − (𝑀𝑀 + 𝑚𝑚)𝑙𝑙𝑠𝑠 2 + �−𝑀𝑀𝑀𝑀𝑠𝑠 3 𝐾𝐾 2 𝑔𝑔 𝐾𝐾 2 𝑙𝑙 𝐾𝐾 2� − 𝑠𝑠 + 𝑚𝑚𝑚𝑚𝑠𝑠 𝜃𝜃(𝑠𝑠) = 𝑉𝑉(𝑠𝑠) 𝑅𝑅𝑅𝑅𝑟𝑟 2 𝑠𝑠 𝑅𝑅𝑅𝑅𝑟𝑟 2 𝑅𝑅𝑅𝑅𝑅𝑅 𝐾𝐾 2 𝑙𝑙 2 𝐾𝐾 2 𝑔𝑔 𝐾𝐾 ( ) � − 𝑠𝑠 + 𝑀𝑀 + 𝑚𝑚 𝑔𝑔𝑔𝑔 + 𝜃𝜃(𝑠𝑠) = 𝑠𝑠𝑠𝑠(𝑠𝑠) 𝑅𝑅𝑅𝑅𝑟𝑟 2 𝑅𝑅𝑅𝑅𝑟𝑟 2 𝑅𝑅𝑅𝑅𝑅𝑅 Finalmente, la función de transferencia 𝐻𝐻 (𝑠𝑠) queda: 𝜃𝜃 (𝑠𝑠) = 𝐻𝐻(𝑠𝑠) = 𝑉𝑉 (𝑠𝑠) �𝑀𝑀𝑀𝑀𝑠𝑠 3 𝐾𝐾 − 𝑅𝑅𝑅𝑅𝑅𝑅 𝑠𝑠 𝐾𝐾 2 𝑔𝑔 𝐾𝐾 2 𝑙𝑙 2 ( ) + 𝑠𝑠 − 𝑀𝑀 + 𝑚𝑚 𝑔𝑔𝑔𝑔 − � 𝑅𝑅𝑅𝑅𝑟𝑟 2 𝑅𝑅𝑅𝑅𝑟𝑟 2 ; (6.23) A simple inspección, se puede observar la característica inestable de la planta. El símbolo negativo de la ganancia, es debido al sentido elegido en el diagrama de solido libre del ángulo del péndulo 𝜃𝜃. Observar que si la tensión 14 Control de un Sistema de Péndulo Invertido aplicada es positiva, la fuerza del motor (según el sentido impuesto de 𝑢𝑢) actúa hacia la derecha y el péndulo giraría en sentido anti horario (𝜃𝜃 negativo). Para una mayor comprensión de los elementos de la planta se adjunta la función de transferencia del péndulo sin el motor: 𝜃𝜃 (𝑠𝑠) = 𝐻𝐻 (𝑠𝑠) = 𝑈𝑈 (𝑠𝑠) 1 − 𝑀𝑀𝑀𝑀 𝑀𝑀 + 𝑚𝑚 𝑀𝑀 + 𝑚𝑚 �𝑠𝑠 + � 𝑀𝑀𝑀𝑀 𝑔𝑔 � �𝑠𝑠 − � 𝑀𝑀𝑀𝑀 𝑔𝑔 � (6.24) La Figura 6-3 muestra el LGR de la función de transferencia (6.24). Figura 6-3. LGR de la planta compuesta por el péndulo En esta figura, se puede observar la dinámica del péndulo. De estar la planta en lazo abierto, en aplicar una perturbación se obtendría una respuesta exponencial inestable. De aplicar una realimentación proporcional y tomando el sentido del ángulo contrario al establecido, se obtendrían oscilaciones no amortiguadas (Figura 6-4). 15 Control de un Sistema de Péndulo Invertido Figura 6-4. LGR de la planta sin el motor (invirtiendo la realimentación 1.6.3.1 Transformación al plano z: Obtención de la función de transferencia de la planta H(z). Dado que nuestro controlador es discreto, se debe trabajar en el dominio z. Para hallar la función de transferencia 𝐻𝐻(𝑧𝑧) que relacione el ángulo del péndulo con la tensión aplicada al motor, se transformará la función 𝐻𝐻(𝑠𝑠) al plano z 𝜃𝜃 (𝑠𝑠) = 𝐻𝐻(𝑠𝑠) = 𝑉𝑉 (𝑠𝑠) �𝑀𝑀𝑀𝑀𝑠𝑠 3 𝐾𝐾 − 𝑅𝑅𝑅𝑅𝑅𝑅 𝑠𝑠 𝐾𝐾 2 𝑔𝑔 𝐾𝐾 2 𝑙𝑙 2 ( ) + 𝑠𝑠 − 𝑀𝑀 + 𝑚𝑚 𝑔𝑔𝑔𝑔 − � 𝑅𝑅𝑅𝑅𝑟𝑟 2 𝑅𝑅𝑅𝑅𝑟𝑟 2 ; (6.23) Para simplificar el cálculo, se sustituyen las variables por los valores de la planta que se pretende controlar, en la ecuación (6.23). K=0.14 (V*s)/rad Ra=10 Ω r=0.005 m l=0.25 m M=0.0742 Kg m=0.0238 Kg g=9.81 Kg/(m*s2) 16 Control de un Sistema de Péndulo Invertido Sustituyendo valores, se obtiene 𝐻𝐻 (𝑠𝑠) = = 0.01855𝑠𝑠 3 −2.8𝑠𝑠 + 19.6𝑠𝑠 2 − 0.9614𝑠𝑠 − 769.1 −150.94𝑠𝑠 ; (𝑠𝑠 + 6.27)(𝑠𝑠 − 6.27)(𝑠𝑠 + 1056.62) (6.25) Se observan el par de polos provenientes del péndulo y la influencia del motor mediante un polo y un zero. Se ha eliminado el polo del motor 𝑠𝑠 = −1056.62 , ya que es mucho más rápido que los demás elementos de la planta 𝐻𝐻(𝑠𝑠) ≈ −150.94𝑠𝑠 ; − (6.272 ) 𝑠𝑠 2 (6.26) Para discretizar la planta se debe elegir el tiempo de muestreo 𝑇𝑇. La elección de este dependerá del control deseado, no obstante se tiene que poder entender lo que ocurre en la planta y por lo tanto, una primera aproximación es hacer 𝑇𝑇 x veces más grande que el polo más lento de la planta. De ser 𝑇𝑇 muy grande, podría haber problemas al reconstruir las señales observadas. Por el contrario de ser 𝑇𝑇 muy pequeño, se podría necesitar una ganancia muy elevada en la realimentación. También se debe de tener en cuenta 𝑇𝑇 en consideración de interferencias y errores de cuantificación de parámetros. En cualquier caso, de momento se ha elegido 𝑇𝑇 = 20 𝑚𝑚𝑚𝑚 , es decir aproximadamente 32 veces más rápido que el polo más lento de la planta (𝑠𝑠 = 6.27). No obstante, en el ejercicio de encontrar el controlador adecuado mediante ensayo, se podría retomar esta consideración y hallar un tiempo de muestreo más idóneo. Todo sistema discretizado consta de al menos un muestreador y un retenedor. El muestreador representa el hecho de que nuestro controlador no interpreta la información de forma continua y el retenedor cumple la función de convertir la señal de control discreta a tiempo continuo. En nuestro caso, se ha considerado un retenedor de orden cero, cuya función es la de sostener el ultimo valor durante 𝑇𝑇 segundos. 1 − 𝑒𝑒 −𝑇𝑇𝑇𝑇 𝑍𝑍𝑍𝑍𝑍𝑍(𝑠𝑠) = ; 𝑠𝑠 17 Control de un Sistema de Péndulo Invertido Como se puede observar, su respuesta impulsional es el resultado de restar una función escalón unitario desplazada 𝑇𝑇 segundos hacia la derecha a otra función escalón unitario. Llegados a este punto, ya se tiene todo lo necesario para transformar la planta 𝐻𝐻(𝑠𝑠) a términos que incluyan la acción de un controlador discreto. La planta en lazo abierto es 𝐻𝐻 (𝑠𝑠)𝑍𝑍𝑍𝑍𝑍𝑍(𝑠𝑠) = (1 − 𝑒𝑒 −𝑇𝑇𝑇𝑇 ) −150.94𝑠𝑠 𝑠𝑠(𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) (6.27) Transformando 𝐻𝐻(𝑠𝑠) al dominio z, se obtiene 𝑧𝑧 = 𝑒𝑒 𝑇𝑇𝑇𝑇 ⇒ (1 − 𝑒𝑒 −𝑇𝑇𝑇𝑇 ) = (1 − 𝑧𝑧 −1 ) 𝐻𝐻 (𝑧𝑧) = 𝑍𝑍[𝐻𝐻(𝑠𝑠)𝑍𝑍𝑍𝑍𝑍𝑍(𝑠𝑠)] = (1 − 𝑧𝑧 −1 )𝑍𝑍 � −150.94 � (𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) (6.28) Se desarrolla el término en corchetes de (6.28) en fracciones parciales 12.05 12.05 −150.94 = − (𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) 𝑠𝑠 + 6.26 𝑠𝑠 − 6.27 y se transforma al dominio z mediante tablas 𝑍𝑍 � −150.94 12.05 12.05 �= − −6.26𝑇𝑇 −1 (𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) 1 − 𝑒𝑒 𝑧𝑧 1 − 𝑒𝑒 6.27𝑇𝑇 𝑧𝑧 −1 = 12.05 12.05 − 1 − 𝑒𝑒 −0.1252 𝑧𝑧 −1 1 − 𝑒𝑒 0.1254 𝑧𝑧 −1 (6.29) 18 Control de un Sistema de Péndulo Invertido Sustituyendo (6.29) en (6.28) se tiene 𝐻𝐻 (𝑧𝑧) = (1 − 𝑧𝑧 −1 ) � = 12.05 12.05 − � −0.125 −1 1 − 𝑒𝑒 𝑧𝑧 1 − 𝑒𝑒 0.125 𝑧𝑧 −1 −3.027𝑧𝑧 + 3.027 𝑧𝑧 2 − 2.016𝑧𝑧 + 1 (6.30) 1.6.3.2 Transformación al plano z: La transformada z modificada La transformada z modificada, es un método alternativo para la transformación del plano s al plano z descrito en [2] (p.691-696). Este método tiene la peculiaridad de añadir un retardo ficticio puro o retardo de transporte de valor (1 − 𝑚𝑚)𝑇𝑇 segundos, donde 𝑇𝑇 es el periodo de muestreo y 𝑚𝑚 toma valores entre 0 y 1. Esto nos permite introducir al modelo de la planta, el tiempo que tarda el programa del controlador en ejecutarse, y ver cómo influye el tiempo de instrucción en el control de la planta. La transformada z modificada se aplica con la siguiente fórmula: 𝐻𝐻 (𝑧𝑧, 𝑚𝑚) = 𝑧𝑧 −1 Σ �𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑑𝑑𝑑𝑑 𝐻𝐻 (𝑠𝑠) ∗ 𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑑𝑑𝑑𝑑 𝐺𝐺 (𝑠𝑠)� 𝑧𝑧 − 𝑒𝑒 𝑇𝑇𝑇𝑇 Si se añade al sistema un retenedor de orden cero, se tiene 𝐻𝐻(𝑧𝑧, 𝑚𝑚) = 𝑧𝑧 −1 Σ �𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑑𝑑𝑑𝑑 𝐻𝐻 (𝑠𝑠) ∗ 1 − 𝑒𝑒 −𝑇𝑇𝑇𝑇 𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧 ∗ 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑑𝑑𝑑𝑑 𝐺𝐺 (𝑠𝑠)� 𝑠𝑠 𝑧𝑧 − 𝑒𝑒 𝑇𝑇𝑇𝑇 simplificando 𝐻𝐻 (𝑧𝑧, 𝑚𝑚) = 𝑧𝑧 −1 (1 − z −1 )Σ �𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑑𝑑𝑑𝑑 𝐻𝐻 (𝑠𝑠) 𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧 ∗ 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑑𝑑𝑑𝑑 𝐺𝐺 (𝑠𝑠)� 𝑠𝑠 𝑧𝑧 − 𝑒𝑒 𝑇𝑇𝑇𝑇 (6.31) 19 Control de un Sistema de Péndulo Invertido A continuación, se retoma la función de transferencia 𝐻𝐻(𝑠𝑠): 𝐻𝐻 (𝑠𝑠) ≈ −150.94𝑠𝑠 − (6.272 ) 𝑠𝑠 2 (6.26) Sustituyendo (6.26) en (6.31), se tiene 𝐻𝐻(𝑧𝑧, 𝑚𝑚) = 𝑧𝑧 −1 (1 − z −1 )Σ �𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 𝑑𝑑𝑑𝑑 −150.94 𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑑𝑑𝑑𝑑 𝐺𝐺 (𝑠𝑠)� (𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) 𝑧𝑧 − 𝑒𝑒 𝑇𝑇𝑇𝑇 = 𝑧𝑧 −1 (1 − z −1 ) � lim (𝑠𝑠 + 6.26) 𝑠𝑠→−6.26 +𝑧𝑧 −1 (1 − z −1 ) � lim (𝑠𝑠 − 6.27) 𝑠𝑠→6.27 = 𝑧𝑧 −1 ( −150.94 𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧 � (𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) 𝑧𝑧 − 𝑒𝑒 𝑇𝑇𝑇𝑇 𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚 𝑧𝑧 −150.94 � (𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) 𝑧𝑧 − 𝑒𝑒 𝑇𝑇𝑇𝑇 150.94 e−6.26mT z 150.94 e6.27mT z � 1 − z −1 ) � − 12.53 z − e−6.26T 12.53 z − e6.27T Considerando 𝑇𝑇 = 20 𝑚𝑚𝑚𝑚 (véase apartado 1.6.3.1) 12.05e−0.125m z 12.05e0.125m z � = 𝑧𝑧 −1 (1 − z −1 ) � − z − 𝑒𝑒 −0.125 z − 𝑒𝑒 0.125 (6.32) Se observa que si m = 0, por lo tanto se tiene un retardo de valor T s, la función obtenida mediante la transformada z modificada es igual a la obtenida mediante la transformación z, más un retardo de T s o 𝑧𝑧 −1 . 𝐻𝐻 (𝑧𝑧) = 𝑧𝑧 lim 𝐻𝐻 (𝑧𝑧, 𝑚𝑚) = (1 − 𝑧𝑧 −1 ) � 𝑚𝑚 →0 12.05 12.05 − � −0.125 −1 1 − 𝑒𝑒 𝑧𝑧 1 − 𝑒𝑒 0.125 𝑧𝑧 −1 20 Control de un Sistema de Péndulo Invertido 1.6.4.1 Representación en el espacio de estados en tiempo continuo A continuación, se retoman las ecuaciones diferenciales que describen el comportamiento de la planta compuesta por el péndulo y el motor: (𝑀𝑀 + 𝑚𝑚)𝑥𝑥̈ + 𝑚𝑚𝑚𝑚𝜃𝜃̈ = 𝑢𝑢 (6.10) 𝑚𝑚𝑙𝑙 2 𝜃𝜃̈ + 𝑚𝑚𝑚𝑚𝑥𝑥̈ = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 (6.11) 𝐾𝐾 𝐾𝐾 2 𝑉𝑉𝑉𝑉 − 𝑥𝑥̇ 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅𝑟𝑟 2 (6.17) 𝑢𝑢 = Aislando las derivadas segundas de (6.10) y (6.11) 𝜃𝜃̈ = (𝑀𝑀 + 𝑚𝑚)𝑔𝑔 𝑢𝑢 𝜃𝜃 − 𝑀𝑀𝑀𝑀 𝑀𝑀𝑀𝑀 𝑥𝑥̈ = 𝑢𝑢 𝑚𝑚𝑚𝑚 − 𝜃𝜃 𝑀𝑀 𝑀𝑀 Substituyendo en estas la variable 𝑢𝑢 (6.17), se tiene 𝜃𝜃̈ = (𝑀𝑀 + 𝑚𝑚)𝑔𝑔 𝑀𝑀𝑀𝑀 𝑥𝑥̈ = 𝐾𝐾 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝜃𝜃 − 𝐾𝐾 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑉𝑉𝑉𝑉 − 𝐾𝐾2 𝑉𝑉𝑉𝑉 + 𝑀𝑀𝑀𝑀𝑀𝑀𝑟𝑟2 𝑥𝑥̇ − 𝐾𝐾2 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑟𝑟2 𝑚𝑚𝑚𝑚 𝑀𝑀 𝜃𝜃 𝑥𝑥̇ ; (6.33) (6.34) 21 Control de un Sistema de Péndulo Invertido Sean las variables de estado x1 , x2 , x3 y 𝑥𝑥4 siguientes: =θ = θ̇ =x = ẋ Sea la entrada del sistema x1 x2 x3 x4 se obtiene 𝑢𝑢 = 𝑉𝑉𝑉𝑉 𝑥𝑥1̇ = 𝑥𝑥2 (𝑀𝑀 + 𝑚𝑚)𝑔𝑔 𝐾𝐾 2 𝐾𝐾 𝑥𝑥2̇ = 𝑥𝑥1 + 𝑥𝑥4 − 𝑢𝑢 2 𝑀𝑀𝑀𝑀 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑟𝑟 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 𝑥𝑥3̇ = 𝑥𝑥4 𝑚𝑚𝑚𝑚 𝐾𝐾 2 𝐾𝐾 𝑥𝑥4̇ = − 𝑥𝑥4 − 𝑥𝑥4 + 𝑢𝑢 2 𝑀𝑀𝑀𝑀𝑀𝑀𝑟𝑟 𝑀𝑀 𝑀𝑀𝑀𝑀𝑎𝑎𝑎𝑎 Con esto, se puede hacer la siguiente representación del sistema en el espacio de estados: 𝑥𝑥̇ = 𝐴𝐴𝐴𝐴 + 𝐵𝐵𝐵𝐵 (6.35) donde 𝑥𝑥1 𝑥𝑥2 𝑥𝑥 = �𝑥𝑥 � , 3 𝑥𝑥4 0 ⎡(𝑀𝑀 + 𝑚𝑚)𝑔𝑔 ⎢ 𝑀𝑀𝑀𝑀 𝐴𝐴 = ⎢ 0 ⎢ 𝑚𝑚𝑚𝑚 ⎢ − ⎣ 𝑀𝑀 1 0 0 0 0 0 0 0 0 𝐾𝐾 2 ⎤ ⎥ 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑟𝑟 2 ⎥ , 1 ⎥ 𝐾𝐾 2 ⎥ − 𝑀𝑀𝑀𝑀𝑀𝑀𝑟𝑟 2 ⎦ 0 ⎡ 𝐾𝐾 ⎤ ⎢− ⎥ 𝐵𝐵 = ⎢ 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 ⎥ 0 ⎢ ⎥ 𝐾𝐾 ⎢ ⎥ ⎣ 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 ⎦ 22 Control de un Sistema de Péndulo Invertido 1.6.4.2 Representación en el espacio de estados en tiempo discreto A continuación se discretizará la ecuación (6.35) a (6.36): 𝑥𝑥�(𝑘𝑘 + 1)𝑇𝑇� = 𝐺𝐺 (𝑇𝑇)𝑥𝑥(𝑘𝑘𝑘𝑘 ) + 𝐻𝐻 (𝑇𝑇)𝑢𝑢(𝑘𝑘𝑘𝑘) (6.36) donde 𝑥𝑥1 (𝑘𝑘𝑘𝑘) 𝑥𝑥 (𝑘𝑘𝑘𝑘) �, 𝑥𝑥(𝑘𝑘𝑘𝑘) = � 2 𝑥𝑥3 (𝑘𝑘𝑘𝑘) 𝑥𝑥4 (𝑘𝑘𝑘𝑘) 𝐺𝐺 (𝑇𝑇) = 𝑒𝑒 𝐴𝐴𝐴𝐴 −1 = 𝐿𝐿 [(𝑠𝑠𝑠𝑠 − 𝐴𝐴 )−1 ], 𝑇𝑇 𝐻𝐻 (𝑇𝑇) = �� 𝑒𝑒 𝐴𝐴𝐴𝐴 𝑑𝑑𝑑𝑑 � 𝐵𝐵 0 siendo 𝐿𝐿−1 la transformada inversa de Laplace. Las formulas para calcular 𝐺𝐺 (𝑇𝑇) y 𝐻𝐻 (𝑇𝑇) han sido extraídas de [2] (p.312-315). En ellas, se considera que se introduce en la planta un retenedor de orden cero. Para facilitar la obtención de (6.36), se sustituirán en (6.35) los valores de la planta que se usaran en este proyecto K=0.14 (V*s)/rad Ra=10 Ω r=0.005 m l=0.25 m M=0.0742 Kg m=0.0238 Kg g=9.81 Kg/(m*s2) dando lugar a 0 𝑥𝑥1̇ ⎡ 𝑥𝑥 ̇ ⎢ 51.82 � 2� = ⎢ 𝑥𝑥3̇ ⎢ 0 𝑥𝑥4̇ ⎣−3.15 1 0 0 0 0 0 0 0 0 0 ⎤ _𝑥𝑥1 4226.41 ⎥ 𝑥𝑥2 −150.94 � 𝑢𝑢 ⎥ � 𝑥𝑥3 � + � 0 1 ⎥ 𝑥𝑥 4 37.73 −1056.6⎦ (6.37) 23 Control de un Sistema de Péndulo Invertido Dado que con una matriz de cuarto orden hacer los cálculos a mano resulta laborioso y fácilmente nos podemos equivocar, se ha usado MATLAB para la resolución de estos. Para ello, se pueden usar las siguientes funciones: 𝐺𝐺 = 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒(𝐴𝐴 ∗ 𝑇𝑇) : Calcula la matriz exponencial 𝑒𝑒 𝐴𝐴𝐴𝐴 (matriz de transición de estados). [𝐺𝐺, 𝐻𝐻] = 𝑐𝑐2𝑑𝑑(𝐴𝐴, 𝐵𝐵, 𝑇𝑇𝑇𝑇); : Calcula las matrices 𝐺𝐺(𝑇𝑇) i 𝐻𝐻(𝑇𝑇). Por defecto usa un ZOH, pero podría usar otros retenedores. Considerando 𝑇𝑇 = 20 𝑚𝑚𝑚𝑚 (véase el apartado 1.6.3.1), se obtiene 1.0081 ⎡ ⎢ 0.7981 𝐺𝐺 (0.02) = ⎢ ⎢−0.0001 ⎣−0.0030 0.0201 1.0081 0 −0.0001 0 0 1 0 −0.0027 −0.1439 � 𝐻𝐻 (0.02) = � 0.0007 0.0357 0.0764 ⎤ 4.0294 ⎥ 0.0009 ⎥⎥ −0.0002⎦ (6.38) (6.39) 24 Control de un Sistema de Péndulo Invertido 1.7 Diseño de sistemas de control 1.7.1 Control mediante el LGR En este apartado, se encontrará un controlador que cumpla unas características deseadas, mediante el método del lugar geométrico de las raíces propuesto por W. R. Evans. Se parte de la función de transferencia de la planta discreta, que se obtuvo en la sección 1.6. En ella se consideran las siguientes aproximaciones: -Linealización entorno a la posición 0º del péndulo. -Eliminación de la inercia del péndulo. -No se consideran fricciones. -Efectos del motor de cc en estado estacionario. -Eliminación de un polo del motor de cc, cuyo valor es: 𝑠𝑠 = −1056.62. (Para un análisis más detallado de las aproximaciones véase la sección 1.6) Se retoma la función de transferencia 𝐻𝐻(𝑧𝑧), para más comodidad 𝐻𝐻 (𝑧𝑧) = −3.027𝑧𝑧 + 3.027 ; 𝑧𝑧 2 − 2.016𝑧𝑧 + 1 (7.1) Si consideramos esta planta para el LGR, obtendremos un LGR de una planta con realimentación positiva. Esto es debido, como ya se habló antes, al sentido establecido en el modelado del ángulo del péndulo (positivo o negativo entorno de 0). Si se quiere controlar el péndulo, se debe trabajar en un LGR con realimentación negativa. Entonces, de ahora en adelante se considerara 𝐻𝐻(𝑧𝑧) como – 𝐻𝐻(𝑧𝑧). A la hora de implementar el sistema regulador en la realidad, se tendrá que definir la posición angular del péndulo teniendo esto en consideración. El sistema ha diseñar pretende mantener el péndulo en la posición 0º, por lo tanto la consigna es 0 y el sistema que se quiere realizar es un sistema regulador. El controladorr se ubicara en la trayectoria directa, como se puede ver en la Figura 7-1. 25 Control de un Sistema de Péndulo Invertido u(kT) θ(kT) T Controlador digital θ(kT) Planta ZOH Gc(z) H(z) Figura 7-1. Sistema regulador y planta Mediante la función de MATLAB rootlocus se ha obtenido la gráfica del LGR de 𝐻𝐻(𝑧𝑧): Figura 7-2. LGR de H(z) 26 Control de un Sistema de Péndulo Invertido 1.7.1.1 Estabilización de la planta Antes de buscar unas especificaciones concretas para la respuesta deseada, se debe encontrar una solución para estabilizar la planta. Para ello se ha seguido el siguiente método. Si se cancela el cero en el origen, se tienen polos complejos conjugados cerca del eje imaginario (aumentando la ganancia del compensador). Con ello, el sistema sigue siendo inestable, pero se está más cerca de estabilizar el sistema. Figura 7-3. Compensación con integrador puro En la Figura 7-3 se observa que no llegamos al límite de la estabilidad, como se deseaba. No obstante, con el siguiente paso se llevará la planta a la estabilidad. 27 Control de un Sistema de Péndulo Invertido Finalmente, se introduce un cero en el semiplano izquierdo, arrastrando los polos complejos conjugados hacia este. Figura 7-4. Planta estabilizada Se puede observar como se ha estabilizado la planta, con un controlador basado en un polo en el origen y un cero en el semiplano izquierdo del LGR. 1.7.1.2 Introduciendo especificaciones: Contornos y error en estado estacionario Ahora que ya se tiene la planta estabilizada, se deben establecer unos contornos que garanticen el buen funcionamiento de la planta. A partir de estos, se hará el ejercicio de encontrar un controlador que de unas características concretas. En cuanto a los contornos, se sabe que el modelo obtenido es válido para variaciones de la posición del péndulo cercanas a la posición 0. Teniendo en cuenta esto, se debería minimizar la sobre-elongación y el error generado por las perturbaciones en estado estacionario. En cuanto al tiempo de 28 Control de un Sistema de Péndulo Invertido establecimiento, se pueden jugar con varios valores, siempre que la posición del carro no exceda los límites de la maqueta. Esto último se deberá controlar mediante el ensayo en la planta y posterior corrección del controlador. Póngase un sobre-pico inferior al 15% y un tiempo de establecimiento inferior a los 4 s. Utilizando la notación polar y la fórmula de Euler, se tiene 𝑧𝑧 = 𝑎𝑎 + 𝑖𝑖𝑖𝑖 = 𝑟𝑟𝑒𝑒 𝑖𝑖𝑖𝑖 , 𝑏𝑏 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝜃𝜃 = 𝑡𝑡𝑔𝑔−1 � � 𝑦𝑦 𝑟𝑟 = �𝑎𝑎2 + 𝑏𝑏2 𝑎𝑎 En base a esta, se aplica la fórmula del tiempo de establecimiento para una función de segundo orden 𝑇𝑇𝑇𝑇 = Entonces 4 ln 𝑟𝑟 𝑇𝑇𝑇𝑇 ≤ 4 𝑠𝑠𝑠𝑠𝑠𝑠 => ln 𝑟𝑟 ≤ 1 (7.2) Por lo tanto, nos sirve todo el círculo unitario alrededor del origen del LGR. Para un sobre-pico inferior al 16%, se tiene 𝑆𝑆𝑆𝑆 = 𝜋𝜋𝜋𝜋 − 2 �1−𝜉𝜉 𝑒𝑒 => 𝜉𝜉 ≥ 0.5 (7.3) Se ha de tener en cuenta, que esta fórmula solo es aplicable en el caso en que la planta en lazo abierto, disponga solamente de dos polos. En la mayoría de plantas, se deberá simular el controlador hasta minimizar el sobre-pico a un valor establecido. La relación entre el factor de amortiguamiento relativo y los polos en el LGR para una planta discreta, se expresa mediante la siguiente fórmula: 𝜉𝜉 = − ln 𝑟𝑟 √ln2 𝑟𝑟 + 𝜃𝜃 2 La siguiente gráfica sobrepone una rejilla con valores de 𝜉𝜉 , con la planta compensada mediante un polo en el origen y un zero en 𝑧𝑧 = 0.8 . Se ha remarcado el contorno 𝜉𝜉 ≥ 0.5. Este límite, al ser más restrictivo, incluye también el contorno de 𝑇𝑇𝑇𝑇 ≤ 4 𝑠𝑠. Se ha elegido el valor del polo de forma 29 Control de un Sistema de Péndulo Invertido simbólica, para representar una posible solución que entrara en los límites establecidos. Figura 7-5. Contorno de 𝜉𝜉 ≥ 0.5 Hasta ahora se ha hablado de sobre-elongación, del factor de amortiguamiento relativo y del tiempo de establecimiento. Estos valores, se relacionan con el régimen transitorio de la planta y proceden de evaluar la ecuación característica de la planta en realimentación. En la construcción de un sistema regulador, para esta planta de péndulo invertido, interesa minimizar las perturbaciones ocasionadas en el camino que discurre entre el actuador y la planta de péndulo invertido a controlar. Tanto las perturbaciones como la entrada de referencia tendrán las mismas características transitorias, puesto que comparten la ecuación característica del sistema. Por lo tanto, las características transitorias evaluadas hasta ahora se aplican también a las perturbaciones. A la hora de calcular el error en estado estacionario. Se debería modificar la Figura 7-1 a un diagrama que separe el actuador de la planta a 30 Control de un Sistema de Péndulo Invertido controlar. Si se llama 𝐻𝐻 a la planta (sin el actuador) y 𝐺𝐺𝐶𝐶 al controlador junto con el actuador, se tiene 𝑌𝑌 = 𝐻𝐻 𝐺𝐺𝐶𝐶 𝐻𝐻 𝑅𝑅 + 𝑁𝑁 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 donde N es la perturbación y R la entrada del sistema. Entonces el error es 𝐸𝐸 = 𝑅𝑅 − 𝐺𝐺𝐶𝐶 𝐻𝐻 𝐻𝐻 𝑅𝑅 − 𝑁𝑁 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 (7.4) Aplicando el TVF para sistemas discretos a (7.4), se obtiene el error en estado estacionario 𝐸𝐸(𝑧𝑧) = lim �(1 − 𝑧𝑧 −1 ) �𝑅𝑅 − 𝑧𝑧→1 𝐺𝐺𝐶𝐶 𝐻𝐻 𝐻𝐻 𝑅𝑅 − 𝑁𝑁�� 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 En nuestro sistema, se cumple que la entrada de referencia 𝑅𝑅 es nula, por lo tanto 𝐸𝐸(𝑧𝑧) = lim �(1 − 𝑧𝑧 −1 ) �− 𝑧𝑧→1 𝐻𝐻 𝑁𝑁�� 1 + 𝐺𝐺𝐶𝐶 𝐻𝐻 (7.5) Para minimizar este error, sin modificar la ruta del compensador, se debe hacer 𝐺𝐺𝐶𝐶 ≫ 𝐻𝐻 Para ello, se podría aumentar la ganancia del controlador o introducir un polo cerca de límite de la estabilidad z=1 (compensador de retraso de fase). También, se podrían introducir polos en el límite de la estabilidad, aumentando el tipo del sistema. 31 Control de un Sistema de Péndulo Invertido 1.7.1.3 Ejemplo de controlador En este apartado, se encontrará un ejemplo en concreto dentro del marco establecido por los apartados 1.7.1.1 y 1.7.1.2. Póngase, por ejemplo, un factor de amortiguamiento relativo de 𝜉𝜉 ≈ 0.6 y un tiempo de establecimiento de 𝑇𝑇𝑇𝑇 ≈ 0.4 s. Se hará que 𝐺𝐺𝐶𝐶 para 𝑧𝑧 = 1, sea 10 veces más grande mediante un compensador de retardo. 𝑇𝑇𝑇𝑇 = 4 4 => 𝑊𝑊𝑊𝑊 = ≈ 16.67 rad/s 0.6 ∗ 0.4 𝜉𝜉𝜉𝜉𝜉𝜉 2 𝑧𝑧 = 𝑒𝑒 −𝜉𝜉𝜉𝜉𝜉𝜉 ±𝑤𝑤𝑤𝑤 �1−𝜉𝜉 => 𝑧𝑧1,2 = 0.79 ± 0.216𝑗𝑗 Nuestro controlador tendrá una función de transferencia como el siguiente modelo: 𝐺𝐺𝐶𝐶1 (𝑧𝑧) = 𝐾𝐾(𝑧𝑧 − 𝑎𝑎) 𝑧𝑧 − 1 (7.7) Reordenando la función de la planta (7.1), se tiene 𝐻𝐻 (𝑧𝑧) = −3.027𝑧𝑧 + 3.027 −3.027(𝑧𝑧 − 1) = 2 (𝑧𝑧 − 0.88)(𝑧𝑧 − 1.13) 𝑧𝑧 − 2.016𝑧𝑧 + 1 Entonces, la ecuación característica es 1 + 𝑇𝑇(𝑧𝑧) = 1 + 𝐺𝐺𝐶𝐶1 (𝑧𝑧)𝐻𝐻(𝑧𝑧) = 1 + −3.027𝐾𝐾(𝑧𝑧 − 𝑎𝑎) =0 (𝑧𝑧 − 0.88)(𝑧𝑧 − 1.13) (7.8) Para que se cumpla la ecuación característica, se tienen que cumplir las condiciones de módulo i argumento. Condición de argumento: arg(𝑧𝑧 − 𝑎𝑎) − arg(𝑧𝑧 − 0.88) − arg(𝑧𝑧 − 1.13)|𝑧𝑧=0.79±0.216𝑗𝑗 = −180 (7.9) 32 Control de un Sistema de Péndulo Invertido arg(𝑧𝑧 − 𝑎𝑎) − �180 − tg −1 � 0.216 0.216 �� − �180 − tg −1 � ��� = −180 0.09 0.34 𝑧𝑧=0.79±0.216 𝑗𝑗 arg(𝑧𝑧 − 𝑎𝑎) − 260.19 = −180 => arg(𝑧𝑧 − 𝑎𝑎) = 80.19 𝑡𝑡𝑔𝑔−1 � 0.216 � = 80.19 => 𝑎𝑎 ≈ 0.753 0.79 − 𝑎𝑎 Condición de módulo: 3.027𝐾𝐾 𝐾𝐾 = |𝑧𝑧 − 0.753| � =1 |(𝑧𝑧 − 0.88)|(𝑧𝑧 − 1.13)| 𝑧𝑧=0.79±0.216𝑗𝑗 |(𝑧𝑧 − 0.88)|(𝑧𝑧 − 1.13)| � 3.027|𝑧𝑧 − 0.753| 𝑧𝑧=0.79±0.216𝑗𝑗 (7.9) = 0.142 Con esto, nuestro controlador queda definido 𝐺𝐺𝐶𝐶1 (𝑧𝑧) = 0.142(𝑧𝑧 − 0.753) 𝑧𝑧 − 1 (7.10) Si se evalúa la ganancia que introduce este controlador en estado estacionario, suponiendo una entrada escalón unitario, se tiene |𝐺𝐺𝐶𝐶1𝑒𝑒𝑒𝑒𝑒𝑒 (𝑧𝑧)| = | lim 0.142(𝑧𝑧 − 0.753) | = 0.035 𝑧𝑧→1 (Se ha eliminado el polo en 𝑧𝑧 = 1, puesto que este se compensa con el cero en 𝑧𝑧 = 1 del actuador). Con el fin de incrementar esta ganancia en un factor 10, se introduce una pareja cero-polo cercana al límite de la estabilidad 𝑧𝑧 = 1, 𝐺𝐺𝐶𝐶2 (𝑧𝑧) = donde se debe de cumplir 0.142(𝑧𝑧 − 0.753) 𝑧𝑧 − 𝑎𝑎 𝑧𝑧 − 1 𝑧𝑧 − 𝑏𝑏 𝑧𝑧 − 𝑎𝑎 = 10 𝑧𝑧→1 𝑧𝑧 − 𝑏𝑏 lim 33 Control de un Sistema de Péndulo Invertido Para ello, se ha elegido 𝑎𝑎 = 0.9 y b=0.99 𝑧𝑧 − 𝑎𝑎 𝑧𝑧 − 𝑏𝑏 Se debe estudiar si la adición de este controlador modifica demasiado la dinámica de la planta y, de ser así, suavizar la diferencia entre los valores de la pareja cero-polo. Finalmente, se tiene 𝐺𝐺𝐶𝐶2 (𝑧𝑧) = 0.142(𝑧𝑧 − 0.753)(𝑧𝑧 − 0.9) (𝑧𝑧 − 1)(𝑧𝑧 − 99) (7.11) A continuación, veamos los resultados obtenidos de la simulación. Para simular el sistema, se ha empleado la herramienta sisotool de MATLAB: ● Controlador de primer orden 𝐺𝐺𝐶𝐶1 (𝑧𝑧) Figura 7-6. LGR de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) 34 Control de un Sistema de Péndulo Invertido Figura 7-7. Respuesta a 𝑢𝑢(𝑘𝑘𝑘𝑘) de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) En la Figura 7-6, se puede observar como la localización de los polos es bastante cercana a la calculada. Se tiene y la localización teórica era 𝑧𝑧1,2 𝑟𝑟𝑒𝑒𝑒𝑒𝑒𝑒 = 0.793 ± 0.218𝑗𝑗 𝑧𝑧1,2 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 = 0.79 ± 0.216𝑗𝑗 También, se puede observar mediante la rejilla, como el factor de amortiguamiento relativo es ξ ≈ 0.6. En cuanto al tiempo de establecimiento, parece que se acerca a su diseño teórico: Ts ≈ 0.4. ● Controlador de segundo orden 𝐺𝐺𝐶𝐶2 (𝑧𝑧) Como antes se habló, el compensador de retardo minimiza el error en estado estacionario (en este caso con un factor 10). No obstante, se debe observar si modifica la dinámica de la planta sustancialmente o no. 35 Control de un Sistema de Péndulo Invertido Figura 7-8. LGR de 𝐺𝐺𝐶𝐶2 (𝑧𝑧) Como se observa, se tiene un LGR parecido al de la Figura 7-6. Ahora los polos son y 𝑧𝑧1,2 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 = 0.84 ± 0.273𝑗𝑗 𝜉𝜉 ≈ 0.4 Aumentando la ganancia, se reubican los polos en la trayectoria de 𝜉𝜉 = 0.6, 𝐺𝐺𝐶𝐶2 ′(𝑧𝑧) = 𝟎𝟎. 𝟐𝟐𝟐𝟐𝟐𝟐(𝑧𝑧 − 0.753)(𝑧𝑧 − 0.9) (𝑧𝑧 − 1)(𝑧𝑧 − 0.99) ; (7.12) 36 Control de un Sistema de Péndulo Invertido Figura 7-9. LGR de 𝐺𝐺𝐶𝐶2 ′(𝑧𝑧) a la vez que aumenta la frecuencia natural, haciendo la respuesta un poco más rápida Figura 7-10. Respuesta a 𝑢𝑢(𝑘𝑘𝑘𝑘) de 𝐺𝐺𝐶𝐶2 ′(𝑧𝑧) 37 Control de un Sistema de Péndulo Invertido En el apartado anterior, se comentó que al incrementar la ganancia del controlador en estado estacionario (para una entrada 𝑢𝑢(𝑘𝑘𝑘𝑘)) se reduce el error frente a las perturbaciones. Como se puede observar, con esto se reduce también el error frente a la entrada de referencia. Finalmente, se añaden las dos graficas de las respuestas de los dos controladores Figura 7-11. Respuestas a 𝑢𝑢(𝑘𝑘𝑘𝑘) de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) y 𝐺𝐺𝐶𝐶2 ′(𝑧𝑧) 1.7.1.4 Simulaciones de la planta-controlador con retardos de transporte. En este apartado se hace uso de la transformada z modificada para simular un retardo de transporte de valor (1 − 𝑚𝑚)𝑇𝑇 (donde 𝑇𝑇 es el tiempo de muestreo), con los controladores obtenidos en el apartado anterior. Este retardo representa el tiempo que tarda el programa en ejecutarse. Los resultados serán de utilidad, a la hora de elegir el tiempo de instrucción del controlador. Figura 7-12. Transformada z modificada (Extraído de [2]) 38 Control de un Sistema de Péndulo Invertido Retomemos la ecuación de la planta con retardo de transporte, obtenida en el apartado 1.6.3.2. 𝐻𝐻(𝑧𝑧, 𝑚𝑚) = 𝑧𝑧 −1 ( 1−z 12.05e−0.125 m z 12.05e0.125m z �; − z − 𝑒𝑒 −0.125 z − 𝑒𝑒 0.125 −1 ) � (7.13) A continuación, veamos las simulaciones de los controladores de primer y segundo orden, para distintos retardos de transporte: ● Controlador de primer orden 𝐺𝐺𝐶𝐶1 (𝑧𝑧) 𝑚𝑚 = 1 => tiempo de retardo= 0 s, polos dominantes: 𝑧𝑧1,2 = 0.793 ± 0.218𝑗𝑗 Figura 7-13. Simulación de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) con tiempo de retardo nulo 39 Control de un Sistema de Péndulo Invertido 𝑚𝑚 = 0.9 => tiempo de retardo= 2 ms, polos dominantes: 𝑧𝑧1,2 = 0.790 ± 0.226𝑗𝑗 Figura 7-14. Simulación de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) con tiempo de retardo de 2 ms 𝑚𝑚 = 0.8 => tiempo de retardo= 4 ms, polos dominantes: 𝑧𝑧1,2 = 0.788 ± 0.235𝑗𝑗 Figura 7-15. Simulación de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) con tiempo de retardo de 4 ms 40 Control de un Sistema de Péndulo Invertido 𝑚𝑚 = 0.5 => tiempo de retardo= 10 ms, polos dominantes: 𝑧𝑧1,2 = 0.783 ± 0.266𝑗𝑗 Figura 7-16. Simulación de 𝐺𝐺𝐶𝐶1 (𝑧𝑧) con tiempo de retardo de 10 ms Como conclusión, siendo 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 el tiempo de retardo y usando mi propio criterio establezco: Para 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 ≤ 2 𝑚𝑚𝑚𝑚 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 es despreciable Para 2𝑚𝑚 𝑠𝑠 < 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 ≤ 4 𝑚𝑚𝑠𝑠 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 modifica ligeramente los polos del sistema. Para 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 > 4 𝑚𝑚𝑚𝑚 tenemos que considerar 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 en el diseño del controlador. En cualquier caso, siempre que 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 no supere el tiempo de muestreo (20 ms), y no se aumente la ganancia mucho más de lo previsto, no se tiene el peligro de llevar a la planta a la inestabilidad. No obstante de ser 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 mayor que 4 ms, no se puede despreciar este factor con facilidad. 41 Control de un Sistema de Péndulo Invertido ● Controlador de segundo orden 𝐺𝐺𝐶𝐶2 ’(𝑧𝑧) 𝑚𝑚 = 1 => tiempo de retardo= 0 s, polos dominantes: 𝑧𝑧1,2 = 0.696 ± 0.279𝑗𝑗 Figura 7-17. Simulación de 𝐺𝐺𝐶𝐶2 ’(𝑧𝑧) con tiempo de retardo nulo 𝑚𝑚 = 0.9 => tiempo de retardo= 2 ms, polos dominantes: 𝑧𝑧1,2 = 0.685 ± 0.297𝑗𝑗 Figura 7-18. Simulación de 𝐺𝐺𝐶𝐶2 ’(𝑧𝑧) con tiempo de retardo de 2 ms 42 Control de un Sistema de Péndulo Invertido 𝑚𝑚 = 0.85 => tiempo de retardo= 3 ms, polos dominantes: 𝑧𝑧1,2 = 0.678 ± 0.308𝑗𝑗 Figura 7-19. Simulación de 𝐺𝐺𝐶𝐶2 ’(𝑧𝑧) con tiempo de retardo de 3 ms 𝑚𝑚 = 0.5 => tiempo de retardo=10 ms, polos dominantes: 𝑧𝑧1,2 = 0.658 ± 0.429𝑗𝑗 Figura 7-20. Simulación de 𝐺𝐺𝐶𝐶2 ’(𝑧𝑧) con tiempo de retardo de 10 ms Haciendo memoria, en el apartado anterior, se aumentó la ganancia moviendo los polos dominantes un poco más a la izquierda del LGR, para compensar la adición de un polo y un cero y reubicar los polos en la trayectoria 𝜉𝜉 ≈ 0.6. Al hacer esto, los polos deseados se encuentran en una posición más sensible a 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 , como se puede observar en las simulaciones. Por eso, se debe de ser un poco más restrictivos con las consideraciones de 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 . En este caso, establezco bajo mi criterio: 43 Control de un Sistema de Péndulo Invertido Para 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 < 2 𝑚𝑚𝑚𝑚 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 es despreciable Para 2𝑚𝑚 𝑠𝑠 ≤ 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 < 3 𝑚𝑚𝑚𝑚 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 modifica ligeramente los polos del sistema. Para 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 ≥ 3 𝑚𝑚𝑚𝑚 tenemos que considerar 𝑇𝑇𝑅𝑅𝑅𝑅𝑅𝑅 en el diseño del controlador. 1.7.2 Control en el espacio de estados: método de ubicación de polos. En esta sección, se presentará el diseño de un sistema regulador para una planta de péndulo invertido mediante el método de ubicación de polos. Este método consiste en realimentar todas las variables de estado para mover los polos del sistema, en lazo cerrado, a una posición deseada. El problema, es parecido al que se trataba en el método del LGR, pero con un enfoque mayor. En este caso, se tratan con todos los polos de la planta, en lugar de solo tener en cuenta los dominantes. Además se controlarán todas las variables de estado. Figura 7-21. Sistema de control con realimentación de estado Con la ubicación de polos, se modificará la dinámica de todas las variables de estado. Dada la siguiente configuración, para un sistema regulador mediante la técnica de ubicación de polos, de elegir una localización de los polos estable para el sistema, se logrará que todas las variables tiendan a 0 cuando el tiempo tiende a infinito. Debido a la complejidad de los cálculos con matrices de 4 orden, en este capítulo se realizaran los cálculos mediante herramientas de MATLAB. En la sección 1.6 se obtuvieron las ecuaciones en el espacio de estado. En ellas se consideraban las siguientes aproximaciones: -Linealización entorno a la posición 0º del péndulo. -Eliminación de la inercia del péndulo. -No se consideran fricciones. -Efectos del motor de cc en estado estacionario. (Para un análisis más detallado de las aproximaciones véase la sección 1.6) 44 Control de un Sistema de Péndulo Invertido A continuación, se retoman las matrices que describen el sistema en el espacio de estados: 1.0081 ⎡ ⎢ 0.7981 𝐺𝐺 = ⎢ ⎢−0.0001 ⎣−0.0030 0.0201 1.0081 0 −0.0001 0 0 1 0 0.0764 ⎤ 4.0294 ⎥ 0.0009 ⎥⎥ −0.0002⎦ −0.0027 −0.1439 � 𝐻𝐻 = � 0.0007 0.0357 (7.14) (7.15) y el modelo en tiempo discreto es 𝑥𝑥�(𝐾𝐾 + 1)𝑇𝑇� = 𝐺𝐺𝐺𝐺 (𝐾𝐾𝐾𝐾) + 𝐻𝐻𝐻𝐻 (𝐾𝐾𝐾𝐾) (7.16) donde 𝑢𝑢(𝐾𝐾𝐾𝐾), es un escalar (tensión de armadura aplicada al motor), el tiempo de muestreo es 20 ms (véase el apartado 1.6.3.1) y las variables de estado son 𝑥𝑥1 = 𝜃𝜃 𝑥𝑥2 = 𝜃𝜃̇ 𝑥𝑥3 = 𝑥𝑥 𝑥𝑥4 = 𝑥𝑥̇ 1.7.2.1 Controlabilidad y observabilidad Un primer paso para realizar un sistema mediante realimentación de estado, es analizar las condiciones de observabilidad y controlabilidad. Si el sistema es de estado completamente controlable, se cumple que se pueden transferir los polos del sistema a cualquier posición deseada. Para un sistema de orden 𝑛𝑛, se cumple la condición de controlabilidad si la matriz de controlabilidad de 𝑛𝑛 𝑥𝑥 𝑛𝑛 es del mismo rango que variables de estado posea el sistema (rango 𝑛𝑛). La matriz de controlabilidad se construye de la siguiente forma: 𝐶𝐶𝐶𝐶 = [𝐻𝐻 ⋮ 𝐺𝐺𝐺𝐺 ⋮ ⋯ ⋮ 𝐺𝐺 𝑛𝑛−1 𝐻𝐻] 45 Control de un Sistema de Péndulo Invertido donde 𝑛𝑛 es el orden del sistema. En nuestro caso 𝐶𝐶𝐶𝐶 = [𝐻𝐻 ⋮ 𝐺𝐺𝐺𝐺 ⋮ 𝐺𝐺 2 𝐻𝐻 ⋮ 𝐺𝐺 3 𝐻𝐻] Mediante la función ctrb de MATLAB, usando (7.14) y (7.15), se obtiene la matriz de controlabilidad −0.0027 ⎡ ⎢−0.1439 𝐶𝐶𝐶𝐶 = ⎢ ⎢ 0.0007 ⎣ 0.0357 −0.0029 −0.0033 0.0007 0 −0.0030 −0.0056 0.0007 0 −0.0031 ⎤ −0.0080⎥ 0.0007 ⎥⎥ ⎦ 0 (7.19) Para evaluar el rango, se ha usado 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟(𝐶𝐶𝐶𝐶) y se ha obtenido 𝑛𝑛 = 4. Por lo tanto, el sistema es de estado completamente controlable. Evaluemos ahora la observabilidad del sistema. La observabilidad es una condición que ha de cumplir el sistema para poder reconstruir variables de estado no medibles a partir de variables de estado que sí lo son. En nuestro caso, se tendrían que poder estimar las variables 𝑥𝑥, 𝑥𝑥̇ y 𝜃𝜃̇ a partir de la variable 𝜃𝜃, para poder controlar el sistema. Ya que, como se avanza, la maqueta solo medirá la posición angular del péndulo 𝜃𝜃. Figura 7-22. Sistema de control con realimentación de estado observado Para construir la matriz de observabilidad, se debe de especificar la salida del sistema 46 Control de un Sistema de Péndulo Invertido 𝑌𝑌(𝐾𝐾𝐾𝐾) = 𝐶𝐶𝐶𝐶 (𝐾𝐾𝐾𝐾) + 𝐷𝐷𝐷𝐷(𝐾𝐾𝐾𝐾) (7.20) Puesto que la salida es la variable de estado 𝑥𝑥1 = 𝜃𝜃, se tiene 𝐶𝐶 = [1 0 0 0] 𝐷𝐷 = 0 Para un sistema de orden 𝑛𝑛, se cumple la condición de observabilidad si la matriz de observabilidad de 𝑛𝑛 𝑥𝑥 𝑛𝑛 es del mismo rango que variables de estado posea el sistema (rango 𝑛𝑛). La matriz de observabilidad se construye de la siguiente forma: 𝐶𝐶 ⎡ ⋯ ⎤ ⎢ ⎥ ⎢ 𝐶𝐶𝐶𝐶 ⎥ 𝑂𝑂𝑂𝑂 = ⎢ ⋯ ⎥ = [𝐶𝐶 ⋮ 𝐺𝐺 ′ 𝐶𝐶 ′ ⋮ ⋯ ⋮ (𝐺𝐺 𝑛𝑛−1 )′ 𝐶𝐶 ′ ] ⎢ ⋮ ⎥ ⎢ ⋯ ⎥ ⎣𝐶𝐶𝐺𝐺 𝑛𝑛−1 ⎦ donde 𝑛𝑛 es el orden del sistema y la notación 𝐺𝐺 ′ indica la matriz traspuesta (de 𝐺𝐺 en este caso). En nuestro caso 𝑂𝑂𝑂𝑂 = [𝐶𝐶 ⋮ 𝐺𝐺 ′ 𝐶𝐶 ′ ⋮ (𝐺𝐺 2 )′𝐶𝐶′ ⋮ (𝐺𝐺 3 )′𝐶𝐶′] Finalmente, mediante la función obsv de MATLAB, se obtiene la matriz de observabilidad 1 ⎡ ⎢1.0080 𝑂𝑂𝑂𝑂 = ⎢ ⎢1.0319 ⎣1.0721 0 0.0200 0.0404 0.0614 0 0 0 0 0 ⎤ 0.0764⎥ 0.1578⎥⎥ 0.2417⎦ (7.21) Para evaluar el rango, se ha usado 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟(𝑂𝑂𝑂𝑂) obteniendo 𝑛𝑛 = 3. Por lo tanto, el sistema es parcialmente observable y no se pueden medir las variables 𝑥𝑥, 𝑥𝑥̇ y 𝜃𝜃̇ , como se deseaba. No obstante, aunque no se pueda llevar a la práctica este sistema en la maqueta, se presentará el diseño de un sistema regulador mediante realimentación de estado como material didáctico o para una futura ampliación de la maqueta. 47 Control de un Sistema de Péndulo Invertido 1.7.2.2 Obtención de la matriz de ganancia de realimentación de estado K El sistema regulador mediante realimentación de estado sigue el diagrama de la Figura 7-21, donde la señal de control 𝑢𝑢(𝑘𝑘𝑘𝑘 ) es 𝑢𝑢(𝑘𝑘𝑘𝑘 ) = −𝐾𝐾𝐾𝐾 (𝑘𝑘𝑘𝑘 ); Entonces, resolver el sistema es encontrar la matriz de ganancia de realimentación de estado 𝐾𝐾 , para unos polos del sistema deseados. Para encontrar la matriz 𝐾𝐾, se ha usado la fórmula de Ackermann donde 𝐾𝐾 = [0 0 ⋯ 0 1][𝐻𝐻 ⋮ 𝐺𝐺𝐻𝐻 ⋮ ⋯ ⋮ 𝐺𝐺 𝑛𝑛−1 𝐻𝐻]−1 𝜙𝜙 (𝐺𝐺 ) 𝜙𝜙(𝐺𝐺 ) = 𝐺𝐺 𝑛𝑛 + 𝛼𝛼1 𝐺𝐺 𝑛𝑛−1 + ⋯ + 𝛼𝛼𝑛𝑛 −1 𝐺𝐺 + 𝛼𝛼𝑛𝑛 𝐼𝐼 siendo el valor de los polos deseados z = μ1 , z = μ2 , … , z = μn y la ecuación característica del sistema |𝑧𝑧𝑧𝑧 − 𝐺𝐺 + 𝐻𝐻𝐻𝐻 | = (𝑧𝑧 − 𝜇𝜇1 )(𝑧𝑧 − 𝜇𝜇2 ) ⋯ (𝑧𝑧 − 𝜇𝜇𝑛𝑛 ) = 𝑧𝑧 𝑛𝑛 + 𝛼𝛼1 𝑧𝑧 𝑛𝑛 −1 + 𝛼𝛼2 𝑧𝑧 𝑛𝑛−2 + ⋯ + 𝛼𝛼𝑛𝑛−1 𝑧𝑧 + 𝛼𝛼𝑛𝑛 = 0 Una técnica para elegir los polos de la planta, es considerar dos de ellos dominantes y alejar los demás lo suficiente para que no afecten demasiado. Si se alejan mucho, la matriz de ganancia de realimentación podría tomar valores demasiado grandes (posible saturación), conviene simular los valores y ensayar en la planta hasta encontrar unos idóneos. Mediante el ensayo, se han elegido los siguientes polos para el sistema: 𝑍𝑍1,2,3,4 = 𝐽𝐽 = [0.97 + 0.05j 0.97 − 0.05j 0.9 0.85] Para obtener la matriz 𝐾𝐾, se ha usado la función acker de MATLAB. Se ha obtenido 𝐾𝐾 = [−16.8 − 2.7 − 4.54 − 30.94] 48 Control de un Sistema de Péndulo Invertido Finalmente, la señal de control es 𝑢𝑢 = −𝐾𝐾𝐾𝐾 = 16.8𝜃𝜃 + 2.7𝜃𝜃̇ + 4.54𝑥𝑥 + 30.94𝑥𝑥̇ (7.22) (Se ha de tener en cuenta el sentido tomado en el modelado de la planta, de las variables de estado. Para más información, véase el capítulo 1.6) Figura 7-23. Respuesta a una condición inicial de θ(0)=1 49 Control de un Sistema de Péndulo Invertido 1.8 El hardware En este apartado se detallará el diseño de la maqueta. El grueso del diseño reside básicamente en el sistema electrónico, compuesto por el controlador, el actuador y el sensor de la variable de salida. En el apartado 1.8.1 se trataran temas de elección de componentes, descripciones de estos y la forma en que interactúan en la planta. El segundo apartado del capítulo (el apartado 1.8.2) describe la construcción de la maqueta de la planta a controlar: el conjunto péndulo-carro y su soporte. Este apartado, revisa el proceso de construcción de la maqueta, sin incidir mucho en temas de diseño. No obstante, hace hincapié en la importancia de ser rigurosos en la construcción de esta. Al construir la maqueta se tuvieron en cuenta los requisitos siguientes: - La maqueta debe de estar preparada para implementar en ella controladores discretos con cierta facilidad. Debe de ser reducida y transportable. Teniendo en cuenta estas premisas, se propuso hacer uso de un microcontrolador como núcleo del sistema electrónico, dando lugar a un esquema parecido al de la Figura 8-1. Figura 8-1. Diagrama del sistema electrónico 50 Control de un Sistema de Péndulo Invertido 1.8.1 Sistema electrónico 1.8.1.1.1 Eligiendo el microcontrolador Se ha decidido elegir un controlador PIC por las siguientes razones: - - En el DEEEA se disponen de programadores que permiten programar una gran cantidad de modelos. Su programación es relativamente sencilla y muy usada. Su fabricante nos ofrece muchos recursos (códigos de ejemplo, librerías, resolución de dudas…) , Su coste es reducido, es un producto que se puede adquirir con facilidad. El alumno que lo desee podría adquirir un programador a bajo coste. Nos ofrece un abanico de posibilidades más que suficientes para realizar un sistema que nos permita experimentar controladores para el péndulo invertido. Una vez decida la marca, veamos que familias podemos usar: Figura 8-2. Familias de microcontroladores de Microchip Dado que el programador del que dispone el DEEEA, el ICD2, abarca casi todos los dispositivos menos algunos de los más nuevos (los realizados después de Septiembre del 2010), no resulta una gran restricción. Se ha considerado oportuno usar un microcontrolador de 16 bits, puesto que la cantidad de valores que leerá el sensor de posición angular será al menos 51 Control de un Sistema de Péndulo Invertido superior a 360 posibles valores (un error en la lectura de medio grado no sería adecuado para realizar un control cerca del ángulo 0). Se ha decidido programar en C en lugar de en ensamblador. Esto se debe a que, una vez hecho el programa para realizar el control del péndulo, el alumno podrá introducir algoritmos de forma sencilla sin verse obligado a aprender la estructura del microcontrolador. También podrá entender el código más fácilmente y si se requiere se podría ampliar/mejorar con más facilidad. De esta forma también se podría aprovechar para otros microcontroladores distintos al elegido. Trabajar con registros de 16 bits será más cómodo y más rápido que usar microcontroladores de 8 bits, no obstante, no significa que no sea posible usar un microcontrolador de 8 bits para controlar el péndulo. Para esto último, se añade, que el coste entre un microcontrolador y otro varia muy poco y puesto que no se pretende fabricar este proyecto en grandes cantidades, mas bien su uso está orientado a un entorno didáctico reducido, se ha optado por dar buenas prestaciones al producto más que abaratar pequeños costes. Como se verá a continuación, la familia de 16 bits ofrece más que suficientes prestaciones para plantearse usar un microcontrolador de 32 bits. Buscando dentro de la gama de PIC de 16 bits, se encuentran familias optimizadas para el control de motores en los dsPIC (véase Figura 8-3). Figura 8-3. Familias optimizadas para el control de motores 52 Control de un Sistema de Péndulo Invertido A elegir entre las dos familias de dsPIC se tienen los dsPIC de gama alta (dsPIC33F/E) y los dsPIC “sencillos”. La familia de los dsPIC33F/E, da más velocidad de operación, más conversores AD, más periféricos y soporta mejor la temperatura. No obstante, se tiene más que suficiente con lo que ofrece la familia dsPIC30F. Figura 8-4. Familias dsPIC30F y dsPIC33F/E de Microchip Dentro de esta, se ha elegido el dsPIC30F4011, ya que es uno de los microcontroladores de la familia dsPIC30F orientado al control de motores. Cualquiera otra elección, dentro de los mencionados en la Figura 8-5, seria correcta. Se ha elegido el dsPIC30F4011 en concreto, por su disponibilidad. Figura 8-5. Microcontroladores de la familia dsPIC30F orientados al control de motores 53 Control de un Sistema de Péndulo Invertido 1.8.1.1.2 La familia dsPIC30F Sin entrar demasiado en la arquitectura, a continuación algunas de sus características más relevantes: se exponen -Arquitectura Harvard modificada. -Memoria de datos dividida en dos bloques, llamados X y Y, con unidades generadoras de dirección (AGU) independientes. Normalmente se usa el bloque X (MCU), pero determinadas instrucciones del DSP acceden simultáneamente a ellos para realizar operaciones complejas como MAC (multiplicar-acumular). -Operaciones hasta 30 MIPS. -16 registros de trabajo (W) de 16-bit. -Instrucciones optimizadas parar compiladores de C con modos de direccionamiento flexibles. -Unidad divisora que opera con números fraccionales con signo de 16/16-bit (punto fijo Q15) o números enteros de 32/16-bit o 16/16-bit . -Modulo DSP. El cual consta de: -Un multiplicador a alta velocidad de 17-bit x 17-bit que puede entregar números enteros de 32-bit o fraccionales con el formato Q31 (punto fijo). -Un registro de desplazamiento -Un sumador/restador de 40-bits, con dos registros acumuladores y lógica de redondeo y saturación. 54 Control de un Sistema de Péndulo Invertido Figura 8-6. Estructura del dsPIC30F4011 55 Control de un Sistema de Péndulo Invertido 1.8.1.1.3 El dsPIC30F4011 Hasta ahora se han visto algunas de las características generales del dsPIC30F4011, mediante los apartados Eligiendo el microcontrolador y La familia dsPIC30F, que no se mencionaran en este apartado. En lugar de ello, se hará hincapié en los periféricos característicos para el control de motores que este posee, los cuales, serán de gran ayuda para realizar el proyecto. Se detallaran sus modos de funcionamiento tanto como su configuración, que mas adelante nos será útil para la descripción del código. Estos son: el módulo de control para motores mediante PWM, para más comodidad, llamémosle “módulo PWM”, y el modulo de interfaz para el codificador de cuadratura, al que llamaremos QEI (Quadrature encoder interface). La función del microcontrolador en este proyecto, es realizar un lazo de control en la planta. Obteniendo la variación angular del péndulo y aplicando un algoritmo, actúa sobre el motor mediante PWM. Es decir, configurando adecuadamente estos dos módulos se tiene un gran porcentaje del trabajo hecho mediante hardware. Realizando estas acciones por hardware: -Se hace más sencillo el código, tanto para su realización, como para su interpretación y depuración de errores. -Se elimina la necesidad de añadir componentes externos al microcontrolador, haciendo el diseño más compacto, abaratando costes de fabricación y aumentando la fiabilidad del sistema. Dicho esto veamos cómo funcionan estos módulos. 1.8.1.1.3.1 El QEI Antes de empezar con la explicación, se avanza que el codificador elegido será un encoder incremental, con índice. Para más información referirse al apartado 1.8.1.3. Al final del apartado, mediante las Figuras 8-8 a 811, se incluye información del fabricante referente a los registros y bits empleados en la descripción del QEI que se verán a continuación. El QEI dispone de 3 pin de entrada, QEA, QEB e INDX. Estos introducen respectivamente, la información de dos canales de un encoder y su índice, si dispone de ello. Mediante un contador de 16 bit, el registro llamado POSCNT (position counter) da la cuenta de los flancos de los pulsos que se generan en el encoder (canales A y B), sumando flancos o restándolos según la secuencia de las señales de los canales A y B (que están desfasadas 90 grados). El 56 Control de un Sistema de Péndulo Invertido sentido de giro incremental o decremental es arbitrario (se debe configurar). Además, la lógica del QEI genera un bit de lectura en el registro QEICON, llamado UPDN, que nos dice si el motor gira hacia un lugar u otro (si está sumando o restando pulsos). Figura 8-7. Diagrama del QEI Modos de funcionamiento Usando los canales A y B y dependiendo de la resolución que se quiera usar, se tienen dos formas de contar flancos Modo x2 (QEIM2,1,0=100 o 101) En este modo se cuentan flancos solo teniendo en cuenta los flancos de subida y bajada de la señal A. La señal B solo es usada para determinar el sentido de giro, que a la vez determina si se incrementa o decrementa POSCNT a cada flanco generado por la señal A. 57 Control de un Sistema de Péndulo Invertido Modo x4 (QEIM2,1,0=110 o 111) En contrapartida, el modo x4 tiene en cuenta las dos señales para contar flancos. Se usa la secuencia generada por estas para determinar el sentido de giro y si POSCNT se incrementa o decrementa igual que en el modo x2. Por lo tanto, se tiene el doble de precisión. Dentro de estos dos modos de contar flancos, se tienen dos formas de resetear el contador POSCNT: Mediante la detección del índice (QEIM2,1,0=100 o 110) En este modo se usa el pin de entrada INDX, que genera un pulso por revolución, para resetear al registro POSCNT. Se deben de especificar los estados de los canales A y B en los que ocurre el pulso de INDX. Esto se hace con los bits IMV1,0 del registro DFLTCON, que corresponden respectivamente al canal A (IMV0) y B (IMV1). En el modo x2, IMV1 selecciona el canal cuyo flanco coincide con el índice (0=canal A, 1=canal B) y IMV0 selecciona el estado de este canal (es decir flanco de subida o de bajada) que coincide con el índice. Se tiene un bit POSRES del registro QEICON que habilita o no el reset del contador mediante el índice. Si vale 1, POSCNT es reseteado en cada pulso del índice, si vale 0 POSCNT continua incrementándose hasta llegar al máximo del contador (overflow) o decrementandose mas que el valor inicial (underflow).Este bit debe ser desactivado mediante software. Coincidiendo POSCNT con MAXCNT(QEIM2,1,0=101 o 111) En este modo, POSCNT es reseteado cuando su valor coincide con el del registro MAXCNT. Filtros digitales programables Para reducir el ruido de las señales de entrada (QEA,QEB y INDX), se pueden configurar unos filtros que consisten en comparadores con histéresis Trigger Schmitt y un retardo de 3 ciclos de reloj (basados en el tiempo de ejecución de una instrucción básica del microcontrolador, Tcy) en los que se verifica que el valor de entrada no ha variado. Para activar los filtros hay que poner a 1 el bit QEOUT del registro DFLTCON. Se puede variar el periodo de estos 3 ciclos mediante un prescaler que se configura con los bits QECK2,1,0 del registro DFLTCON. Se ha de tener en cuenta que añadir un retardo en la medición de los pulsos mediante los filtros digitales puede modificar la planta. 58 Control de un Sistema de Péndulo Invertido Interrupciones Las interrupciones que puede generar el QEI son las siguientes: -Interrupción por desbordamiento superior o inferior del position counter (rollover/underflow). -Detección del índice “correcto” o, por otro lugar, activación del position counter error. Nota: Se han omitido interrupciones generadas por el uso del QEI como timer/counter (no se han tenido en cuenta configuraciones del QEI para usos no relacionados con la interfaz para el encoder). 59 Control de un Sistema de Péndulo Invertido Figura 8-8. Registros del QEI 60 Control de un Sistema de Péndulo Invertido Figura 8-9. Registro QEICON bits 15 a 3 61 Control de un Sistema de Péndulo Invertido Figura 8-10. Registro QEICON bits 2 a 0 Figura 8-11. Registro DFLTCON 62 Control de un Sistema de Péndulo Invertido 1.8.1.1.3.2 El módulo PWM Antes de empezar con la descripción del módulo PWM, téngase en cuenta que al final de este apartado, mediante las Figuras 8-14 a 8-17, se incluye información del fabricante referente a los registros y bits empleados en este. El módulo PWM está diseñado para sincronizados que permiten realizar tareas como: realizar diversos PWM -Control de Motores de inducción -Control de Motores de reluctancia conmutada -Control de motores DC sin escobillas -Sistema de alimentación ininterrumpida (UPS) … Consta de 6 pines y 3 generadores de PWM. Estos pines se ordenan según el generador de PWM que le corresponda en parejas de la forma: PWM1H/PWM1L,…,PWM3H/PWM3L. Cada pareja puede dar señales complementarias o idénticas. A continuación se exponen los distintos modos de funcionamiento. Primero se hablará de las configuraciones distintas que manejan el contador PTMR. Este registro, es la base de tiempo de la señal PWM. Una vez configurado este para generar un periodo en la señal de salida, se verá cómo generar el ciclo de trabajo según la configuración elegida para la base de tiempo. Base de tiempo del módulo PWM El módulo PWM se basa en un contador que cuenta Tcy (tiempo equivalente a una instrucción simple del MCU) llamado PTMR. Comparando su valor con el de otros registros se generan los pulsos. Respecto a la forma de contar Tcy, se tienen cuatro formas configurables, mediante los bits PTMOD0,1 del registro PTCON: Free-running mode (PTMOD0,1=00) Este modo incrementa el registro/contador de 15 bits PTMR (antes mencionado), hasta alcanzar el valor que ubicamos en el registro PTPER (de 15 bit). Esto ocurre siempre que el bit PTEN del registro PTCON se mantenga activo. Una vez PTMR alcanza el valor de PTPER, se resetea PTMR y se dispara una interrupción. Luego PTMR sigue contando. 63 Control de un Sistema de Péndulo Invertido Single-shot mode (PTMOD0,1=01) Este modo es idéntico al anterior con la diferencia de que, una vez PTMR alcanza el valor de PTPER el bit PTEN pasa automáticamente a valer 0, desactivando la base de tiempo. En los modos free-running mode y single-shot mode se debe usar la siguiente fórmula para calcular el periodo: 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 = 𝑇𝑇𝑇𝑇𝑇𝑇(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 + 1) 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉 Continuous up/down count mode (PTMOD0,1=10) En este modo, se incrementa PTMR hasta alcanzar PTPER y luego PTMR es decrementado hasta llegar a 0. Además, tenemos un bit, el PTDIR, que como indica su nombre, indica si el contador está incrementando o decrementando. En cuanto a la interrupción, ocurre cuando el valor de PTMR es 0 y el contador empieza a contar incrementando. Double update mode (PTMOD0,1=11) Este modo es idéntico al anterior, salvo que ocurre una interrupción adicional cuando PTMR alcanza el valor de PTPER. En los modos continuous up/down count mode y double update mode se debe usar la siguiente fórmula para calcular el periodo: 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 = 2𝑇𝑇𝑇𝑇𝑇𝑇(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 + 0.75) 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉 64 Control de un Sistema de Péndulo Invertido Figura 8-12. Diagrama del módulo PWM Generación del ciclo de trabajo Por un lado se tiene la forma de funcionar de la base de tiempo, la cual entre otras cosas genera un periodo. Ligada a esta, está la forma de generar el ciclo de trabajo. Para ello, se pueden configurar dos formas: Edge-Aligned PWM (Figura 8-13, parte izquierda) Este modo se activa con el free-running mode y el single-shot mode. La salida del PWM se vuelve activa cuando PTMR vale 0 y se vuelve inactiva cuando PTMR coincide con el valor deseado de ciclo de trabajo (registros PDC1,2,3, según la pareja de salidas correspondientes). Si el ciclo de trabajo vale 0, no se generaran pulsos en la salida del PWM. Center-Aligned PWM (Figura 8-13, parte derecha) Este modo se activa con el continuous up/down count mode y double update mode. La salida del PWM se vuelve activa cuando PTMR alcanza el valor de PDCx y se encuentra decrementando PTMR (es decir PTDIR vale 1). Si PTMR alcanza el valor de PDCx y se encuentra incrementando, la salida se vuelve inactiva. Si el DC vale 0, no se generaran pulsos en la salida del PWM. 65 Control de un Sistema de Péndulo Invertido Figura 8-13. Modos de funcionamiento del módulo PWM Otra característica y registros En esta sección, se añaden características adicionales y registros de interés para la configuración del módulo PWM que no han sido detalladas en los modos de funcionamiento antes mencionados. Actualización de los registros PTPER y PDCx Los registros PTPER y PDCx, referentes al periodo y al ciclo de trabajo, son almacenados en dos registros para evitar problemas en la carga de valores. Uno de ellos es accesible al programador y actualiza el otro (no accesible) cuando se cumple cierta condición. En los modos free-running y single-shot PTPER y PDCx se actualizan cuando PTMR se vuelve 0 tras alcanzar el antiguo valor de PTMR. En el modo continuous up/down count y double update, PTPER y PDCx se actualizan cuando PTMR vale 0. Prescaler y postscaler El módulo PWM consta de un prescaler, que nos puede servir para disminuir la frecuencia de la base de tiempo (PTMR). Se configura mediante los bits PTCKPS1,0 en el registro PTCON. También, tenemos un postscaler, que reduce la frecuencia a la que se genera la demanda de interrupciones. Se configura con los cuatro bits PTOPS3:0 del registro PTCON. Modo complementario Al principio del apartado 1.8.1.1.3.2 (El módulo PWM), se hablaba de que las salidas del módulo PWM podían dar señales complementarias o idénticas en sus respectivas tres parejas de pines. Para ello se deben configurar los bits PTMODx del registro PWMCON1. De estar activos, 66 Control de un Sistema de Péndulo Invertido configuran las salidas PWMxH/PWMxL con señales complementarias. Por el contrario, generan señales iguales en cada pareja de pines asociada a cada generador PWM. Además, para el modo complementario, se pueden configurar generadores de tiempo muerto. Habilitar pines de salida Se pueden habilitar o deshabilitar los pines de salida para el módulo PWM mediante los bits PENxH y PENxL del registro PWMCON1. De estar activos, habilitan el bit respectivo para el módulo PWM, de lo contrario se tratan las salidas como salidas de propósito general. Estado pines de salida tras reset El bit PWMPIN controla el estado de las salidas tras un reset del MCU. Si esta a nivel alto (configuración por defecto), tras un reset las salidas son deshabilitadas (triestado) y configuradas como pines de propósito general. De lo contrario son configuradas como salida del PWM y restan a nivel bajo. Configuración de la polaridad de los pines de salida Los bits HPOL y LPOL del registro FPORBOR configuran la polaridad del valor alto para los pines denominados H (PWMxH) y para los pines denominados L (PWMxL). 67 Control de un Sistema de Péndulo Invertido Figura 8-14. Registros del módulo PWM 68 Control de un Sistema de Péndulo Invertido Figura 8-15. Registro PTCON Figura 8-16. Registro PWMCON1 69 Control de un Sistema de Péndulo Invertido Figura 8-17. Registro PWMCON2 70 Control de un Sistema de Péndulo Invertido 1.8.1.2 El motor de DC El motor elegido para el sistema es un motor de DC de imanes permanentes. El c4557-60003. Algunas de sus características son las siguientes: max voltage: medium voltage: max current: no load current: no load speed: starting voltage resistance volts at 1000 rev: inertia moment on the shaft max moment 24V 15V 1.6A 0.1A 3540 rpm 3V 11.6 ohms 6.4V 50 (gm.cm2 ) 6.08 N*cm/A 9.4 N*cm Figura 8-18. Características del motor de DC Para poder controlar los dos sentidos de giro, se usará el driver L293DNE. De las configuraciones que se observan en la Figura 8-19, se usará la configuración bidireccional que permite la operación de giro en los dos sentidos. El L293DNE administra hasta 1 A por canal. Usando dos parejas de dos drivers en paralelo respectivamente se obtendrán hasta 2 A en cada sentido. Los diodos internos del L293DNE limitan la corriente a 600m A por canal, para eliminar esta limitación, se usarán cuatro diodos externos según la configuración de la Figura 8-19. Los diodos elegidos son los SBY27-50-E3 de 2 A de corriente nominal y picos de hasta 50 A. Figura 8-19. Configuraciones del L293DNE 71 Control de un Sistema de Péndulo Invertido Para controlar el driver, se necesitan tres pines del microcontrolador. Se usarán las salidas respectivas del módulo PWM y un bit de algún puerto de uso general del MCU, como el PUERTO B. 1.8.1.3 El codificador incremental En este proyecto, el codificador incremental cumple la función de obtener la posición angular del péndulo de la planta. Concretando un poco, se ha elegido un codificador incremental o codificador relativo, rotatorio, de dos canales e índice. El cual, está compuesto por dos coronas provistas con ventanas que restringen o dejan pasar la luz de un LED, para ser captadas por fotodiodos. Al girar el eje del motor, que está unido a las coronas, se generan 2 señales en cuadratura como las de la Figura 8-20 (CH.A y CH.B). Figura 8-20. Señales en cuadratura del encoder Observando los flancos de subida y bajada de estas, se tienen dos secuencias distintas según si se gira hacia la derecha o la izquierda. Teniendo en cuenta las señales de la Figura 8-20, girando el eje del motor se generarían las secuencias: 𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔 𝑑𝑑𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒ℎ𝑎𝑎 → (CH. A CH. B) = 10 11 01 00 10 … 𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 → (CH. A CH. B) = 10 00 01 11 10 … 72 Control de un Sistema de Péndulo Invertido El codificador incremental debe cumplir el requisito de tener una resolución que permita hacer un control entorno del ángulo 0. Si el péndulo se alejara demasiado de este, no se podría trabajar con las ecuaciones diferenciales de la planta linealizadas. De ser así, no servirían los controladores establecidos en este proyecto para regular la planta. No obstante, los parámetros del controlador experimental concreto, como la sobre-elongación de la respuesta, el error en estado estacionario o el tiempo de muestreo, también condicionan la influencia del error de cuantificación del encoder. Para despreciar estos efectos, se ha elegido un codificador incremental con la mayor resolución dentro del presupuesto deseado. Puesto que, un encoder con más precisión da más libertad en el estudio de controladores. No obstante, esto no significa que un codificador incremental menos preciso no pueda servir para realizar el control con unas buenas prestaciones. Teniendo en cuenta la disponibilidad, la resolución, el diámetro del eje del motor elegido,…, se ha elegido el HEDS-5540 A06. El cual genera 2000 flancos por revolución (500 ventanas por corona x 2 coronas x 2 flancos por ventana). Entonces, se tiene 𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅ó𝑛𝑛 = 360° = 0,18 °/𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 2000 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 Como se ha comentado, el encoder dispone de un tercer canal de salida llamado índice (CH.1 en la Figura 8-20). Este, ha sido construido para entregar un pulso una vez por revolución y se usara como referencia para detectar la posición superior de equilibrio (“el 0”). Se debe tener una especial atención a la hora de detectar la posición 0, ya que, un error significativo en esto, llevaría el sistema a la inestabilidad. Figura 8-21. Resistencias de pull-up añadidas a la salida del encoder, según especificaciones del datasheet 73 Control de un Sistema de Péndulo Invertido 1.8.1.4 La placa de circuito impreso Hasta ahora se han presentado decisiones tomadas en cuanto a la elección de los componentes electrónicos de la planta, y otros aspectos afines. Con esto la realización de la placa de circuito impreso queda más o menos definida. No obstante, a continuación se dan unas pinceladas del proceso de toma de decisiones de diseño para la elaboración de la PCB, los elementos usados y la organización en la placa de estos. Para el diseño de esta, se ha usado el grupo de programas OrCAD 9.2 de Cadence. Figura 8-22. Esquema eléctrico de la PCB. (Para más detalle referirse al documento Planos) 74 Control de un Sistema de Péndulo Invertido En la Figura 8-22 se puede observar el esquemático final que determina los elementos usados y las conexiones de las pistas entre ellos. Si se fragmenta este en bloques, se tiene, la circuitería cercana al microcontrolador, el driver para el motor y los conectores. El primer bloque, consta de los elementos típicos de una placa que incluye un microcontrolador de Microchip: el conjunto oscilador-condensadores, el circuito de reset mediante el pulsador SW1 y R2, y un led indicador de la “puesta en marcha” (alimentación del microcontrolador on). En cuanto a los conectores se han usado 5 que son los siguientes: -Conector para el programador ICD2 (RJ11) -Conector para el programador Pickit2 (CON5) -Conector para el codificador incremental (J1) -Conector para el Motor (J3) -Conector para la alimentación MCU/Motor (J2) Finalmente, en el último bloque correspondiente al driver para el motor, se puede ver como se usan dos parejas de drivers para cada entrada y salida del L293DNE en paralelo, para ampliar la corriente máxima que este puede entregar a 2 A. Los pines de habilitación, también se controlan mediante un solo pin del MCU, ya que no es necesario hacerlo por separado. A continuación, veamos el esquema físico real y observemos el trazado de las pistas y la ubicación de los componentes entre otras cosas. Figura 8-23. Aspecto del diseño de la PCB 75 Control de un Sistema de Péndulo Invertido Primeramente se ha definido el ancho de las pistas general, serán de 0.8 mm. Con un grueso de pistas de 35 µm y un incremento de temperatura admisible de 10 K, resulta adecuado aproximar la corriente máxima según la siguiente fórmula, donde 𝑎𝑎 es el ancho de la pista. Siendo 𝑎𝑎 = 0.8, se tiene 3 𝐼𝐼𝑚𝑚𝑚𝑚𝑚𝑚 = 3√𝑎𝑎2 ≅ 2,58 A 1 0F Dado que como máximo se entregaran 2 A al motor de DC, este valor de ancho se considera apropiado para la fabricación y es adecuado para el funcionamiento del circuito. En cuanto a la ubicación de los componentes y al trazado de las pistas, volviendo a la explicación del esquemático, se hará referencia al bloque de MCU y circuitería cercana y al bloque del driver para el motor. Es común dividir los bloques referentes al control y los módulos de potencia. Entonces, empezando por la izquierda de la Figura 8-24, se tiene el bloque del MCU y a la derecha de este, el bloque del driver para el motor. Una zona conectada a masa envuelve las dos caras e intenta aislar estos dos bloques. Esta zona, también hace de disipador del L293DNE, ya que, como indica en su hoja de características, es conveniente unir las patas internas de este (las de masa) a una pista ancha para disipar bien el calor. Figura 8-24. Organización de la PCB 1 a Fórmula extraída de TECNOLOGIA DE CIRCUITS IMPRESOS de Eduard Selma i Bargallo, 5 edición, p.7.35. 76 Control de un Sistema de Péndulo Invertido Figura 8-25. Acabado de la PCB: Cara TOP Figura 8-26. Acabado de la PCB: Cara BOTTOM 77 Control de un Sistema de Péndulo Invertido 1.8.2 Sistema mecánico: El conjunto péndulo-carro-soporte Este apartado es una breve descripción que complementa los planos de la parte mecánica de la maqueta. Para más comodidad, a partir de ahora se usará SM para hacer referencia al conjunto péndulo-carro-soporte. Siendo este la porción de la planta que no incluye ninguno de los elementos mencionados en el apartado 1.8.1 sistema electrónico. En este apartado se hablará del diseño y se hará una especial mención a la construcción del SM, el cual puede parecer trivial pero acarrea muchos problemas de no realizarse adecuadamente. De no ser así, nos encontraremos con una planta distinta a la modelada y nuestros controladores podrían no satisfacer los requisitos deseados para la respuesta. Pequeñas desviaciones en la construcción del SM, pueden modificar drásticamente el control de la planta. Se ha de tener en cuenta que se disponen de herramientas para la construcción del SM limitadas, y que se pretende hacer un diseño sencillo, reproducible con cierta facilidad y duradero en la medida de lo posible. El sistema elegido soporta el carro mediante una barra de sección circular que atraviesa este transversalmente. Paralela a esta, el carro incorpora en su cara inferior una barra de sección cuadrada que se deslizará por dos barras ubicadas en el soporte y de sección cuadrada también. Este mecanismo nos da el movimiento en el plano x de la planta. Se debe intentar minimizar la fricción del carro al desplazarse, para ello el carro se ha ideado hueco (de perfil cuadrado), de forma que se apoya sobre dos puntos en la barra transversal circular. En los agujeros que dan paso a la barra, como se puede ver en la Figura 8-27, se ha añadido un tejido que minimiza la fricción entre la barra y el carro. Se añade también, que la barra transversal es de superficie pulida y debe engrasarse a menudo. Figura 8-27. Perfil del “carro”. 78 Control de un Sistema de Péndulo Invertido Para soportar la barra y el conjunto motor-correa-polea, se usan ángulos que han sido agujereados con tal fin. Todo el SM está sujeto a una madera de contrachapado. Se han minimizado las dimensiones de esta, en la mesura de lo posible, para cumplir con los requisitos de diseño establecidos al principio del capítulo 1.8. Para incluir el péndulo en el carro, una barra de sección circular atraviesa este paralelamente y a 90° de la barra circular, que servía de soporte para el movimiento en el plano x. Esta barra se apoya mediante dos puntos igual que la barra de soporte. En un extremo se une al péndulo y en otro irá el codificador incremental (véase la Figura 8-28). En la realización de la maqueta, se observa que es complicado hacer que las dos barras antes mencionadas estén perpendiculares en el eje z (giradas a 90°). En la construcción, se debe intentar minimizar esta desviación. Figura 8-28. Planta del “carro”. Otro punto importante a tener en cuenta es la nivelación de la planta, ya que, el sistema es muy sensible a un error en la desviación de la posición del péndulo 0°. El MCU obtiene la localización de esta posición mediante el índice del sensor incremental. Es decir, tiene una posición del carro fijada y a partir de esta se introduce el valor de desviación de esta a la posición 0°. Para encontrar la desviación se realiza un ensayo con un controlador sobre la planta y se aproxima la desviación hasta que el error de esta resulta lo suficientemente pequeño para despreciarse, tomando como referencia ese experimento. Como resultado, calibrar la desviación de la posición 0° por software resulta un proceso laborioso, debido a la sensibilidad de la planta ante esta. 79 Control de un Sistema de Péndulo Invertido Figura 8-29. Perfil del soporte. Para facilitar este proceso, se han incluido patas roscadas en la base de la maqueta. De esta forma, usando un nivelador y mediante el ensayo con un controlador, se puede re-calibrar la desviación a la posición 0°, sin tener que recurrir al proceso de sucesivas modificaciones en el parámetro de desviación de la posición 0° del programa. Figura 8-30. Maqueta. 80 Control de un Sistema de Péndulo Invertido 1.9 El software 1.9.1 Entorno de programación y consideraciones previas Primeramente, se hará una mención al entorno de programación. Se ha usado el programa MPLAB de Microchip y se ha instalado el paquete C30 para programar en C (microcontroladores de las familias PIC24 y dsPIC). Para realizar el proyecto en MPLAB, se deben incluir los ficheros: p30f4011.gld y libp30F4011-coff.a que son el archivo para el linker y la librería del dsPIC30F4011 respectivamente. Para la comprensión de este apartado, son indispensables los apartados referentes al MCU 1.8.1.1. Como se habló en estos, el MCU cumple la función de establecer un lazo de realimentación, dando lugar a un sistema regulador como el de la Figura 9-1. Figura 9-1. Esquema del hardware Para controlar el driver L293DNE, se requería de un pin de habilitación que se dejó a la elección de algún puerto del MCU de uso general. Para ello, se ha elegido el primer pin del puerto B (RB0). En el programa se ha hecho uso de los archivos de cabecera qei.h y pwm.h de Microchip, para el uso de los periféricos. La mayoría de sus funciones, son rutinas sencillas que escriben y leen registros de los periféricos. Se ha considerado oportuno hacer uso de ellas por dar al programa un carácter 81 Control de un Sistema de Péndulo Invertido oficial, ya que estas se pueden descargar de la pagina de Microchip y están documentadas (véase el documento [6]). Visto esto, ya se puede empezar con la descripción del programa. 1.9.2 Configurando los periféricos: el QEI El encoder elegido, el HEDS-5540 A06, dispone de dos canales e índice. Para aprovechar los dos canales, se debe configurar el QEI en el modo x4. Para hacer uso del índice, se debe de configurar el reset de POSCNT por índice. unsigned int qeic1; unsigned int qeic2; qeic1=( QEI_INDEX_RESET_ENABLE& QEI_INPUTS_NOSWAP& QEI_MODE_x4_PULSE); qeic2=( MATCH_INDEX_PHASEA_LOW& MATCH_INDEX_PHASEB_LOW& POS_CNT_ERR_INT_DISABLE& QEI_QE_CLK_DIVIDE_1_1& QEI_QE_OUT_ENABLE); OpenQEI(qeic1,qeic2); Figura 9-2. Extracto del código fuente, referente a la configuración del QEI Para configurar el QEI se deben inicializar los registros QEICON y DFLTCON. Observando la Figura 9-2, la variable 𝑞𝑞𝑞𝑞𝑞𝑞𝑞𝑞1 hace referencia a QEICON y la variable 𝑞𝑞𝑞𝑞𝑞𝑞𝑞𝑞2 a DFLTCON. 𝑞𝑞𝑞𝑞𝑞𝑞𝑞𝑞1 se ha inicializado mediante máscaras, incluidas en qei.h (la rutina OpenQEI() también procede de qei.h). A continuación, se describe la inicialización del QEI mediante estas: QEI_INDEX_RESET_ENABLE (QEICON2=1 ): Se habilita el reset de POSCNT por indice QEI_INPUTS_NOSWAP (QEICON7=0 ): De valer 1, se intercambia el canal A por el B. Es decir, este bit controla el sentido de cuenta de POSCNT. QEI_MODE_x4_PULSE (QEICON10-8=110) : Se selecciona el modo x4 con reset de POSCNT por indice. Figura 9-3. Mascaras para configurar el registro QEICON Análogamente, a continuación se describe la inicialización de 𝑞𝑞𝑞𝑞𝑞𝑞𝑞𝑞2: MATCH_INDEX_PHASEA_LOW& MATCH_INDEX_PHASEB_LOW (QEICON10,9=00): Estado del canal A y B cuando ocurre el pulso del índice. Se deshabilitan las interrupciones del QEI POS_CNT_ERR_INT_DISABLE (DFLTCON8=1): Se selecciona el divisor de reloj para el filtro del QEi QEI_QE_CLK_DIVIDE_1_1 (DFLTCON6-4=000): Se habilitan filtros de ruido para las entradas del QEI QEI_QE_OUT_ENABLE (DFLTCON7=1) : Figura 9-4. Mascaras para configurar el registro DFLTCON 82 Control de un Sistema de Péndulo Invertido 1.9.3 Configurando los periféricos: el módulo PWM Para controlar el motor, se usarán dos generadores de PWM con posibles valores de DC distintos usando los pines PWM1L y PWM2L, cuyos registros de DC son PDC1 y PDC2 respectivamente. Se trabajará en el modo free-running. Como se habló en el capítulo 1.8.11, su base de tiempo se basa en un sistema que incrementa el registro PTMR hasta alcanzar el valor de PTPER, luego PTMR se resetea y vuelve a empezar. unsigned int period; unsigned int sptime; unsigned int config1; unsigned int config2; unsigned int config3; period=4000; sptime=0x0; config1=(PWM_EN&PWM_OP_SCALE1&PWM_IPCLK_SCALE1&PWM_MOD_FREE); config2=(PWM_PDIS3H&PWM_PDIS2H&PWM_PDIS1H&PWM_PDIS3L&PWM_PEN2L&PWM_PEN1L); config3=( PWM_UEN); OpenMCPWM(period,sptime,config1,config2,config3); Figura 9-5. Extracto del código fuente, referente a la configuración del módulo PWM. (La rutina OpenMCPWM() y las mascaras de 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑔𝑔1,2,3 proceden del archivo pwm.h). Primeramente, de debe calcular el periodo de los pulsos del PWM. Se ha elegido un periodo, cuyo valor es 100 veces inferior al tiempo de muestreo de la planta 𝑇𝑇𝑇𝑇 = 20 𝑚𝑚𝑚𝑚. Para encontrar el valor que se debe escribir en PTPER, se ha usado la siguiente fórmula, extraída de [5]: 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 = 𝑇𝑇𝑇𝑇𝑇𝑇(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 + 1) 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 Se añade que, el tiempo de instrucción es de 𝑇𝑇𝑇𝑇𝑇𝑇 = 50 𝑛𝑛𝑛𝑛 (el MCU operará a 20 MIPS). Entonces 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 ≈ 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 = 4000 𝑇𝑇𝑇𝑇𝑇𝑇 83 Control de un Sistema de Péndulo Invertido Para inicializar el módulo PWM, aparte de introducir el periodo, se debe configurar los registros PTCON, PWMCON1 y PWMCON2. Estos corresponden a las variables 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑔𝑔1,2,3 respectivamente. A continuación, se exponen las mascaras usadas para configurar estos registros. La variable 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐1, inicializa el registro PTCON: PWM_EN (PTCON15=1): PWM_OP_SCALE1 (PTCON7-4=0000): PWM_IPCLK_SCALE1 (PTCON3,2=00): PWM_MOD_FREE (PTCON1,2=00): Habilitamos la base de tiempo del módulo PWM. Damos un valor al postscaler de PTMR de 1:1. Damos un valor al prescaler de PTMR de 1:1. Seleccionamos el modo free-running Figura 9-6. Mascaras para configurar el registro PTCON La variable 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐2, inicializa el registro PWMCON1: PWM_PDIS3H &PWM_PDIS2H &PWM_PDIS1H &PWM_PDIS3L &PWM_PEN2L &PWM_PEN1L (PWMCON1-7=0x03) Se habilitan o deshabilitan los bits para el módulo PWM. En nuestro caso, solo se habilitan PWM1L y PWM2L. Figura 9-7. Mascaras para configurar el registro PWMCON1 La variable 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 3 configura el registro PWMCON2: PWM_UEN (PWMCON20=0): Se habilita la actualización de valores en los registros de ciclo de trabajo y periodo (PDCx y PTPER). Figura 9-8. Mascaras para configurar el registro PWMCON1 La variable 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠, es relativa a una función del módulo PWM que no se usará. No obstante, se debe inicializar para poder usar la función OpenMCPWM(). 84 Control de un Sistema de Péndulo Invertido 1.9.4 Subrutinas relativas al cálculo de la posición del péndulo Estas son dos: pend_position y pos0ready. La primera de ellas, tiene como objetivo devolver la posición angular del péndulo, siendo 0 la posición de equilibrio superior. En condiciones iníciales del programa, se tiene que POSCNT=0. Por lo tanto, si se empieza a girar el péndulo hacia una dirección, POSCNT se incrementará o decrementará. De estar decrementando, el registro POSCNT desbordará pasando de 0x0000 a 0xFFFF. Cuando ocurra el índice y se corrija la desviación a la posición de equilibrio superior, se tendrá una situación parecida. De pasar el programa por índice POSCNT volverá a valer 0, pudiendo desbordar y pasar a valer 0xFFFF, con lo que la corrección de ángulo no valdría. Para solucionar esto, la subrutina pend_position(), aparte de traducir el valor de las cuentas en POSCNT por el valor del ángulo desplazado en el péndulo, también hace una distinción de si POSCNT es mayor que 0xF000. Es imposible que el péndulo, girando en el sentido positivo alcance el valor 0xF000 (para ello, tendría que dar tres vueltas sin que ocurriera el pulso de índice). Una vez distinguido el caso de desbordamiento inferior del registro POSCNT, se pasa a convertir el valor de POSCNT a un valor negativo de la siguiente forma: 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑜𝑜′ = (𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 − 0𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥 − 1) ∗ 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟ó𝑛𝑛 𝑒𝑒𝑒𝑒𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 Se puede observar que, de valer POSCNT 0xFFFF, su valor en grados sería de -1 cuenta*resolución encoder. Juntando todo esto, ya se puede escribir la función pend_postion: double pend_position (double dindx) { double g; if(POSCNT>0xF000) { g=((((double)POSCNT-0x10000)*0.18)+dindx); } else { g=(((double)POSCNT*0.18)+dindx); } return(g); Figura 9-9. Función pend_postion 85 Control de un Sistema de Péndulo Invertido La variable 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑, es el valor del desplazamiento entre el índice y la posición de equilibrio superior. Se conoce que, en nuestro péndulo, el pulso índice ocurre en el cuadrante superior izquierdo. Si se eleva el péndulo en sentido horario des de la posición inferior a la superior, POSCNT incrementa positivamente (así se ha establecido en la inicialización del QEI). Cuando POSCNT llegue a índice, su valor será reseteado y entonces, al sumarle el valor dindx se habrá desplazado la posición 0 a la posición de equilibrio superior. Figura 9-10. Sentido establecido del ángulo del péndulo en relación con el encoder Ahora se hablará de pos0ready. Esta subrutina detecta cuando el péndulo llega a la posición de equilibrio superior. Como se comentaba en la explicación de la subrutina pend_position, el usuario debe elevar el péndulo en sentido horario hasta alcanzar la posición de equilibrio superior. En su camino, el QEI recibirá el pulso del índice (cuadrante superior izquierdo) y POSCNT se reseteará. Por lo tanto, se tiene un escenario en el que POSCNT pasará 2 veces a valer 0. Jugando con esto, se ha hecho un código que detecta la transición por 3 estados del péndulo. 86 Control de un Sistema de Péndulo Invertido POSCNT=0 Giramos el péndulo en sentido horario No ¿POSCNT!=0? Si Giramos el péndulo en sentido horario No ¿POSCNT=0? Si (ocurre indx) Giramos el péndulo en sentido horario No ¿(POSCNT+dindx)=0? Si Pos 0 Figura 9-11. Diagrama de la función pos0ready 87 Control de un Sistema de Péndulo Invertido Veamos el código de pos0ready: void pos0ready (double dindx) { double pos; pos=pend_position(0.0); while((pos<5.0)&&(pos>-5.0)) { pos=pend_position(0.0); } while((pos<-0.18)||(pos>0.18)) { pos=pend_position(0.0); } pos=pend_position(dindx); while((pos<-0.18)||(pos==0.0)) { pos=pend_position(dindx); } encontramos la pos 0 //salimos del "0" inicial //encontramos el indice // } Figura 9-12. Función pos0ready Se ha añadido un margen en la localización de las posiciones, para evitar errores. 1.9.5 Programa principal El programa principal sigue el siguiente diagrama de estados: 88 Control de un Sistema de Péndulo Invertido Inicio Inicializaciones pos0ready pend_position U=Algoritmo de control Si U= Valor Max U>Valor Max No U<Valor Max Si U=-Valor Max No ¿U positiva? Si No PWM + PWM- Guardamos valores para el algoritmo de control Bucle de espera Figura 9-13. Diagrama del programa principal 89 Control de un Sistema de Péndulo Invertido Para aplicar el ciclo de trabajo, se ha usado una subrutina de pwm.h void SetDCMCPWM (unsigned int numero_registro_DC, unsigned int valor_DC,0); Figura 9-14. A continuación, se añade un trozo del código del programa principal, referente a la modificación del ciclo de trabajo: if(U>0) { SetDCMCPWM(1,0,0); SetDCMCPWM(2,(U),0); } else { SetDCMCPWM(1,((0xFFFF-U)+1),0); //convertimos U a unsigned int SetDCMCPWM(2,0,0); } Figura 9-15. Donde 𝑈𝑈 es el resultado del algoritmo de control y representa la señal de control del sistema. Si 𝑈𝑈 es positiva, se aplica este resultado al ciclo de trabajo de uno de los dos generadores de PWM y se deja el otro a 0. De ser 𝑈𝑈 negativa, se convierte 𝑈𝑈 a valor absoluto. Obsérvese que, de valer 𝑈𝑈 = 0𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥𝑥 su valor sería -1 o 1 en valor absoluto. Finalmente se aplica el DC, invirtiendo el orden de los generadores de PWM para invertir el sentido de giro del motor. Para aplicar el bucle de espera, se ha usado una subrutina de la librería libp30F4011-coff.a, void __delay32(unsigned long cycles) Figura 9-16. donde el parámetro 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 , es el número de ciclos de reloj que deben transcurrir para el retardo deseado. Haciendo memoria, nuestro ciclo de reloj es de 50 𝑛𝑛𝑛𝑛. Por lo tanto, para tener un retardo de 1 𝑚𝑚𝑚𝑚, se debe introducir a la subrutina el valor 20 000 (para 20 𝑚𝑚𝑚𝑚, 400 000). 90 Control de un Sistema de Péndulo Invertido 1.10 Resultados Se ha comprobado el correcto funcionamiento del programa, mediante el modo debug del programador. Se observa que la planta responde, acorde con el diseño en el LGR. Si se aplica un controlador proporcional, la planta reacciona de forma inestable. Se observa, que en aumentar la ganancia nos acercamos al eje de la estabilidad. Si se aplica un integrador puro, se obtienen oscilaciones (los polos están en el radio 𝑧𝑧 = 1). De introducir un cero en el semiplano izquierdo no demasiado alejado del eje 𝑧𝑧 = 1, junto con el integrador puro, se consigue estabilizar la planta sin sobre-picos demasiado elevados. También se ha podido observar cómo, de alejar demasiado el péndulo de la posición de equilibrio superior, la respuesta cambia drásticamente y el péndulo se vuelve inestable con facilidad. A pesar de verse una relación clara entre el modelo establecido en la planta, junto con los controladores diseñados, se observa que los parámetros de la planta, como los polos o parámetros del motor distan un poco de la realidad. Por eso, se debe reajustar la ganancia y los valores del controlador un poco para obtener el resultado deseado. Por desgracia, no se puede graficar la respuesta real de la planta para obtener una relación más clara con el diseño realizado. Esta prestación se podría tener en cuenta, en una futura ampliación de la maqueta. Figura 10-1. LGR de la planta con compensador 91 Control de un Sistema de Péndulo Invertido 1.11 Bibliografía [1] Katsuhiko Ogata. “Ingeniería de control moderna”. 5ª Edición 2010. [2] Katushiko Ogata. “Sistemas de Control en Tiempo Discreto”. 2ª Edición 2002. [3] Microchip. “16-bit MCU and DSC Programmer’s Reference Manual”. [4] Microchip. “dsPIC30F Family Reference Manual”. [5] Microchip. “dsPIC30F4011/4012 Data Sheet”. [6] Microchip. “dsPIC Language Tools Libraries”. [7] Microchip. “MPLAB C30 C COMPILER USER’S GUIDE”. 92 2. ANEXOS Control de un Sistema de Péndulo Invertido 2.1 Ficheros de MATLAB Este apartado, recoge los ficheros usados en el cálculo y simulación de los controladores expuestos en el capítulo 1.7. Control mediante el método del LGR %IPClassic.m %Control de una planta de péndulo invertido %mediante el método del LGR de Evans %------------------------------------%simulacion de controladores de 1 y 2 orden %evaluación mediante la herramienta sisotool clc clear all %------------variables----------------------------------PI = 4*atan(1); g=9.81; M=0.0742; %masa del carro m=0.0238; %masa del péndulo l=0.25; %mitad de la longitud del péndulo Km=0.14; %constante del motor (V*s)/rad r=0.005; %radio del eje del motor Ra=10; %resistencia de armadura del motor Ts=0.02; %tiempo de muestreo %---------H(s)=O(s)/Va(s)-----------------------num=[-(Km)/(Ra*r) 0]; den=[M*l (l*(Km^2))/(Ra*(r^2)) -(M+m)*g -(g*(Km^2))/(Ra*(r^2))]; H=tf(num,den); [z,p,k]=tf2zp(num,den) %inormacion de H(s) %eliminamos el polo mas lento de la planta S=-1056 y simplificamos: z=[0]; p=[6.2701 ; -6.2581]; k=-150.94339; [num,den]=zp2tf(z,p,k); Hsim=tf(num,den); %discretizamos Hsim(s) Hdisc=c2d(Hsim,0.02); %funcion de transferencia del compensador C(z) zc=[0.753]; pc=[1]; kc=0.142; [nc,dc]=zp2tf(zc,pc,kc); C=tf(nc,dc,0.02); 94 Control de un Sistema de Péndulo Invertido %Compensador de retardo de fase Cr(z) zc=[0.9]; pc=[0.99]; kc=1.66; [nc,dc]=zp2tf(zc,pc,kc); Cr=tf(nc,dc,0.02); %planta con realimentación unitaria P=feedback(-Hdisc*C,1); %step(P) %evaluamos la planta con la herramienta sisotool sisotool(-Hdisc*C*Cr) La transformada z modificada: Simulación de la adición de un retraso de transporte %IPzmod.m %Control de una planta de péndulo invertido %mediante el método del LGR de Evans %------------------------------------%simulacion de la adicion de un tiempo de retardo % (1-m)T a la planta clc clear all %------------variables----------------------------------PI = 4*atan(1); g=9.81; M=0.0742; %masa del carro m=0.0238; %masa del péndulo l=0.25; %mitad de la longitud del péndulo Km=0.14; %constante motor (V*s)/rad r=0.005; %radio del eje del motor Ra=10; %resistencia de armadura del motor Ts=0.02; %tiempo de muestreo rett=0.85; %(1-m)Ts , donde m=rett es el retardo %de transporte añadido 95 Control de un Sistema de Péndulo Invertido %---------H(s)=O(s)/Va(s)-----------------------num=[-(Km)/(Ra*r) 0]; den=[M*l (l*(Km^2))/(Ra*(r^2)) -(M+m)*g -(g*(Km^2))/(Ra*(r^2))]; H=tf(num,den); %eliminamos el polo mas lento de la planta S=-1056 y simplificamos z=[0]; p=[6.2701 ; -6.2581]; k=-150.94339; [num,den]=zp2tf(z,p,k); Hsim=tf(num,den); %Transformada z modificada de la planta hsim(s) num=[1,0]; s=tf(num,1); Ps=minreal(Hsim/s); %debido al retenedor ZOH(s)=(1-exp(-Ts))/s [num,den] = TFDATA(Ps); [r,p,k]=residue(num{1,1},den{1,1}); %planta (suma de fracciones parciales) na=[r(2,1)*exp(p(2,1)*rett*Ts) 0]; da=[1 -exp(p(2,1)*Ts)]; A=tf(na,da,Ts); nb=[r(1,1)*exp(p(1,1)*rett*Ts) 0]; db=[1 -exp(p(1,1)*Ts)]; B=tf(nb,db,Ts); %z^-1(1-z^-1) donde (1-z-1) corresponde a (1-exp(-Ts)) y z^-1 es debido %al retardo ficticio nd=[1 -1]; dd=[1 0 0]; D=tf(nd,dd,Ts); P=(A+B)*D; %planta Hsim(s) a z modificada PL=minreal(P); %simplificamos la planta [z,p,k] = zpkdata(P); Psim=minreal(ZPK(z{1,1},p{1,1},-k,Ts)); %presentamos la planta y invertimos la realim %compensador de segundo orden C(z) zc=[0.753;0.9]; pc=[1;0.99]; kc=0.236; [nc,dc]=zp2tf(zc,pc,kc); C=tf(nc,dc,0.02); PC=Psim*C; %evaluamos la planta con la herramienta sisotool sisotool(PC) 96 Control de un Sistema de Péndulo Invertido Control en el espacio de estados: método de ubicación de polos %IPSSdisc.m %Control de una planta de péndulo invertido %mediante el método de ubicación de polos %------------------------------------% Observabilidad y controlabilidad % Matriz de ganancia de realimentación % Simulación de la respuesta a CI clc clear all %------------variables de la planta-------------------------------PI = 4*atan(1); g=9.81; M=0.0742; %masa del carro m=0.0238; %masa del péndulo l=0.25; %mitad de la longitud del péndulo Km=0.14; %constante del motor (V*s)/rad r=0.005; %radio del eje del motor Ra=10; %resistencia de armadura del motor Ts=0.02 %tiempo de muestreo %-------------Matrices A,B,C y D-------------------------A=[0 1 0 0;((m+M)*g)/(M*l) 0 0 (Km^2)/(Ra*M*l*(r^2));0 0 0 1;-(m*g)/M 0 0 (Km^2)/(Ra*M*(r^2))]; B=[0;-Km/(M*l*Ra*r);0;Km/(M*Ra*r)]; C=[1 0 0 0]; D=[0]; %-------------Matrices G y H------------------------------ [G,H]=c2d(A,B,Ts); %-------------Controlabilidad y observabilidad-----------CO=CTRB(G,H); %matriz de controlabilidad [B AB A^2B ...] rank(CO) OB=OBSV(G,C); %matriz de observabilidad [C; CA; CA^2 ...] rank(OB) %calculo de la matriz de ganancias de realimentacion de estado K %usando la formula de Ackermann J=[0.97+0.05*j 0.97-0.05*j 0.9 0.85];%polos deseados del sistema K=acker(G,H,J); %------------simulacion de la respuesta a CI-------------------sys=ss(G-H*K,eye(4),eye(4),eye(4),Ts); t=0:Ts:4; initial((sys),[1;0;0;0],t); 97 Control de un Sistema de Péndulo Invertido 2.2 Código fuente El siguiente código, es el código del programa en el que se ha aplicado un algoritmo de primer orden: /*PFC: control de una planta de péndulo invertido Para realizar el control se sensa la posición angular del péndulo y se actua mediante PWM con un motor de DC Autor: Joan Berga Cabello 2012 */ #include <pwm.h> #include <qei.h> #include <stdio.h> #define FCY 20000000UL #define delay_ms ((unsigned long)(FCY/1000UL)) /* configuracion fuses */ _FOSC(CSW_FSCM_OFF & XT_PLL8); _FWDT(WDT_OFF) _FBORPOR(PBOR_OFF & MCLR_EN); _FGS(CODE_PROT_OFF); //20 MIPS con cristal de 10MHz fail-safe clock monitor off //wdt off //BOR off i funcion MCLR habilitada //codigo no protegido /* Configuracion: QEI, modulo PWM y puertos */ void ini (void) { unsigned int period; unsigned int sptime; unsigned int config1; unsigned int config2; unsigned int config3; unsigned int qeic1; unsigned int qeic2; // configuracion puertos ADPCFG=0x0FFF; //Puerto B digital TRISB=0xFFFE; // Puerto B salida 98 Control de un Sistema de Péndulo Invertido //configuracion modulo PWM asm("BCLR PORTB,#0x0"); //Disable motor driver DisableIntMCPWM; SetDCMCPWM(1,0,0); SetDCMCPWM(2,0,0); period=4000; // period=PTPER, pres 1:1 , P=TCY*(PTPER+1)/pres sptime=0x0; //special event trigger off config1=(PWM_EN&PWM_OP_SCALE1&PWM_IPCLK_SCALE1&PWM_MOD_FREE); config2=(PWM_PDIS3H&PWM_PDIS2H&PWM_PDIS1H&PWM_PDIS3L&PWM_PEN2L&PWM_PEN1L); config3=( PWM_UEN); OpenMCPWM(period,sptime,config1,config2,config3); //configuracion QEI DisableIntQEI; qeic1=(QEI_INDEX_RESET_ENABLE& QEI_INPUTS_NOSWAP& QEI_MODE_x4_PULSE); qeic2=(MATCH_INDEX_PHASEA_LOW&MATCH_INDEX_PHASEB_LOW&POS_CNT_ERR_INT_DISABLE& QEI_QE_CLK_DIVIDE_1_1&QEI_QE_OUT_ENABLE); OpenQEI(qeic1,qeic2); } /*Rutina de calculo de la posición angular del péndulo ---------------------------------------------------------------------------------POSCNT es el registro donde se almacenan los pulsos del encoder En t=0, POSCNT=0, entonces si decrementamos pulsos el registro desborda a 0xFFFF. 1 pulso =0.18 grados,1 rev =2000 pulsos*/ double pend_position (double dindx) { double g; if(POSCNT>0xF000) { g=((((double)POSCNT-0x10000)*0.18)+dindx); } else { g=(((double)POSCNT*0.18)+dindx); } return(g); } 99 Control de un Sistema de Péndulo Invertido /* Rutina de espera hasta que el péndulo encuentra la pos superior de equilibrio -----------------------------------------------------------------------------------En t=0(pendulo pos equilibrio inferior) POSCNT=0=>grados=-dindx. */ void pos0ready (double dindx) { double pos; pos=pend_position(0.0); while((pos<5.0)&&(pos>-5.0)) { pos=pend_position(0.0); } while((pos<-0.18)||(pos>0.18)) //salimos del "0" inicial { pos=pend_position(0.0); } pos=pend_position(dindx); //encontramos el indice while((pos<-0.18)||(pos==0.0)) { pos=pend_position(dindx); } // encontramos la pos 0 } int main (void){ double grados=0.0; double dindx=-9.37; //posición angular del péndulo //desfase en grados de la posicion del indice respecto de la pos 0 ///////////variables del controlador//////////////////////// int U=0; //señal de control double grados1=0.0; double K=4000.0; double A=0.0; double A1=0.0; ///////////////////////////////////////////////////////////// ini(); pos0ready(dindx); asm("BSET PORTB,#0x0"); //BSET/BCLR enable/disable motor driver while(1) { grados=pend_position(dindx); ///////////////algoritmo de control//////////////////////////////////// A=(grados-(0.8*grados1)+A1); U=(int)(K*A); //////////////limitamos la señal de control///////////////////////////// if(U>8191) U=8191; if(U<-8191) U=-8191; 100 Control de un Sistema de Péndulo Invertido //////////////////activamos el PWM segun sentido de giro//////////////// if(U>0) { SetDCMCPWM(1,0,0); SetDCMCPWM(2,(U),0); } else { SetDCMCPWM(1,((0xFFFF-U)+1),0); //convertimos U a unsigned int SetDCMCPWM(2,0,0); } ////////////////Guardamos los valores Z del controlador///////////////// grados1=grados; A1=A; /////////////////// Retardo /////////////////////////////////////////// __delay32(delay_ms*20); } } 2.3 Levantamiento del péndulo El código que se incluye a continuación, es una modificación del código fuente (apartado 2.2) donde, en lugar de elevar el usuario el péndulo hasta la posición de equilibrio superior y a partir de esta ser ejecutado el algoritmo de equilibrio, el péndulo es elevado mediante programa (algoritmo de levantamiento) y igualmente, luego se ejecuta el algoritmo de equilibrio de este. Este código no ha sido explicado en la Memoria, dado que ha sido obtenido mediante ensayo en la planta y no des del punto de vista de la ingeniería de control (como lo fue el algoritmo de levantamiento del péndulo). No obstante, esta carencia es compensada con los comentarios al código que incluye, los cuales han sido puestos con el fin de solventar cualquier duda que pudiera tener el lector. 101 Control de un Sistema de Péndulo Invertido /*PFC: Control de una planta de péndulo invertido. "Elevacion del péndulo y equilibrio de este" Autor; Joan Berga Cabello 2012 -------------------------------------------------------------------------------La entrada del sistema es la variacion angular del pendulo, sensada con el QEI La salida, es la tension de armadura del motor (controlada por PWM) Se eleva el pendulo hasta la posicion de equilibrio superior (mediante 1) y luego se mantiene en esta mediante 2. 1-Algoritmo de elevacion: Exitando el motor con una señal cuadrada de periodo creciente se eleva el pendulo hasta la posicion de equilibrio superior. 2-Algoritmo de equilibrio: Se aplica un algoritmo basado en el LGR de Evans. */ #include <pwm.h> #include <qei.h> #include <stdio.h> #define FCY 20000000UL #define delay_ms ((unsigned long)(FCY/1000UL)) /* configuracion fuses */ _FOSC(CSW_FSCM_OFF & XT_PLL8); _FWDT(WDT_OFF) _FBORPOR(PBOR_OFF & MCLR_EN); _FGS(CODE_PROT_OFF); //20 MIPS con cristal de 10MHz fail-safe clock monitor off //wdt off //BOR off i funcion MCLR habilitada //codigo no protegido //variables de la interrupcion de T1 unsigned int tic=0; //Se incrementa cada ms unsigned int sw=0; //Interruptor que conmuta la señal de salida unsigned int Ui=3500; //Señal de salida (tension armadura) unsigned int limt=300; //Mitad del periodo de la señal unsigned int cycles=0; //Indice de limit 102 Control de un Sistema de Péndulo Invertido /* Interrupcion generada por el T1,cuyo objetivo es levantar el pendulo exitando el motor con una señal cuadrada de periodo creciente. ----------------------------------------------------------------------------------La señal que exitará el motor alterna valores negativos y positivos constantes. Se observa que de augmentar el periodo de esta señal con un valor de incremento especifico, el pendulo se eleva hasta alcanzar una posicion cercana a la de equilibrio superior. Finalmente mediante un augmento de la tension de armadura se logra llevar al pendulo a esta posicion. ----------------------------------------------------------------------------------*/ void __attribute__((__interrupt__)) _T1Interrupt(void) { asm("BCLR IFS0, #3"); //Limpiamos T1IF tic++; if(tic==limt) //limit es la mitad del periodo de la señal cuadrada { // aplicada al motor. Empieza en 0.3 s y crece tic=0; if(cycles==28) //Damos el "ultimo empujon" al péndulo para elevarse { //augmentando la tension de armadura y limitando el Ui=4200; //periodo de este. limt=460; } else //Augmentamos el periodo de la señal cuadrada. El péndulo sube. { limt=limt+20; } cycles++; /Contamos semiciclos (mitad periodo de la señal) if(sw==0) //Activamos el motor por PWM alternando valores de { //tension de armadura positivos y negativos. SetDCMCPWM(1,0,0); SetDCMCPWM(2,Ui,0); sw=1; } else { SetDCMCPWM(1,Ui,0); SetDCMCPWM(2,0,0); sw=0; } } } 103 Control de un Sistema de Péndulo Invertido /*Inicializacion de timer 1 para ser usado por interrupcion*/ void iniT1 (void) { T1CON=0; //TON=0, el timer esta inactivo TMR1=0; PR1=20000; //20000*50ns= 1ms asm("BSET IPC0,#14"); //T1IP0,1,2=1; prioridad 7 a la int de T1 asm("BSET IPC0,#13"); //(la mas alta) asm("BSET IPC0,#12"); asm("BCLR IFS0,#3"); //T1IF=0, borramos posible demanda de int asm("BSET IEC0,#3"); //T1IE=1, habilitamos la interrupcion; T1CON=0x8000; //TMR1 on y prescaler 1:1 } /* Configuraciones: QEI, modulo PWM y puertos */ void ini (void) { unsigned int period; unsigned int sptime; unsigned int config1; unsigned int config2; unsigned int config3; unsigned int qeic1; unsigned int qeic2; // configuracion puertos ADPCFG=0x0FFF; //Puerto B digital TRISB=0xFFFE; // Puerto B salida //configuracion modulo PWM asm("BCLR PORTB,#0x0"); //Disable motor driver DisableIntMCPWM; SetDCMCPWM(1,0,0); SetDCMCPWM(2,0,0); period=4000; // period=PTPER, pres 1:1 , P=TCY*(PTPER+1)/pres sptime=0x0; //special event trigger off config1=(PWM_EN&PWM_OP_SCALE1&PWM_IPCLK_SCALE1&PWM_MOD_FREE); config2=(PWM_PDIS3H&PWM_PDIS2H&PWM_PDIS1H&PWM_PDIS3L&PWM_PEN2L&PWM_PEN1L); config3=( PWM_UEN); OpenMCPWM(period,sptime,config1,config2,config3); //configuracion QEI DisableIntQEI; qeic1=(QEI_INDEX_RESET_ENABLE& QEI_INPUTS_NOSWAP& QEI_MODE_x4_PULSE); qeic2=(MATCH_INDEX_PHASEA_LOW&MATCH_INDEX_PHASEB_LOW&POS_CNT_ERR_INT_DISABLE& QEI_QE_CLK_DIVIDE_1_1&QEI_QE_OUT_ENABLE); OpenQEI(qeic1,qeic2); } 104 Control de un Sistema de Péndulo Invertido /*Rutina de calculo de la posición angular del péndulo ---------------------------------------------------------------------------------POSCNT es el registro donde se almacenan los pulsos del encoder En t=0, POSCNT=0, entonces si decrementamos pulsos el registro desborda a 0xFFFF. 1 pulso =0.18 grados,1 rev =2000 pulsos --------------------------------------------------------------------------------*/ double pend_position (double dindx) { double g; if(POSCNT>0xF000) { g=((((double)POSCNT-0x10000)*0.18)+dindx); } else { g=(((double)POSCNT*0.18)+dindx); } return(g); } /* Rutina de detecion de indice + posicion 180 grados -----------------------------------------------------------------------------------Esta rutina se espera hasta que el usuario mueva el pendulo, cercionandose de que se detecte el indice y esperando a que el pendulo este en la posicion de equilibrio inferior, 180 grados. El usuario debe de dar una vuelta completa empezando por 180 grados y volviendo a esta posicion. --------------------------------------------------------------------------------- */ void pos180ready (double dindx) { double pos; pos=pend_position(0.0); while((pos<5.0)&&(pos>-5.0)) { pos=pend_position(0.0); } while((pos<-0.18)||(pos>0.18)) //Salimos del "0" inicial { pos=pend_position(0.0); } pos=pend_position(dindx); //Encontramos el indice while(pos<175) { pos=pend_position(dindx); } //Detectamos los "180" grados } 105 Control de un Sistema de Péndulo Invertido int main (void){ double grados=0.0; double dindx=-10.5; //Posición angular del péndulo //Desfase en grados de la posicion del indice respecto de la pos 0 ///////////variables del controlador//////////////////////// int U=0; //Señal de control double grados1=0.0; double K=3500.0; double A=0.0; double A1=0.0; ///////////////////////////////////////////////////////////// ini(); pos180ready(dindx); //El usuario gira el pendulo, detectamos indice y esperamos pos 180 __delay32(40000000UL); //Esperamos 2 s (precaucion usuario) asm("BSET PORTB,#0x0"); //Habilitamos el driver del motor grados=pend_position(dindx); ////////////////////ALGORITMO DE ELEVACION DEL PENDULO///////////////// //(vease la interrupcion de T1) iniT1(); //Esperamos a estar a 1 grado de la posicion de equilibrio superior while((grados<-1.0)|(grados>1.0)) { grados=pend_position(dindx); } asm("BCLR IEC0,#3"); //T1IE=0; Deshabilitamos la interrupcion SetDCMCPWM(2,0,0); //Paramos el motor SetDCMCPWM(1,0,0); asm("BCLR IFS0,#3"); //T1IF=0; borramos posible demanda de int T1CON=0x0000; //Detenemos T1 grados=pend_position(dindx); while((grados<-0.5)|(grados>0.5)) //Esperamos a que el pendulo por su propia inercia { //se acerque 1/2 grado a su posicion de eq superior grados=pend_position(dindx); } 106 Control de un Sistema de Péndulo Invertido ////////////////////ALGORITMO DE ELQUILIBRIO DEL PENDULO///////////////// while(1) { grados=pend_position(dindx); ///////////////algoritmo de control//////////////////////////////////// A=(grados-(0.8*grados1)+A1); U=(int)(K*A); //////////////limitamos la señal de control///////////////////////////// if(U>8191) U=8191; if(U<-8191) U=-8191; //////////////////activamos el PWM segun sentido de giro//////////////// if(U>0) { SetDCMCPWM(1,0,0); SetDCMCPWM(2,(U),0); } else { SetDCMCPWM(1,((0xFFFF-U)+1),0); //convertimos U a unsigned int SetDCMCPWM(2,0,0); } ////////////////Guardamos los valores Z del controlador///////////////// grados1=grados; A1=A; /////////////////// Retardo /////////////////////////////////////////// __delay32(delay_ms*20); } } 107 Control de un Sistema de Péndulo Invertido 2.4 Manual de prácticas 2.4.1 Consideraciones previas El apartado 2.4, es una propuesta de manual de prácticas mediante el uso de la maqueta descrita en este proyecto. En el apartado 2.4.4 y 2.4.5 se proponen ejercicios, para que el alumno vea la relación entre el modelo de la planta y la realidad y diseñe controladores mediante la técnica del lugar geométrico de las raíces. Se supone que el alumno posee conocimientos en temas de control y programación en C. De no tener demasiados conocimientos en programación C, mediante la ayuda de un profesor y usando el código fuente añadido en el apartado 2.2, el alumno no debería tener dificultades para implementar los algoritmos a ser aplicados en la planta. Para el buen uso de la maqueta, se deben tener en cuenta las siguientes consideraciones: 1. Si la maqueta está fija a la superficie de trabajo, el alumno no deberá re-calibrar la desviación de la localización del 0 respecto al pulso índice, cada vez que se mueva la maqueta. De no ser así, para calibrar la maqueta, en una primera aproximación se debería usar un nivel. Luego, mediante el uso de algún controlador estable, se ejecuta el código y se observa si el péndulo se desvía hacia alguna dirección. De ser así, se deberá modificar la variable dindx, hasta que el error de localización de la posición sea lo suficientemente pequeño para no tener una respuesta que actué de forma “no simétrica”. Por ejemplo, equilibrando un lado del péndulo y inestabilizando el otro. 2. Puesto que en el modelado de la planta no se han tenido consideraciones de fricciones, se deben lubricar las zonas por donde se desplaza el carro con cierta frecuencia. 3. Dado que la planta es de carácter inestable, se debe tener cuidado a la hora de tratar con ella. En el diseño de la maqueta, no se ha incluido ningún sistema para evitar que el péndulo colisione con sus extremos. Por lo tanto, en situaciones de emergencia, debe pararse el sistema mediante MPLAB o haciendo uso del botón de reset en la placa de C.I. 108 Control de un Sistema de Péndulo Invertido 2.4.2 Creando un proyecto en MPLAB Para crear un proyecto en MPLAB, se deben seguir los siguientes pasos: 1. 2. 3. 4. Una vez abierto MPLAB, seleccionamos Project => Project Wizard. Seleccionamos el dsPIC30F4011. Seleccionamos Microchip C30 Toolsuite. Damos un nombre al proyecto, cuyo archivo tendrá la extensión .mcp. A continuación, aceptamos hasta cerrar la pantalla del Project Wizard. 5. Debemos cerciorarnos de que en la pestaña View, tenemos seleccionado Project y Output. 6. En la ventana del proyecto, cuyo cabezal es el nombre del proyecto mas la extensión .mcw, debemos añadir los siguientes archivos: libp30F4011-coff.a: Debería estar en: C:\Program Files\Microchip \MPLAB C30\lib. Debemos ir al apartado, de la ventana proyecto: Library Files =>botón derecho=>Add files y añadimos la ruta. P30f4011.gld: Debería estar en: C:\Program Files\Microchip\MPLAB C30\support\gld. Debemos ir al apartado, de la ventana proyecto: Library Files =>botón derecho=>Add files y añadimos la ruta. 7. Nos dirigimos a la pestaña File => New. Aquí debemos escribir el código y guardarlo con la extensión .c. Una vez escrito el código, o de tener un fichero .c, nos dirigimos a la ventana proyecto y añadimos el código fuente en el apartado Source Files. 8. Finalmente, si queremos programar el PIC o usar el modo debug del programador, debemos añadir este en las pestañas: Programmer=> Select Programmer o Debugger=> Select Tool, respectivamente. 9. Ya tenemos el proyecto listo, para transferirlo al PIC, simularlo o simplemente depurar errores! 2.4.3 Breve descripción del sistema El objetivo de este problema, es lograr estabilizar la planta de péndulo invertido consiguiendo una respuesta a perturbaciones deseada. Veamos el esquema del sistema regulador 109 Control de un Sistema de Péndulo Invertido Figura 1. Diagrama del sistema Las ecuaciones diferenciales que describen el comportamiento de la planta (Carro-Péndulo en la Figura 1) en tiempo continuo, son las siguientes: (𝑀𝑀 + 𝑚𝑚)𝑥𝑥̈ + 𝑚𝑚𝑚𝑚𝜃𝜃̈ = 𝑢𝑢 (1) 𝑚𝑚𝑙𝑙 2 𝜃𝜃̈ + 𝑚𝑚𝑚𝑚𝑥𝑥̈ = 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚 (2) Como se puede observar, el sistema descrito es de tipo SISO. El actuador, es un motor de DC controlado por tensión de armadura (mediante PWM). La ecuación diferencial en tiempo continuo, que relaciona la tensión de armadura 𝑉𝑉𝑉𝑉 con la fuerza aplicada en el carro 𝑢𝑢 es la siguiente: 𝑢𝑢 = 𝐾𝐾 𝐾𝐾 2 𝑉𝑉𝑉𝑉 − 𝑥𝑥̇ 𝑅𝑅𝑅𝑅𝑅𝑅 𝑅𝑅𝑅𝑅𝑟𝑟 2 (3) 110 Control de un Sistema de Péndulo Invertido Las variables usadas en (1), (2) y (3) són las siguientes: M m l u K Ra r g x Va Θ masa del carro (Kg) masa del péndulo (Kg) mitad de la longitud del péndulo (m) fuerza aplicada al carro (N) constante del motor ((V*s)/rad) resistencia de armadura del motor (Ω) radio del eje del motor (m) gravedad terrestre (Kg/(m*s2)) desplazamiento del carro (m) tensión de armadura (V) posición angular del péndulo (º) La ecuaciones (1) y (2), fueron deducidas del diagrama de cuerpo libre de la Figura 2. Además, fueron linealizadas entorno a la posición de equilibrio superior 𝜃𝜃 ≈ 0. Figura 2. Diagrama de cuerpo libre de la planta (Se consideraron los sentidos de 𝜃𝜃 y 𝑢𝑢 que aparecen en la Figura 2, como sentidos positivos) 111 Control de un Sistema de Péndulo Invertido 2.4.4 Ejercicios propuestos: Estudio previo 1. Usando las ecuaciones diferenciales de la planta (1) y (2), obtener la función de transferencia de la planta 𝐺𝐺𝑃𝑃 (𝑠𝑠) (se consideran C.I nulas), donde 𝐺𝐺𝑃𝑃 (𝑠𝑠) = 𝜃𝜃 (𝑠𝑠) 𝑢𝑢(𝑠𝑠) 2. Obtener la gráfica del lugar geométrico de las raíces (LGR) de 𝐺𝐺𝑃𝑃 (𝑠𝑠). Como podríamos estabilizar esta? 3. Usando las ecuaciones diferenciales (1), (2) y (3) obtener la función de transferencia GPM(s), y obtener la gráfica del LGR, siendo 𝐺𝐺𝑃𝑃𝑃𝑃 (𝑠𝑠) = 𝜃𝜃 (𝑠𝑠) 𝑉𝑉𝑉𝑉(𝑠𝑠) Como podríamos estabilizar la planta 𝐺𝐺𝑃𝑃𝑃𝑃 (𝑠𝑠)? (se debe eliminar el polo más lento de la planta) 4. Discretizar la función de transferencia 𝐺𝐺𝑃𝑃𝑃𝑃 (𝑠𝑠) a 𝐺𝐺𝑃𝑃𝑃𝑃 (𝑧𝑧), introduciendo en la planta un muestreador y un retenedor de orden zero. Para ello, aplicar los valores reales de las variables de la maqueta: K=0.14 (V*s)/rad Ra=10 Ω r=0.005 m l=0.25 m M=0.0742 Kg m=0.0238 Kg g=9.81 Kg/(m*s2) Considerar el tiempo de muestreo 𝑇𝑇𝑇𝑇 = 20 𝑚𝑚𝑚𝑚. 112 Control de un Sistema de Péndulo Invertido u(kT) θ(kT) T Controlador digital θ(kT) Planta ZOH Gc(z) H(z) Figura 3. Sistema regulador discreto. (en nuestro sistema H(z) es GPM(z)) 5. Obtener el LGR de GPM(z). Encontrar un controlador de primer orden que logre estabilizar la planta. 6. Obtener contornos en el LGR que establezcan: (usar sisotool) 𝑇𝑇𝑇𝑇 ≤ 4 𝑠𝑠𝑠𝑠𝑠𝑠 𝜉𝜉 ≥ 0.5 Finalmente encontrar un controlador que esté dentro de los contornos establecidos. Obtener la respuesta a CI de la planta con el controlador. 7. Modificar el controlador diseñado, para que pueda ser usado en el microcontrolador. Considérese que el módulo PWM entrega 1 V por un valor de DC de 534. Utilizar el método de programación estándar (véase [2] p.124). Realizar un diagrama de bloques del controlador. 2.4.5 Ejercicios propuestos: Implementación de controladores en la maqueta. 1. Alimentar la maqueta a 15V para el módulo PWM y 5 V para el microcontrolador y otros periféricos. Introducir en la planta un controlador proporcional. En aumentar la constante proporcional, que observamos? (comparar con el LGR de la planta realimentada). 2. Introducir en la planta un controlador basado en un integrador puro. En aumentar la constante proporcional, que observamos? (comparar con el LGR de la planta con el controlador ). 113 Control de un Sistema de Péndulo Invertido 3. Introducir en la planta un controlador basado en un integrador puro y un cero en 𝑧𝑧 = 0.8 . Jugar con la constante de proporcionalidad hasta encontrar un controlador que estabilice la planta (𝐾𝐾 ≈ 4000). Comparar el resultado obtenido con el estudio previo, es la respuesta un resultado esperado? 4. Implementar el controlador obtenido en el estudio previo y comprar la respuesta con la respuesta deseada. Jugar con los valores del controlador y tomar conclusiones. 114 3. PLANOS Control de un Sistema de Péndulo Invertido 3.8 Aspecto de las mascaras de C.I Situación de los componentes Mascara de la cara de componentes 123 Control de un Sistema de Péndulo Invertido Mascara de la cara de soldadura 124 4. PRESUPUESTO Control de un Sistema de Péndulo Invertido 4.1 Mediciones 4.1.1 Capítulo 1: Componentes electrónicos Nº 1.1 Ud. U Descripción Subtotal TOTAL MICROCONTROLADOR dsPIC30F4011 MICROCONTROLADOR MODELO dsPIC30F4011, ENCAPSULADO DIP40. 1 1 1.2 U CRISTAL CUARZO 10 MHz CRISTAL DE CUARZO DE 10 MHz 1 1 1.3 U L293DNE CUATRO DRIVERS DE MEDIO PUENTE H, ENCAPSULADO DIP16 1 1 1.4 U CONDENSADOR 10 µF CONDENSADOR ELECTROLÍTICO 10 µF 1 1 1.5 U CONDENSADOR 22 pF CONDENSADOR CERÁMICO 22 pF 2 2 1.6 U CONDENSADOR 100 nF CONDENSADOR POLIESTER 100 nF 1 1 1.7 U RESISTENCIA 10 kΩ RESISTENCIA DE 10 kΩ, ¼ W. 1 1 126 Control de un Sistema de Péndulo Invertido Nº 1.8 Ud. U Descripción Subtotal TOTAL RESISTENCIA 100 Ω RESISTENCIA DE 100 Ω, ¼ W. 3 3 1.9 U RESISTENCIA 2,7 kΩ RESISTENCIA DE 2,7 kΩ, ¼ W. 3 3 1.10 U RESISTENCIA 560 Ω RESISTENCIA DE 560 Ω, ¼ W. 1 1 1.11 U DIODO SBYV27-50-E3 DIODO RECTIFICADOR DE RECUPERACIÓN ULTRA RAPIDA, CORRIENTE NOMINAL DE 2 A Y PICOS DE HASTA 50 A. 4 4 1.12 U LED PILOTO DIODO EMISOR DE LUZ DE 5 mm COLOR ROJO 1 1 1.13 U HEDS-5540 A06 CODIFICADOR INCREMENTAL EN CUADRATURA DE 2 CANALES Y INDICE, 500 CPR (HASTA 2000 FLANCOS POR VUELTA), DIAMETRO DEL EJE DE ¼ in. 1 1 1.14 U MOTOR DC DE IMANES PERMANENTES MÁXIMA TENSIÓN DE ARMADURA 24 V, TENSIÓN MEDIA 15 V, CORRIENTE MÁXIMA 1.6 A, VELOCIDAD SIN CARGA 3540 RPM, RESISTENCIA DE ARMADURA 11.6 Ω, INERCIA 50 gm*cm2, K=0.14 (V*s)/rad 1 1 1.15 U ZÓCALO DIP40 ZÓCALO DIP40, PINES TORNEADOS 1 1 127 Control de un Sistema de Péndulo Invertido Nº 1.16 Ud. U Descripción Subtotal TOTAL ZÓCALO DIP16 ZÓCALO DIP16 , PINES TORNEADOS 1 1 1.17 U PULSADOR PULSADOR PARA PCB (THT) , 4 PINES 1 1 1.18 U INTERRUPTOR DESLIZANTE INTERRUPTOR DESLIZANTE, 2 POSICIONES- 3 PINES, PARA PCB (THT) 1 1 128 Control de un Sistema de Péndulo Invertido 4.1.2 Capítulo 2: Cables y conectores. Nº 2.1 Ud. U Descripción Subtotal TOTAL CONECTOR PICKIT2 CONECTOR MACHO, DESCUBIERTO, PARA PCB (THT), 5 PINES 1 1 2.2 U CONECTOR ICD2 CONECTOR HEMBRA RJ11 PARA PCB (THT) 1 1 2.3 U CONECTOR REGLETA PCB CONECTOR HEMBRA DE TIPO REGLETA PARA PCB (THT) 3 3 2.4 U CONECTOR MACHO 5 PINES CONECTOR MACHO DE 5 PINES DE TIPO CABLE A PLACA, PARA MONTAJE EN PCB (THT), 1 1 2.5 U CARCASA HEMBRA 5 PINES CARCASA DE CONECTOR HEMBRA DE 5 PINES, QUE ACEPTA TERMINALES PARA CRIMPAR 1 1 2.6 U TERMINAL CRIMPAR CARCASA HEMBRA TERMINAL PARA CRIMPAR PARA CARCASA HEMBRA 5 5 2.7 M CABLE TELEFÓNICO 8 VIAS 28 AWG CABLE MODULAR DE 8 VIAS, CALIBRE 28 AWG 1 1 129 Control de un Sistema de Péndulo Invertido Nº 2.8 Ud. U Descripción Subtotal TOTAL CONECTOR HEDS-5540 A06 CONJUNTO CONECTOR-CABLE PARA HEDS5540 A06, 5 PINES. 1 1 130 Control de un Sistema de Péndulo Invertido 4.1.3 Capítulo3: Elementos mecánicos de la maqueta. Nº 3.1 Ud. U Descripción Subtotal TOTAL BARRA MAC AC SUP LIS 12X400mm BARRA MACIZA DE ACERO, SUPERFICIE LISA, DE 12X400mm 1 1 3.2 U MELANINA BLANCA 80X40X10mm TABLERO DE MELANINA BLANCA DE 80X40X10 mm. 1 1 3.3 U CANTO PREENCOLADO BLANCO LISO CANTO PREENCOLADO DE COLOR BLANCO LISO PARA MADERA AGLOMERADA DE 5000X10 mm 1 1 3.4 U TUBO,CUAD,AL,40X40X1000X2mm TUBO CUADRADO HUECO DE ALUMINIO DE 40X40X1000X2 mm 1 1 3.5 U TUBO.CIL,AL,6X1X1000mm TUBO CILINDINDRICO HUECO DE ALUMINIO DE 6X1X100 mm 1 1 3.6 U ESCUADRA SILLA 80X40X30X2mm ESCUADRA DE SILLA, DE ACERO GALVANIZADO DE 80X40X30X2 mm 4 4 3.7 U TORNILLO NIVELADOR M10 TORNILLO NIVELADOR DE M10 1 1 131 Control de un Sistema de Péndulo Invertido Nº 3.8 Ud. U Descripción Subtotal TOTAL MANGUITO PARA ATORNILLAR M10 MANGUITO PARA INTRODUCIR UN TORNILLO EN MADERA DE M10 1 1 3.9 U TORNILLO TIRAFONDO 3X15mm TORNILLO TIRAFONDO PARA MADERA DE 3X15 mm 12 12 3.10 U TORNILLO ROSCA CIL, 3X10mm TORNILLO DE ROSCA CILINDRICA DE 3X10 mm 4 4 3.11 U ARANDELA 28X10X3mm ARANDELA DE 28X10X3 mm. 6 6 132 Control de un Sistema de Péndulo Invertido 4.1.4 Capítulo 4: Placas de circuito impreso. Nº 4.1 Ud. U Descripción Subtotal TOTAL PLACA CIRCUITO IMPRESO PLACA PARA FABRICACION DE PCB DE DOBLE CARA,FOTORESINA POSITIVA, FR4, DE 160X100X1.6 mm 1 1 4.2 U TORNILLOS PCB TORNILLO SEPARADOR DE ACERO PARA PCB DE M3X20 mm. 4 4 4.3 U TUERCA HEX,M3 TUERCA HEXAGONAL DE M3 6 6 133 Control de un Sistema de Péndulo Invertido 4.2 Presupuesto 4.2.1 Capítulo 1: Componentes electrónicos Nº 1.1 Ud. U Descripción MICROCONTROLADOR dsPIC30F4011 Cantidad Precio(€) TOTAL(€) 1 6,010 6,010 1 0,623 0,623 1 3,080 3,080 1 0,292 0,292 2 0,318 0,636 1 0,230 0,230 1 0,027 0,027 3 0,029 0,087 3 0,019 0,057 1 0,029 0,029 MICROCONTROLADOR MODELO dsPIC30F4011, ENCAPSULADO DIP40. 1.2 U CRISTAL CUARZO 10 MHz CRISTAL DE CUARZO DE 10 MHz 1.3 U L293DNE CUATRO DRIVERS DE MEDIO PUENTE H, ENCAPSULADO DIP16 1.4 U CONDENSADOR 10 µF CONDENSADOR ELECTROLÍTICO 10 µF 1.5 U CONDENSADOR 22 pF CONDENSADOR CERÁMICO 22 pF 1.6 U CONDENSADOR 100 nF CONDENSADOR POLIESTER 100 nF 1.7 U RESISTENCIA 10 kΩ RESISTENCIA DE 10 kΩ, ¼ W. 1.8 U RESISTENCIA 100 Ω RESISTENCIA DE 100 Ω, ¼ W. 1.9 U RESISTENCIA 2,7 kΩ RESISTENCIA DE 2,7 kΩ, ¼ W. 1.10 U RESISTENCIA 560 Ω RESISTENCIA DE 560 Ω, ¼ W. 134 Control de un Sistema de Péndulo Invertido Nº 1.11 Ud. U Descripción DIODO SBYV27-50-E3 Cantidad Precio(€) TOTAL(€) 4 0,486 1,944 1 0,123 0,123 1 51,420 51,420 1 7 7 1 0,430 0,430 1 0,408 0,480 1 0,460 0,460 1 0,770 0,770 DIODO RECTIFICADOR DE RECUPERACIÓN ULTRA RAPIDA, CORRIENTE NOMINAL DE 2 A Y PICOS DE HASTA 50 A. 1.12 U LED PILOTO DIODO EMISOR DE LUZ DE 5 mm COLOR ROJO 1.13 U HEDS-5540 A06 CODIFICADOR INCREMENTAL EN CUADRATURA DE 2 CANALES Y INDICE, 500 CPR (HASTA 2000 FLANCOS POR VUELTA), DIAMETRO DEL EJE DE ¼ in. 1.14 U MOTOR DE DC DE IMANES PERMANENTES MÁXIMA TENSIÓN DE ARMADURA 24 V, TENSIÓN MEDIA 15 V, CORRIENTE MÁXIMA 1.6 A, VELOCIDAD SIN CARGA 3540 RPM, RESISTENCIA DE ARMADURA 11.6 Ω, INERCIA 50 gm*cm2, K=0.14 (V*s)/rad 1.15 U ZÓCALO DIP40 ZÓCALO DIP40, PINES TORNEADOS 1.16 U ZÓCALO DIP16 ZÓCALO DIP16 , PINES TORNEADOS 1.17 U PULSADOR PULSADOR PARA PCB (THT) , 4 PINES 1.18 U INTERRUPTOR DESLIZANTE INTERRUPTOR DESLIZANTE, 2 POSICIONES- 3 PINES, PARA PCB (THT) TOTAL CAPÍTULO 1 73,7 € 135 Control de un Sistema de Péndulo Invertido 4.2.2 Capítulo 2: Cables y conectores. Nº 2.1 Ud. U Descripción CONECTOR PICKIT2 Cantidad Precio(€) TOTAL(€) 1 0,603 0,603 1 0,630 0,630 3 0,310 0,930 1 0,665 0,665 1 0,403 0,403 5 0,094 0,470 1 0,630 0,630 1 5,860 5,860 CONECTOR MACHO, DESCUBIERTO, PARA PCB (THT), 5 PINES 2.2 U CONECTOR ICD2 CONECTOR HEMBRA RJ11 PARA PCB (THT) 2.3 U CONECTOR REGLETA 2 PINES PCB CONECTOR HEMBRA DE TIPO REGLETA, DE 2 PINES PARA PCB (THT) 2.4 U CONECTOR MACHO 5 PINES PCB CONECTOR MACHO DE 5 PINES DE TIPO CABLE A PLACA, PARA MONTAJE EN PCB (THT), 2.5 U CARCASA HEMBRA 5 PINES CARCASA DE CONECTOR HEMBRA DE 5 PINES, QUE ACEPTA TERMINALES PARA CRIMPAR 2.6 U TERMINAL CRIMPAR CARCASA HEMBRA TERMINAL PARA CRIMPAR PARA CARCASA HEMBRA 2.7 M CABLE TELEFÓNICO 8 VIAS 28 AWG CABLE MODULAR DE 8 VIAS, CALIBRE 28 AWG 2.8 U CONECTOR HEDS-5540 A06 CONJUNTO CONECTOR-CABLE PARA HEDS5540 A06, 5 PINES. TOTAL CAPÍTULO 2 10,20 € 136 Control de un Sistema de Péndulo Invertido 4.2.3 Capítulo 3: Elementos mecánicos de la maqueta. Nº 3.1 Ud. U Descripción BARRA MAC AC SUP LIS 12X400mm Cantidad Precio(€) TOTAL(€) 1 4,020 4,020 1 3,950 3,950 1 3,950 3,950 1 17,500 17,500 1 2,350 2,350 4 0,800 3,200 1 2,990 2,990 1 2,850 2,850 BARRA MACIZA DE ACERO, SUPERFICIE LISA, DE 12X400mm 3.2 U MELANINA BLANCA 80X40X10mm TABLERO DE MELANINA BLANCA DE 80X40X10 mm. 3.3 U CANTO PREENCOLADO BLANCO LISO CANTO PREENCOLADO DE COLOR BLANCO LISO PARA MADERA AGLOMERADA DE 5000X10 mm 3.4 U TUBO,CUAD,AL,40X40X1000X2mm TUBO CUADRADO HUECO DE ALUMINIO DE 40X40X1000X2 mm 3.5 U TUBO.CIL,AL,6X1X1000mm TUBO CILINDINDRICO HUECO DE ALUMINIO DE 6X1X100 mm 3.6 U ESCUADRA SILLA 80X40X30X2mm ESCUADRA DE SILLA, DE ACERO GALVANIZADO DE 80X40X30X2 mm 3.7 U TORNILLO NIVELADOR M10,4U TORNILLO NIVELADOR DE M10 ,4 UNIDADES 3.8 U MANGUITO PARA ATORNILLAR M10, 4U MANGUITOS PARA INTRODUCIR UN TORNILLO EN MADERA DE M10, 4 UNIDADES 137 Control de un Sistema de Péndulo Invertido Nº 3.9 Ud. U Descripción TORNILLO TIRAFONDO 3X15mm Cantidad Precio(€) TOTAL(€) 12 0,020 0,240 4 0,040 0,160 6 0,050 0,300 TORNILLO TIRAFONDO PARA MADERA DE 3X15 mm 3.10 U TORNILLO ROSCA CIL, 3X10mm TORNILLO DE ROSCA CILINDRICA DE 3X10 mm 3.11 U ARANDELA 28X10X3mm ARANDELA DE 28X10X3 mm. TOTAL CAPÍTULO 3 41,51 € 138 Control de un Sistema de Péndulo Invertido 4.2.4 Capítulo 4: Placas de circuito impreso. Nº 4.1 Ud. U Descripción Cantidad Precio(€) TOTAL(€) PLACA CIRCUITO IMPRESO 1 8,040 8,040 4 0,330 1,320 6 0,010 0,060 PLACA PARA FABRICACION DE PCB DE DOBLE CARA,FOTORESINA POSITIVA, FR4, DE 160X100X1.6 mm 4.2 U TORNILLOS PCB TORNILLO SEPARADOR DE ACERO PARA PCB DE M3X20 mm. 4.3 U TUERCA HEX,M3 TUERCA HEXAGONAL DE M3 TOTAL CAPÍTULO 4 9,42 € 139 Control de un Sistema de Péndulo Invertido 4.3 Resumen del presupuesto Capítulo 1 Componentes electrónicos 2 Cables y conectores. 3 Elementos mecánicos de la maqueta. 4 Placas de circuito impreso. Presupuesto de ejecución material Importe ……………………………………………………. 73,70 € ……………………………………………………. 10,20 € ……………………………………………………. 41,51 € ……………………………………………………. 9,42 € 134,83 € 13% de gastos generales 6% de beneficio industrial Presupuesto de ejecución por contrato 17,53 € 8,01 € 160,37 € 16% IVA Presupuesto de licitación 25,66 € 186,03 € El presupuesto de licitación sube a la cantidad de CIENTO OCHENTA Y SEIS EUROS CON 3 CÉNTIMOS. 24 de Febrero de 2012 Ingeniero Técnico Industrial Joan Marc Berga Cabello 140