Académique Documents
Professionnel Documents
Culture Documents
Robótica y Mecatrónica.
Autor:
Raúl López Martín
Tutor:
Manuel Gil Ortega Linares
Profesor titular de Universidad
iii
Trabajo Fin de Grado: Adaptación de dispositivo basado en Arduino para pruebas de control por computador
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Sevilla, 2017
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
xv
ÍNDICE DE FIGURAS
xvii
1 INTRODUCCIÓN
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:
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
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.
14
Especificaciones de la fuente de alimentación Traco Power TMP 15512c:
Rendimiento 79%
Fiabilidad 280.000 h
15
16
Descripción Hardware
Microprocesador AT91SAM3X8E
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.
16
Ilustración 2-2 TL084CN
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.
17
18
Descripción Hardware
Tolerancia ±10%
Vueltas ajustables 12
Resolución ∞
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).
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:
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.
21
22
Descripción software
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.
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:
23
24
Descripción software
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:
25
26
Descripción software
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
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:
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.
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
30
Nombre de la variable Explicación
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.
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:
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.
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.
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.
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
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.
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)
37
38
Aplicación
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)
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
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
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
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.
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
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)
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
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)
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
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.
47