implementación hardware de un sistema de control...

140
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

Upload: votuyen

Post on 19-Sep-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

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

2

Í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

Control de un Sistema de Péndulo Invertido

3

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

Control de un Sistema de Péndulo Invertido

4

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

1. MEMORIA

Control de un Sistema de Péndulo Invertido

6

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.

Control de un Sistema de Péndulo Invertido

7

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.

Control de un Sistema de Péndulo Invertido

8

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.

Control de un Sistema de Péndulo Invertido

9

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 carro-pendulo 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

Control de un Sistema de Péndulo Invertido

10

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

𝑑𝑑𝑡𝑡2 (𝑥𝑥 + 𝑙𝑙 sin𝜃𝜃) = 𝐻𝐻

(6.2)

El movimiento vertical del centro de gravedad de la barra del péndulo es

𝑚𝑚𝑑𝑑2

𝑑𝑑𝑡𝑡2 (𝑙𝑙 cos𝜃𝜃) = 𝑉𝑉 −𝑚𝑚𝑚𝑚

(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)

Control de un Sistema de Péndulo Invertido

11

𝑚𝑚𝑥 + 𝑙𝑙𝜃 = 𝐻𝐻

(6.6) 0 = 𝑉𝑉 − 𝑚𝑚𝑚𝑚

(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)

Control de un Sistema de Péndulo Invertido

12

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.

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)

Figura 6-2. Circuito equivalente del motor DC

Control de un Sistema de Péndulo Invertido

13

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𝜃𝜃(𝑠𝑠) =𝐾𝐾𝑅𝑅𝑉𝑉𝑟𝑟 𝑉𝑉(𝑠𝑠) −

𝐾𝐾2

𝑅𝑅𝑉𝑉𝑟𝑟2 𝑠𝑠𝑋𝑋(𝑠𝑠)

(6.19)

𝑚𝑚𝑙𝑙2𝑠𝑠2𝜃𝜃(𝑠𝑠) + 𝑚𝑚𝑙𝑙𝑠𝑠2𝑋𝑋(𝑠𝑠) = 𝑚𝑚𝑚𝑚𝑙𝑙𝜃𝜃(𝑠𝑠)

(6.20)

Control de un Sistema de Péndulo Invertido

14

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 +𝐾𝐾2𝑚𝑚𝑅𝑅𝑉𝑉𝑟𝑟2𝑠𝑠 −

𝐾𝐾2𝑙𝑙𝑅𝑅𝑉𝑉𝑟𝑟2 𝑠𝑠 + 𝑚𝑚𝑙𝑙𝑠𝑠2 𝜃𝜃(𝑠𝑠) =

𝐾𝐾𝑅𝑅𝑉𝑉𝑟𝑟𝑉𝑉(𝑠𝑠)

−𝑀𝑀𝑙𝑙𝑠𝑠3 −𝐾𝐾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

Control de un Sistema de Péndulo Invertido

15

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).

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).

Figura 6-3. LGR de la planta compuesta por el péndulo

Control de un Sistema de Péndulo Invertido

16

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)

