Trabajo Fin de Grado en Ingeniería Electrónica, Robótica y...

55
Equation Chapter 1 Section 1 Trabajo Fin de Grado en Ingeniería Electrónica, Robótica y Mecatrónica. Adaptación de dispositivo basado en Arduino para pruebas de control por computador Autor: López Martín, Raúl Tutor: Ortega Linares, Manuel Gil Dep. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017

Transcript of Trabajo Fin de Grado en Ingeniería Electrónica, Robótica y...

Equation Chapter 1 Section 1

Trabajo Fin de Grado en Ingeniería Electrónica,

Robótica y Mecatrónica.

Adaptación de dispositivo basado en Arduino para

pruebas de control por computador

Autor: López Martín, Raúl

Tutor: Ortega Linares, Manuel Gil

Dep. Ingeniería de Sistemas y Automática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

iii

Trabajo Fin de Grado

Ingeniería Electrónica, Robótica y Mecatrónica

Adaptación de dispositivo basado en Arduino para

pruebas de control por computador

Autor:

Raúl López Martín

Tutor:

Manuel Gil Ortega Linares

Profesor titular de Universidad

Dep. Ingeniería de Sistemas y Automática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

v

Trabajo Fin de Grado: Adaptación de dispositivo basado en Arduino para pruebas de control por computador

Autor: López Martín, Raúl

Tutor: Ortega Linares, Manuel Gil

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2017

El Secretario del Tribunal

vii

A todas aquellas personas que

confiaron en mí cuando ni yo lo

hacía.

ix

Agradecimientos

En principio quiero agradecerles a mis padres el darme la oportunidad de aprender todo lo que este grado me

ha enseñado, por apoyarme durante estos años y por darme siempre la fuerza para continuar cuando yo no la

encontraba. A mi padre por inculcarme esta curiosidad por el mundo, y a mi madre por enseñarme a batir mis

propias debilidades.

A Manuel Gil por su manera única de enseñar los conocimientos y por tutorarme durante esta última etapa de

mi grado. A todos los profesores que han destacado por su forma de trasmitir pasión y conocimiento durante

toda esta etapa.

Por último quiero agradecer a todas las personas que han aparecido y se han ido durante estos últimos años y

me han convertido en la persona que soy ahora.

Raúl López Martín

Sevilla, 2017

xi

Resumen

Con este proyecto se pretende diseñar un programa robusto y eficiente que permita facilitar el uso del

módulo basado en Arduino, existente en los laboratorios, para que se realicen pruebas de control

digital en los distintos dispositivos disponibles en la Universidad de Sevilla. Al no tener una

aplicación directa prediseñada, se ha planteado un programa general que permita al usuario

inicializar mediante una guía e introducir su propia aplicación, de forma que se puedan realizar las

pruebas de forma sencilla. Con este trabajo se proporciona un código de Arduino sobre el cual se

pueden escribir los distintos controles o experimentos de identificación, y un manual de la conexión

que se debe realizar con el módulo.

xiii

Abstract

The main subject of this project is to design a robust and efficient program that allows using the

device based on Arduino technology so digital control can be tested with it. It´s not made for a

precise action, so the program tries to be the more general as it can. With this project a guide of how

to connect and calibrate the device is provided, also a code with gaps to fill, so different application

can be designed.

Índice

Agradecimientos ix

Resumen xi

Abstract xiii

Índice xiv

Índice de Tablas xv

Índice de Figuras xvi

Notación xvii

1 Introducción 11 1.1 Objetivo 11 1.2 Equipo 12

2 Descripción Hardware 14 2.1 Fuente de alimentación 14 2.2 Arduino Due 15 2.3 TL084C 16 2.4 Potenciómetros 17 2.5 Conexiones al exterior 18

3 Descripción software 20 3.1 LabView 20

3.1.1 Discretización Primer orden con retraso 20 3.1.2 Discretización Predictor de Smith 21 3.1.3 Discretización I-PD antiwind-up 22 3.1.4 Control I-PD antiwindup con predictor de Smith 24

3.2 Matlab 25 3.3 Energía 29

3.3.1 Código de “Identificacion.ino” 29 3.3.2 Conexión a la placa 30

4 Aplicación 34 4.1 Prueba de especificaciones 34 4.2 Calentador PT236 (PID) 36

4.2.1 Preparación del experimento 36 4.2.2 Modelado de los dispositivos 37 4.2.3 Control de los dispositivos 41

5 Conclusiones y trabajos futuros 44

Glosario 46

Anexo 47

xv

ÍNDICE DE TABLAS

Tabla 1 Datos técnicos de Traco Power TMP 15112c 15

Tabla 2 Datos técnicos Arduino Due 16

Tabla 3 Datos técnicos TL084CN 17

Tabla 4 Datos técnicos Potenciómetro Y103 e Y104 18

Tabla 5 Comando del Modo Manual de Arduino 30

ÍNDICE DE FIGURAS

Ilustración 1-1 Dispositivo basado en Arduino 12

Ilustración 2-1 Fuente de alimentación TMP 15112 14

Ilustración 2-2 TL084CN 17

Ilustración 2-3 Potenciómetro Y104 18

Ilustración 3-1 Estructura básica del predictor de Smith 21

Ilustración 3-2 Estructura de LabView para la comprobación del predictor de Smith 21

Ilustración 3-3 Comprobación del predictor de Smith 22

Ilustración 3-4 Estructura de LabView para control I-PD antiwindup 23

Ilustración 3-5 Experimento de regulación y seguimiento del PT236 23

Ilustración 3-6 Estructura de LabView de PID con predictor de Smith 24

Ilustración 3-7 Experimento de regulación y seguimiento del PT236 con predictor de Smith 25

Ilustración 3-8 Simulink para recopilación de datos en Matlab 25

Ilustración 3-9 Configuración “Query Instrument: Hardware configuration” 26

Ilustración 3-10 Configuración “Query Instrument: Query” 26

Ilustración 3-11 Selección de la placa utilizada en Energía IDE 32

Ilustración 3-12 Selección del puerto serie en Energía IDE 33

Ilustración 4-1 Prueba de tiempo mínimo de muestreo Arduino Due 34

Ilustración 4-2 Pruebas de saturación de protección del dispositivo 35

Ilustración 4-3 Esquema del conexionado del dispositivo en funcionamiento 36

Ilustración 4-4 Respuesta a escalón del dispositivo 0 (Identificación) 37

Ilustración 4-5 Respuesta a escalón del dispositivo 1 (Identificación) 38

Ilustración 4-6 Prueba de exactitud del modelo del dispositivo 0 39

Ilustración 4-7 Prueba de exactitud del modelo del dispositivo 1 40

Ilustración 4-8 Respuesta a escalón de la referencia del dispositivo 0 (Control PID) 41

Ilustración 4-9 Respuesta a escalón de la referencia del dispositivo 1 (Control PID) 42

xvii

Notación

DAC Conversión digital-analógica

ADC Conversión analógica-digital

DAQ Tarjeta de adquisición de datos

h Horas

SNR Signal-to-noise ratio

µ

m

k

Micro- (prefijo= 10-6)

Mili- (prefijo= 10-3)

Kilo- (prefijo= 103)

M Mega- (prefijo= 106)

Hz Hercios (Medida de frecuencia)

W Vatios (Medida de potencia)

V Voltios (Medida de tensión eléctrica)

K Kelvin (Medida de temperatura)

LED Diodo de emisión de luz (Light Emission Diode)

GND

Vin

Señal de tierra (Ground)

Señal de entrada

s

z

Variable de la transformada de Laplace

Variable de la transformada Z

1 INTRODUCCIÓN

l departamento de Ingeniería de Sistemas y Automática de la Universidad de Sevilla dispone de

gran cantidad de sistemas a los que es posible realizar algoritmos de control para ellos, tanto

sistemas SISO (del inglés Single Input Single Output), como lo son el calentador PT236 o el

motor de inducción; y sistemas MIMO (del inglés Multiple Input Multiple Output) como son los

sistemas de tanques de agua o la destiladora entre otros; y para el control y el uso de cada uno de

estos sistemas se utilizan distintos dispositivos de adquisición de datos y de procesamiento de estos,

