grado en ingeniería electrónica, robótica y mecatrónica...

75
i Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería Electrónica, Robótica y Mecatrónica Intensificación en Robótica y Automatización Comunicación de tarjetas de adquisición de datos NI con Quarc e integración con prácticas de control Autor: Adrián Rodríguez Galisteo Tutor: Francisco Salas Gómez Dep. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2017

Upload: others

Post on 23-Jan-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

i

Equation Chapter 1 Section 1

Trabajo Fin de Grado

Grado en Ingeniería Electrónica, Robótica y

Mecatrónica

Intensificación en Robótica y Automatización

Comunicación de tarjetas de adquisición de datos NI

con Quarc e integración con prácticas de control

Autor: Adrián Rodríguez Galisteo

Tutor: Francisco Salas Gómez

Dep. Ingeniería de Sistemas y Automática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 2: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

ii

Page 3: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

iii

Trabajo Fin de Grado

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

Comunicación de tarjetas de adquisición de datos

NI con Quarc e integración con prácticas de control

Autor:

Adrián Rodríguez Galisteo

Tutor:

Francisco Salas Gómez

Profesor titular

Dep. de Ingeniería de Sistemas y Automática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2017

Page 4: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

iv

Page 5: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

v

Trabajo Fin de Grado: Comunicación de tarjetas de adquisición de datos NI con Quarc e integración con

prácticas de control

Autor: Adrián Rodríguez Galisteo

Tutor: Francisco Salas Gómez

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

Page 6: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

vi

Page 7: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

vii

Resumen

Este proyecto intenta solucionar un problema con el que se han encontrado diversos profesores en asignaturas

de control automático en nuestra Escuela Técnica Superior de Ingeniería. Hasta ahora, las prácticas de estas

asignaturas se han realizado haciendo uso de las tarjetas de adquisición de datos de la empresa National

Instruments™, a través de LabVIEW®, software avanzado para el control en tiempo real.

Este método trae consigo un inconveniente, es el hecho de que no es eficiente enseñar un software tan avanzado

en cursos bajos, por lo tanto, se ha conseguido adaptar las tarjetas de adquisición de datos de NI™ a MATLAB®

Simulink mediante el software de control en tiempo real QUARC® de la empresa Quanser Inc.

Como objetivo adicional, se ha intentado usar una placa de desarrollo Arduino® en lugar de las tarjetas de

adquisición de datos de NI™, de cara a optimizar costes, llegando a un problema en el que no se ha encontrado

solución.

Page 8: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

viii

Page 9: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

ix

Abstract

This project tries to solve a problem which many teachers have found in subjects of automatic control in our

Higher Technical School of Engineering. Until now, lab practices of these subjects have been made using the

data acquisition cards of National Instruments™ company, through LabVIEW®, advanced software for real-time

control.

This method entails a drawback, it is the fact that is not useful to teach such advanced software in early years,

therefore, it has been possible to adapt NI™ DAQ cards to MATLAB® Simulink using a real-time control

software called QUARC® of the company Quanser Inc.

As an additional goal, it has been tried to use an Arduino development board instead of NI™ DAQ cards, in order

to optimize costs, reaching a problem that has no solution.

Page 10: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

x

Índice

Resumen vii

Abstract ix

Índice x

Índice de Tablas xiii

Índice de Figuras xv

Notación xvii

1 Introducción 2 1.1 Adquisición de datos (DAQ) 2 1.2 Objetivos 3 1.3 Motivaciones 3

2 Integración NI™ USB-6211 con QUARC® 4 2.1 Hardware 4

2.1.1 Tarjeta de adquisición de datos NI™ USB-6211 4 2.1.2 Feedback 33-100 Mechanical Plant 5

2.2 Software 6 2.2.1 MATLAB® 6 2.2.2 QUARC® 6 2.2.3 NI-DAQmx 7

2.3. Conexionado 8 2.4. Configuración inicial 10 2.5. Adquisición de datos del motor 13

2.5.1 Conclusiones control manual 17 2.6. Control automático 17

2.6.1 Posición 18 2.6.1.1 Implementación en Simulink® 18 2.6.1.2 Funcionamiento 20

2.6.1.2.1 Seguimiento de referencia 21 2.6.1.2.2 Rechazo a perturbaciones 22 2.6.1.2.3 Conclusiones 23

2.6.2 Velocidad 23 2.6.2.1 Implementación en Simulink® 23 2.6.2.2 Funcionamiento 24

2.6.2.2.1 Seguimiento de referencia 25 2.6.2.2.2 Rechazo a perturbaciones 26 2.6.2.2.3 Conclusiones 27

3 Integración Arduino® con QUARC® 29 3.1 Hardware 29

3.1.1 Feedback 33-100 Mechanical Plant 29 3.1.2 Arduino® UNO 29 3.1.3 Placa de pruebas 30 3.1.4 USB-to-TTL 30

Page 11: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xi

3.1.5 Componentes electrónicos 30 3.2 Software 31

3.2.1 MATLAB® 31 3.2.2 QUARC® 31 3.2.3 Arduino® IDE 31

3.3 Procedimiento 31 3.3.1 Primer objetivo – Recibir valor de prueba 31 3.3.2 Segundo objetivo – Recibir datos del motor 36

3.3.2.1 Conexionado 36 3.3.2.2 Implementación en IDE y Simulink® 37 3.3.2.3 Experimentos 38

3.3.3 Tercer objetivo – Enviar datos al motor 39 3.3.3.1 Conexionado 39 3.3.3.2 Implementación en IDE y Simulink® 40 3.3.3.3 Experimentos y conclusiones 43

3.3.4 Cuarto objetivo – Filtrado de la señal PWM 44 3.3.5 Quinto objetivo – Amplificación de la señal 45

3.3.5.1 Conexionado 45 3.3.5.2 Experimentos y conclusiones 47

3.3.6 Sexto objetivo – Control de la polaridad de la señal 47 3.3.6.1 Conexionado 48 3.3.6.2 Experimentos y conclusiones 49

3.3.7 Séptimo objetivo – Control en tiempo real 50

4 Conclusiones 52 4.1 Integración NI™ USB-6211 con QUARC® 52

4.1.1 Posibles mejoras 52 4.2 Integración Arduino® con QUARC 52

4.2.1 Posibles mejoras 53

Bibliografía 55

Anexo I: Códigos de Arduino® 56

Page 12: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xii

Page 13: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xiii

ÍNDICE DE TABLAS

Tabla 1. Parametros PID - Control POS 20

Tabla 2. Parametros PID - Control VEL 24

Tabla 3. Componentes electrónicos necesarios 30

Page 14: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xiv

Page 15: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xv

ÍNDICE DE FIGURAS

Figura 1: Diagrama del proceso de adquisición de datos 2

Figura 2: NI™ USB-6211 4

Figura 3: Esquema E/S NI™ USB-6211 5

Figura 4: Feedback 33-100 5

Figura 5: Logotipo MATLAB® 6

Figura 6: Área de trabajo Simulink® 6

Figura 7: Logotipo QUARC® 6

Figura 8: Menú desplegable QUARC® 7

Figura 9: Logotipo NI™ 7

Figura 10: Interfaz usuario NI-DAQ MAX 7

Figura 11: Puerto USB NI™ USB-6211 8

Figura 12: Conexionado Feedback 33-100 con NI™ USB-6211 8

Figura 13: Circuito RSE 8

Figura 14: Acceso 'Test Panels' NI-DAQ MAX 9

Figura 15: Paneles de prueba NI-DAQ MAX 9

Figura 16: Circuito diferencial 9

Figura 17: Pulsador de chequeo del motor 10

Figura 18: Configuración Simulink® - Paso 1 10

Figura 19: Configuración Simulink® - Paso 2 11

Figura 20: Configuración NI™ USB-6211 - Paso 1 11

Figura 21: Configuración NI™ USB-6211 - Paso 2 12

Figura 22: Configuración NI™ USB-6211- Paso 3 12

Figura 23: Configuración NI™ USB-6211 - Paso 4 13

Figura 24: Bloques 'HIL Read Analog' y 'HIL Write Analog' 13

Figura 25: Configuración 'HIL Read Analog' POS 14

Figura 26: Modelo Simulink® DAQ - Control manual 15

Figura 27: Gráficas control manual 16

Figura 28: Control PID Simulink® 18

Figura 29: Modelo Simulink® control POS 19

Figura 30: Modelo Simulink® control POS - final 20

Figura 31: Gráficas control POS - Seguimiento 21

Figura 32: Gráficas control POS - Rechazo perturbaciones 22

Figura 33: Modelo Simulink® control VEL 24

Figura 34: Modelo Simulink® control VEL - final 24

Page 16: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xvi

Figura 35: Gráficas control VEL - Seguimiento 25

Figura 36: Gráficas control VEL - Rechazo perturbaciones 26

Figura 37: Arduino® UNO 29

Figura 38: Placa de pruebas o protoboard 30

Figura 39: Módulo USB-to-TTL 30

Figura 40: Logotipo Arduino® 31

Figura 41: Selección Arduino® y puerto 32

Figura 42: Bloques QUARC® necesarios – Recepción de datos 32

Figura 43: Subsistema 'Skip to next line' 34

Figura 44: Modelo Simulink® lectura serial - prueba 35

Figura 45: Resultado prueba incial 35

Figura 46: Divisor de tensiones 36

Figura 47: Esquema conexión inicial 36

Figura 48: Modelo Simulink® - Medir POS 37

Figura 49: Modelo Simulink® - Medir VEL 38

Figura 50: Resultado control manual - POS 38

Figura 51: Resultado control manual - VEL 39

Figura 52: Esquema conexión tercer objetivo 40

Figura 53: Subsistemas 'enviado' y 'recibido' en Simulink® 41

Figura 54: Bloques QUARC® necesarios - Envio de datos 41

Figura 55: Subsistema envio de datos Simulink® 43

Figura 56: Voltímetro 1 43

Figura 57: Filtro de paso bajo RC 44

Figura 58: Esquema conexión cuarto objetivo 44

Figura 59: Circuito integrado LM324N 45

Figura 60: Circuito amplificador OPAMP 45

Figura 61: Esquema conexión quinto objetivo 46

Figura 62: Voltímetro 2 47

Figura 63: Offset solución negativo 47

Figura 64: Circuito integrado L293D 48

Figura 65: Esquema conexión sexto objetivo 49

Figura 66: Subsistema PID séptimo objetivo 50

Figura 67: Modelo Simulink séptimo objetivo 50

Page 17: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

xvii

Notación

NI™ National Instruments™

DAQ

E/S

AI

AO

DI

DO

ADC

Data Acquisition

Entrada/Salida

Analog Input

Analog Output

Digital Input

Digital Output

Analog – Digital Converter

DAC Digital – Analog Converter

PFI Programmable Function Interface

HIL Hardware-in-the-loop

POS Posición

VEL Velocidad

SC Señal de control

RSE Single-Ended Ground Referenced

PWM Pulse-width modulation

OPAMP Operational Amplifier

Page 18: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

1

Page 19: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

2

1 INTRODUCCIÓN

1.1 Adquisición de datos (DAQ)

a adquisición de datos es el proceso en el cual tomamos muestras de una magnitud medible, ya sea física

o eléctrica, para poder manipular estos datos desde un dispositivo electrónico, como puede ser un

ordenador.

Para poder obtener esos datos en nuestro dispositivo es necesario un elemento intermedio, que se encargue de

convertir la magnitud física en una señal digital, ese elemento es conocido como ‘tarjeta de adquisición de datos’.

El proceso es más complejo que ‘tomar muestras y manipular’, el primer paso para la adquisición de datos es

adquirir la señal deseada mediante sensores: velocidad, presión, temperatura, etc. Una vez hemos obtenido la

señal es necesario un acondicionamiento de ésta misma, este proceso puede incluir diversas transformaciones

para adaptar la señal original a nuestro sistema. Y, por último, convertimos la señal digitalmente para poder

trabajar con ella desde nuestro ordenador.

