Vous êtes sur la page 1sur 55

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

Equation Chapter 1 Section 1

Dep. Ingeniería de Sistemas y Automática


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2017
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

iii
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

v
A todas aquellas personas que
confiaron en mí cuando ni yo lo
hacía.

vii
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

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

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

xiii
Í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
Í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

xv
Í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
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
µ Micro- (prefijo= 10-6)
m Mili- (prefijo= 10-3)
k 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 Señal de tierra (Ground)
Vin Señal de entrada
s Variable de la transformada de Laplace
z Variable de la transformada Z

xvii
1 INTRODUCCIÓN

La ciencia puede divertirnos y apasionarnos, pero es la


Ingeniería la que cambia el mundo.
-Isaac Asimov -

E
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.
12
Introducción

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


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

13
14
Descripción Hardware

2 DESCRIPCIÓN HARDWARE

El todo es mayor que la suma de las partes


-Aristóteles-

D
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 Ilustración 2-1 Fuente de alimentación TMP
electrónicos que se encuentran también incluidos en este 15112
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.

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

15
16
Descripción Hardware

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 p{gina web oficial del producto (https://store.arduino.cc/arduino-due)

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

17
18
Descripción Hardware

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:

Tierra Salida Entrada Tierra Salida Entrada


Analógica 1 Analógica 1 Analógica 2 Analógica 2

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

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

19
20
Descripción software

3 DESCRIPCIÓN SOFTWARE

U
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
𝑦 (𝑛 + )= ∗ [𝐾 ∗ 𝜏 ∗ (𝑢(𝑛) + 𝑢(𝑛 − 1)) − (𝑇𝑠 − 2 ∗ 𝑇𝑚 ) ∗ 𝑦(𝑛 − 1)7
𝑇𝑚 2 ∗ 𝑇𝑚 + 𝜏

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 gr{ficos que muestran los resultados de dicho código
7 Tm es un par{metro 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”

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

21
22
Descripción software

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”

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

23
24
Descripción software

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:

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

25
26
Descripción software

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.

26
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
27
28
Descripción software

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

28
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 p{gina oficial del producto:
http://energia.nu/download/

29
30
Descripción software

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

30
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

31
32
Descripción software

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.

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

33
34
Aplicación

4 APLICACIÓN

Los científicos estudian el mundo tal como es, los ingenieros crean el
mundo que nunca ha sido.

-Theodoro Von Karman-

U
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

34
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

35
36
Aplicación

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.

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

Respuesta escalon. Dispositivo 0

10

8
Tensión del sensor 0 (V)

0 2 4 6 8 10
tiempo(s)
Tensión del actuador 0 (V)

10

0
0 2 4 6 8 10
tiempo(s)

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

37
38
Aplicación

Respuesta escalon. Dispositivo 1

10

8
Tensión del sensor 1 (V)

0
0 2 4 6 8 10
tiempo(s)
Tensión del actuador 1 (V)

10

0
0 2 4 6 8 10
tiempo(s)

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

38
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

39
40
Aplicación

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

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

Respuesta escalon. Dispositivo 0


10
Salida
Referencia
Tensión del sensor 0 (V)

0
Tensión del actuador 0 (V)

0 2 4 6 8 10 12 14 16 18 20
tiempo(s)
10

0
0 2 4 6 8 10 12 14 16 18 20
tiempo(s)

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

41
42
Aplicación

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:

Respuesta escalon. Dispositivo 1


10
Salida
Referencia
Tensión del sensor 1 (V)

0
Tensión del actuador 1 (V)

0 2 4 6 8 10 12 14 16 18 20
tiempo(s)
10

0
0 2 4 6 8 10 12 14 16 18 20
tiempo(s)

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.

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

15Se podr{n 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.

43
44
Conclusiones y trabajos futuros

5 CONCLUSIONES Y TRABAJOS FUTUROS

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

44
45
46
Glosario

GLOSARIO
ISO: International Organization for Standardization 4
UNE: Una Norma Española 4

46
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

47

Vous aimerez peut-être aussi