Implementación Hardware de un Sistema de Control Digital

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