normalmente con las tarjetas de adquisición de datos de National Instrument y el programa LabView

en los ordenadores disponibles en los laboratorios, con las restricciones que esto conlleva. Esto trae

como consecuencia el hecho de que el uso de cada dispositivo distinto está supeditado a una licencia

del programa de LabView y a la capacidad de computación de los ordenadores disponibles

implicando que el tiempo de muestreo está limitado a la capacidad de un procesador dentro de un

ordenador, corriendo un software de un programa y un sistema operativo, además de estar limitadas

las conexiones (por la forma que se conectan a la DAQ) a dos entradas analógicas y una salida.

1.1 Objetivo

El objetivo de este proyecto es unificar la forma de identificar y controlar el mayor número de

dispositivos disponibles en los laboratorios, para facilitar el acercamiento a este tipo de control

digital a los estudiantes de la Escuela Técnica Superior de Ingeniería.

Para solucionar los problemas de tiempo de muestreo y de una mayor capacidad de entradas y salidas

analógicas, se ha optado por utilizar un bloque diseñado en la escuela para el uso de un Arduino

como tarjeta de adquisición de datos a la vez que como procesador de dichos datos. Al estar basado

en Arduino se elimina el problema de necesitar una licencia para utilizar los dispositivos, y al utilizar

el procesador de la placa únicamente para el muestreo de datos se consiguen unas frecuencias más

altas de muestreo y de actuación (en el caso de que fuese necesario). Este último avance es muy útil

para sistemas de frecuencias de funcionamiento muy altas o sistemas de dinámica inestable muy

rápida, como puede ser el levitador magnético. Al disponer de un compilador de Arduino de licencia

gratuita los estudiantes pueden familiarizarse con este dispositivo de una manera mucho más

sencilla.

E

La ciencia puede divertirnos y apasionarnos, pero es la

Ingeniería la que cambia el mundo.

-Isaac Asimov -

Introducción

12

12

El principal problema que surge al utilizar esta tecnología es que los microcontroladores dispensados

por Arduino funcionan de una forma cíclica y por lo tanto el tiempo de cada ciclo depende de la

cantidad de cálculos necesarios que tenga que realizar el programa, por lo que un programa más

sencillo funcionaría notablemente más rápido que un programa con más líneas de código. Como se

pretende utilizar el microcontrolador para controlar un sistema, hay que hacerlo funcionar de forma

periódica para que se puedan calcular los errores integrales. Por lo tanto, el objetivo final del

programa que se realiza es hacer funcionar el dispositivo de una forma genérica, dándole al usuario

la posibilidad de introducir un tiempo de muestreo (siempre y cuando el tiempo requerido esté dentro

de las especificaciones de la placa en funcionamiento, ya que no podemos muestrear al mismo

tiempo al que funciona el microprocesador, sino que hay que hacerlo en tiempos de un par de

órdenes de magnitud inferiores) para que el programa completo funcione a esa frecuencia.

1.2 Equipo

El dispositivo que vamos a utilizar es un bloque de elementos que se encuentran ensamblados en una

protoboard de la siguiente manera:

Ilustración 1-1 Dispositivo basado en Arduino

13

Como se puede observar este dispositivo consta de distintas partes separables a simple vista, la

numeración de esas partes y la explicación de cada una de ellas se encuentra en el apartado

Descripción Hardware.

Los dispositivos se encuentran tal y como se observa en la imagen, con las conexiones ya realizadas.

En caso de encontrar los cables desconectados, la conexión sería la siguiente:

- Colocando el dispositivo en la misma orientación que en la foto, y tomando como referencia

el bloque de pines de la PCB de izquierda a derecha, con los colores que se muestran en este

dispositivo (estos son los pines sin nombrar)

- El primer pin, conectado con un cable negro, se conecta a tierra de la placa, denominada

GND en la placa. Las tierras dentro de un dispositivo suelen estar conectadas, pero por evitar

fallos es mejor conectarla a la GND más cercana a Vin y más separada de la entrada 5V.

- El segundo pin, conectado con un cable rojo, se conecta a la señal Vin, la cual sirve para

alimentar la placa y que tenga energía.

- El tercer pin, conectado con un cable amarillo, éste se conecta a la primera señal de entrada

analógica de la placa, denominada como A0.

- El cuarto pin, conectado con un cable verde, se conecta a la segunda señal de entrada

analógica de la placa, denominada como A1.

- El quinto pin y el sexto pin, conectados con un cable azul, éstos se encuentran conectado a

las dos únicas salidas analógicas disponibles en la placa, denominadas por DAC 0 y DAC 1.

Hay que conectar el quinto pin con DAC 0 y el sexto con DAC 1; en caso de hacerlo al revés,

los pines de cables “banana” también irían intercambiados.

Descripción Hardware

14

14

2 DESCRIPCIÓN HARDWARE

urante esta sección se dispondrá a explicar, uno a uno, los distintos componentes que

componen la placa que conforma nuestro dispositivo, de manera que se pueda comprender

de una manera más concreta el funcionamiento del aparato. Además se facilitará una guía

de cómo conectar las distintas entradas y salidas. Algunos de estos elementos entran en juego para la

calibración, y aunque esta no debería ser necesaria, es imperativo mantener cierto cuidado con estos

elementos. El principal motivo por el que se explican los distintos componentes, es para dar al

usuario de este dispositivo, una estructura teórica que le permita identificar los errores de hardware

cuando lo utilice.

Al tratarse de un aparato orientado a pruebas de software, es necesario poder identificar los errores

ajenos a este, pues al existir errores que no se deben al código diseñado se puede perder mucho

tiempo buscando errores en las líneas programadas cuando es posible que no los haya.

2.1 Fuente de alimentación

Una de las principales ventajas que conlleva utilizar un

microprocesador, es la autonomía que se da con respecto a los

ordenadores que se encuentran en los laboratorios. Para que esta

autonomía sea real es necesario proveer a la placa de Arduino de

una alimentación de corriente. La tensión necesaria para

alimentar a la placa es entre 7V y 12V, por lo que para facilitar

dichos valores de tensión, es necesario implementar una fuente de

alimentación que se conecte a los enchufes (230V en España) y

que, con un transformador, suministre dicha tensión.

En la pegatina de la imagen se observan los valores que es capaz

de ofrecer este transformador, dando la máxima tensión posible al

Arduino, a la vez que se dispone de una alimentación a 5V que

puede ser utilizado para alimentar a distintos componentes

electrónicos que se encuentran también incluidos en este

dispositivo.

El Arduino consta de un diodo LED que indica cuando está recibiendo tensión y está encendido, por

lo que basándose en el estado de dicho diodo, se puede evaluar de una forma sencilla y efectiva, que

la fuente está realizando su acción correctamente.

D

El todo es mayor que la suma de las partes

-Aristóteles-

Ilustración 2-1 Fuente de alimentación TMP

15112

15

Especificaciones de la fuente de alimentación Traco Power TMP 15512c:

Potencia de salida máxima 15 W

Tensión nominal 12 VDC

Intensidad nominal 1250 mA

Rendimiento 79%

Frecuencia nominal 50/60 Hz

Rango de frecuencias 47Hz/440Hz

Regulación 1% (máxima variación de entrada)

Ruido (salida 5V) 1.8% (Vout)

Ruido (salida 12V) 1.0% (Vout)

Rango de temperatura (en uso) -25ºC/70ºC

Rango de temperatura (almacenamiento) -40ºC/85ºC

Temperatura de sobreprotección 90ºC (recuperación a 67ºC)

Coeficiente de temperatura 0.02 %/K

Fiabilidad 280.000 h

Altura máxima de funcionamiento 3.000 metros

Tabla 1 Datos técnicos de Traco Power TMP 15112c1

2.2 Arduino Due

Una vez se ha decidido utilizar un procesador diferente al del ordenador para dotar al dispositivo de

autonomía e independencia, es necesario elegir entre las distintas opciones del mercado. Al optar por

la tecnología de Arduino se obtiene un microprocesador ya adaptado a la lectura y escritura de

señales analógicas, con la tecnología necesaria para la conversión de dichas señales, y con una

programación parecida al lenguaje C/C++ (de alto nivel), de la cual se dispone de innumerables