Figura 1: Diagrama del proceso de adquisición de datos

L

El éxito es el resultado de un 1% de inspiración y de un

99% de transpiración.

- Thomas Alva Edison -

Page 20: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

3

Existe un amplio abanico de diferentes tarjetas de adquisición de datos, en un gran rango de diferentes precios,

dependiendo del formato, número de puertos de E/S, otro tipo de características y del fabricante.

Toda esta información descrita hasta este punto era indispensable para el entendimiento de este proyecto, y para

entender los motivos que han llevado a su realización.

1.2 Objetivos

En nuestra Escuela de Ingenieros, tanto en estudios de grado como en estudios de máster, hay múltiples

asignaturas de control automático, desde cursos bajos, a los últimos cursos.

Hasta ahora, en las prácticas de laboratorio de estas asignaturas de control se está usando el software LabVIEW®,

se trata de una herramienta avanzada y poco intuitiva, y puesto que no en todas las carreras se profundiza en este

tema, no se obtiene un resultado óptimo en cuanto al tiempo invertido en proporción a los aprendido por el

alumno, por lo que suele ser un quebradero de cabeza para algunos profesores empezar a enseñar control

automático en cursos bajos con esta herramienta, ya que los alumnos no están familiarizados con su entorno.

Partiendo de este problema, surge el principal objetivo del proyecto, encontrar la herramienta necesaria que

adecúe el nivel que quiere impartir el profesor y la dificultad de su aprendizaje. Podemos catalogarlo como:

- Integración NI USB-62111 con QUARC®2: Usando la versión de QUARC® existente para Matlab®

Simulink, se pretende integrar la tarjeta citada anteriormente con este software, para poder ser usado en

próximas prácticas de control. El objetivo es dejar un equipo totalmente funcional.

Una vez se cumpla el objetivo anterior, nos planteamos una posible mejora, es cierto que las tarjetas de

adquisición de datos de NI™ disponibles en el laboratorio cumplen los requisitos necesarios para las prácticas,

pero también es cierto, que poseen un precio elevado, siendo el precio de venta al mercado desde 1.061 euros3

cada una, por ello, nos buscamos una alternativa que nos permitiera reducir los costes, fijándonos el siguiente

objetivo:

- Integración Arduino® con QUARC®: Teóricamente se ha comprobado que la placa de desarrollo

Arduino® puede ser usado como tarjeta de adquisición de datos, y puesto que su precio de mercado es

de cien veces menor que las tarjetas de NI™, se va a intentar conseguir el objetivo anterior, pero con la

nueva placa.

1.3 Motivaciones

A pesar de que este proyecto no fue mi primera opción en el proceso de selección de trabajo de fin de

grado, cuando finalizó y me lo pre-asignaron, me informé de que trataba y no dudé en aceptarlo cuando

supe que al realizarlo estaba solucionando un problema real que está teniendo el profesorado, que tenía

que trabajarlo e investigar para dar con la solución y no se trataba de un proyecto simple y rápido con los

pasos a seguir.

1 Tarjeta de adquisición de datos que se usará durante todo el proceso del primer objetivo, más adelante se profundizará en su descripción. 2 Software de control en tiempo real desarrollado por la empresa Quanser, más adelante se profundizará en su descripción. 3 http://www.ni.com/es-es/support/model.usb-6211.html

Page 21: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

4

2 INTEGRACIÓN NI™ USB-6211 CON QUARC®

uestro primer objetivo del proyecto se abarcará en este apartado, es necesario saber que elementos

componen nuestro trabajo y que función realizan. Se ha divido en la parte hardware y en la parte

software.

En ambas partes se han usado elementos poco extendidos, por lo que es recomendable prestar atención a este

apartado para entender cada paso con claridad.

2.1 Hardware

2.1.1 Tarjeta de adquisición de datos NI™ USB-6211

La tarjeta NI™ USB-6211 será la encargada de recoger las muestras

tomadas por los sensores y adaptarlas a nuestro dispositivo, en nuestro caso,

un ordenador. Es la pieza fundamental en esta parte del proyecto.

Esta tarjeta tiene una conexión al PC mediante USB, el cual es un método

muy estandarizado. Se ha elegido este modelo ya que era el disponible en

los laboratorios de nuestra escuela y cumplía los requisitos a la perfección.

Se trata de un dispositivo E/S multifunción que cuenta con AI, AO, DI y

DO:

- Entradas analógicas: Son 16 puertos, pero pueden ser usados como

8 canales en modo diferencial, más adelante veremos la diferencia

y la importancia de saber distinguir cada modo.

El ADC necesario con el que contamos para poder manipular las

señales desde el PC tiene una resolución de 16 bits.

Nuestras entradas analógicas son capaces de trabajar en un rango

bastante amplio de voltaje, desde ±0.2 V hasta ±10 V, llegando a

un máximo de ±10.4 V contando la señal más el modo común.

- Salidas analógicas: Contamos con 2 salidas analógicas, suficientes para el trabajo que vamos a realizar.

Estas salidas analógicas son capaces de aportar hasta unos valores máximos de ±10 V.

El DAC con el que contamos para estos puertos tiene una resolución de 16 bits.

- Salidas/Entradas digitales: Contamos con 4 puertos para cada tipo de canal, trabajando en un rango de

0 V a 5 V.

N

El tiempo es limitado, así que no lo pierdas viviendo la

vida de otra persona.

- Steve Jobs -

Figura 2: NI™ USB-6211

Page 22: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

5

Hasta aquí hemos tenido un pequeño resumen de las especificaciones más importantes y necesarias para nuestro

proyecto, pero no son todas, si se desea obtener una información más detallada, animo acudir a la página web

de NI™ donde encontrará el manual de la tarjeta4.

Una vez conocemos los puertos que tenemos disponibles, vamos a ver un esquema de cómo están distribuidos

en nuestra tarjeta de adquisición de datos:

Figura 3: Esquema E/S NI™ USB-6211

A partir de este punto, cuando queramos referirnos a un canal en concreto lo haremos por la etiqueta que posee,

en lugar de con el número de puerto.

2.1.2 Feedback 33-100 Mechanical Plant

Esta unidad servomotora forma parte del sistema ‘Feedback

Mechanical Unit Control & Instrumentation 33-100’.

Esta unidad será nuestro objetivo que controlar, tanto en

posición, como en velocidad.

En la circunferencia del extremo derecho de nuestro sistema

podemos observar un rango de medida de 0º a 360º en

posición, midiéndose gracias a un encoder de 6 bits de código

Gray5 y dando el valor en voltios por la salida de color verde,

‘POS’, en la esquina inferior izquierda de la imagen, siendo el

rango de voltaje de -5V a 5V.

Por otro lado, tenemos la velocidad, medida por el encoder que

se ve en el extremo izquierdo del sistema, del mismo tipo que

el de posición, en este caso, la salida en voltaje de la velocidad

la tendremos por el puerto de color amarillo, ‘VEL’,

ofreciendo una sensibilidad de 2.5 voltios/1000 rpm.

El siguiente conector por comentar, se trata del etiquetado como ‘ACT’, color azul, ya que se refiere al puerto

de actuación de sistema, es decir, donde entrará el voltaje que deseamos en cada momento, tiene un rango de

actuación de -10V a 10V.

Otro aspecto que destacar, es la presencia de dos fuentes de alimentación, de ±15V y de +5V, que posee el

sistema en la parte trasera, de las que haremos uso más adelante.

Por último, el conector negro, etiquetado como ‘GND’ que hace referencia a la tierra del sistema, en el que no

haremos descripción ninguna al ser un concepto muy básico.

4 http://www.ni.com/pdf/manuals/375195c.pdf 5 El código binario reflejado o código Gray, nombrado así en honor del investigador Frank Gray, es un sistema de numeración binario en el que dos valores sucesivos difieren solamente en uno de sus dígitos (Wikipedia, 2008).

Figura 4: Feedback 33-100

Page 23: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

6

2.2 Software

2.2.1 MATLAB®

Este software posee una herramienta llamada Simulink®, basada en la programación

por bloques, será nuestra área de trabajo durante todo el proceso, se caracteriza por ser

un lenguaje de programación muy intuitivo y visual.

La versión de MATLAB® usada dependerá de la versión del software QUARC®, que

explicamos a continuación.

2.2.2 QUARC®

Se trata de un software de control en tiempo real, desarrollado por la

empresa Quanser®, usaremos la versión existente para Simulink®.

El proyecto se apoya sobre la versión 2.4, no es la última actualización del

software, pero es válida para la realización de nuestro objetivo. Esta

versión solo es compatible con los sistemas operativos Windows® 7 y

Windows® 8. Para la instalación de este software es necesario tener

preinstalado MATLAB® y un compilador C++ soportado por MATLAB®.

La empresa posee una guía de instalación rápida bastante útil en su página web, así como un documento para

guiarte en los primeros pasos y una guía completa de todos los bloques disponibles y su funcionamiento6.

El software incluye una sección de demostraciones con ejemplos muy útiles para familiarizarse con el entorno

de programación. Una vez esté todo instalado correctamente nos aparecerá una pestaña como esta con todos los

submenús y opciones disponibles:

6 http://www.quanser.com/Products/quarc/documentation/index.html

Figura 5: Logotipo

MATLAB®

Figura 6: Área de trabajo Simulink®

Figura 7: Logotipo QUARC®

Page 24: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

7

Figura 8: Menú desplegable QUARC®

2.2.3 NI-DAQmx

Este software es básicamente el driver de funcionamiento de

nuestra tarjeta de adquisición de datos, pero se le ha querido dedicar

un subapartado ya que incluye una herramienta que nos ha sido útil

y que forma parte del proceso, por lo que se le puede considerar un

software auxiliar.

La herramienta en cuestión es ‘NI Measurement & Automation Explorer’, en la figura 10 se puede observar su

interfaz de usuario.

Podemos encontrar opciones bastante útiles, desde el esquema de puertos disponibles de la tarjeta que

conectemos (véase figura 3) a diversos paneles de prueba para comprobar el correcto funcionamiento de nuestro

sistema.

Figura 9: Logotipo NI™

Figura 10: Interfaz usuario NI-DAQ MAX

Page 25: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

8

2.3. Conexionado

Lo primero a realizar es el conexionado de nuestro sistema, para ello veamos un esquema general:

La conexión del PC a nuestra tarjeta se realizará mediante USB, si la tarjeta está correctamente

alimentada, se encenderá el led que se observa en la figura 11 de color verde.

La conexión entre nuestro motor y la tarjeta se realiza mediante cinco cables, el cable de posición,

velocidad, actuación y los dos cables de tierra correspondientes.

Nótese que el cable de tierra de las entradas analógicas no está conectado al pin etiquetado como ‘AI GND’,

sino que está conectado en ‘AI 9’, eso es debido al tipo de medición de voltaje que queremos realizar.

En el montaje inicial, ese cable estaba conectado a la salida ‘AI GND’, es decir, la

entrada analógica estaba referenciada a tierra, para hacernos una idea, podemos

ver la figura 13.

PC NI™ USB-

6211

Feedback

33-100 Red eléctrica

Figura 11: Puerto USB NI™ USB-6211

ACT GND POS VEL

NI™ USB-6211

Feedback 33-100

Figura 12: Conexionado Feedback 33-100 con NI™ USB-6211

Figura 13: Circuito RSE

Page 26: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

9

Se pensaba que era la configuración correcta, pero cuando se empezaron a hacer pruebas comprobamos que no

realizaba correctamente la medición cuando se recibían valores negativos, es decir, cuando se pretendía medir

la posición, el rango se acortaba a valores positivos de 0 V a 5 V, medio recorrido. Y en el caso de la velocidad,

solo medía velocidades positivas, es decir, solo un sentido de giro.

En esta situación, el software ‘NI Measurement & Automation Explorer’ fue clave pare solucionar este

problema. La aplicación trae consigo paneles de prueba, como se dijo anteriormente, para acceder a ellos solo

hay que seleccionar nuestra tarjeta de la lista de dispositivos e interfaces y acceder a la opción ‘Test Panels…’