Figura 6-4. LGR de la planta sin el motor (invirtiendo la realimentación

Control de un Sistema de Péndulo Invertido

17

Sustituyendo valores, se obtiene

𝐻𝐻(𝑠𝑠) =−2.8𝑠𝑠

0.01855𝑠𝑠3 + 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𝑠𝑠𝑠𝑠2 − (6.272) ;

(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 − 𝑇𝑇−𝑇𝑇𝑠𝑠

𝑠𝑠 ;

Control de un Sistema de Péndulo Invertido

18

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

−150.94(𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) =

12.05𝑠𝑠 + 6.26−

12.05𝑠𝑠 − 6.27

y se transforma al dominio z mediante tablas

𝑍𝑍 −150.94

(𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27) =12.05

1 − 𝑇𝑇−6.26𝑇𝑇𝑧𝑧−1 −12.05

1 − 𝑇𝑇6.27𝑇𝑇𝑧𝑧−1

=12.05

1 − 𝑇𝑇−0.1252 𝑧𝑧−1 −12.05

1 − 𝑇𝑇0.1254 𝑧𝑧−1

(6.29)

Control de un Sistema de Péndulo Invertido

19

Sustituyendo (6.29) en (6.28) se tiene

𝐻𝐻(𝑧𝑧) = (1− 𝑧𝑧−1 ) 12.05

1 − 𝑇𝑇−0.125𝑧𝑧−1 −12.05

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)

Control de un Sistema de Péndulo Invertido

20

A continuación, se retoma la función de transferencia 𝐻𝐻(𝑠𝑠):

𝐻𝐻(𝑠𝑠) ≈−150.94𝑠𝑠𝑠𝑠2 − (6.272)

(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)−150.94

(𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27)𝑇𝑇𝑚𝑚𝑇𝑇𝑠𝑠 𝑧𝑧𝑧𝑧 − 𝑇𝑇𝑇𝑇𝑠𝑠

+𝑧𝑧−1(1− z−1) lim𝑠𝑠→6.27

(𝑠𝑠 − 6.27)−150.94

(𝑠𝑠 + 6.26)(𝑠𝑠 − 6.27)𝑇𝑇𝑚𝑚𝑇𝑇𝑠𝑠 𝑧𝑧𝑧𝑧 − 𝑇𝑇𝑇𝑇𝑠𝑠

= 𝑧𝑧−1(1 − z−1) 150.9412.53

e−6.26mT zz − e−6.26T −

150.9412.53

e6.27mT zz − e6.27T

Considerando 𝑇𝑇 = 20 𝑚𝑚𝑠𝑠 (véase apartado 1.6.3.1)

= 𝑧𝑧−1(1− z−1) 12.05e−0.125m z

z − 𝑇𝑇−0.125 −12.05e0.125m z

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𝑚𝑚→0

𝐻𝐻(𝑧𝑧,𝑚𝑚) = (1 − 𝑧𝑧−1 ) 12.05

1 − 𝑇𝑇−0.125𝑧𝑧−1 −12.05

1− 𝑇𝑇0.125𝑧𝑧−1

Control de un Sistema de Péndulo Invertido

21

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 𝑥;

(6.33)

𝑥 =𝐾𝐾

𝑀𝑀𝑅𝑅𝑉𝑉𝑟𝑟𝑉𝑉𝑉𝑉 −

𝐾𝐾2

𝑀𝑀𝑅𝑅𝑉𝑉𝑟𝑟2 𝑥 −𝑚𝑚𝑚𝑚𝑀𝑀

𝜃𝜃

(6.34)

Control de un Sistema de Péndulo Invertido

22

Sean las variables de estado x1, x2, x3 y 𝑥𝑥4 siguientes:

x1 = θ x2 = θ x3 = x x4 = x

Sea la entrada del sistema

𝑢𝑢 = 𝑉𝑉𝑉𝑉

se obtiene

𝑥𝑥1 = 𝑥𝑥2

𝑥𝑥2 =(𝑀𝑀 + 𝑚𝑚)𝑚𝑚

𝑀𝑀𝑙𝑙 𝑥𝑥1 +𝐾𝐾2

𝑀𝑀𝑙𝑙𝑅𝑅𝑉𝑉𝑟𝑟2 𝑥𝑥4 −𝐾𝐾

𝑀𝑀𝑙𝑙𝑅𝑅𝑉𝑉𝑟𝑟 𝑢𝑢

𝑥𝑥3 = 𝑥𝑥4

𝑥𝑥4 = −𝑚𝑚𝑚𝑚𝑀𝑀 𝑥𝑥4 −

𝐾𝐾2

𝑀𝑀𝑅𝑅𝑉𝑉𝑟𝑟2 𝑥𝑥4 +𝐾𝐾

𝑀𝑀𝑅𝑅𝑉𝑉𝑟𝑟 𝑢𝑢

Con esto, se puede hacer la siguiente representación del sistema en el espacio de estados:

𝑥 = 𝐴𝐴𝑥𝑥 + 𝐵𝐵𝑢𝑢

(6.35)

donde

𝑥𝑥 =

𝑥𝑥1𝑥𝑥2𝑥𝑥3𝑥𝑥4

, 𝐴𝐴 =

⎣⎢⎢⎢⎢⎡

0 1 0 0(𝑀𝑀 + 𝑚𝑚)𝑚𝑚

𝑀𝑀𝑙𝑙 0 0𝐾𝐾2

𝑀𝑀𝑙𝑙𝑅𝑅𝑉𝑉𝑟𝑟2

0 0 0 1

−𝑚𝑚𝑚𝑚𝑀𝑀 0 0 −

𝐾𝐾2

𝑀𝑀𝑅𝑅𝑉𝑉𝑟𝑟2⎦⎥⎥⎥⎥⎤

, 𝐵𝐵 =

⎣⎢⎢⎢⎢⎡

0

−𝐾𝐾

𝑀𝑀𝑙𝑙𝑅𝑅𝑉𝑉𝑟𝑟0𝐾𝐾

𝑀𝑀𝑅𝑅𝑉𝑉𝑟𝑟 ⎦⎥⎥⎥⎥⎤

Control de un Sistema de Péndulo Invertido

23

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

𝑥𝑥1𝑥𝑥2𝑥𝑥3𝑥𝑥4

=

⎣⎢⎢⎢⎡

0 1 0 051.82 0 0 4226.41

0 0 0 1−3.15 0 0 −1056.6⎦

⎥⎥⎥⎤

_𝑥𝑥1𝑥𝑥2𝑥𝑥3𝑥𝑥4

+

0−150.94

037.73

𝑢𝑢

(6.37)

Control de un Sistema de Péndulo Invertido

24

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:

Considerando 𝑇𝑇 = 20 𝑚𝑚𝑠𝑠 (véase el apartado 1.6.3.1), se obtiene

𝐺𝐺(0.02) =

⎣⎢⎢⎢⎡

1.0081 0.0201 0 0.07640.7981 1.0081 0 4.0294−0.0001 0 1 0.0009−0.0030 −0.0001 0 −0.0002⎦

⎥⎥⎥⎤

(6.38)

𝐻𝐻(0.02) =

−0.0027−0.14390.00070.0357

(6.39)

𝐺𝐺 = 𝑇𝑇𝑥𝑥𝑝𝑝𝑚𝑚(𝐴𝐴 ∗ 𝑇𝑇) : 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.

Control de un Sistema de Péndulo Invertido

25

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.

Control de un Sistema de Péndulo Invertido

26

Mediante la función de MATLAB rootlocus se ha obtenido la gráfica del LGR de 𝐻𝐻(𝑧𝑧):

Figura 7-2. LGR de H(z)

Figura 7-1. Sistema regulador y planta

θ(kT)

T

Controlador digital

ZOH Planta

u(kT) θ(kT)

H(z) Gc(z)

Control de un Sistema de Péndulo Invertido

27

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.

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.

Figura 7-3. Compensación con integrador puro

Control de un Sistema de Péndulo Invertido

28

Finalmente, se introduce un cero en el semiplano izquierdo, arrastrando los polos complejos conjugados hacia este. 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

Figura 7-4. Planta estabilizada

Control de un Sistema de Péndulo Invertido

29

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

𝑇𝑇𝑠𝑠 =4

ln 𝑟𝑟

Entonces

𝑇𝑇𝑠𝑠 ≤ 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

𝑆𝑆𝑃𝑃 = 𝑇𝑇− 𝜋𝜋𝜋𝜋1−𝜋𝜋2 => 𝜋𝜋 ≥ 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

Control de un Sistema de Péndulo Invertido

30

simbólica, para representar una posible solución que entrara en los límites establecidos. 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

Figura 7-5. Contorno de 𝜋𝜋 ≥ 0.5

Control de un Sistema de Péndulo Invertido

31

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.

Control de un Sistema de Péndulo Invertido

32

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

0.6 ∗ 0.4 ≈ 16.67 rad/s

𝑧𝑧 = 𝑇𝑇−𝜋𝜋𝜉𝜉𝑛𝑛±𝑤𝑤𝑛𝑛1−𝜋𝜋2 => 𝑧𝑧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𝑧𝑧2 − 2.016𝑧𝑧 + 1 =

−3.027(𝑧𝑧 − 1)(𝑧𝑧 − 0.88)(𝑧𝑧 − 1.13)

Entonces, la ecuación característica es

1 + 𝑇𝑇(𝑧𝑧) = 1 + 𝐺𝐺𝐶𝐶1(𝑧𝑧)𝐻𝐻(𝑧𝑧) = 1 +−3.027𝐾𝐾(𝑧𝑧 − 𝑉𝑉)

(𝑧𝑧 − 0.88)(𝑧𝑧 − 1.13) = 0

(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)

Control de un Sistema de Péndulo Invertido

33

arg(𝑧𝑧 − 𝑉𝑉) − 180− tg−1 0.2160.09 − 180− tg−1

0.2160.34

𝑧𝑧=0.79±0.216𝑗𝑗

= −180

arg(𝑧𝑧 − 𝑉𝑉) − 260.19 = −180 => arg(𝑧𝑧 − 𝑉𝑉) = 80.19

𝑡𝑡𝑚𝑚−1 0.216

0.79− 𝑉𝑉 = 80.19 => 𝑉𝑉 ≈ 0.753

Condición de módulo:

3.027𝐾𝐾 |𝑧𝑧 − 0.753|

|(𝑧𝑧 − 0.88)|(𝑧𝑧 − 1.13)|𝑧𝑧=0.79±0.216𝑗𝑗

= 1

(7.9)

𝐾𝐾 = |(𝑧𝑧 − 0.88)|(𝑧𝑧 − 1.13)|3.027|𝑧𝑧 − 0.753|

𝑧𝑧=0.79±0.216𝑗𝑗= 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𝑧𝑧→1

0.142(𝑧𝑧 − 0.753) | = 0.035

(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(𝑧𝑧) =0.142(𝑧𝑧 − 0.753)

𝑧𝑧 − 1𝑧𝑧 − 𝑉𝑉𝑧𝑧 − 𝑖𝑖

donde se debe de cumplir

lim𝑧𝑧→1

𝑧𝑧 − 𝑉𝑉𝑧𝑧 − 𝑖𝑖 = 10

Control de un Sistema de Péndulo Invertido

34

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(𝑧𝑧)

Control de un Sistema de Péndulo Invertido

35

En la Figura 7-6, se puede observar como la localización de los polos es bastante cercana a la calculada. Se tiene

𝑧𝑧1,2 𝑟𝑟𝑇𝑇𝑉𝑉𝑙𝑙 = 0.793 ± 0.218𝑗𝑗 y la localización teórica era

𝑧𝑧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.

Figura 7-7. Respuesta a 𝑢𝑢(𝑘𝑘𝑇𝑇) de 𝐺𝐺𝐶𝐶1(𝑧𝑧)

Control de un Sistema de Péndulo Invertido

36

Como se observa, se tiene un LGR parecido al de la Figura 7-6. Ahora los polos son

𝑧𝑧1,2 𝑟𝑟𝑇𝑇𝑉𝑉𝑙𝑙 = 0.84 ± 0.273𝑗𝑗 y

𝜋𝜋 ≈ 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)

Figura 7-8. LGR de 𝐺𝐺𝐶𝐶2(𝑧𝑧)

Control de un Sistema de Péndulo Invertido

37

a la vez que aumenta la frecuencia natural, haciendo la respuesta un poco más rápida

Figura 7-9. LGR de 𝐺𝐺𝐶𝐶2′(𝑧𝑧)

Figura 7-10. Respuesta a 𝑢𝑢(𝑘𝑘𝑇𝑇) de 𝐺𝐺𝐶𝐶2′(𝑧𝑧)

Control de un Sistema de Péndulo Invertido

38

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 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-11. Respuestas a 𝑢𝑢(𝑘𝑘𝑇𝑇) de 𝐺𝐺𝐶𝐶1(𝑧𝑧) y 𝐺𝐺𝐶𝐶2′(𝑧𝑧)

Figura 7-12. Transformada z modificada (Extraído de [2])

Control de un Sistema de Péndulo Invertido

39

Retomemos la ecuación de la planta con retardo de transporte, obtenida en el apartado 1.6.3.2.

𝐻𝐻(𝑧𝑧,𝑚𝑚) = 𝑧𝑧−1(1− z−1) 12.05e−0.125m z

z − 𝑇𝑇−0.125 −12.05e0.125m z

z − 𝑇𝑇0.125 ;

(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

Control de un Sistema de Péndulo Invertido

40

𝑚𝑚 = 0.9 => tiempo de retardo= 2 ms, polos dominantes: 𝑧𝑧1,2 = 0.790 ± 0.226𝑗𝑗 𝑚𝑚 = 0.8 => tiempo de retardo= 4 ms, polos dominantes: 𝑧𝑧1,2 = 0.788 ± 0.235𝑗𝑗

Figura 7-14. Simulación de 𝐺𝐺𝐶𝐶1(𝑧𝑧) con tiempo de retardo de 2 ms

Figura 7-15. Simulación de 𝐺𝐺𝐶𝐶1(𝑧𝑧) con tiempo de retardo de 4 ms

Control de un Sistema de Péndulo Invertido

41

𝑚𝑚 = 0.5 => tiempo de retardo= 10 ms, polos dominantes: 𝑧𝑧1,2 = 0.783 ± 0.266𝑗𝑗 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.

Figura 7-16. Simulación de 𝐺𝐺𝐶𝐶1(𝑧𝑧) con tiempo de retardo de 10 ms

Control de un Sistema de Péndulo Invertido

42

Controlador de segundo orden 𝐺𝐺𝐶𝐶2’(𝑧𝑧) 𝑚𝑚 = 1 => tiempo de retardo= 0 s, polos dominantes: 𝑧𝑧1,2 = 0.696 ± 0.279𝑗𝑗 𝑚𝑚 = 0.9 => tiempo de retardo= 2 ms, polos dominantes: 𝑧𝑧1,2 = 0.685 ± 0.297𝑗𝑗

Figura 7-17. Simulación de 𝐺𝐺𝐶𝐶2’(𝑧𝑧) con tiempo de retardo nulo

Figura 7-18. Simulación de 𝐺𝐺𝐶𝐶2’(𝑧𝑧) con tiempo de retardo de 2 ms

Control de un Sistema de Péndulo Invertido

43

𝑚𝑚 = 0.85 => tiempo de retardo= 3 ms, polos dominantes: 𝑧𝑧1,2 = 0.678 ± 0.308𝑗𝑗 𝑚𝑚 = 0.5 => tiempo de retardo=10 ms, polos dominantes: 𝑧𝑧1,2 = 0.658 ± 0.429𝑗𝑗

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:

Figura 7-19. Simulación de 𝐺𝐺𝐶𝐶2’(𝑧𝑧) con tiempo de retardo de 3 ms

Figura 7-20. Simulación de 𝐺𝐺𝐶𝐶2’(𝑧𝑧) con tiempo de retardo de 10 ms

Control de un Sistema de Péndulo Invertido

44

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.

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)

Figura 7-21. Sistema de control con realimentación de estado

Control de un Sistema de Péndulo Invertido

45

A continuación, se retoman las matrices que describen el sistema en el espacio de estados:

𝐺𝐺 =

⎣⎢⎢⎢⎡

1.0081 0.0201 0 0.07640.7981 1.0081 0 4.0294−0.0001 0 1 0.0009−0.0030 −0.0001 0 −0.0002⎦

⎥⎥⎥⎤

(7.14)

𝐻𝐻 =

−0.0027−0.14390.00070.0357

(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𝐻𝐻]

Control de un Sistema de Péndulo Invertido

46

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.0029 −0.0030 −0.0031−0.1439 −0.0033 −0.0056 −0.00800.0007 0.0007 0.0007 0.00070.0357 0 0 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 𝜃𝜃. Para construir la matriz de observabilidad, se debe de especificar la salida del sistema

Figura 7-22. Sistema de control con realimentación de estado observado

Control de un Sistema de Péndulo Invertido

47

𝑌𝑌(𝐾𝐾𝑇𝑇) = 𝐶𝐶𝑥𝑥(𝐾𝐾𝑇𝑇) + 𝐷𝐷𝑢𝑢(𝐾𝐾𝑇𝑇)

(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 0 0 01.0080 0.0200 0 0.07641.0319 0.0404 0 0.15781.0721 0.0614 0 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.

Control de un Sistema de Péndulo Invertido

48

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

𝐾𝐾 = [0 0 ⋯0 1][𝐻𝐻 ⋮ 𝐺𝐺𝐻𝐻 ⋮ ⋯ ⋮ 𝐺𝐺𝑛𝑛−1𝐻𝐻]−1𝜙𝜙(𝐺𝐺)

donde

𝜙𝜙(𝐺𝐺) = 𝐺𝐺𝑛𝑛 + 𝛼𝛼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]

Control de un Sistema de Péndulo Invertido

49

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

Control de un Sistema de Péndulo Invertido

50

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

Control de un Sistema de Péndulo Invertido

51

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: 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

Figura 8-2. Familias de microcontroladores de Microchip

Control de un Sistema de Péndulo Invertido

52

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

Control de un Sistema de Péndulo Invertido

53

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.

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-4. Familias dsPIC30F y dsPIC33F/E de Microchip

Figura 8-5. Microcontroladores de la familia dsPIC30F orientados al control de motores

Control de un Sistema de Péndulo Invertido

54

1.8.1.1.2 La familia dsPIC30F

Sin entrar demasiado en la arquitectura, a continuación se exponen algunas de sus características más relevantes:

-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.

Control de un Sistema de Péndulo Invertido

55

Figura 8-6. Estructura del dsPIC30F4011

Control de un Sistema de Péndulo Invertido

56

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 8-11, 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

Control de un Sistema de Péndulo Invertido

57

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).

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.