librerías y funciones que facilitan el uso de esta placa para el usuario.

1 Datos obtenidos del anexo “Datasheet de Traco Power TMP 15112c”

Descripción Hardware

16

16

Especificaciones de la placa Arduino Due:

Microprocesador AT91SAM3X8E

Rango de tensión (DAC) 0.55V/2.75V

Tensión alimentación (Nominal) 7V/12V

Tensión alimentación (Extrema) 6V/16V

Pines E/S digital 52 (12 con PWM)

Pines de entradas analógicas 12 (Ai)

Pines de salida analógicas 2 (DAC)

Frecuencia del microprocesador 84 MHz

Memoria Flash 512 kBytes

Tabla 2 Datos técnicos Arduino Due2

Al disponer de una memoria no volátil, como lo es la memoria flash, tenemos un banco de datos

donde almacenar la información necesaria, pero este banco es insuficiente para almacenar los valores

de los experimentos de identificación en sí mismo, aunque se pueden utilizar para guardar valores de

constantes o de puntos de operación aun cuando se apague la placa.

Al no tener un dispositivo de memoria de mayor tamaño incluido en la propia placa y no disponer de

una ranura para tarjetas SD, en caso de querer realizar un experimento que necesite ser registrado,

habría que realizarlo conectándose al ordenador para almacenar los valores en un fichero de texto.

Este paso no es inmediato y requerirá de un programa para automatizar la lectura de los datos, pero

todo esto se explica con más detalle en el apartado de Descripción software.

Otro inconveniente que tiene este tipo de placas es que funciona de una forma cíclica, esto significa

que realiza el código escrito una y otra vez sin tener en cuenta el tiempo que transcurre entre una

iteración y la siguiente. Esto conlleva un problema a la hora de controlar digitalmente, pues se

requiere de un tiempo de muestreo estable; pero este inconveniente se solventará mediante software.

2.3 TL084C

Este encapsulado corresponde a un amplificador operacional basado en la tecnología de JFET. Como

se puede observar los valores limitantes en la entrada de señales analógicas de Arduino tienen unos

valores pocos normalizados (0.55V/2.75V), por lo que para obtener un rango de valores más

normalizados y mayor se opta por procesar la señal antes de introducirla en la placa. Para la

eliminación del offset de entrada y para el funcionamiento del amplificador de la manera deseada, se

han introducido las resistencias en la propia placa, con lo cual se diseña el amplificador para

funcionar de una manera exacta.