(véase figura 14).

Figura 14: Acceso 'Test Panels' NI-DAQ MAX

Dentro de los paneles de prueba tenemos la opción de elegir la configuración de entrada, por lo que

seleccionamos RSE, que era la configuración actual de conexión, al ver que seguía sin tomar las mediciones

deseadas, probamos el resto de configuraciones disponibles, hasta que, al seleccionar la configuración

diferencial, realizaba correctamente mediciones negativas.

Los bloques usados para la lectura de los canales, de los que hablaremos más adelante, no disponen de esa

opción para la configuración, por lo que tuvimos que optar por la solución física, es decir, no referencia el

cable negativo a tierra, sino conectarlo en ‘AI 9’, de modo que tengamos la medición de entrada en modo

diferencial (véase figura 16).

Figura 16: Circuito diferencial

Figura 15: Paneles de prueba NI-DAQ MAX

Page 27: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

10

Por último, conectamos el motor a la red eléctrica mediante su cable de alimentación, para comprobar

que está correctamente alimentado, nuestro sistema posee un pulsador que proporciona corriente para

poner en movimiento el motor en ambas direcciones (véase figura 17).

2.4. Configuración inicial

La configuración que trae por defecto Simulink® no es válida para el control en tiempo real, por ello debemos

empezar ajustando nuestro software.

Paso 1: Cambiamos el modo de simulación a ‘External’ y accedemos al panel de configuración de

parámetros de nuestro modelo.

Figura 18: Configuración Simulink® - Paso 1

Figura 17: Pulsador de chequeo del motor

Page 28: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

11

Paso 2: Una vez dentro definimos los siguientes parámetros en el subapartado ‘Solver’.

o Start time: Tiempo en el que va a empezar la toma de datos (en segundos).

o Stop time: Tiempo en el que va a terminar la toma de datos (en segundos).

o Type: Tipo de solucionador que vamos a utilizar.

o Solver: Solucionador que utilizaremos.

o Fixed-step size: Tiempo de muestreo (en segundos).

o El resto de parámetros los dejamos por defecto.

Una vez configurado Simulink®, es turno de inicializar la tarjeta en nuestro modelo:

Paso 1: Buscamos el bloque de inicialización de HIL en la librería de bloques y lo añadimos.

Figura 19: Configuración Simulink® - Paso 2

Figura 20: Configuración NI™ USB-6211 - Paso 1

Page 29: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

12

Paso 2: Hacemos clic en el bloque y entramos en la configuración principal, en la pestaña ‘Main’,

o Board name: Etiqueta con la que haremos

referencia a nuestra tarjeta.

o Board type: Modelo de nuestra tarjeta.

o Board identifier: Identificador para la

tarjeta, útil en caso de tener conectada

más de una.

Paso 3: La siguiente pestaña que vamos a modificar es ‘Analog Inputs’.

o Analog input channels: Canales de la

tarjeta que vamos a usar para tomar los

datos.

o Analog inputs maximums: Valor máximo

que puede tomar nuestro canal de entrada.

o Analog inputs minimums: Valor mínimo

que puede tomar nuestro canal de salida.

Figura 21: Configuración NI™ USB-6211 - Paso 2

Figura 22: Configuración NI™ USB-6211- Paso 3

Page 30: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

13

Paso 4: Por último, pasamos a configurar la pestaña llamada ‘Analog Outputs’.

o Analog output channels: Canales de la

tarjeta que vamos a tomar como salida de

datos.

o Analog output maximums: Valor máximo

que puede tomar nuestro canal de salida.

o Analog output minimums: Valor mínimo

que puede tomar nuestro canal de salida.

o El resto de parámetros los dejamos por

defecto.

2.5. Adquisición de datos del motor

Una vez tenemos inicializada la tarjeta de adquisición de datos, vamos a añadir los bloques necesarios para

empezar la toma de muestras de nuestro motor.

En la misma ventana donde tenemos el bloque ‘HIL Initialize’, colocaremos la función ‘Clock’ y le asignaremos

la variable ‘t’, ya que nos resultará útil en caso de que queramos hacer una representación gráfica de los valores

respecto al tiempo.

La función ‘Clock’ se encuentra dentro de nuestra librería en la carpeta Simulink > Sources.

Los dos siguientes bloques que vamos a necesitar se encuentran en la misma carpeta de la librería, y son los

encargados de leer y escribir datos (véase figura 24).

Figura 23: Configuración NI™ USB-6211 - Paso 4

Figura 24: Bloques 'HIL Read Analog' y 'HIL Write Analog'

Page 31: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

14

El bloque ‘HIL Read Analog’ lo tendremos por duplicado, uno para la velocidad y otro para la posición.

Hacemos doble clic en un uno de ellos y lo configuramos correctamente con el canal que le corresponde, en la

figura 25 podemos ver el bloque ‘HIL Read Analog’ que mide la velocidad.

o Board name: Referenciamos a la etiqueta que definimos en el bloque ‘HIL intialize’ para elegir nuestra

tarjeta.

o Channels: Canal del que vamos a realizar la toma de datos.

o Sample time (seconds): Tiempo de muestro, en nuestro caso, con ese comando se le dice que tome el

valor que definimos en los parámetros iniciales de Simulink® (véase figura 19).

Para el bloque ‘HIL Read Analog’ correspondiente a la velocidad, el nunca cambio que tenemos que hacer es el

cambio del canal, siendo esta vez el canal [1].

Una vez tenemos los bloques de lectura, es necesario añadir el bloque de escritura ‘HIL Write Analog’ para

poder definir un voltaje manualmente y que el motor empiece a funcionar sin necesidad de usar el pulsador de

chequeo del motor.

La única configuración necesaria en este bloque es seleccionar nuestra tarjeta y definir el canal analógico [0]

como canal de escritura, el resto de parámetros lo dejamos por defecto.

Para poder definir un valor de voltaje que recoja este bloque, es necesario que añadamos una fuente de valor

constante, ‘Constant’, este bloque se encuentra en Librería > Simulink > Sources. El valor que definamos como

parámetro podremos cambiarlo en cualquier momento durante la ejecución de experimentos simplemente dando

doble clic encima.

Para ver el funcionamiento y los valores que va tomando nuestro motor en posición y en velocidad es necesario

ir representando las salidas durante la simulación, para ello añadiremos dos bloques más, estos bloques se llaman

‘Scope’ y se encuentra en Librería > Simulink > Sinks.

Añadimos un tercer ‘Scope’ para representar la señal de control, y tener una referencia a la hora de comparar las

gráficas.

Los ‘Scopes’ son configurables, permitiéndonos elegir los máximos y mínimos, tanto en el X como en el eje Y,

para facilitarnos la representación de los valores, otra configuración, aunque menos importante, es la

personalización del marco, fondo, línea de valores, etc.

Figura 25: Configuración 'HIL Read Analog' POS

Page 32: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

15

Hasta aquí sería suficiente para empezar la adquisición de datos, pero el motor ‘Feedback 33-100’ trabaja con

voltajes, con esto queremos decir que los valores de salida en posición y en velocidad, tal como está nuestro

modelo, los representaríamos en voltios, por ello, vamos a realizar una conversión de unidades con el fin de

entender mejor que está pasando, y dar unos resultados realistas.

En posición, nuestro objetivo es trabajar en radianes, así que calculamos el factor de conversión necesario.

Sabiendo que el valor máximo de voltaje que recibimos es de 5 V y que dicho valor corresponde a una posición

de 2π radianes,

𝑆𝑒𝑛𝑠𝑖𝑏𝑖𝑙𝑖𝑑𝑎𝑑 =2𝜋 [𝑟𝑎𝑑]

5 [𝑉]= 1.256 [

𝑟𝑎𝑑

𝑉] →

→ 𝑃𝑜𝑠𝑖𝑐𝑖ó𝑛 𝑎𝑐𝑡𝑢𝑎𝑙 [𝑟𝑎𝑑] = 𝑃𝑜𝑠𝑖𝑐𝑖ó𝑛 𝑎𝑐𝑡𝑢𝑎𝑙 [𝑉] · 1.256 [𝑟𝑎𝑑

𝑉]

En velocidad, seguimos el mismo procedimiento, recibimos el valor en voltios, y en este caso lo queremos en

revoluciones por minuto (rpm), de las especificaciones del motor que nos da el fabricante, sabemos que la

sensibilidad es de 2.5 V cada 1000 rpm (véase página 5), por tanto,

𝑆𝑒𝑛𝑠𝑖𝑏𝑖𝑙𝑖𝑑𝑎𝑑 =1000 [𝑟𝑝𝑚]

2.5 [𝑉]= 400 [

𝑟𝑝𝑚

𝑉] →

→ 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑎𝑐𝑡𝑢𝑎𝑙 [𝑟𝑝𝑚] = 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝑎𝑐𝑡𝑢𝑎𝑙 [𝑉] · 400 [𝑟𝑝𝑚

𝑉]

Teniendo los dos factores de conversión calculados, pasamos a añadir los bloques necesarios para implementarlo

en nuestro modelo, este bloque se trata del bloque de ganancia ‘Gain’, este bloque multiplica el valor de entrada

por el factor que le indiquemos en sus parámetros, está localizado en Librería > Simulink > Math Operations.

Después de añadir todos los bloques necesarios para comenzar la adquisición de datos correctamente, nuestro

modelo Simulink® quedaría como vemos en la figura 26.

Figura 26: Modelo Simulink® DAQ - Control manual

Page 33: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

16

El siguiente paso que tenemos que hacer para saber si todo ha sido configurado correctamente, y el paso previo

antes de hacerlo funcionar, es compilar nuestro modelo, para ello nos vamos a la pestaña ‘QUARC’ en la barra

de herramientas (véase figura 8), y le damos a ‘Build’.

El proceso de compilación se puede seguir en la pantalla de comandos principal MATLAB®, al no existir errores

y todo estar correcto, nos aparece la siguiente frase:

“### Model *nombre del modelo* has been downloaded to target 'shmem://quarc-target:1' (*X* bytes)”

Al haber configurado el modo de simulación como ‘External’, tenemos que conectarnos a la tarjeta primero,

pulsando el icono a la izquierda de ‘Run’, llamado ‘Connect To Target’. Ahora si, podemos ejecutarlo dándole

a ‘Run’.

Para comprobar el funcionamiento se han hecho una serie de experimentos, dando diferentes escalones a la señal

del control, lo hemos denominado ‘control manual’.

S.C

.[V

] P

OS

[ra

d]

VE

L [

rpm

]

t [s] Figura 27: Gráficas control manual

Page 34: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

17

2.5.1 Conclusiones control manual

Observando en la figura 27 el comportamiento del motor ante escalones positivos y negativos se puede

considerar que responde muy bien a los estímulos, se puede ver que el cambio de sentido de giro es inmediato.

También podemos ver en la gráfica de la velocidad pequeños resaltos en la mitad de cada tramo marcado con

línea discontinua, si nos fijamos también en la gráfica de la posición, comprobamos que este fenómeno ocurre

cuando completamos una vuelta, y esto es debido a que la posición de 0 radianes y de 2π radianes es la misma,

entonces, el valor de 2π radianes exactos nunca lo va a tomar, por lo que a su paso por esa posición, recibirá los

0 voltios correspondientes a la posición 0 radianes, y la gráfica tenderá a irse a éste valor.

Dejando a un lado las conclusiones de funcionamiento, vamos a comentar las conclusiones generales de este

apartado.

Hasta ahora hemos conseguido sacar con éxito la base del proyecto, en lo que al primer objetivo respecta, ha

sido un apartado relativamente sencillo una vez conoces cómo funciona el sistema, a pesar de encontrarnos con

varios problemas durante el desarrollo, se han conseguido solventar sin demorar en exceso el tiempo de trabajo.

Una vez hemos conseguido hacerlo funcionar manualmente, vamos a pasar a implementar el control automático,

tanto en posición, como en velocidad.

2.6. Control automático