Figura 8-7. Diagrama del QEI

Control de un Sistema de Péndulo Invertido

58

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.

Control de un Sistema de Péndulo Invertido

59

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).

Control de un Sistema de Péndulo Invertido

60

Figura 8-8. Registros del QEI

Control de un Sistema de Péndulo Invertido

61

Figura 8-9. Registro QEICON bits 15 a 3

Control de un Sistema de Péndulo Invertido

62

Figura 8-10. Registro QEICON bits 2 a 0

Figura 8-11. Registro DFLTCON

Control de un Sistema de Péndulo Invertido

63

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 realizar diversos PWM sincronizados que permiten realizar tareas como:

-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.

Control de un Sistema de Péndulo Invertido

64

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)𝑃𝑃𝑇𝑇𝑀𝑀𝑅𝑅 𝑃𝑃𝑟𝑟𝑇𝑇𝑠𝑠𝑐𝑐𝑉𝑉𝑙𝑙𝑇𝑇 𝑉𝑉𝑉𝑉𝑙𝑙𝑢𝑢𝑇𝑇

Control de un Sistema de Péndulo Invertido

65

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.

Figura 8-12. Diagrama del módulo PWM

Control de un Sistema de Péndulo Invertido

66

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,

Figura 8-13. Modos de funcionamiento del módulo PWM