2 Datos obtenidos de la pgina web oficial del producto (https://store.arduino.cc/arduino-due)

17

Ilustración 2-2 TL084CN

Especificaciones del amplificador operacional basado en JFET TL084CN:

Rango (máximo) de alimentación -18V/18V

Rango de tensión de entrada ±15V ó ±Valimentación (La que sea menor)

Rango de temperatura (en uso) 0ºC/70ºC

Rango de temperaturas (almacenamiento) -65ºC/150ºC

Disipación de potencia 680 mW (+10mW/ºC a partir de 47ºC)

Resistencia de entrada 1012

Ω

Slew Rate 13 V/µs

Tabla 3 Datos técnicos TL084CN3

2.4 Potenciómetros

Además de las resistencias incluidas en la placa, se dispone de una serie de resistencias de valor

variable (potenciómetros) con los cuales se puede ajustar la ganancia del sistema de amplificación de

señal previo a la placa Arduino Due. Este ajuste de ganancia se variaría modificando la posición del

tornillo del potenciómetro, y por lo tanto el valor de la resistencia. Este sería el proceso para calibrar

el sistema de ganancia, pero debido a la poca frecuencia con la que sucede esto, es mejor no

modificar la posición de los potenciómetros. En caso de que haya una descalibración del dispositivo

(salen señales muy pequeñas o muy grandes; en caso de una descalibración pequeña no influye en el

proceso de identificación o control, si el “fallo” afecta a ambas etapas) se dejará una advertencia en

los dispositivos para que los jefes de taller puedan resolverlo de una forma adecuada.

3 Datos obtenidos del anexo “Datasheet TL084CN”

Descripción Hardware

18

18

Ilustración 2-3 Potenciómetro Y104

Especificaciones de los potenciómetros:

Valores alcanzables 10Ω/10MΩ

Tolerancia ±10%

Vueltas ajustables 12

Resolución ∞

Rango de temperatura -55ºC/125ºC

Potencia Nominal (70ºC) 0.25 W

Tabla 4 Datos técnicos Potenciómetro Y103 e Y1044

2.5 Conexiones al exterior

La placa debe estar conectada de una forma específica para funcionar correctamente, y durante este

apartado se desarrollará la forma correcta de hacerlo.

El primer conexionado que hay que realizar es para suministrarle energía a la placa. Si vamos a

realizar una prueba con ordenador (introducirle un programa al microprocesador) esto se realizará

con la conexión destinada a dicha operación de la placa (USB). En caso de necesitar los demás

elementos de la placa (si se están realizando pruebas con las señales externas) es necesario conectar

la fuente de alimentación al enchufe correspondiente.

Para la conexión de las señales de entrada y salida, tan solo hay que seguir las flechas que se

encuentran impresas en la propia placa, tal como se muestra en el siguiente esquema:

4 Datos obtenidos del anexo “Datasheet Potenciómetro Y103 e Y104”

Tierra Salida

Analógica 1

Entrada

Analógica 1

Tierra Salida

Analógica 2

Entrada

Analógica 2

19

Si en la entrada de tierra se conecta una tierra genérica se pueden interconectar ambas entradas

La numeración de las entradas y salidas es arbitraria según se quiera ordenar, lo importante es que

ambos canales estén desacoplados físicamente, aunque los dos se procesan en el mismo

microprocesador.

Descripción software

20

20

3 DESCRIPCIÓN SOFTWARE

na vez explicados los distintos componentes que conforman nuestro módulo basado en

Arduino, en esta sección se explicarán las distintas partes del desarrollo del software que se

ha seguido para el proyecto completo.

Aunque el desarrollo de estas partes no se haya realizado en serie, se ha optado por dividir la

información según los programas sobre los que se ha desarrollado, explicando así el funcionamiento

de cada una de las partes del programa. Por lo tanto los distintos desarrollos matemáticos y las

decisiones tomadas sobre el funcionamiento del programa estarán repartidos durante las siguientes

subsecciones.56

3.1 LabView

Para poder comprobar el funcionamiento completo del dispositivo (funcionar a una frecuencia de

muestreo constante, almacenar los datos de forma que se puedan abrir con Matlab y la capacidad de

controlar el módulo añadido) se ha de diseñar en primera instancia los códigos que permitan

implementar el controlador de forma digital. Se ha optado por diseñar y comprobar dichos códigos

con la estructura actual (LabView) ante el módulo del calentador PT236.

El primer paso sería realizar una discretización de un controlador genérico; en este caso se realizará

la aproximación de un PID genérico y de un predictor de Smith (para este diseño es necesario

realizar una discretización de un sistema de primer orden con retraso, lo cual también puede ser útil

para hacer las pruebas de los controladores sin necesitar un módulo físico).

3.1.1 Discretización Primer orden con retraso

El hecho de modelar un sistema de primer orden con retraso de forma digital nos permite hacer

pruebas, tanto del predictor de Smith como de un control PID, sin tener la necesidad de conectar el

controlador a ningún dispositivo físico.

Lo primero que se debe decidir es el tipo de aproximación a la cual se va a someter la transformada

de Laplace del modelo del sistema. Para obtener el modelo más aproximado se utilizará la

aproximación de Tustin, también llamada aproximación bilineal:

𝑦(𝑠) =𝐾

1 + 𝜏 ∗ 𝑠∗ 𝑒−𝑇𝑑∗𝑠

𝑠 =2

𝑇𝑠∗

𝑧 − 1

𝑧 + 1 [𝐴𝑝𝑟𝑜𝑥. 𝑑𝑒 𝑇𝑢𝑠𝑡𝑖𝑛]

𝑦 (𝑛 +𝑇𝑑

𝑇𝑚) =

1

2 ∗ 𝑇𝑚 + 𝜏∗ [𝐾 ∗ 𝜏 ∗ (𝑢(𝑛) + 𝑢(𝑛 − 1)) − (𝑇𝑠 − 2 ∗ 𝑇𝑚) ∗ 𝑦(𝑛 − 1)7

Con esta ecuación final solo es necesario programar8 dicha función y definir las variables que

intervienen en el proceso.

5 Los distintos códigos de los programas se anexaran al trabajo con los nombres distintivos 6 Con los distintos programas se adjunta los grficos que muestran los resultados de dicho código 7 Tm es un parmetro que indica el tiempo al que se ha muestreado el sistema 8 Tal como se observa en el anexo “Códigos” en el apartado “Sistema de primer orden con retraso”

U

21

3.1.2 Discretización Predictor de Smith

La discretización del predictor de Smith es análoga al de un sistema de primer orden con retraso, tal

como se puede deducir de la siguiente estructura:

Ilustración 3-1 Estructura básica del predictor de Smith

Como se observa en la Ilustración 3-1 Estructura básica del predictor de Smith, para poder diseñar un

predictor de Smith es necesario disponer de un modelo del sistema al que se le aplica. Y con dicha

estructura se obtiene la dinámica de un sistema, evitando el retraso de manera más efectiva cuanto

más coincida el modelo añadido con el predictor y el sistema real. En la siguiente ilustración se

observa la estructura incluida en el LabView para comprobar el predictor. En esta estructura no se ve

el diseño del predictor de Smith ya que éste se encuentra incluido en el archivo .dll que se añade a los

“Fuction block” que se han incorporados.

Ilustración 3-2 Estructura de LabView para la comprobación del predictor de Smith

Con dicha estructura en funcionamiento, utilizando el código que ejecuta un sistema de primer orden

con retraso, y utilizando los mismos valores de ese sistema que hemos diseñado para el predictor de

Smith, comprobamos cómo reaccionan ambos sistemas ante un estímulo a la entrada.

Descripción software

22

22

Ilustración 3-3 Comprobación del predictor de Smith

Como se ve en la Ilustración 3-3 Comprobación del predictor de Smith, la señal roja corresponde a la

salida del sistema de primer orden con retraso, mientras que la señal blanca corresponde a la salida

del predictor de Smith; obtenemos una dinámica muy parecida a la original, pero sin el retraso de

ésta cuando se aplica el predictor de Smith. Esto nos ayuda a solucionar los problemas de retraso que

puedan surgir en ciertos dispositivos.

3.1.3 Discretización I-PD antiwind-up

Para la discretizar el PID de la forma más óptima, se ha optado por realizar la discretización (también

con la aproximación de Tustin) a la función de transferencia de PID genérico:

𝑢(𝑠) = 𝐾𝑝 ∗ (𝑒𝑝 +1

𝑇𝐼 ∗ 𝑠𝑒𝑖 + 𝑇𝐷 ∗ 𝑠 ∗ 𝑒𝑑)

𝑠 =2

𝑇𝑠∗

𝑧 − 1

𝑧 + 1 [𝐴𝑝𝑟𝑜𝑥. 𝑑𝑒 𝑇𝑢𝑠𝑡𝑖𝑛]

𝑢(𝑛) = 𝐾𝑝 ∗ (𝑒(𝑛) +𝑇𝑚𝑢𝑒𝑠𝑡𝑟𝑒𝑜

𝑇𝑖∗ 𝛴([𝑒(𝑛)]) +

𝑇𝑑

𝑇𝑚𝑢𝑒𝑠𝑡𝑟𝑒𝑜∗ [𝑒(𝑛) − 𝑒(𝑛 − 1)]

Implementando este código, añadiendo el término anti-wind up y los coeficientes de ponderación del

término derivativo y proporcional9, se puede probar dicho código con el LabView, usando la

estructura que se puede observar en la siguiente ilustración.

9 Cómo se observa en el anexo “Codigos” en el apartado “Controlador PID”

23

Ilustración 3-4 Estructura de LabView para control I-PD antiwindup

Sometiendo al módulo del calentador PT236 a los estímulos procedentes de la tarjeta de adquisición

de datos (y por lo tanto del control del LabView), y utilizando para ello el algoritmo que se ha

obtenido mediante la discretización explicada en este apartado, se obtiene el siguiente resultado:

Ilustración 3-5 Experimento de regulación y seguimiento del PT236

La parte del título que indica “Bucle cerrado” nos expone como se han obtenido los datos del

controlador que se ha utilizado, el cual se ha conseguido mediante un ajuste de tablas en bucle

cerrado (experimento frecuencial). En la ilustración se observan dos señales, la señal verde indica la

referencia, la cual se ve que tiene un escalón positivo y un escalón negativo (que revierte los efectos

del primero) a lo largo del experimento; y una señal azul, la cual realiza un seguimiento del cambio

de referencia, y un rechazo a perturbaciones (dichas perturbaciones se han realizado de forma

manual en un tiempo de experimento aproximado de 130s).

Descripción software

24

24

3.1.4 Control I-PD antiwindup con predictor de Smith

Una vez se han comprobado los códigos del PID y del predictor de Smith por separado es necesario

hacer una comprobación conjunta antes de poder implementarlo en el Arduino. Para esta

comprobación conjunta se han tenido que añadir dos “Function Blocks” a la estructura del LabView,

uno para el uso del predictor y otro para el control en sí mismo. La estructura utilizada es la que se

plantea en la siguiente ilustración:

Ilustración 3-6 Estructura de LabView de PID con predictor de Smith

Utilizando esa estructura, y realizando el experimento de una forma análoga a como se realizó en el

apartado anterior obtenemos el siguiente resultado ante el experimento:

25

Ilustración 3-7 Experimento de regulación y seguimiento del PT236 con predictor de Smith

En esta ilustración se puede observar los resultados de un experimento de regulación y seguimiento,

que se ha realizado sobre el módulo PT236. Se observan dos señales, la señal verde es la referencia a

la cual tiene que ir la salida del sistema, y la señal azul es la medición de la salida por el sensor

colocado en el sistema.

3.2 Matlab

Al utilizarse Matlab como principal procesador de datos una vez se han realizado los experimentos, y

sabiendo que la mayoría de alumnos pueden desenvolverse en este entorno, se ha optado por utilizar

este software como almacenador de datos provistos por el Arduino de las entradas y salidas de este.

Para ello han de realizarse una serie de pasos, y se debe utilizar un .mdl de Matlab.

Lo primero que se debe realizar, es la creación y la configuración del modelo de Matlab que

recopilará los datos. Para ello se han de colocar los tres bloques que se observan en la siguiente

Ilustración:

Ilustración 3-8 Simulink para recopilación de datos en Matlab

El primer bloque, comenzando por la izquierda („Query Instrument‟, nombre propio del bloque), hay

que configurarlo según la aplicación que queramos tener, ya que hay que especificar el número de

entradas que tendrá y en que puerto se ha conectado la placa:

Descripción software

26

26

Ilustración 3-9 Configuración “Query Instrument: Hardware configuration”

Lo principal de esta pestaña, a la hora de configurarla, es activar la opción de obtener los datos a

través de un objeto en el Workspace de Matlab. Este objeto es necesario definirlo luego de forma que

se defina tanto el puerto COM al que está conectado la placa, como el ratio de baudios que tiene la

conexión (este último valor es mejor dejarlo predeterminado ya que puede provocar fallos de

comunicación aumentar dicha velocidad).

En la pestaña de “Instrument Initilization” no hay que modificar ningún valor, por lo que solo hay

que dejar la opción de “None” activada.

Ilustración 3-10 Configuración “Query Instrument: Query”

En esta última pestaña es donde se define el número de valores que se están recibiendo desde el

puerto serie. Esto depende del número de variables que queramos recibir desde el programa y del

número de entradas y salidas que tengamos conectados a nuestra placa. Como configuración estándar

se reciben 5 señales (Las dos entradas, las dos salidas y el tiempo) y todas con formato “float”. Para

este caso hay que activar que el formato de los datos es ASCII, y como es una hilera de datos, se ha

de colocar dicha hilera en el siguiente apartado “ASCII format string”; y para colocarlo hay que

definir el número de variables con su formato de la siguiente forma: “%x”; donde “x” representa el

símbolo que se aplica para identificar el formato de la variable, como por ejemplo “f” para float, “d”

para int… etc.

27

El siguiente bloque que aparece en el modelo de Simulink es un bloque de transposición

(“Transpose”) de la matriz de datos, de forma que los valores queden más organizados.

El último bloque (denominado “t1”) es un “To workspace”, lo cual nos permite guardar todos los

valores que está recibiéndose por el puerto serie, en un solo objeto de la memoria, en este caso el

objeto ha sido nombrado “Valores”. Después se recorrerá dicho objeto para separar las distintas

variables en vectores para hacer posible su representación.

Una vez se ha creado dicho modelo de Simulink, y todos sus bloques se han configurado

correctamente, se ha de realizar una serie de pasos para almacenar los datos de forma correcta. Para

un entendimiento más sencillo, se irán detallando los pasos necesarios para poner en funcionamiento

el modelo:

1.- Es necesario definir la conexión serie con el mismo nombre con el que se ha configurado

“Workspace object” en la Ilustración 3-9, definiendo la velocidad de transmisión de datos.

Esta acción se puede realizar sobre la propia consola de Matlab, introduciendo la siguiente

línea:

Workspace object= serial(„COMxx‟, „BaudRate‟, 9600)

Sustituyendo “Workspace object” por el nombre que se definió en la configuración y

cambiando el COMxx, sustituyendo “xx” por el número referente al COM que se ha

conectado la placa (no es necesario que sean dos dígitos, tan solo hay que colocar el número

del puerto serie).

2.- Se ejecuta el programa de Arduino que queramos monitorizar con la placa, asegurándose

que se encuentra correctamente conectada en el puerto que se ha definido en la variable del

“Query Instrument”.

3.- Una vez está corriendo el programa en la placa, y esta se encuentre conectada con el

ordenador, hay que abrir el puerto para que Matlab pueda almacenar los datos. Esto se realiza

colocando una línea en la consola de Matlab:

fopen(Workspace object)

De forma análoga al primer paso, se debe variar “Workspace Object” por el nombre que se

haya dado a esa variable. Si al realizar esta acción se recibe un error de Matlab que nos indica

lo siguiente:

Error using serial/fopen (line xx)

Open failed: Port: COMxx is not available. No ports are available.

Use INSTRFIND to determine if other instrument objects are connected to the requested

device.

Esto es debido a que hay un problema en la conexión con la placa. Puede ser que haya otro

programa utilizando el puerto al que intentamos acceder (si se intenta realizar estas acciones

de forma paralela al “Serial Plotter” o al “Monitor Serie” nos dará este fallo, es necesario

cerrar esas ventanas para que Matlab pueda recoger los datos por el puerto serie) o que se

haya conectado la placa en otro puerto COM o de forma errónea.

4.- Si se han realizado los pasos anteriores de forma satisfactoria, se puede ejecutar el .mdl

que se ha creado anteriormente. Una vez se ejecute el programa empezará a guardar los

valores que se reciban por el puerto serie. Como se puede observar, dicho modelo de

Descripción software

28

28

Simulink no dispone de un tiempo de funcionamiento determinado, si no que se ha dispuesto

de un tiempo infinito, de manera que se pueda mantener el programa recopilando datos hasta

que se presione el botón de parada.

5.- Una vez se ha terminado de realizar el experimento que se quería registrar, es necesario

cerrar el puerto serie, de forma que no haya fallos en los siguiente experimentos. Para ello

hay que parar la ejecución de Simulink. Una vez el Simulink no se esté ejecutando se debe

cerrar el puerto serie conectado a Matlab con el siguiente comando en la consola:

fclose(Workspace object)

Tal como se ha comentado en los pasos anteriores, “Workspace object” se ha de cambiar por

el nombre de la variable que se haya introducido en la configuración del “Query”. Una vez se

ha cerrado el puerto serie, ya se puede proceder a detener la ejecución del programa de

Arduino, y a su desconexión si fuese necesaria.

Cuando se han realizado todos estos pasos, se ha creado un objeto en el Workspace de Matlab, el

cual dispone de todos los valores almacenados. La forma en la que se almacenan los valores depende

de la forma en la que se hayan transmitido estos desde la placa. Para obtener estos valores de forma

separada es necesario saber el orden en el que se han enviado. Una vez el orden de las señales ha sido

determinado, se puede sacar los valores con el siguiente bucle:

Length= ; // Longitud del experimento

T_muestreo= ; // Tiempo de muestreo indicado en el programa de Arduino

for i=10:1:lenght,

t(i)=T_muestreo * Valores(:,1,i);

y0(i)=Valores(:,2,i);

y1(i)=Valores(:,3,i);

u0(i)=Valores(:,4,i);

u1(i)=Valores(:,5,i);

end;

Este código se corresponde con los datos recibidos por la placa al utilizar el programa de

Identificacion.ino10

y necesita de la definición de dos variables; la longitud del vector experimento

(cuantas veces se han enviado datos), la cual se puede obtener observando las dimensiones del objeto

en el que se hayan guardado las variables; y el tiempo de muestreo, que tiene que corresponder con el

definido en el programa de Arduino (aunque el tiempo del programa de Energía va en unidades de

milisegundos, se puede colocar en Matlab en las unidades que se desee, teniendo en cuenta que tras

esto, las gráficas representadas en función de tiempo estarán expresadas en función de la unidades

utilizadas en Matlab).

Una vez se han ejecutados todos estos pasos, se dispone de las variables almacenadas en vectores,

con lo cual se puede trabajar con ellas de forma numérica, e incluso de forma gráfica si se quiere

dibujar usando el comando “plot” de Matlab.

10 Incluido en el anexo de este trabajo

29

3.3 IDE Arduino: Energía

Para programar Arduino se disponen de distintos compiladores, pero en este caso se ha optado por

utilizar el IDE (del inglés Integrated Development Enviroment, Entorno de desarrollo interactivo)

llamado Energía, en su versión 1.6.1311

. Como se ha comentado a lo largo de este documento, la

principal ventaja de utilizar es la gran cantidad de librerías disponibles y el fácil acceso para todos los

usuarios. Partiendo de esto, y para facilitar el entendimiento del código, se irán explicando la utilidad

de las funciones de librerías que se han utilizado en el código.

3.3.1 Código de “Identificacion.ino”

Para explicar el código y la distinta funcionalidad del programa se utilizará como base

“Identificacion.ino”, ya que el programa de “Control.ino” es tan solo una modificación del primero.

Todas las lineas de códigos, con los comentarios respectivos, del programa se encuentran en el anexo

“Códigos”, al igual que ambos programas.

El programa se puede subdividir en dos funciones principales (las cuales se ejecutarán sin ser

llamadas específicamente), dos funciones de llamada y dos librerías de escritura por el usuario (las

cuales permiten al usuario modificar el programa sin tener que entender todo el código).

Las dos primeras funciones son la de configuración (“void setup()”) y la función principal (“void

loop()”). La función de configuración solo se ejecuta una vez cuando se inicia el programa, y sirve

para establecer los valores de distintas librerías que se van a utilizar. Para empezar se define la

velocidad (en baudios) de transmisión de datos por el puerto serie, esto se realiza con el comando

“Serial.begin(9600)”, estableciendo la velocidad estándar de 9600 baudios. También se inicializan la

lectura y escritura de valores analógicos, con una resolución de 12 bits cada una. También se les ha

dado unos valores iniciales a las señales de los actuadores para evitar problemas. En la función

principal (la cual se ejecuta de forma cíclica hasta que se detenga el programa) se le da los valores a

los actuadores y se leen los sensores, y ambos datos se envían por puerto serie.

Las dos funciones sirven como conversión entre el valor leído/escrito por el PIN de entrada/salida

analógica, de forma que se pasa del valor digital de tipo “float” al valor digital que necesita la

función de la librería para mandar la señal analógica equivalente, y para la conversión opuesta.

Las dos librerías añadidas, las cuales se pueden modificar navegando por las distintas pestañas del

IDE de Arduino, y se pueden encontrar por el nombre de “Configuracion.c” y “Control.c” nos

permiten modificar la funcionalidad sin tener que investigar el código entero. En la librería de

Configuración se nos permite cambiar los parámetros que afectan al programa y dependerán de la

utilidad que se le quiera dar al programa. Los parámetros disponibles en los programas de

Identificacion.ino y Control.ino varían debido a las utilidades. En la librería de control, a pesar del

nombre, no implica un control en bucle cerrado, si no que estable el comportamiento de la señal de

actuación, de manera que se puede realizar un ensayo de identificación o un control en bucle cerrado,

solo modificando el código de esta librería. Es necesario mantener la llamada por referencia de los

parámetros para el correcto funcionamiento del programa.

Las distintas funciones que se utilizan de las demás librerías disponibles sirven para utilidades muy

variadas. Con la función “millis” se puede saber el tiempo, expresado en milisegundos, que ha

pasado desde que se inició el programa; y con esto se puede hacer que el programa mande los datos

solo cuando haya pasado cierto tiempo, por lo que se puede ajustar el funcionamiento del programa a

un tiempo de muestreo en el cual queramos que se lean las señales. En este caso se ha optado por

permitir al programa funcionar de forma cíclica, y solo permitir que envíe cuando el tiempo que haya

11 Si no se dispone del software, se puede descargar de forma gratuita la última versión, en la pgina oficial del producto: http://energia.nu/download/

Descripción software

30

30

pasado sea un múltiplo del tiempo de muestreo, por lo que es posible que ciertas medidas que se

realicen no sean registradas. Con la función “AnalogWrite” y “AnalogRead”, se transmite el valor

desde la placa al dispositivo, o al revés, utilizado los pines dedicados a esa función (para lectura los

pines A0-A7 y para la escritura los pines DAC0 y DAC1). Con la función “Serial.” Se realizan las

distintas funciones (ver si está disponible el puerto serie, leer/escribir en el puerto serie) que permiten

la comunicación con el ordenador. A parte de enviar los datos al ordenador como ya se ha

mencionado que se haría, también se aprovechará la comunicación serie para mandar comandos a la

placa para modificar el modo manual de esta.

Para que el modo manual de la placa sea más accesivo y no haya que estar cambiando el propio

código fuente, se ha optado por introducir una serie de comandos que se mandan por el puerto serie

(ya sea con Matlab o con el Monitor serie del propio IDE de Arduino). En la siguiente tabla se

describen esos comandos:

Comando Descripción

1 Se pasa a Modo Manual

2 Se pasa a Modo Automático

4 Se incrementa el actuador 0 el valor definido en Diferencial0 (solo Modo Manual)

5 Se decrementa el actuador 0 el valor definido en Diferencial0 (solo Modo Manual)

6 Se incrementa el actuador 1 el valor definido en Diferencial1 (solo Modo Manual)

7 Se decrementa el actuador 1 el valor definido en Diferencial1 (solo Modo Manual)

Tabla 5 Comando del Modo Manual de Arduino

Además en los comentarios se especifican las dos zonas donde el usuario puede modificar lo escrito

sin afectar al funcionamiento del programa. La forma en la que se puede modificar estos valores está

explicada en la siguiente sección (Conexión a la placa).

3.3.2 Conexión a la placa

La conexión de la placa consta de una configuración de distintos valores en el software

proporcionado (incluido en el Anexo con el nombre de “Identificacion.ino” y “Control.ino”).

Lo primero que se ha de realizar es personalizar las variables disponibles a las necesidades del

usuario. Las variables se encuentran en la librería de configuración que se ha mencionado

anteriormente. En la siguiente tabla se especifican los distintos valores que permiten los códigos

(algunos de ellos solo estarán definidos en el programa con el que tenga relación).

31

Nombre de la variable Explicación

ManAut Se cambia el programa entre manual y automático. El valor 0 indica que el

programa está actuando en Manual y que por lo tanto se enviará la señal

manual que se puede modificar mediante los comandos. El valor 1 indica que el

programa funciona de forma automática, y por lo tanto realiza la función que se

le programa en la zona de modificación por el usuario.

Diferencial0 Es el valor que se va a añadir o restar al valor Manual cuando se envíe el

código correspondiente, específico para el actuador 0. Esto nos permite realizar

experimentos de forma más personalizada.

Diferencial1 Es el valor que se va a añadir o restar al valor Manual cuando se envíe el

código correspondiente, específico para el actuador 1.

T_esc Es el tiempo al cual se va a producir el cambio entre el valor bajo y el valor alto

del escalón (es un escalón positivo). Solo tiene sentido si se mantiene la parte

del código que realiza el escalón.

Escalon_Valor_Bajo Es el valor al cual van a estar los actuadores 0 y 1 antes de que transcurra el

tiempo de escalón (T_esc).

Escalon_Valor_Alto Es el valor al cual van a estar los actuadores 0 y 1 una vez transcurra el tiempo

de escalón (T_esc).

SatUp0 Es el valor máximo al cual se satura (por arriba) la señal manual de actuación 0.

Este valor puede servirnos para establecer unos límites más restrictivos que los

de la propia placa [0 V,10 V], pero no menos; ya que existe una segunda

saturación que evita que la placa envíe valores fuera de este rango para evitar

estropear los componentes de los distintos dispositivos.

SatUp1 Es el valor máximo al cual se satura (por arriba) la señal manual de actuación 1.

SatLow0 Es el valor mínimo al cual se satura (por abajo) la señal manual de actuación 0.

SatLow1 Es el valor mínimo al cual se satura (por abajo) la señal manual de actuación 1.

T_muestreo Es el tiempo que indica la frecuencia de muestreo que va a llevar nuestra placa.

Limita tanto la lectura como la escritura en el sistema. Se expresa en

milisegundos.

Referencia0 Es el valor al cual se quiere que tienda la salida del sistema conectado a la

entrada 0.

Referencia1 Es el valor al cual se quiere que tienda la salida del sistema conectado a la

entrada 1.

(Valores PID) Los valores de PID tales como K, Td y Ti se podrían definir en la zona

dedicada a variables para el usuario.

Tabla 6 Variables a modificar por el usuario

Descripción software

32

32

A parte de la zona dedicada a las variables, hay otra zona en la cual se cambia los valores de U_0 y

U_1 (señales de los actuadores) en caso de que se encuentre el programa en Modo Automático. Esta

zona está indicada de la misma manera que la de las variables, y el código de ahí puede ser removido

y sustituido por el código del control o experimento que se quiera realizar.

Una vez se ha modificado el código a nuestro gusto, hay que configurar la interfaz de Arduino. Para

ello debemos conectar la placa y seleccionar las opciones mostradas en las siguientes ilustraciones:

Ilustración 3-11 Selección de la placa utilizada en Energía IDE

Con esta selección se indica que la placa sobre la que se va a programar es del tipo Arduino Due. Es

posible que el IDE de Arduino no incluya esta placa con la configuración inicial, pero a través de

acceso a internet se puede instalar mediante el Gestor de tarjetas incluido en la misma pestaña que las

demás placas.

33

Ilustración 3-12 Selección del puerto serie en Energía IDE

Una vez se ha conectado la placa al ordenado (mediante el puerto de programación, el cual se puede

distinguir al ser el único conector Micro USB disponible en la placa) y se ha elegido la placa

correspondiente en el programa, es necesario elegir el puerto COM en el que se ha conectado la

placa. Para cerciorarnos de que se ha elegido el puerto correcto hay que fijarse que el propio

programa reconoce el la conexión de una placa Arduino y a parte del nombre del puerto nos debería

aparecer el nombre de la placa y el la conexión que se está utilizando en esa placa (“Programming

Port” o “Native USB”).

De esta forma quedaría configurado, cumpliendo nuestras restricciones, y preparado para utilizar el

dispositivo basado en Arduino, funcionando tal como se muestra en Aplicación.

Aplicación

34

34

4 APLICACIÓN

Los científicos estudian el mundo tal como es, los ingenieros crean el

mundo que nunca ha sido.

-Theodoro Von Karman-

na vez tenemos el dispositivo correctamente conectado y en funcionamiento es hora de

comprobar la utilidad de este al conectarle un sistema real y tratar de identificar ese sistema y

de controlarlo. Pero es de gran utilidad realizar una serie de comprobaciones del sistema antes

de comenzar a ejecutarlo, para tener conocimiento de las restricciones que delimitan su

funcionamiento.

4.1 Prueba de especificaciones

Una de las características que más interesa en un dispositivo centrado en control digital es la máxima

frecuencia de muestreo al cual este puede funcionar:

Ilustración 4-1 Prueba de tiempo mínimo de muestreo Arduino Due

U

35

En la Ilustración 4-1 se observa los tiempos en los cuales el programa se ha realizado de forma

completa. El programa se basa en leer los datos de ambas señales de entrada y de enviar a su vez dos

señales de actuación. Tal como se observa en esa imagen, los tiempos medios del programa en

realizar todas esas acciones es de alrededor de 6ms. Por lo que se le podría exigir al programa que

funcionase a una frecuencia cercana a ese tiempo de muestreo (en el caso de querer enviar los datos

para poder representarlos habría que ampliar el margen ya que la conexión serie con otro

componente ralentizaría el funcionamiento12

).

Otra especificación a tener en cuenta es la saturación de la señal, ya que si se intentasen enviar

señales de demasiado voltaje se podría estropear el dispositivo conectado o el propio modulo del

Arduino. Para este experimento se ha optado por utilizar el modo manual y llevar de esta manera al

sistema al punto crítico de funcionamiento para comprobar si funciona de manera correcta.

Ilustración 4-2 Pruebas de saturación de protección del dispositivo

En la Ilustración 4-2 se observa una serie de datos, ordenados de izquierda a derecha corresponden

con las siguientes variables: Índice del número de tiempos de muestreo pasados, Valor del sensor 0,

Valor del sensor 1 (ambos valores son negativos al encontrarse desconectados en ese momento),

Señal de salida del actuador 0, Señal manual del actuador 0; Señal manual del actuador 1; Señal de

salida del actuador 1.En este experimento se puede observar cómo aunque los valores manuales

sobrepasen los 10V, la señal de actuación se ha saturado para no superar ese valor. Para la saturación

inferior se realizó el mismo experimento con resultados satisfactorios. Esta saturación límite estará

en funcionamiento independientemente de los valores introducidos por el usuario en la saturación, de

manera que estos límites no puedan ser superados.

12 El programa puede funcionar a 10ms aun enviando los datos mas importantes (estimación de 10 datos) por el puerto serie

Aplicación

36

36

4.2 Calentador PT236 (PID)

4.2.1 Preparación del experimento

Para poder realizar el experimento se necesita disponer de un ordenador con el programa Matlab

instalado y con el IDE de Arduino Energía. Una vez se disponga de ambas cosas y de los códigos

anexados a este documento se puede proceder al control.

Para empezar se deben de conectar los distintos elementos físicos involucrados en el experimento,

alimentar el módulo basado en Arduino, conectar este mismo a un ordenador con los requisitos

mencionados anteriormente y a su vez, conectarlo al sistema que queramos identificar y/o controlar.

En este caso, para llevar al sistema a su máximo rendimiento, se le han conectado dos calentadores

PT236 totalmente desacoplados, para identificarlos y controlarlos ambos de una forma paralela. Este

proceso se podría realizar con dos sistemas que tuviesen alguna conexión, pero la forma de control

sería bastante diferentes, ya que habría que utilizar técnicas MIMO; no como en este caso que se

realizan dos técnicas SISO independientes.

Ilustración 4-3 Esquema del conexionado del dispositivo en funcionamiento

Una vez se dispone de todo esto se puede proceder a empezar el experimento, para ello debemos

abrir el modelo de Simulink que se había creado (y configurar de forma idónea el “Query

Instrument”), subir el programa deseado a la placa de Arduino y comenzar a recopilar los datos

deseados.

37

4.2.2 Modelado de los dispositivos

Para la identificación del sistema se ha elegido utilizar el método de la respuesta a escalón del

sistema. Con dicho método sometemos al sistema real a un escalón del valor de la señal de actuación

de aproximadamente un 15% del rango de entrada y se observa cómo reacciona la salida ante dicha

variación en la entrada, con lo cual obtendremos un modelo de la salida del sistema con respecto a su

entrada. A partir de ahora se van a realizar todos los experimentos en ambos dispositivos, por lo que

se obtendrán gráficas medianamente parecidas pero cada una con su modelo específico.

Lo primero que se puede observar en dichas gráficas es que el modelo presenta un cierto retraso a la

salida, por lo que la salida no comienza a variar hasta cierto tiempo después de la excitación.

También se observa que las primeras muestras de la señal de actuación no se corresponden

correctamente con lo que se debería estar realizando. Esto es debido a la inicialización del proceso de

transmisión de datos, por lo que es necesario evitar dichas muestras a la hora de obtener un modelo

fiable de los sistemas.

0 2 4 6 8 10

0

2

4

6

8

10

tiempo(s)

Tensió

n d

el sensor

0 (

V)

Respuesta escalon. Dispositivo 0

0 2 4 6 8 100

5

10

tiempo(s)

Tensió

n d

el actu

ador

0 (

V)

Ilustración 4-4 Respuesta a escalón del dispositivo 0 (Identificación)

Aplicación

38

38

0 2 4 6 8 100

1

2

3

4

5

6

7

8

9

10

tiempo(s)

Tensió

n d

el sensor

1 (

V)

Respuesta escalon. Dispositivo 1

0 2 4 6 8 100

2

4

6

8

10

tiempo(s)

Tensió

n d

el actu

ador

1 (

V)

Ilustración 4-5 Respuesta a escalón del dispositivo 1 (Identificación)

Una vez se han realizado esos experimentos a los dispositivos hay múltiples maneras de obtener un

modelo preciso de su comportamiento. Entro los distintos métodos disponibles se ha optado por

utilizar el “Toolbox” incluido en la versión de Matlab 2012, “ident”.

Esta herramienta permite el modelado de un dispositivo a través de un experimento en el que se

hayan registrado la entrada y la salida, y te permite procesar el experimento antes de realizar dicho

modelado.

En este caso era necesario eliminar las primeras pruebas que no se incluían como datos correctos del

experimento para que no alterasen la solución obtenida por el programa. También era necesario

eliminar la media de las señales de forma que se obtuviese una función de transferencia del modelo

(y que esta función correspondiese con el comportamiento del sistema de forma diferencial, por lo

que no está afectado directamente por el punto de operación, a no ser que el comportamiento del

sistema depende de dicho punto de operación).

Una vez se han procesado los datos para obtener los resultados es necesario elegir el método por el

cual quiere obtener la función de transferencia del sistema, y las características que se espera que

tenga esta. Observando la señal de los sensores se puede deducir que el sistema se puede aproximar

por un modelo de primer orden con retraso (aunque esta aproximación no sea la más precisa, es la

que nos permite realizar un control ajustado que funcione con unas buenas prestaciones).

Una vez se obtiene el modelo, se le compara con la señal real que se obtiene del sistema y se calcula

el porcentaje de exactitud que tiene el modelo con respecto al sistema real13

.

13 Un dato a tener en cuenta es el alto ruido que se presenta en estos sistemas, que alteran los resultados

39

Para el dispositivo 0 se obtuvo un modelo de primer orden con retraso con los siguientes parámetros:

K 0.83

τ 0.726 segundos

Retraso 0.35 segundos

Tabla 7 Valores del modelo de primer orden del dispositivo 0

Con estos valores del modelo se ha realizado una prueba de exactitud del modelo ante una respuesta

en escalón, y se ha obtenido con este experimento un porcentaje de fiabilidad de un 83.45%.

Partiendo de estos valores luego se realizará un control acorde a los parámetros para gestionar el

sistema

Ilustración 4-6 Prueba de exactitud del modelo del dispositivo 0

Aplicación

40

40

Para el dispositivo 1 se ha realizado los mismos pasos que se han realizado con el anterior

dispositivo.

Empezando por obtener los valores del modelo de primer orden, a través de la herramienta de Matlab

mencionada previamente (se puede observar que los valores de la ganancia, tiempo y retraso no

varían significativamente entre distintos dispositivos):

K 1.3

τ 0.484 segundos

Retraso 0.338 segundos

Tabla 8 Valores del modelo de primer orden del dispositivo 1

Y con esos valores se han realizado otra prueba de exactitud del modelo ante un estímulo en escalón.

El porcentaje de exactitud ronda los mismos valores que para el dispositivo anterior (mejorando

ligeramente) con un 90.04%. Estos valores también serán utilizados para el diseño del controlador

del sistema.

Ilustración 4-7 Prueba de exactitud del modelo del dispositivo 1

41

4.2.3 Control de los dispositivos

Una vez se tienen unos modelos fiables de los sistemas se puede proceder a diseñar un controlador.

En este caso se ha optado por diseñar un control I-PD con anti-wind up. Los parámetros que se

utilizarán para dicho controlador se obtendrán mediante un método de ajuste por tablas. Al haber

realizado el experimento en bucle abierto14

se ha optado por el método de Ziegler-Nichols. Con este

método los parámetros del control PID serán los siguientes:

Kp 2.25

Ti 2.178 segundos

Td 0.363 segundos

Tabla 9 Valores de Control PID del dispositivo 0

Introduciendo estos valores en el programa de Arduino nombrado “Control_Mtlb.ino” y colocando

un valor de referencia de 3V con un salto en referencia de un 25% se obtiene el siguiente resultado:

0 2 4 6 8 10 12 14 16 18 20

0

2

4

6

8

10

tiempo(s)

Tensió

n d

el sensor

0 (

V)

Respuesta escalon. Dispositivo 0

Salida

Referencia

0 2 4 6 8 10 12 14 16 18 200

5

10

tiempo(s)Tensió

n d

el actu

ador

0 (

V)

Ilustración 4-8 Respuesta a escalón de la referencia del dispositivo 0 (Control PID)

Se puede observar que el controlar es capaz de mantener la salida siguiendo una referencia incluso

cuando esta sufre un cambio; sin sobreoscilar y sin una saturación de la señal de actuación.

14 Se podría haber realizado un experimento de relé si se hubiese deseado que fuese de bucle cerrado

Aplicación

42

42

Para el dispositivo 1 se realizan unos pasos análogos a los que se han realizado anteriormente para el

otro dispositivo, observando los resultados de este.

Se optado por elegir el mismo tipo de controlador (I-PD con anti-wind up), obteniendo los

parámetros de este mediante el mismo ajuste por tablas (Ziegler-Nichols). Los parámetros del

controlador obtenidos por este ajuste son los siguientes:

Kp 0.9914

Ti 1.452 segundos

Td 0.242 segundos

Tabla 10 Valores de Control PID del dispositivo 1

Tal como se ha realizado anteriormente, se modifican los valores de la ganancia proporcional, el

tiempo integral y derivativo del programa “Control_Mtlb.ino”; y ante la misma referencia y la misma

variación de esta, se obtiene el siguiente resultado:

0 2 4 6 8 10 12 14 16 18 20

0

2

4

6

8

10

tiempo(s)

Tensió

n d

el sensor

1 (

V)

Respuesta escalon. Dispositivo 1

Salida

Referencia

0 2 4 6 8 10 12 14 16 18 200

5

10

tiempo(s)Tensió

n d

el actu

ador

1 (

V)

Ilustración 4-9 Respuesta a escalón de la referencia del dispositivo 1 (Control PID)

Se observa una menor oscilación de la señal de actuación y un menor retraso y oscilación de subida

en la señal del sensor. Esto es debido a las diferencias presente entre los distintos calentadores

disponibles en el propio laboratorio de la Universidad de Sevilla.

43

Junto con este documento se anexan los archivos de configuración “.m” que leen la matriz de valores

obtenidas por el modelo de simulink de Matlab y los representa de la misma forma que se muestra

aquí.15

Para la representación en Matlab es necesario una ligera modificación en la forma que se envían los

datos mediante el puerto serie, y con el objetivo de mantener la facilidad de uso de este código se

dispone de dos códigos para cada experimento (identificación y control), uno en el cual se muestran

los datos de manera que se observen de una forma sencilla a través del monitor serie del propio IDE

de Arduino; y otro en el cual se mandan las señales de forma que el programa de Matlab las organice

y las muestre de la misma forma que se muestran en este documento.

Cabe destacar que todos los experimentos que se muestran en esta sección se han realizado con un

paralelismo absoluto, obteniendo ambas gráficas a la vez, y consiguiendo un control efectivo de dos

dispositivos con un solo módulo de Arduino.

15 Se podrn encontrar bajo los nombres de “Configuracion_esc.m” para el experimento de identificación ante una entrada en escalón y “Configuracion_controlPID.m” para el experimento de seguimento de referencia.

Conclusiones y trabajos futuros

44

44

5 CONCLUSIONES Y TRABAJOS FUTUROS

bservando los resultados obtenidos en las distintas secciones se podría conlcuir que se han

conseguido los propósitos con los cuales se comenzó el trabajo, dejando varias posibles

modificaciones a ser realizadas.

Se ha conseguido diseñar un programa robusto para Arduino que nos permite realizar la

identificación y control de sistemas, tanto de dos sistemas SISO como de un sistema MIMO de hasta

dos entradas y dos salidas.

Al conectarse con un ordenador se obtiene la representación de los datos de este experimento de una

forma gráfica para su mejor visualización. Además, este programa se ha diseñado de tal manera que

permite al usuario modificar de forma fácil y sencilla los parámetros para que se ajusten a sus

necesidades, permitiendo un cambio tanto en la forma de la señal de actuación como de las variables

específicas del sistema.

Como mejora ante el método utilizado antes, se ha conseguido un tiempo de muestreo de hasta 6 ms

(Labview para menos de 10ms deja de ser tan fiable), y se ha conseguido una mayor libertad de uso

para el usuario (los programa realizados por Matlab se podrían realizar con software libre que

también estuviese disponible por el alumno, tal como Gobetwino u Octave).

Aunque se requiera de un ordenador para programar la placa de Arduino Due, una vez que esta se

encuentra con el programa cargado y se ha comprobado que este funciona como se quiere, se podría

dejar funcionando solo con la placa conectada a la corriente, dotando de mayor autonomía al sistema.

Además, si no fuese necesario enviar datos por puerto serie, se podría disminuir el tiempo mínimo de

muestreo.

Tambien se ha diseñado una guía para usuarios que permite una introducción sencilla al módulo que

se quería adaptar para el uso en control digital;

- dos “script” de Matlab que organizan los datos de una forma eficiente y los representa de una

manera general para que sea posible utilzarse en todos los casos posibles;

- y el desarrollo de dos códigos más (Sistema de primer orden y predictor de Smith) de manera

que puedan ser implementados en los distintos sistemas en los cuales fuesen útiles.

Como posibles trabajos futuros sobre este mismo tema, estaría la posibilidad de incluir los códigos

mencionados en el programa de Arduino y probar su funcionalidad. Utilizando el mismo dispositivo

que en este trabajo las posibles mejoras están mas limitadas, pero basándose en la tecnología

Arduino, aunque utilizando una placa distinta, se podría conseguir un mayor número de

entradas/salidas (en esta placa esta capado el número de salidas al contar solo con dos DAC dentro

de la placa y no con las 8 entradas analógicas disponibles) o una mayor capacidad de computación,

consiguiendo así reducir el tiempo mínimo de muestreo para poder realizar controles más exigentes.

Tambien se podrían probar técnicas de control más avanzado para aplicar al programa que se

distribuye al usuario o programar la recogida de datos por otro programa que sea de software libre.

O

45

Glosario

46

46

GLOSARIO

ISO: International Organization for Standardization 4

UNE: Una Norma Española 4

47

Anexo

Los siguientes documentos serán añadidos en la versión digital. De los cuales, “Codigos”, el cual

incluye todos los códigos necesarios para los programas de Arduino; y “Guia de usuario”, donde se

explica al usuario como utilizar el dispositivo completo, paso a paso; son incluidos en la versión física.

Datasheet Potenciómetros Y103 e Y104

Datasheet TL084CN

Datasheet Traco Power TMP 15112c

Códigos.pdf

ObtenciónPuertoSerie.mdl

Identificación.ino

Identificacion_Mtlb.ino

Control.ino

Control_Mtlb.ino

Configuracion_esc.m

Configuracion_controlPID.m

Guía de usuario.pdf