El objetivo del control automático en este apartado es poder definir un valor de voltaje para la señal de control

a partir de una posición/velocidad de referencia definida por el usuario manualmente aplicando técnicas de

control.

Antes de empezar con el procedimiento, es importante tener claros varios conceptos. Se va a implementar una

configuración de control PID, para que el usuario que haga uso del modelo pueda ir modificando los parámetros.

El control PID hace referencia a un control proporcional, integral y derivativo, para su funcionamiento se deben

definir previamente los parámetros necesarios, Kp o ganancia proporcional, Ti o tiempo integral y Td o tiempo

derivativo. Es el control más completo, por lo que, teóricamente será el que mejor resultado nos proporcione.

Partiendo del control PID, podemos derivar en un control PD o PI, solamente haciendo nulos los parámetros

correspondientes.

La estructura de un controlador genérico PID es: 𝐶𝑃𝐼𝐷(𝑠) = 𝐾𝑝(1 +1

𝑇𝑖𝑠+ 𝑇𝑑𝑠)

Una vez tengamos nuestro controlador, se van a realizar dos tipos de experimentos, seguimiento de referencia y

rechazo a perturbaciones. El primero, como su propio nombre indica, es alcanzar la referencia marcada por el

usuario, y el segundo experimento consiste en dar una perturbación externa al motor, como puede ser modificar

su posición o velocidad manualmente con el pulsador de chequeo del motor, y comprobar cómo reacciona

nuestro controlador.

Sabiendo esto, vamos a pasar al primero de los controles, el control automático en posición.

Page 35: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

18

2.6.1 Posición

2.6.1.1 Implementación en Simulink®

Comenzamos partiendo del modelo que ya teníamos creado del apartado anterior, pero para más claridad, y ya

que vamos a añadir bloques nuevos, vamos a crear un subsistema al que llamaremos ‘MOTOR’, para ello,

seleccionamos todos los bloques, hacemos clic derecho y pinchamos en ‘Create Subsystem from Selection’ o

pulsamos Ctrl+G con todo seleccionado.

Vamos a añadir el control PID guiándonos con la figura 28, y vamos a crear un subsistema con el control, de la

misma forma que hemos creado subsistema ‘MOTOR’, esto se está haciendo principalmente por claridad del

modelo.

Una vez se ha creado, pasamos a explicar la función que tiene cada bloque dentro del subsistema. En primer

lugar, nos fijamos en las entradas que tenemos, la entrada etiquetada como número 1, toma el valor de la posición

de referencia que definamos, y la entrada etiquetada como 2, varía con la posición actual que tiene el motor. De

la diferencia de las dos entradas, obtenemos el error en posición en cada instante, el bloque usado para la realizar

la operación se encuentra en Librería > Simulink > Math Operations.

Lo siguiente a implementar son los parámetros del control, observamos que hemos añadido tres bloques de

ganancia, que equivales a la ecuación de un controlador PID genérico visto anteriormente, además, hemos

añadido un integrador que hace efecto en el parámetro del tiempo integral, el bloque se encuentra en Librería >

Simulink > Continuous. Los tres parámetros calculados se suman usando el bloque de operaciones citado

anteriormente, y ya tendríamos completo nuestro controlador.

Por último, se ha añadido un bloque de saturación, para que la salida no pueda tomar valores mayores de los que

nuestro sistema permite, en este caso, solo tenemos que abrir la configuración del bloque y definir los limites

±10. El bloque de saturación lo encontramos en Librería > Simulink > Discontinuities.

Puesto que el valor de salida lo obtenemos en voltios, podemos pasarlo directamente a la entrada de nuestro

subsistema ‘MOTOR’, borrando el bloque de constante que teníamos anteriormente puesto.

Figura 28: Control PID Simulink®

Page 36: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

19

Nos salimos del subsistema que hemos llamado ‘CONTROL PID’, y cuando tengamos conectados ambos

subsistemas, solo nos faltaría definir la entrada de la posición de referencia. Esta entrada la iremos modificando

con un bloque constante conectado a ella.

Nosotros definiremos el valor de la posición referencia en radianes, pero recordemos que nuestro motor las

posiciones las maneja en voltios, por lo que es necesario una conversión previa antes de transferir el valor a

nuestro controlador, para ello solo tenemos que añadir un bloque de ganancia definiendo como parámetro la

conversión inversa que realizamos cuando recibimos los valores del motor, es decir, el factor de conversión en

este caso es 1.256-1. Seguidamente a la conversión, hemos añadido un bloque de saturación de ±5 V con el fin

de que el usuario no pueda definir referencias inalcanzables.

Para más simpleza en el modelo, las conexiones de larga distancia se han hecho mediante etiquetas ‘Goto’ y

‘From’, éstas se encuentran en Librería > Simulink > Signal Routing. Siendo ‘Goto’ el origen de la señal y

‘From’ el destino la misma. Solo tenemos que entrar en el bloque y definir la misma etiqueta.

Se ha añadido un selector de modo entre los subsistemas ‘CONTROL PID’ y ‘MOTOR’, para poder seleccionar

entre modo manual y automático. Es bastante útil ya que puede ser modificado durante la simulación sin

necesidad de parar el proceso, el bloque se define como ‘Switch’ y lo encontramos en el mismo directorio que

las etiquetas. Y, por último, un multiplexor antes de representar nuestros valores de posición, actual y referencia,

para poder ver las dos señales en la misma ventana, se encuentra en la misma carpeta ‘Signal Routing’.

Una vez colocado todo correctamente, el modelo Simulink® resultante es el que vemos en la figura 29.

Con el fin de ofrecer una interfaz de usuario más sencilla, se ha creado un subsistema con todo lo anterior,

dejando a la vista solamente el bloque para definir la posición de referencia, y las tres representaciones gráficas,

señal de control, posición y velocidad (véase figura 30).

Figura 29: Modelo Simulink® control POS

Page 37: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

20

2.6.1.2 Funcionamiento

Al igual que en el control manual, vamos a realizar una serie de experimentos en los que podamos comprobar

el funcionamiento. Como dijimos en la introducción del apartado, vamos a comprobar como sigue una referencia

en posición y cómo reacciona ante una perturbación externa.

Los experimentos se han realizado con los parámetros PID que podemos ver en la siguiente tabla, destacar que

no son los parámetros óptimos, pero son lo suficientemente buenos como para estudiar su comportamiento.

Tabla 1. Parámetros PID - Control POS

Parámetro Valor

Kp

Ti

Td

2

20

0.05

Recalcar que los parámetros no se definen tal cual en los bloques de ganancia del subsistema ‘CONTROL PID’,

es decir, para implementar la ecuación del controlador es necesario que el efecto integral sea Kp/Ti, el efecto

proporcional Kp y el efecto derivativo Kp·Td.

Hecho esto, compilamos nuestro modelo y comprobamos que todo está correcto, por lo que nos conectamos a

nuestra tarjeta e iniciamos la simulación partiendo de la posición de reposo, 0 radianes.

Figura 30: Modelo Simulink® control POS - final

Page 38: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

21

2.6.1.2.1 Seguimiento de referencia

Como hemos dicho, partimos de la posición de 0 radianes, y vamos a ir cambiando la referencia para observar

el comportamiento, en el apartado de conclusiones hablaremos de los aspectos positivos y negativos de estos

experimentos.

S.C

.[V

] P

OS

[ra

d]

VE

L [

rpm

]

t [s]

Referencia

Posición actual

Figura 31: Gráficas control POS - Seguimiento

Page 39: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

22

2.6.1.2.2 Rechazo a perturbaciones

Para simular una perturbación externa hemos usado el pulsado de chequeo del motor, manteniendo una posición

de referencia hemos modificado manualmente la posición del motor, y a continuación vamos a ver que sucede.

Al igual que el apartado anterior, comentaremos los resultados en la sección de conclusiones.

S

.C.[

V]

PO

S [

rad]

VE

L [

rpm

]

t [s]

Referencia

Posición actual

Figura 32: Gráficas control POS - Rechazo perturbaciones

Page 40: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

23

2.6.1.2.3 Conclusiones

Primero vamos a comentar lo que podemos observar en la figura 31, en la gráfica de la posición notamos los

cambios en la referencia, de 0 radianes pasamos a π radianes, y vemos cómo actúa nuestro controlador dando el

pico de tensión necesario para alcanzar la referencia, y como a su vez aumenta la velocidad. Una vez que la

posición alcanza la referencia, y el error en régimen permanente es nulo, la señal de control vuelve a ser cero y

el motor se para, dejando un movimiento muy preciso, sin sobre oscilaciones y con tiempo de subida

relativamente bajo. Lo mismo pasa con el resto de referencias que se observan en la gráfica.

Con lo que concluimos que el objetivo del seguimiento a una referencia está cumplido, y que, además, los

parámetros definidos para el controlador PID cumplen con nuestras expectativas.

Lo segundo que tenemos que comentar es el problema de rechazo a perturbaciones de la figura 32, en las gráficas

se han marcado con línea discontinua todas las perturbaciones que hemos ido provocando. Observamos que

cuando damos una perturbación, se produce un cambio en la señal de control y, por tanto, un cambio en la

posición actual del motor, que no en la referencia, por lo que el controlador actúa de forma que compensa ese

pico de tensión producido volviendo a la posición de referencia. Se puede decir que hemos cumplido con el

objetivo ya que el tiempo de reacción es bajo y el error en régimen permanente cuando vuelve a la referencia es

nulo.

En cuanto a las conclusiones generales del apartado, podemos cerrarlo satisfactoriamente ya que se han cumplido

todos los objetivos que nos propusimos al empezar.

2.6.2 Velocidad

2.6.2.1 Implementación en Simulink®

Los objetivos de este apartado pueden considerarse los mismos que en el apartado anterior, con la diferencia de

que ahora en lugar de querer controlar la posición del motor, vamos a querer que el motor trabaje a una velocidad

de referencia.

Para ellos vamos a partir del modelo anterior, modificando lo necesario para nuestro trabajo. Necesitamos

acceder a nuestra parte del modelo que vemos en la figura 29, y una vez allí empezaremos a modificar los

bloques.

Para este caso necesitamos que el subsistema ‘CONTROL’ reciba como entrada la velocidad actual y la

velocidad de referencia para que una vez dentro calcule el error en el instante y nos dé la salida en voltios

adecuada. Solo tenemos que cambiar la etiqueta de origen a su lugar correspondiente.

Obviamente, el factor de conversión actual no es el mismo, así que ese será el siguiente paso. Recordamos que

nuestro factor de conversión de voltios a rpm es 400, así que el cambio inverso es de 400-1, y ahora sí, podemos

definir la referencia en rpm y que el controlador trabaje en voltios.

Lo siguiente a modificar son los límites de saturación de entrada, para la velocidad los limites son ±3 V, ya que

la velocidad máxima de funcionamiento es 1250 rpm.

Una vez que tenemos todo cambiado, el modelo resultante se puede ver en la figura 33 y figura 34, volvemos a

compilar el modelo y recibimos el mensaje de que ha sido descargado correctamente.

Ya está todo listo para empezar a hacer la comprobación del funcionamiento.

Page 41: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

24

2.6.2.2 Funcionamiento

El funcionamiento es exactamente igual a las pruebas de control en posición, con la diferencia de que vamos a

reajustar los parámetros del controlador para cumplir los nuevos requisitos.

Tabla 2. Parámetros PID - Control VEL

Parámetro Valor

Kp

Ti

Td

0.05

0.01

50

Figura 33: Modelo Simulink® control VEL

Figura 34: Modelo Simulink® control VEL - final

Page 42: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

25

2.6.2.2.1 Seguimiento de referencia

Nos conectamos a nuestra tarjeta y empezamos las simulaciones, partimos de la posición de reposo, y vamos

modificando la referencia, en la siguiente figura podemos observar los resultados que comentaremos en el

apartado de conclusiones.

S.C

.[V

] P

OS

[ra

d]

VE

L [

rpm

]

t [s]

Referencia

Posición actual