Control de un Sistema de Péndulo Invertido

67

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).

Control de un Sistema de Péndulo Invertido

68

Figura 8-14. Registros del módulo PWM

Control de un Sistema de Péndulo Invertido

69

Figura 8-15. Registro PTCON

Figura 8-16. Registro PWMCON1

Control de un Sistema de Péndulo Invertido

70

Figura 8-17. Registro PWMCON2

Control de un Sistema de Péndulo Invertido

71

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:

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.

max voltage: 24V medium voltage: 15V max current: 1.6A no load current: 0.1A no load speed: 3540 rpm starting voltage 3V resistance 11.6 ohms volts at 1000 rev: 6.4V inertia 50 (gm.cm2 ) moment on the shaft 6.08 N*cm/A max moment 9.4 N*cm

Figura 8-19. Configuraciones del L293DNE

Figura 8-18. Características del motor de DC

Control de un Sistema de Péndulo Invertido

72

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).

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 …

Figura 8-20. Señales en cuadratura del encoder

Control de un Sistema de Péndulo Invertido

73

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°

2000 𝑓𝑓𝑙𝑙𝑉𝑉𝑛𝑛𝑐𝑐𝑟𝑟 = 0,18 °/𝑓𝑓𝑙𝑙𝑉𝑉𝑛𝑛𝑐𝑐𝑟𝑟

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

Control de un Sistema de Péndulo Invertido

74

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)

Control de un Sistema de Péndulo Invertido

75

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

Control de un Sistema de Péndulo Invertido

76

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√𝑉𝑉23 ≅ 2,58 A 0F

1

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.

1 Fórmula extraída de TECNOLOGIA DE CIRCUITS IMPRESOS de Eduard Selma i Bargallo, 5a edición, p.7.35.

Figura 8-24. Organización de la PCB

Control de un Sistema de Péndulo Invertido

77

Figura 8-26. Acabado de la PCB: Cara BOTTOM

Figura 8-25. Acabado de la PCB: Cara TOP

Control de un Sistema de Péndulo Invertido

78

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”.

Control de un Sistema de Péndulo Invertido

79

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.

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.

Figura 8-28. Planta del “carro”.

Control de un Sistema de Péndulo Invertido

80

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-29. Perfil del soporte.

Figura 8-30. Maqueta.

Control de un Sistema de Péndulo Invertido

81

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.

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

Figura 9-1. Esquema del hardware

Control de un Sistema de Péndulo Invertido

82

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.

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:

Análogamente, a continuación se describe la inicialización de 𝑖𝑖𝑇𝑇𝑟𝑟𝑐𝑐2:

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);

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.

MATCH_INDEX_PHASEA_LOW& MATCH_INDEX_PHASEB_LOW (QEICON10,9=00): Estado del canal A y B cuando ocurre el pulso del índice. POS_CNT_ERR_INT_DISABLE (DFLTCON8=1): Se deshabilitan las interrupciones del QEI QEI_QE_CLK_DIVIDE_1_1 (DFLTCON6-4=000): Se selecciona el divisor de reloj para el filtro del QEi QEI_QE_OUT_ENABLE (DFLTCON7=1) : Se habilitan filtros de ruido para las entradas del QEI

Figura 9-2. Extracto del código fuente, referente a la configuración del QEI

Figura 9-3. Mascaras para configurar el registro QEICON

Figura 9-4. Mascaras para configurar el registro DFLTCON

Control de un Sistema de Péndulo Invertido

83

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.