Figura 35: Gráficas control VEL - Seguimiento

Page 43: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

26

2.6.2.2.2 Rechazo a perturbaciones

En esta ocasión, las perturbaciones externas vendrán de la misma forma que en posición, tendremos una

referencia de velocidad, y haciendo uso del pulsador de chequeo del motor, variaremos la señal de control,

variando así la velocidad y, por consiguiente, el comportamiento del motor.

S.C

.[V

] P

OS

[ra

d]

VE

L [

rpm

]

t [s]

Referencia

Posición actual

Figura 36: Gráficas control VEL - Rechazo perturbaciones

Page 44: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

27

2.6.2.2.3 Conclusiones

Vamos a comenzamos con el problema de seguimiento de una referencia, los resultados los encontramos en la

figura 35. En cada salto que encontramos en la referencia en la gráfica de la velocidad, observamos que la señal

de control se modifica para poder compensar esa diferencia entre velocidad actual y referencia, y debido a que

son cambios grandes en la referencia, observamos unos picos de voltaje que resaltan sobre los demás en el

momento del cambio.

A pesar de eso, concluimos con que los resultados son buenos, no se produce error en régimen permanente, no

hay sobre oscilación y el tiempo de subida es pequeño. Para este caso, la gráfica de la posición no aporta ningún

dato relevante.

A continuación, vamos a hablar sobre el problema del rechazo a perturbaciones de la figura 36. Como en el

apartado del control de posición, las perturbaciones vienen marcadas con una línea discontinua que nos facilita

ver que pasa en las tres gráficas justo en el instante que se produce.

Se puede ver que en el momento de la perturbación se corrige rápidamente la señal de control, aunque vemos

que la velocidad tarda algo más en recuperar su valor de referencia. Que el tiempo de subida sea más lento no

empeora los resultados y lo damos por bueno, es cuestión de ajustar mejor los parámetros del controlador.

En general, se cierra el apartado con el éxito de haber logrado el objetivo principal.

Page 45: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

28

Page 46: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

29

3 INTEGRACIÓN ARDUINO® CON QUARC®

n la página 2 de nuestro proyecto comentábamos los objetivos que teníamos al empezar, en este apartado

se abordará el segundo de ellos. Los recursos usados para la realización del primer objetivo superan en

gran cantidad el precio total que se invertiría si se pudiera adaptar el apartado 2 con estos nuevos recursos

que vamos a explicar.

3.1 Hardware

3.1.1 Feedback 33-100 Mechanical Plant

Este sistema ya fue usado en el apartado anterior, por lo que para más información se hace referencia a la página

5 donde explicado en profundidad.

El uso en este apartado será el mismo, con el añadido de que haremos uso de una de las fuentes de alimentación

que posee en la parte trasera.

3.1.2 Arduino® UNO

La compañía Arduino® tiene una amplia gama de placas de desarrollo, en

nuestro caso hemos optado por el modelo UNO, aunque podría usarse

cualquier modelo de las mismas caracteristicas.

Este modelo es considerado el mejor para empezar con la experiencia de

la programación de microcontroladores de esta compañia, el lenguaje de

programación que usa es propio, aunque muy sencillo, intuitivo y muy

parecido al lenguaje C, por lo que es el idoneo para nuestro proyecto.

La placa cuenta con 5 entradas analógicas y 13 pines digitales

bidireccionales, de esos 13 pines, 5 puede ser usado como salidas PWM.

Contamos también con 3 pines de referencia a tierra y dos pines con salida

de 5 V y de 3.3 V.

Los pines de salida de nuestra placa trabajan en un rango de [0 - 5] V y las entradas igual, este dato es importante

saberlo ya que resultará ser un problema más adelante.

La placa se alimenta media la conexión USB con el ordenador.

E

Un tigre no pierde el sueño por la opinión de las ovejas.

- Refrán chino -

Figura 37: Arduino® UNO

Page 47: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

30

3.1.3 Placa de pruebas

Comúnmente conocido en inglés como ‘Protoboard’, se utilizará para hacer los montajes electrónicos necesarios

ya que nuestro microcontrolador no será capaz por si solo de cumplir con los requisitos del motor.

Es un elemento básico en la electrónica y no se entrará más en detalle de su uso.

3.1.4 USB-to-TTL

Este módulo, que se conecta al PC a través de USB, nos permite contar con

una segunda conexión con la placa por puerto serie, ya que, como veremos

más adelante, vamos a tener que enviar y recibir datos por puertos distintos

y nuestro modelo de Arduino® en concreto, solo nos aporta una conexión

serie.

Nuestro modelo en concreto es PL2303, aunque en el mercado hay una

gran variedad las cuales sirven igualmente.

3.1.5 Componentes electrónicos

Vamos a tener que realizar varios circuitos electrónicos básicos, y para ellos vamos a hacer una lista de aquellos

componentes que vamos a necesitar:

Tabla 3. Componentes electrónicos necesarios

Cantidad Componente Valor

2 Resistencia 4.7 kΩ

2 Resistencia 10 kΩ

1 Resistencia 500 Ω

1 Condensador 10 µF

4 Cables macho - hembra -

16 aprox. Cables macho - macho -

1 LM324N (OPAMP) -

1 L293D (Puente H) -

Figura 38: Placa de pruebas o protoboard

Figura 39: Módulo USB-to-TTL

Page 48: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

31

3.2 Software

3.2.1 MATLAB®

Este software ya se usó en el apartado anterior, será la base donde realizaremos nuestro trabajo. Si se desea

información acerca del programa, se encuentra en la página 6 de este documento.

3.2.2 QUARC®

El control en tiempo real sigue siendo nuestro objetivo, por lo que seguiremos confiando en el software de la

compañía Quanser, en la página 6 se puede encontrar toda la información referente al programa.

3.2.3 Arduino® IDE

Las siglas IDE hacen referencia a un entorno de desarrollo integrado, o en otras

palabras más sencillas, el software de la compañía Arduino® que se va a utilizar

para programar el microcontrolador.

Es un software gratuito que se puede descargar desde la página web oficial de la

compañía, y su instalación es muy sencilla. Trae un repositorio de ejemplos que

nos ha sido muy útil para empezar a conocer el lenguaje y el comportamiento de

la placa.

3.3 Procedimiento

A diferencia de la realización del apartado 2, este trabajo se va a organizar de una forma diferente, ya que el

procedimiento se ha ido dividendo en pequeños objetivos, y los elementos se han ido añadiendo conforme hemos

ido avanzando.

La idea principal es realizar una conexión entre Arduino® y QUARC® mediante la interfaz de Simulink®, una

vez se logre la conexión, conseguir recibir los datos en Simulink® que capte Arduino de nuestro motor y poder

controlar manualmente el motor haciendo el recorrido inverso de QUARC® a Arduino®.

Al igual que en el apartado anterior, el objetivo final sería implementar un control automático que cumpla con

los requisitos de seguir una referencia y del rechazo a perturbaciones. Estos dos conceptos se explicaron en la

página 17.

3.3.1 Primer objetivo – Recibir valor de prueba

Como primer objetivo nos propusimos mandar un valor constante desde el IDE y que se reciba correctamente

en Simulink® pudiendo ver el resultado en una gráfica.

El primer paso que se dio para empezar a trabajar fue la elección del modo de conexión que tendríamos entre el

IDE y QUARC®, al final se optó por una conexión por puerto serie, ya que de las posibles conexiones era la que

más confianza de funcionamiento daba.

Antes de empezar a programar, conectamos nuestra placa al PC mediante USB, y en el entorno de programación

debemos seleccionar que modelo de Arduino® tenemos y a que puerto está conectado (véase figura 41).

Figura 40: Logotipo Arduino®

Page 49: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

32

Seguidamente, se escribió en el IDE el código necesario para que nuestra placa mandase un valor por puerto

serie, el código se encuentra en el Anexo I.I. Lo primero que hacemos es crear una variable entera y le damos

un valor, que será el que mandemos.

A continuación, iniciamos la comunicación con el puerto serie a una velocidad de 57600 baudios, dato que nos

hará falta más adelante.

El valor se manda por el puerto serie gracias a la función Serial.print, con la que se manda la variable y además

añadimos ‘\n’, este carácter significa nueva línea, y se usa como terminador, para indicar a nuestro receptor que

vamos a enviar un nuevo carácter después de recibir esto. Por último, hemos añadido un ‘delay’7 de 500

milisegundos, con la finalidad de que pueda mandar los caracteres correctamente, sin alterar el orden de envío.

Pasamos a configurar nuestro modelo de Simulink®, hay muchos conceptos sobre el uso de este software que

vienen explicados en el apartado anterior, ya que son dos trabajos que están muy relacionados, animamos a leer

el apartado anterior antes de empezar con este.

Lo primero que tenemos que hacer es crear un nuevo modelo siguiendo los dos primeros pasos del apartado 2.4.

Para empezar, vamos a añadir los bloques procedentes de la librería de QUARC® (véase figura 42).

7 Tiempo de retardo que se le añade a la ejecución de un programa para que ejecute la siguiente orden.

Figura 41: Selección Arduino® y puerto

Figura 42: Bloques QUARC® necesarios – Recepción de datos

Page 50: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

33

El bloque ‘Stream Call’ es el encargado de iniciar la conexión con nuestro servidor de datos, es decir, nuestra

placa Arduino®. Debemos realizar una configuración previa, para ello entramos en los parámetros del bloque y

especificamos con quien queremos conectarnos y cómo, esto se hace a través del URI, o lo que es lo mismo, el

identificador de recursos uniformes, en el URI tenemos que especificar que la conexión será a través de puerto

serie, que nuestra placa está conectada en el puerto ‘COM3’ y la conexión tendrá una velocidad de 57600

baudios, el resto de parámetros podemos dejarlos por defecto. Se puede configurar manualmente, o directamente

escribir el siguiente URI en el lugar que nos especifican:

serial://localhost:3?baud='57600',word='8',parity='none',stop='1',flow='none'

A continuación, pasamos a configurar el bloque ‘Stream Formatted Read’. Hay dos tipos de bloque para lectura

de datos, en nuestro caso se ha elegido este por la razón de que Arduino® los datos que envía por puerto serie

los manda en código ASCII, es decir, si mandamos el valor entero ‘0’, mandará su correspondiente código

ASCII que es ‘48’. La tabla entera de todos los códigos ASCII se puede encontrar en internet.

Si hubiésemos elegido el otro bloque existente de lectura, al recibir un número de dos dígitos, por ejemplo, el

‘15’, éste lo interpretaría como dos números enteros de ‘49’ y ‘53’.

Accedemos a los parámetros del bloque y le indicamos que el valor que vamos a recibir es un valor entero,

mediante el código %d.

Pasamos a configurar las salidas y entradas de los bloques:

Stream Call

o Entradas

cls: Se usa para indicar cuando queremos que se cierre la conexión, en nuestro caso,

como no queremos que se cierre en ningún momento, colocamos un bloque de

constante con el valor 0.

o Salidas

stm: Es una referencia a la cadena de datos que se recibe, esta salida la usaremos más

adelante.

con: Indica el estado de la conexión, si el valor es ‘0’ significa que no estamos

conectados, el valor ‘1’ indica que está en proceso de conexión y cuando nos da el

valor ‘2’ indica que la conexión es total. Para ver que valor va tomando, conectamos

a la salida el bloque ‘display’, localizado en Librería > Simulink > Sinks.

err: Nos da un aviso si ha ocurrido algún error y el código de error que tiene, si no hay

errores esta salida será de valor nulo. Vamos a conectar a la salida un bloque que

finaliza la simulación en caso de que haya algún error, el bloque ‘Stop with Error’ lo

encontramos en Librería > QUARC Targets > Sinks > Error Handling.

Stream Formatted Read

o Entradas

stm: En esta entrada vamos a recibir la cadena ‘stm’ del bloque anterior, con lo que

conectamos la salida del otro bloque a esta entrada.

Page 51: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

34

o Salidas

stm: Esta salida es una mera copia de la entrada, se usará a continuación