(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

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.

Control de un Sistema de Péndulo Invertido

84

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:

La variable 𝑐𝑐𝑟𝑟𝑛𝑛𝑓𝑓𝑟𝑟𝑚𝑚2, inicializa el registro PWMCON1:

La variable 𝑐𝑐𝑟𝑟𝑛𝑛𝑓𝑓𝑟𝑟𝑚𝑚 3 configura el registro PWMCON2:

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().

PWM_EN (PTCON15=1): Habilitamos la base de tiempo del módulo PWM. PWM_OP_SCALE1 (PTCON7-4=0000): Damos un valor al postscaler de PTMR de 1:1. PWM_IPCLK_SCALE1 (PTCON3,2=00): Damos un valor al prescaler de PTMR de 1:1. PWM_MOD_FREE (PTCON1,2=00): Seleccionamos el modo free-running

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.

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-6. Mascaras para configurar el registro PTCON

Figura 9-7. Mascaras para configurar el registro PWMCON1

Figura 9-8. Mascaras para configurar el registro PWMCON1

Control de un Sistema de Péndulo Invertido

85

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

Control de un Sistema de Péndulo Invertido

86

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.

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.

Figura 9-10. Sentido establecido del ángulo del péndulo en relación con el encoder

Control de un Sistema de Péndulo Invertido

87

Figura 9-11. Diagrama de la función pos0ready

POSCNT=0

Giramos el péndulo en sentido horario

¿POSCNT!=0?

Giramos el péndulo en sentido horario

¿POSCNT=0?

Giramos el péndulo en sentido horario

¿(POSCNT+dindx)=0?

Pos 0

No

Si

No

Si (ocurre indx)

No

Si

Control de un Sistema de Péndulo Invertido

88

Veamos el código de 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:

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

Figura 9-12. Función pos0ready

Control de un Sistema de Péndulo Invertido

89

Figura 9-13. Diagrama del programa principal

Inicio

Inicializaciones

pos0ready

pend_position

U=Algoritmo de control

U>Valor Max U= Valor Max

U<Valor Max U=-Valor Max

¿U positiva?

PWM + PWM-

Guardamos valores para el algoritmo de

control

Bucle de espera

Si

Si

Si

No

No

No

Control de un Sistema de Péndulo Invertido

90

Para aplicar el ciclo de trabajo, se ha usado una subrutina de pwm.h

A continuación, se añade un trozo del código del programa principal, referente a la modificación del ciclo de trabajo:

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,

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).

void SetDCMCPWM (unsigned int numero_registro_DC, unsigned int valor_DC,0);

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);

void __delay32(unsigned long cycles)

Figura 9-14.

Figura 9-15.

Figura 9-16.

Control de un Sistema de Péndulo Invertido

91

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

Control de un Sistema de Péndulo Invertido

92

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”.

2. ANEXOS

Control de un Sistema de Péndulo Invertido

94

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);

Control de un Sistema de Péndulo Invertido

95

La transformada z modificada: Simulación de la adición de un retraso de transporte

%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)

%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

Control de un Sistema de Péndulo Invertido

96

%---------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(num1,1,den1,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(z1,1,p1,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)

Control de un Sistema de Péndulo Invertido

97

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);

Control de un Sistema de Péndulo Invertido

98

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); //20 MIPS con cristal de 10MHz fail-safe clock monitor off _FWDT(WDT_OFF) //wdt off _FBORPOR(PBOR_OFF & MCLR_EN); //BOR off i funcion MCLR habilitada _FGS(CODE_PROT_OFF); //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

Control de un Sistema de Péndulo Invertido

99

//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);

Control de un Sistema de Péndulo Invertido

100

/* 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; //posición angular del péndulo double dindx=-9.37; //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;

Control de un Sistema de Péndulo Invertido

101

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.

//////////////////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);

Control de un Sistema de Péndulo Invertido

102

/*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); //20 MIPS con cristal de 10MHz fail-safe clock monitor off _FWDT(WDT_OFF) //wdt off _FBORPOR(PBOR_OFF & MCLR_EN); //BOR off i funcion MCLR habilitada _FGS(CODE_PROT_OFF); //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

Control de un Sistema de Péndulo Invertido

103

/* 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;

Control de un Sistema de Péndulo Invertido

104

/*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);

Control de un Sistema de Péndulo Invertido

105

/*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

Control de un Sistema de Péndulo Invertido

106

int main (void) double grados=0.0; //Posición angular del péndulo double dindx=-10.5; //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);

Control de un Sistema de Péndulo Invertido

107

////////////////////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);

Control de un Sistema de Péndulo Invertido

108

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.

Control de un Sistema de Péndulo Invertido

109

2.4.2 Creando un proyecto en MPLAB

Para crear un proyecto en MPLAB, se deben seguir los siguientes pasos:

1. Una vez abierto MPLAB, seleccionamos Project => Project Wizard. 2. Seleccionamos el dsPIC30F4011. 3. Seleccionamos Microchip C30 Toolsuite. 4. 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

Control de un Sistema de Péndulo Invertido

110

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)

Figura 1. Diagrama del sistema

Control de un Sistema de Péndulo Invertido

111

Las variables usadas en (1), (2) y (3) són las siguientes:

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.

(Se consideraron los sentidos de 𝜃𝜃 y 𝑢𝑢 que aparecen en la Figura 2, como sentidos positivos)

Figura 2. Diagrama de cuerpo libre de la planta

M masa del carro (Kg) m masa del péndulo (Kg) l mitad de la longitud del péndulo (m) u fuerza aplicada al carro (N) K constante del motor ((V*s)/rad) Ra resistencia de armadura del motor (Ω) r radio del eje del motor (m) g gravedad terrestre (Kg/(m*s2)) x desplazamiento del carro (m) Va tensión de armadura (V) Θ posición angular del péndulo (º)

Control de un Sistema de Péndulo Invertido

112

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:

Considerar el tiempo de muestreo 𝑇𝑇𝑠𝑠 = 20 𝑚𝑚𝑠𝑠.

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)

Control de un Sistema de Péndulo Invertido

113

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:

𝑇𝑇𝑠𝑠 ≤ 4 𝑠𝑠𝑇𝑇𝑚𝑚 𝜋𝜋 ≥ 0.5

(usar sisotool)

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 ).

Figura 3. Sistema regulador discreto. (en nuestro sistema H(z) es GPM(z))

θ(kT)

T

Controlador digital

ZOH Planta

u(kT) θ(kT)

H(z) Gc(z)

Control de un Sistema de Péndulo Invertido

114

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.

3. PLANOS

Naosh
Sello

Control de un Sistema de Péndulo Invertido

123

3.8 Aspecto de las mascaras de C.I

Situación de los componentes

Mascara de la cara de componentes

Control de un Sistema de Péndulo Invertido

124

Mascara de la cara de soldadura

4. PRESUPUESTO

Control de un Sistema de Péndulo Invertido

126

4.1 Mediciones

4.1.1 Capítulo 1: Componentes electrónicos

Nº Ud. Descripción Subtotal TOTAL 1.1

U

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

Control de un Sistema de Péndulo Invertido

127

Nº Ud. Descripción Subtotal TOTAL 1.8

U

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

Control de un Sistema de Péndulo Invertido

128

Nº Ud. Descripción Subtotal TOTAL 1.16

U

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

Control de un Sistema de Péndulo Invertido

129

4.1.2 Capítulo 2: Cables y conectores.

Nº Ud. Descripción Subtotal TOTAL 2.1

U

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

Control de un Sistema de Péndulo Invertido

130

Nº Ud. Descripción Subtotal TOTAL 2.8

U

CONECTOR HEDS-5540 A06

CONJUNTO CONECTOR-CABLE PARA HEDS-5540 A06, 5 PINES.

1

1

Control de un Sistema de Péndulo Invertido

131

4.1.3 Capítulo3: Elementos mecánicos de la maqueta.

Nº Ud. Descripción Subtotal TOTAL 3.1

U

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

Control de un Sistema de Péndulo Invertido

132

Nº Ud. Descripción Subtotal TOTAL 3.8

U

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

Control de un Sistema de Péndulo Invertido

133

4.1.4 Capítulo 4: Placas de circuito impreso.

Nº Ud. Descripción Subtotal TOTAL 4.1

U

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

Control de un Sistema de Péndulo Invertido

134

4.2 Presupuesto

4.2.1 Capítulo 1: Componentes electrónicos Nº Ud. Descripción Cantidad Precio(€) TOTAL(€)

1.1

U

MICROCONTROLADOR dsPIC30F4011

1

6,010

6,010

MICROCONTROLADOR MODELO dsPIC30F4011, ENCAPSULADO DIP40.

1.2

U

CRISTAL CUARZO 10 MHz

1 0,623 0,623

CRISTAL DE CUARZO DE 10 MHz

1.3

U

L293DNE

1 3,080 3,080

CUATRO DRIVERS DE MEDIO PUENTE H, ENCAPSULADO DIP16

1.4

U

CONDENSADOR 10 µF

1 0,292 0,292

CONDENSADOR ELECTROLÍTICO 10 µF

1.5

U

CONDENSADOR 22 pF

2 0,318 0,636

CONDENSADOR CERÁMICO 22 pF

1.6

U

CONDENSADOR 100 nF 1 0,230 0,230

CONDENSADOR POLIESTER 100 nF

1.7

U

RESISTENCIA 10 kΩ 1 0,027 0,027

RESISTENCIA DE 10 kΩ, ¼ W.

1.8

U

RESISTENCIA 100 Ω 3 0,029 0,087

RESISTENCIA DE 100 Ω, ¼ W.

1.9

U

RESISTENCIA 2,7 kΩ 3 0,019 0,057

RESISTENCIA DE 2,7 kΩ, ¼ W.

1.10

U

RESISTENCIA 560 Ω 1 0,029 0,029

RESISTENCIA DE 560 Ω, ¼ W.

Control de un Sistema de Péndulo Invertido

135

Nº Ud. Descripción Cantidad Precio(€) TOTAL(€) 1.11

U

DIODO SBYV27-50-E3 4 0,486 1,944

DIODO RECTIFICADOR DE RECUPERACIÓN ULTRA RAPIDA, CORRIENTE NOMINAL DE 2 A Y PICOS DE HASTA 50 A.

1.12

U

LED PILOTO

1

0,123 0,123

DIODO EMISOR DE LUZ DE 5 mm COLOR ROJO

1.13

U

HEDS-5540 A06 1 51,420 51,420

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 1 7 7

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 1 0,430 0,430

ZÓCALO DIP40, PINES TORNEADOS

1.16

U

ZÓCALO DIP16 1 0,408 0,480

ZÓCALO DIP16 , PINES TORNEADOS

1.17

U

PULSADOR 1 0,460 0,460

PULSADOR PARA PCB (THT) , 4 PINES

1.18

U

INTERRUPTOR DESLIZANTE 1 0,770 0,770

INTERRUPTOR DESLIZANTE, 2 POSICIONES- 3 PINES, PARA PCB (THT)

TOTAL CAPÍTULO 1 73,7 €

Control de un Sistema de Péndulo Invertido

136

4.2.2 Capítulo 2: Cables y conectores.

Nº Ud. Descripción Cantidad Precio(€) TOTAL(€) 2.1

U

CONECTOR PICKIT2 1 0,603 0,603

CONECTOR MACHO, DESCUBIERTO, PARA PCB (THT), 5 PINES

2.2

U

CONECTOR ICD2 1 0,630 0,630

CONECTOR HEMBRA RJ11 PARA PCB (THT)

2.3

U

CONECTOR REGLETA 2 PINES PCB 3 0,310 0,930

CONECTOR HEMBRA DE TIPO REGLETA, DE 2 PINES PARA PCB (THT)

2.4

U

CONECTOR MACHO 5 PINES PCB 1 0,665 0,665

CONECTOR MACHO DE 5 PINES DE TIPO CABLE A PLACA, PARA MONTAJE EN PCB (THT),

2.5

U

CARCASA HEMBRA 5 PINES 1 0,403 0,403

CARCASA DE CONECTOR HEMBRA DE 5 PINES, QUE ACEPTA TERMINALES PARA CRIMPAR

2.6

U

TERMINAL CRIMPAR CARCASA HEMBRA 5 0,094 0,470

TERMINAL PARA CRIMPAR PARA CARCASA HEMBRA

2.7

M

CABLE TELEFÓNICO 8 VIAS 28 AWG 1 0,630 0,630

CABLE MODULAR DE 8 VIAS, CALIBRE 28 AWG

2.8

U

CONECTOR HEDS-5540 A06 1 5,860 5,860

CONJUNTO CONECTOR-CABLE PARA HEDS-5540 A06, 5 PINES.

TOTAL CAPÍTULO 2 10,20 €

Control de un Sistema de Péndulo Invertido

137

4.2.3 Capítulo 3: Elementos mecánicos de la maqueta.

Nº Ud. Descripción Cantidad Precio(€) TOTAL(€) 3.1

U

BARRA MAC AC SUP LIS 12X400mm 1 4,020 4,020

BARRA MACIZA DE ACERO, SUPERFICIE LISA, DE 12X400mm

3.2

U

MELANINA BLANCA 80X40X10mm 1 3,950 3,950

TABLERO DE MELANINA BLANCA DE 80X40X10 mm.

3.3

U

CANTO PREENCOLADO BLANCO LISO 1 3,950 3,950

CANTO PREENCOLADO DE COLOR BLANCO LISO PARA MADERA AGLOMERADA DE 5000X10 mm

3.4

U

TUBO,CUAD,AL,40X40X1000X2mm 1 17,500 17,500

TUBO CUADRADO HUECO DE ALUMINIO DE 40X40X1000X2 mm

3.5

U

TUBO.CIL,AL,6X1X1000mm 1 2,350 2,350

TUBO CILINDINDRICO HUECO DE ALUMINIO DE 6X1X100 mm

3.6

U

ESCUADRA SILLA 80X40X30X2mm 4 0,800 3,200

ESCUADRA DE SILLA, DE ACERO GALVANIZADO DE 80X40X30X2 mm

3.7

U

TORNILLO NIVELADOR M10,4U 1 2,990 2,990

TORNILLO NIVELADOR DE M10 ,4 UNIDADES

3.8

U

MANGUITO PARA ATORNILLAR M10, 4U 1 2,850 2,850

MANGUITOS PARA INTRODUCIR UN TORNILLO EN MADERA DE M10, 4 UNIDADES

Control de un Sistema de Péndulo Invertido

138

Nº Ud. Descripción Cantidad Precio(€) TOTAL(€) 3.9

U

TORNILLO TIRAFONDO 3X15mm 12 0,020 0,240

TORNILLO TIRAFONDO PARA MADERA DE 3X15 mm

3.10

U

TORNILLO ROSCA CIL, 3X10mm 4 0,040 0,160

TORNILLO DE ROSCA CILINDRICA DE 3X10 mm

3.11

U

ARANDELA 28X10X3mm

6 0,050 0,300

ARANDELA DE 28X10X3 mm.

TOTAL CAPÍTULO 3 41,51 €

Control de un Sistema de Péndulo Invertido

139

4.2.4 Capítulo 4: Placas de circuito impreso.

Nº Ud. Descripción Cantidad Precio(€) TOTAL(€) 4.1

U

PLACA CIRCUITO IMPRESO

1 8,040 8,040

PLACA PARA FABRICACION DE PCB DE DOBLE CARA,FOTORESINA POSITIVA, FR4, DE 160X100X1.6 mm

4.2

U

TORNILLOS PCB 4 0,330 1,320

TORNILLO SEPARADOR DE ACERO PARA PCB DE M3X20 mm.

4.3

U

TUERCA HEX,M3 6 0,010 0,060

TUERCA HEXAGONAL DE M3

TOTAL CAPÍTULO 4 9,42 €

Control de un Sistema de Péndulo Invertido

140

4.3 Resumen del presupuesto

Capítulo Importe

1 Componentes electrónicos ……………………………………………………. 73,70 € 2 Cables y conectores. ……………………………………………………. 10,20 € 3 Elementos mecánicos de la maqueta. ……………………………………………………. 41,51 € 4 Placas de circuito impreso. ……………………………………………………. 9,42 € Presupuesto de ejecución material 134,83 € 13% de gastos generales 17,53 € 6% de beneficio industrial 8,01 € Presupuesto de ejecución por contrato 160,37 € 16% IVA 25,66 € Presupuesto de licitación 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