%d: En esta salida vamos a tener los datos que recibamos, vamos a conectarla a un

bloque ‘Scope’ para poder ver gráficamente lo que recibimos por puerto serie.

flds: Indica el número de campos que ya han sido leídos de la cadena, es una salida de

comprobación, conectamos un bloque ‘Scope’ por si necesitamos ver los valores que

toma.

units: Indica el número de campos que ya han sido leídos del flujo de datos, al igual

que la anterior, es una salida informativa. Conectamos un ‘Scope’ a la salida.

inv: Muestra un valor booleano indicando si tenemos una entrada valida o invalida, el

valor ‘1’ indica que lo recibido no concuerda con el formato de la cadena, y el ‘0’ en

caso contrario. Conectamos un ‘Scope’ a la salida, y además la usaremos a

continuación.

cls: Indica el valor ‘1’ en caso de el flujo de datos haya sido cerrado, valor nulo en

caso contrario. Conectamos un ‘Scope’ a la salida para ver su valor,

err: Tiene la misma función que la salida del bloque anterior, en caso de error, detiene

la ejecución gracias al bloque ‘Stop with Error’ que conectamos a la salida.

Es necesario crear un subsistema que nos permite saltar a una nueva línea cuando el valor recibido no

corresponda a un número, es decir, el carácter ‘\n’ que incluimos en la escritura del puerto serie en el IDE. Para

ello, el subsistema debe incluir el bloque ‘Stream Formatted Read’, conectando a la entrada, la salida ‘stm’ del

bloque anterior, y en sus salidas, conectamos un terminador, localizado en Librería > Simulink > Sinks. En la

configuración del bloque debemos especificar %*[^\r], para más información sobre los formatos de cadena que

acepta, acudir a la documentación de QUARC® referenciada en la página 6 de este documento. El último bloque

del subsistema será un bloque activador, es decir, un bloque que recibirá una señal externa que indicara cuando

se tiene que activar el salto de línea, este bloque es ‘Enable’, y se encuentra en Librería > Simulink > Port &

Subsystems. La señal activadora será la salida ‘inv’ del bloque anterior.

El subsistema que acabamos de explicar se puede ver montado en la figura 43.

Figura 43: Subsistema 'Skip to next line'

Page 52: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

35

Una vez tenemos el subsistema y todos los puertos conectados, el resultado es el siguiente modelo:

Para realizar la prueba, solo tenemos que compilar el modelo y esperar el mensaje de que se ha realizado

satisfactoriamente. Nos conectamos a nuestro objetivo, es decir, al puerto ‘COM3’ mediante el botón a la

izquierda de iniciar simulación, y comenzamos con la prueba. Hemos mandado desde nuestra placa el valor

constante ‘15’ para comprobar que recibe correctamente valores de dos dígitos, y en la figura 45 podemos ver

el resultado.

Figura 44: Modelo Simulink® lectura serial - prueba

Figura 45: Resultado prueba incial

Val

or

t [s]

Page 53: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

36

3.3.2 Segundo objetivo – Recibir datos del motor

Una vez hemos conseguido recibir un dato constante, vamos a adaptar el apartado anterior a nuestro objetivo

real, es decir, recibir los datos de nuestro motor, tanto en velocidad como en posición. Para ellos tenemos que

modificar tanto la conexión, como el programa del IDE, como el modelo de Simulink®.

3.3.2.1 Conexionado

Para este apartado, ya entra en juego nuestro motor, para ellos tenemos que conectarlo a una de las entradas

analógicas de nuestra placa, recordamos que la salida de nuestro motor maneja voltajes positivos y negativos,

de -5 V a 5 V, y que con las entradas analógicas de la placa solo podemos medir tensiones positivas de manera

directa de entre 0 V y 5 V.

Una de las soluciones posibles es la de implementar un divisor de

tensiones en la protoboard, en el polo positivo conectamos el puerto del

motor que queramos medir, alternando entre POS y VEL, y el negativo

lo conectamos a los 5 V que nos aporta la placa, que harán de offset, el

rango [-5, 5] V pasa a ser [0, 10] V. Al colocar dos resistencias del mismo

valor conseguimos que el valor de salida (cable naranja), sea la mitad

que el valor de entrada [0, 5] V.

Figura 46: Divisor de tensiones

Figura 47: Esquema conexión inicial

Feedback 33-100

ACT GND POS VEL

Page 54: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

37

3.3.2.2 Implementación en IDE y Simulink®

Lo primero que tenemos que hacer es escribir el nuevo programa en el IDE, vamos a partir del programa anterior,

pero en lugar de recibir un valor definido por nosotros, tenemos que definir el pin de entrada, en nuestro caso,

el pin ‘A0’. El programa completo para posición puede verse en el Anexo I.II y para velocidad en el Anexo I.III,

donde se ve que ha sido el único cambio necesario.

Para Arduino® las entradas analógicas tienen un rango completo de [0, 1023], por lo que es necesario realizarle

un offset negativo a la salida en el modelo Simulink®, recordamos que en posición el rango es ±5 V y en

velocidad es de ±3 V,

𝑜𝑓𝑓𝑠𝑒𝑡 𝑝𝑜𝑠𝑖𝑐𝑖ó𝑛 =1023

2= 511.5 ~ 511

𝑜𝑓𝑓𝑠𝑒𝑡 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 =613.8

2= 306.9 ~ 307

Ahora tenemos un rango de [-512, 511], pero nuestro objetivo es [-2π, 2π] radianes en posición y [-1200, 1200]

rpm en velocidad, así que es necesario un realizar un cambio de escala,

𝑓𝑎𝑐𝑡𝑜𝑟 𝑑𝑒 𝑐𝑜𝑛𝑣𝑒𝑟𝑠𝑖ó𝑛 𝑝𝑜𝑠𝑖𝑐𝑖ó𝑛 =2𝜋

511= 0.0123

𝑓𝑎𝑐𝑡𝑜𝑟 𝑑𝑒 𝑐𝑜𝑛𝑣𝑒𝑟𝑠𝑖ó𝑛 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 =1200

307= 3.91

Con nuestro cambio de escala implementado, los modelos resultantes son los que vemos en la figura 48 y 49.

Figura 48: Modelo Simulink® - Medir POS

Page 55: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

38

3.3.2.3 Experimentos

Gracias al pulsador de auto chequeo del motor, podemos probar el funcionamiento de nuestro modelo y observar

como recoge los datos. En posición hemos partido de 0 radianes y hemos empezado a desplazarnos, y en

velocidad, partiendo del reposo, 0 rpm, hemos dado pulsos de voltaje, variando así su velocidad.

Figura 49: Modelo Simulink® - Medir VEL

PO

S [

rad]

t [s]

Figura 50: Resultado control manual - POS

Page 56: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

39

3.3.3 Tercer objetivo – Enviar datos al motor

En este apartado se empieza a complicar el procedimiento, nuestro modelo de Arduino® solo dispone de un

puerto serie, y para enviar y recibir datos desde Simulink® necesitábamos dos conexiones abiertas, ya que por el

mismo canal unos datos pisaban a otros y no era viable, por suerte, existen dispositivos que tienen como finalidad

añadir un segundo puerto mediante software. Gracias a esto podemos usar una comunicación para lo que ya

habíamos conseguido, recibir datos del motor, y la segunda comunicación para el procedimiento inverso, poder

indicarle al motor que tensión de entrada queremos en el puerto ACT desde nuestro modelo Simulink®.

El dispositivo, explicado en la página 30, es el USB-to-TTL. Como en el apartado anterior, vamos a subdividir

el proceso empezando por el conexionado.

3.3.3.1 Conexionado

La anterior conexión que ya habíamos realizado no se tiene que modificar, ya que el objetivo de recibir datos ya

está cumplido y funcionando. Para la nueva parte de conexión vamos a necesitar los cuatro cables macho-hembra

que indicamos al principio, y por supuesto, nuestro dispositivo USB-to-TTL.

Antes de pasar a ver cómo queda el esquema de conexionado, es preciso aclarar los conceptos de Tx y Rx. Estos

conceptos presentes en la mayoría de conexiones hacen referencia a la recepción (Rx) y a la transmisión (Tx) de

datos. El dispositivo que vamos a usar nos permite añadir dos nuevos puertos Rx y Tx, los cuales se usaran en

la nueva conexión sin alterar el funcionamiento de los puertos Rx y Tx que nuestra placa Arduino® trae de serie.

El esquema de conexión, partiendo como base del que ya tenemos instalado, es el siguiente:

VE

L [

rpm

]

t [s]

Figura 51: Resultado control manual - VEL

Page 57: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

40

3.3.3.2 Implementación en IDE y Simulink®

Una vez realizada la conexión de los elementos, tenemos que crear la conexión serie mediante software, para

ello usamos como base el programa de IDE anterior y lo modificamos. Para crear el nuevo serial tenemos que

añadir la librería SoftwareSerial.h y definir cuales hemos usado como pines Tx y Rx, son los pines 2 y 4

respectivamente.

Después de configurarlo, tenemos que iniciarlo, se ha definido una velocidad de 115200 baudios, y a

continuación, como queremos leer lo que se mande por el segundo puerto serie desde Simulink®, usamos el

comando Serial_2.read().

Las salidas de nuestra placa que tenemos que usar son salidas PWM, y tienen un rango de trabajo de [0, 255],

así que, el valor que recibimos puerto serie, hay que escalarlo a ese rango. El valor máximo de voltaje que

podemos definir es de 10 V, por lo que,

𝑣𝑜𝑙𝑡𝑎𝑗𝑒 = 25.5 · 𝑟𝑒𝑐𝑖𝑏𝑖𝑑𝑜

El programa completo se puede encontrar en el Anexo I.IV al final del documento, se ha unificado para que sea

válido para medir en posición o en velocidad, solamente cambiando el conexionado.

Feedback 33-100

ACT GND POS VEL

Figura 52: Esquema conexión tercer objetivo

Page 58: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

41

Pasamos a modificar el modelo de Simulink®, crearemos un nuevo subsistema en el que implementaremos el

envío de datos, este subsistema es igual para posición y para velocidad, por lo que se hará de forma genérica.

En la figura 53 podemos observar una vista general de como quedan los dos subsistemas, y a continuación vamos

a explicar cómo se ha creado el subsistema de envío de datos.

Para el subsistema es necesario añadir los siguientes bloques de la librería de QUARC® (véase figura 54).

El bloque ‘Stream Answer’ tiene una función parecido al bloque que se usó anteriormente de ‘Stream Call’, para

configurarlo es necesario acceder a sus parámetros y definir la dirección URI a la que nos vamos a conectar, en

nuestro caso, el nuevo puerto serie es el ‘COM4’, el URI definitivo es,

serial://localhost:4?baud='115200',word='8',parity='none',stop='1',flow='none'

En el bloque ‘Stream Formatted Write’ solo tenemos que definir el tipo de valor que enviamos, en este caso, lo

definimos como carácter, ‘%c’.

Figura 53: Subsistemas 'enviado' y 'recibido' en Simulink®

Figura 54: Bloques QUARC® necesarios - Envio de datos

Page 59: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

42

Vamos a pasar a explicar cada entrada y salida que tienen los bloques a usar, y definir que conectamos a cada

una:

Stream Answer

o Entradas

lcls: Esta entrada se usa para que nuestro bloque deje de enviar datos a nuestro

servidor, pero sin terminar la conexión. Conectando un bloque constante ‘0’, siempre

se mantendrá activo.

ccls: Esta entrada sirve para terminar la conexión, al definir un valor constante ‘0’ a la

entrada, ésta nunca se cerrará.

o Salidas

stm: Es una referencia a la cadena de datos que se envía, esta salida la usaremos más

adelante.

con: Indica el estado de la conexión, si el valor es ‘0’ significa que no estamos

conectados, el valor ‘1’ indica que está en proceso de conexión y cuando nos da el

valor ‘2’ indica que la conexión es total. Para ver que valor va tomando, conectamos

a la salida el bloque ‘display’, localizado en Librería > Simulink > Sinks.

err: Nos da un aviso si ha ocurrido algún error y el código de error que tiene, si no hay

errores esta salida será de valor nulo. Vamos a conectar a la salida un bloque que

finaliza la simulación en caso de que haya algún error, el bloque ‘Stop with Error’ lo

encontramos en Librería > QUARC Targets > Sinks > Error Handling.

Stream Formatted Write

o Entradas

stm: En esta entrada vamos a recibir la cadena ‘stm’ del bloque anterior, con lo que

conectamos la salida del otro bloque a esta entrada.

%c: En esta entrada definiremos el valor de voltaje que queremos mandar al motor, en

nuestro bloque constante pondremos un valor entero, pero en esta entrada se define

como carácter ya que como hemos dicho, Arduino® trabaja en código ASCII.

o Salidas

stm: Esta salida es una mera copia de la entrada, conectamos un terminador.

flds: Indica el número de campos que ya han sido escritos de la cadena, es una salida

de comprobación, conectamos un bloque ‘Scope’ por si necesitamos ver los valores

que toma.

units: Indica el número de campos que ya han sido escritos del flujo de datos, al igual

que la anterior, es una salida informativa. Conectamos un ‘Scope’ a la salida.

peer: Valor booleano que indica si ha ocurrido un error debido a que el par no ha sido

designado. Conectamos un ‘Scope’ a la salida.

err: Tiene la misma función que la salida del bloque anterior, en caso de error, detiene

la ejecución gracias al bloque ‘Stop with Error’ que conectamos a la salida.

Page 60: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

43

Una vez tenemos todo conectado correctamente, el modelo resultante del subsistema de envío de datos lo

podemos ver en la siguiente figura.

3.3.3.3 Experimentos y conclusiones

Hasta el momento, todo parecía funcionar correctamente, aparecieron problemas, pero se fueron solventando.

Cuando se alcanzó este apartado y se empezaron a hacer las pruebas de recibir el voltaje deseado desde

Simulink®, nos dimos cuenta de que los valores negativos, [-10, -1] V, no podían ser enviados como carácter

debido a su signo negativos, y si definíamos que el valor enviado era un entero, Arduino® no interpretaba el

signo negativo de la manera correcta.

Debido a este problema decidimos empezar a hacer las pruebas limitando el rango a [0, 10]

V, con el fin de encontrar una solución posible a ese problema más adelante.

Empezamos con la conexión y definimos un voltaje, el motor comenzó a moverse, sin

embargo, gracias a un voltímetro conectado a la entrada del motor, comprobamos que el

voltaje recibido era la mitad del definido por nosotros. Como sabemos, nuestra placa

Arduino® tiene un rango de salida de [0, 5] V, y aunque el motor se movía, no lo hacía de

la manera correcta, y eso era debido a que la señal de actuación que estaba recibiendo era

una señal PWM, es decir, pulsos modulados.

Las señales PWM pueden ser convertidas en señales continuas, para ello necesitamos filtrar

la señal, abordaremos esta solución en el siguiente apartado.

Para el problema del rango de salida, era necesaria una amplificación de la señal, de modo

que la salida amplificada sea el doble de la recibida, y así conseguir un rango de [0, 10]

V

Uniendo las dos soluciones, teóricamente, solo faltaría resolver el problema del rango negativo.

Como punto final a este apartado, añadimos otro problema secundario que, aparentemente, no tiene solución. A

la hora de definir un valor para el voltaje de entrada hasta que el motor empieza a moverse, se percibe un retraso

de aproximadamente dos segundos, esto es debido a que tenemos varios factores condicionante, la comunicación

serie entre la placa y el ordenador ha ido añadiendo un pequeño retraso desde el principio, a ese retraso se le

añade que todo este proyecto está realizado sobre un máquina virtual por problemas de versiones, y por último,

hay que añadir el retraso añadido manualmente en IDE para que se pueden transferir los datos correctamente.

Este retraso hasta ahora no ha dado mayor problema, pero más adelante, veremos que se trata de uno de los

problemas principales.

Figura 55: Subsistema envio de datos Simulink®

Figura 56: Voltímetro 1

Page 61: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

44

3.3.4 Cuarto objetivo – Filtrado de la señal PWM

En este cuarto objetivo nos hemos propuesto realizar un filtrado de la señal de salida PWM, para que el motor

reciba una señal continua y trabaje correctamente.

Para conseguir nuestro objetivo existen varias opciones, pero la más sencilla de implementar es pasar la señal

por un filtro de paso bajo mediante un circuito RC, es decir, un circuito formado por una resistencia y un

condensador. Aun filtrada, sabemos que la respuesta no será una señal analógica perfecta.

Lo primero que tenemos que hacer es decidir el valor de RC de nuestro filtro, se ha elegido una resistencia de

500 Ω y un condensador de 10 µF.

Siguiendo el esquemático de la figura 57, pasamos a implementarlo en nuestro sistema real (véase figura 58).

Figura 57: Filtro de paso bajo RC

Figura 58: Esquema conexión cuarto objetivo

Feedback 33-100

ACT GND POS VEL

Page 62: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

45

3.3.5 Quinto objetivo – Amplificación de la señal

3.3.5.1 Conexionado

Con nuestra señal ya filtrada, tenemos que solucionar el problema del rango de trabajo, para ello hay que buscar

el método que entregándole un rango de voltaje de [0, 5] V, nos aporte [0, 10] V, es decir, tenemos que buscar

una amplificación de ganancia 2.

Existen varias opciones en el mundo de la electrónica, nosotros hemos optado por usar el circuito integrado

LM324N. Dicho circuito, como vemos en la figura 59, consta de 4 amplificadores operacionales, de los cuales

haremos uso de solamente uno. En el mercado hay opciones que solamente tienen un amplificador operacional,

como es el circuito integrado LM741, que nos serviría igualmente y es más económico.

De los cuatro OPAMP que tiene, por facilidad en el montaje, hemos usado el etiquetado como número 2.

Haciendo uso de este circuito integrado, vamos a implementar una etapa amplificadora de ganancia 2. Como

queremos que la salida sea de la misma polaridad que la entrada, usaremos el pin no inversor.

El circuito que vamos a implementar podemos verlo en la figura 60.

Figura 59: Circuito integrado LM324N

Figura 60: Circuito amplificador OPAMP

Page 63: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

46

Las resistencias utilizadas no se han elegido al azar, teóricamente sabemos que la ganancia de un circuito

amplificador es,

𝐴 =𝑉𝑜

𝑉𝑖𝑛

aplicando las leyes de Kirchhoff, se ha conseguido obtener la ecuación que modela este circuito, por lo que la

ganancia total sería,

𝐴 =𝑉𝑜

𝑉𝑖𝑛=

𝑅1 + 𝑅2

𝑅1= 1 +

𝑅2

𝑅1

Puesto que nuestro objetivo es un circuito amplificador que nos doble la señal de entrada, es decir, ganancia 2,

operando podemos deducir que,

1 +𝑅2

𝑅1= 2 →

𝑅2

𝑅1= 1 → 𝑅2 = 𝑅1

Sabiendo esto, ya podemos implementar nuestro circuito en el sistema (véase figura 61).

Figura 61: Esquema conexión quinto objetivo

Feedback 33-100

ACT GND POS VEL

Feedback 33-100 (Vista trasera)

+15 V GND

LM

324N

Page 64: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

47

3.3.5.2 Experimentos y conclusiones

Para comprobar el funcionamiento del montaje que hemos realizado hasta ahora vamos a usar nuestros modelos

Simulink® y programa en IDE del apartado 3.3.3, ya que no es necesario modificar nada a nivel de software.

Empezamos con los experimentos, y gracias a un voltímetro conectado a la entrada de la señal de actuación del

motor, comprobamos que recibimos exactamente el valor que hemos definido en nuestro modelo, y que, por

tanto, la etapa amplificadora funciona correctamente.

Ahora sí, tenemos un rango de trabajo de [0, 10] V, pero como ya hemos dicho en varias ocasiones, nuestro

motor tiene un rango de [-10, 10] V, ya que puede girar en ambos sentidos.

En esta ocasión se nos plantean dos nuevos problemas, el primero de ellos es un problema de software, y es el

hecho de que nuestra comunicación serie no permite enviar valores negativos al IDE. Y el segundo de los

problemas es a nivel de hardware, cuando consigamos mandar valores negativos por puerto serie al IDE,

tendríamos el inconveniente de que la placa Arduino® solo es capaz de trabajar en voltajes positivos, por lo que

habría que buscar el recurso electrónico necesario que nos permita cambiar la polaridad del voltaje recibido y

nos permita decidir cuándo queremos hacerlo.

Para el primer problema se encontró la solución relativamente rápido, se basa en modificaciones en el modelo y

en el programa IDE que veremos en el apartado siguiente. En cambio, para el problema hardware, hubo que

buscar en diversas fuentes de información hasta encontrar una posible solución. Dicha solución se implementará

en el apartado siguiente, y veremos si es una solución posible.

Llegados a este punto de trabajo, el tiempo de retardo acumulado que tenemos cada vez es mayor, y empieza a

ser un problema para las comprobaciones, ya que el tiempo de respuesta es muy elevado.

3.3.6 Sexto objetivo – Control de la polaridad de la señal

Para abordar este objetivo debemos irnos a uno de los dos modelos Simulink® que tenemos implementado, al

igual que el apartado anterior, el procedimiento para posición es análogo al de velocidad, por lo que lo haremos

de forma genérica.

Cuando enviamos un número negativo desde Simulink®, al compilar nos da error, por lo que se ha encontrado

la solución añadiendo un offset de valor ‘10’ antes de enviarlo, convirtiendo el rango [-10, 10] en [0, 20], y una

vez se reciba en IDE se le resta ese offset quedando el valor real.

Para ello solo tenemos que añadir un bloque sumador antes de la entrada como vemos

en la figura 63.

Figura 62: Voltímetro 2

Figura 63: Offset solución negativo

Page 65: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

48

Antes de empezar con la modificación del programa del IDE hay que saber la solución hardware que se ha

tomado para poder controlar la polaridad, hay componentes electrónicos capaces de realizar esta tarea, es el

circuito integrado L293D por lo que nos hemos decidido finalmente, este componente es comúnmente conocido

como puente H. Es muy útil a la hora de control el sentido de los motores, ya que mediante un pin que se alimenta

a 5 V es capaz de invertir la polaridad del voltaje que recibe como entrada, sacándolo por el pin de salida.

Sabiendo esto, ya podemos sumergirnos en la modificación del programa, dejando para más adelante el

conexionado.

En el programa del IDE, tenemos que añadir un bloque de código que haga lo siguiente, comprobamos que haya

un valor nuevo en el segundo serial, seguidamente le restamos el offset a lo recibido, dejando así su valor original

y una vez tenemos el valor original hay que saber cómo tratarlo, ya que, aunque le pasemos ese valor directo a

nuestra placa, si es negativo, lo entenderá como un valor positivo, ya que no se puede controlar la polaridad

mediante software.

Para ello, gracias la función condicionante ‘if’, diferenciamos entre valores positivos y negativos, activaremos

un pin digital en el caso de que sea negativo, que será el pin que se encargara de decirle a nuestro circuito

integrado que tiene que invertir la polaridad. Podemos ver el programa completo en el Anexo I.V.

3.3.6.1 Conexionado

El circuito integrado a utilizar ya se ha comentado, es el L293D, conocido como puente H, funciona a través de

unos diodos internos que mediante su activación van redirigiendo la corriente en el sentido deseado.

En la figura 64 podemos ver su distribución de pines, el número 1 y el 16, son pines de activación que tenemos

que tener siempre alimentados a 5V, sirven para alimentar a los diodos y al circuito integrado respectivamente.

El pin número 8 es el encargado de recibir el voltaje que hemos definido en nuestro modelo, ya filtrado y

amplificado. Los pines 2 y 4 son los encargados de dirigir el sentido de la corriente y los pines 3 y 6 son las

salidas que vamos a conectar al motor.

Tenemos capacidad para dos motores, pero nosotros solo vamos a hacer uso de la línea izquierda de

funcionamiento.

Sabiendo el mapa de pines del circuito integrado, podemos pasar a su implementación en el sistema real.

Figura 64: Circuito integrado L293D

Page 66: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

49

3.3.6.2 Experimentos y conclusiones

Una vez está todo conectado, teóricamente debería funcionar, ya que todos los pasos que se han realizado están

apoyados en documentaciones y recursos online, pero a la hora de la verdad, cuando empezamos con la ejecución

del programa IDE y del modelo de Simulink®, independientemente sea en posición o en velocidad, el resultado

es distinto a la teoría.

Cuando enviamos una señal positiva, seguimos sin tener problema, y el motor trabaja al voltaje recibido, pero

en cambio cuando le mandamos una señal negativa, gracias al voltímetro conectado en el canal de actuación del

motor, vemos que recibe entre 2-3 V menos de lo que se define en el modelo.

Además, también con las señales negativas, la medida de la posición/velocidad se ve afectada y no se mide

correctamente, pareciendo que la señal enviada interfiere con lo que se recibe de alguna forma.

Estos dos problemas, después de darle muchas vueltas y no encontrar solución posible, son los que nos han

llevado a desistir en el intento de cumplir el objetivo 6, no obstante, puesto que el objetivo principal era el control

en tiempo real, nos propusimos un séptimo objetivo partiendo del cuarto objetivo, el cual es intentar controlar el

sistema acotando nuestro rango de voltaje a valores positivos [0, 10] V.

Feedback 33-100

ACT GND POS VEL

Feedback 33-100 (Vista trasera)

+15 V GND

LM

324N

L

293D

Figura 65: Esquema conexión sexto objetivo

Page 67: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

50

3.3.7 Séptimo objetivo – Control en tiempo real

Partiendo como base del modelo Simulink® de la figura 53, intentamos implementar un control en la posición

de nuestro motor del mismo modo que se hizo en el apartado 2.6 de este proyecto.

Creamos un subsistema ‘MOTOR’ con los dos subsistemas actuales, y al igual que ya hicimos, añadimos un

‘Switch’ para tener la posibilidad de alternar entre control manual y automático.

Para implementar nuestro control PID en el modelo, podemos usar el mismo subsistema de la figura 28. El

primer problema que nos encontramos es que nuestra conexión no acepta valores decimales, con lo que hemos

añadido el bloque ‘Rounding Function’, y le hemos definido como parámetro ‘floor’ para que nos redondee los

valores hacia abajo. No es la solución óptima, ya que teóricamente, perderemos definición en nuestro control.

El segundo problema que nos encontramos es que los valores de voltaje que calcule el control PID, pueden ser

negativos para compensar el error entre la diferencia y la posición actual, pero como ya sabemos, la

comunicación serie entre el IDE y Simulink® no acepta valores negativos, se optó por añadir un bloque de valor

absoluto para que así no diera error, solución que sabíamos que iba a dar problemas de antemano, ya que es

necesaria una señal de control negativa para compensar ciertos errores en posición. El modelo resultante se

puede ver en la siguiente figura.

Con el subsistema creado, tenemos que terminar de conectar los bloques del nivel superior, al igual que en el

apartado 2.6, vamos a utilizar etiquetas por sencillez en el modelo.

Figura 66: Subsistema PID séptimo objetivo

Figura 67: Modelo Simulink séptimo objetivo

Page 68: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

51

Vamos a empezar a hacer experimentos con los mismos parámetros PID que recoge la tabla 1. Partiendo desde

la posición inicial de ‘0’ radianes, damos un escalón en la referencia a un valor cercado de π radianes, y

comprobamos que el motor inicia su movimiento hacia la referencia, pero nunca se llega a parar, y eso mismo

pasa con cualquier referencia que indiquemos.

Este problema es debido al retardo del que ya hablamos en conclusiones anteriores, en las que dijimos que de

momento no era de gran importancia, pero llegados a este punto, comprobamos que el retardo acumulado es

tanto que cuando la posición actual recibida se acerca a la referencia y el control PID lo recibe, calcula el nuevo

error y su correspondiente señal de control, la posición actual ya ha superado la referencia, y por tanto el sistema

entra en bucle ya que nunca podrá alcanzarla.

Llegados a este punto, no pudimos avanzar más y no se encontraron más caminos alternativos, por lo que se

tomó la decisión de dar el proyecto por finalizado.

Page 69: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

52

4 CONCLUSIONES

l proyecto va a finalizar con un apartado en el que se hará una serie de conclusiones finales acerca del

proyecto, el cumplimiento de los objetivos iniciales, opiniones y reflexiones personales, futuras mejoras

para el proyecto y toda clase de información útil que sirva para entender todo el recorrido de este proyecto.

4.1 Integración NI™ USB-6211 con QUARC®

Esta parte del trabajo, resuelta en el apartado 2, era el objetivo inicial de este proyecto, y una vez finalizado, se

puede concluir que se ha conseguido exitosamente. Todas las metas marcadas en un principio se han conseguido

sacar adelante, así como los problemas que han ido apareciendo.

En comparación con la otra parte del trabajo, ha sido mucho más llevadera, y si tuviera que hacer una división

temporal, se podría decir que ha ocupado un 30% del tiempo total invertido al trabajo, no por sencillez, sino

porque todo ha salida a la primera, y los problemas encontrados se han podido solucionar casi en el momento.

Para terminar, quiero hacer hincapié en lo que me ha aportado a nivel educativo esta parte del trabajo.

Anteriormente ya había usado los equipos utilizados por separado, pero el tener que realizar esta integración me

ha permitido conocer más a fondo estos recursos, y conocer y aprender a usar el software de control en tiempo

real QUARC®.

En general, estoy muy satisfecho de haber completado esta parte con éxito.

4.1.1 Posibles mejoras

No hay nada reseñable para mejorar, ya que se planteó un problema y se ha solucionado, a mi parecer, de la

mejor manera posible.

El único punto que añadiría sería la mejora de recursos, por ejemplo, con una versión actualizada del software

QUARC® me habría evitado el uso de una máquina virtual, lo que probablemente hubiera supuesto una mejora

en el tiempo de respuesta del sistema y en la conexión.

4.2 Integración Arduino® con QUARC®

La realización de esta parte del proyecto deja un sabor agridulce, aun habiendo ocupado aproximadamente el

70% del tiempo invertido en el proyecto, no se ha logrado cumplir el objetivo inicial que era el control del

sistema en tiempo real.

A pesar de no haberse terminado se ha querido dejar constancia en el proyecto de cara a retomarlo en el futuro,

ya que es un proyecto con un objetivo que mejoraría bastante la calidad de las prácticas de laboratorio de ciertas

asignaturas, además de suponer una reducción en el coste de éstas mismas.

E

Dentro de 20 años estarás más decepcionado por las

cosas que no hiciste, que por las cosas que si hiciste.

- Mark Twain -

Page 70: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

53

Desde el principio se han tenido problemas, aunque se han ido solucionando a pesar de la dificultad, pero

llegados al punto en que se ha interrumpido el avance, no se encontró ninguna solución posible, e incluso aún

se desconoce el origen del problema. Sabiendo los motivos del fallo, quizás encontrar una solución hubiera sido

más sencillo, pero no es el caso.

Si destacamos los puntos fuertes de este apartado, hay que decir que a nivel personal me ha ayudado bastante,

ya que ha sido una introducción al mundo real del ingeniero, te dan un problema, partiendo de cero, y tienes que

encontrar la solución.

Si contamos todos los puntos que se han resuelto con éxito, puedo estar satisfecho, ya que se ha dejado muy

avanzado, y con muchas indicaciones para continuar más adelante.

4.2.1 Posibles mejoras

La principal mejora es conseguir solucionar los apartados que han quedado sin solución, para así poder realizar

con una placa de Arduino® las mismas funciones que con la tarjeta DAQ de NI™. La idea inicial del proyecto

era que una vez se consiguiera hacer funcionar todo correctamente, el montaje que se ha realizado sobre la placa

de pruebas o protoboard, implementarlo en una placa de circuito impreso, también conocida como las siglas

inglesas PCB. Es una manera de ahorrar en material, en tiempo de montaje y ganar en sencillez de diseño y

fiabilidad de funcionamiento, ya que no tendríamos el riesgo de desconexión o cortocircuito entre componentes

sueltos.

Otra posible mejora es la utilización de otro modelo de Arduino® más avanzado en lugar del Arduino® UNO,

como por ejemplo el Arduino® Mega, es más potente y además cuenta con más de un puerto serie integrado, por

lo que nos habríamos ahorrado un paso del proceso.

También, si el objetivo del departamento es reemplazar las tarjetas NI™ por placas Arduino®, podría ser una

opción el uso de otro equipo para las prácticas, un equipo que se adapte a Arduino®, en lugar de tener que adaptar

la placa al equipo, facilitando así el proceso de integración y asegurando su finalización.

Page 71: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

54

Page 72: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

55

Bibliografía

Recursos online

[1] Arduino [Foro], Dudas con pines Serie 0 y 1 RX y TX, 12 de diciembre de 2016,

https://forum.arduino.cc/index.php?topic=441660.0

[2] Arduino, Software Serial Example, 19 de agosto de 2015,

https://www.arduino.cc/en/Tutorial/SoftwareSerialExample

[3] Feedback, Control & Instrumentation Principles, 2014, http://www.feedback-instruments.com

/pdf/brochures/33-033_datasheet_control_instruments_principles_ESPIAL_02_2014.pdf

[4] LLAMAS, Luis [Blog], Entradas analógicas en Arduino, s.f., https://www.luisllamas.es/entradas-

analogicas-en-arduino/

[5] LLAMAS, Luis [Blog], Salida analógica mediante PWM y filtro paso bajo, s.f.,

https://www.luisllamas.es/salida-analogica-mediante-pwm-y-filtro-paso-bajo/

[6] MathWorks Documentation, PID Controller & Discrete PID Controller, s.f.,

https://es.mathworks.com/help/simulink/slref/pidcontroller.html

[7] National Instruments, NI USB-621x User Manual, 2009, https://www.ni.com/pdf/manuals/371931f.pdf

[8] Nano-Reef [Foro], Convert Arduino PWM 5V to Analog output 0-10V, 19 de marzo de 2010,

https://www.nano-reef.com/forums/topic/230743-convert-arduino-pwm-5v-to-analog-output-0-10v/

[9] National Instruments [Página Web], Grounding considerations, 14 de marzo de 2016,

http://www.ni.com/white-paper/5362/en/

[10] ON Semiconductor, LM324 – Single Supply Quad Operational Amplifiers, Octubre de 2016,

https://www.onsemi.com/pub/Collateral/LM324-D.PDF

[11] Playground Arduino, s.f., https://playground.arduino.cc/Es/Es

[12] Quanser Inc., QUARC, 2015, http://www.quanser.com/Products/quarc/documentation/index.html

[13] TutosIngenieria [Video], Como medir tensiones mayores a 5v por Arduino, 30 de noviembre de

2015, https://www.youtube.com/watch?v=nW30cV6_I5o

[14] Texas Instrument, L293x Quadruple Half-H Drivers, Enero de 2016,

http://www.ti.com/lit/ds/symlink/l293.pdf

[15] Wikipedia, Circuito RC, 6 de diciembre de 2016, https://es.wikipedia.org/wiki/Circuito_RC

Page 73: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

56

Anexo I: Códigos de Arduino®

I) Serial_manda_sencillo.ino

II) POS.ino

Page 74: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

57

III) VEL.ino

IV) Prueba_dos_serial.ino

Page 75: Grado en Ingeniería Electrónica, Robótica y Mecatrónica ...bibing.us.es/proyectos/abreproy/91458/fichero/RodriguezGalisteoAdrian_TFG.pdf · Grado en Ingeniería Electrónica,

58

V) Prueba_dos_serial_offset.ino