Sistemas de control de motores en Tiempo Real mediante Matlab
Transcription
Sistemas de control de motores en Tiempo Real mediante Matlab
Sistemas de control de motores en Tiempo Real mediante Matlab Memoria Técnica TITULACIÓN: Enginyeria Automàtica i Electrònica Industrial (1998) AUTOR: Augusto Cilento DIRECTOR: Enric Vidal FECHA: Febrero 2007. Tengo que agradecer mucho en el transcurso de este largo trayecto, ya que he tenido otras ocupaciones que me han absorbido por completo además del presente proyecto. Es por ello que sería injusto no reconocer el apoyo de aquellos que han estado conmigo, codo con codo. Gracias a Alberto por todos los conocimientos profesionales que has compartido conmigo y la amistad demostrada. A mi tutor Enric por la paciencia y la fe depositada en mí. A mi trainer y hermano Renato por su disponibilidad y buenos consejos. A mi madre Anna por su apoyo incondicional. Y a todos aquellos que no aparecen, pero que me han tenido que padecer, sinceramente gracias. La tarea de un hombre es sencilla. No debe permitir que su existencia se convierta en un accidente casual. Nietzsche Índice 1. 2. 3. Introducción................................................................................................................... 6 Objetivos........................................................................................................................ 6 Memoria descriptiva ...................................................................................................... 7 3.1. Introducción a MATLAB ...................................................................................... 7 3.2. Entorno en tiempo real con MATLAB.................................................................. 7 3.2.1. Real Time Windows Target ........................................................................... 7 3.2.2. Real-Time Windows Kernel ........................................................................... 8 3.2.3. Aplicación Real-Time .................................................................................... 9 3.2.4. Análisis y adquisición de señales .................................................................. 9 3.2.5. Ajuste de parámetros ..................................................................................... 9 3.2.6. Entorno del hardware.................................................................................. 10 3.2.6.1. Compatibilidad del PC ........................................................................ 10 3.2.6.2. Soporte del driver de entrada/salida ................................................... 10 3.2.7. Entorno del software ................................................................................... 11 3.2.7.1. Simulación en tiempo no real .............................................................. 11 3.2.7.2. Ejecución en tiempo real ..................................................................... 11 3.2.8. Simulink en modo externo............................................................................ 12 3.2.9. Buffers y transferencia de datos .................................................................. 12 3.3. Elementos físicos de la aplicación en Tiempo Real ............................................ 12 3.3.1. PC ................................................................................................................ 13 3.3.1.1. Placa de adquisición de datos ............................................................. 14 3.3.1.1.1. Sensores y actuadores ......................................................................... 14 3.3.1.1.2. Hardware de adquisición de datos...................................................... 14 3.3.1.1.3. Hardware de acondicionamiento de la señal ...................................... 15 3.3.1.1.4. La computadora................................................................................... 15 3.3.1.1.5. Software............................................................................................... 15 3.3.1.1.6. Hardware de la adquisición de datos.................................................. 15 3.3.1.1.6.1. Descripción de la placa de adquisición de datos NI-6024-E.............. 15 3.3.1.1.6.2. Conexión Entrada/Salida .................................................................... 16 3.3.1.1.6.3. Características del bus PCI................................................................. 19 3.3.2. Driver del Motor CC ................................................................................... 21 3.3.2.1. Microcontrolador ................................................................................ 21 3.3.2.2. GAL (Gate Array Logic)...................................................................... 22 3.3.2.3. Puente en H ......................................................................................... 22 3.3.2.4. Cuadrantes de trabajo de un motor..................................................... 22 3.3.2.5. Pulse Width Modulation ...................................................................... 23 3.3.3. Motor de corriente continua........................................................................ 24 3.3.3.1. Excitación independiente..................................................................... 25 3.3.3.2. Determinación de la constante K·Φ .................................................... 27 3.3.3.3. Placa de características del motor de corriente continua .................. 27 3.3.4. Modulo de Control ...................................................................................... 28 3.3.5. Fuente de Alimentación Variable ................................................................ 33 3.4. Elementos de Software ........................................................................................ 34 3.4.1. Herramienta GUIDE ................................................................................... 34 3.4.1.1. Paleta de componentes ........................................................................ 37 3.4.1.2. Iconos varios ....................................................................................... 37 3.4.2. Estructura de los gráficos en MATLAB....................................................... 37 3.4.2.1. Jerarquía de MATLAB ........................................................................ 37 3.4.2.2. Identificadores (handles)..................................................................... 38 3.4.2.3. Propiedades de los objetos .................................................................. 38 i Índice 4. Memoria de cálculo ..................................................................................................... 39 4.1. Configuración de los elementos Hardware.......................................................... 39 4.1.1. Esquema de conexionado ............................................................................ 39 4.1.2. Tabla de conexiones .................................................................................... 40 4.2. Configuración elementos de Software................................................................. 41 4.2.1. Instalación MATLAB ................................................................................... 41 4.2.2. Instalación Compilador............................................................................... 42 4.2.3. Configuración Compilador ......................................................................... 42 4.2.4. Instalación del Kernel Real-Time Windows Target .................................... 44 4.2.5. Obtención de información de estado del kernel .......................................... 44 4.3. Modelado de la planta.......................................................................................... 45 4.3.1. Discretización de la planta.......................................................................... 48 4.3.1.1. Frecuencia de muestreo....................................................................... 48 4.3.1.2. Efecto aliasing ..................................................................................... 49 4.3.1.3. Funciones de transferencia discretas .................................................. 50 4.4. Diseño de controladores ...................................................................................... 50 4.4.1. Controlador P.............................................................................................. 52 4.4.2. Controlador PI ............................................................................................ 57 4.4.3. Limitaciones en la frecuencia de muestreo ................................................. 59 4.5. Funcionamiento del interfaz gráfico.................................................................... 61 4.5.1. Elección del modelo de trabajo ................................................................... 62 4.5.1.1. Modelo en lazo cerrado con controlador y carga............................... 62 4.5.1.2. Modelo en lazo abierto ........................................................................ 63 4.5.1.3. Modelo en lazo cerrado sin controlador y con carga ......................... 64 4.5.2. Parámetros de entrada ................................................................................ 65 4.5.3. Parámetros del controlador ........................................................................ 65 4.5.4. Parámetros de ejecución ............................................................................. 66 4.5.5. Visualización de gráficos ............................................................................ 66 4.5.5.1. Opciones para la visualización de datos de entrada/salida................ 67 4.5.5.2. Selección datos a visualizar ................................................................ 68 4.5.5.3. Opciones de zoom y de centrado ......................................................... 68 4.5.6. Guardar y cargar datos............................................................................... 69 4.5.7. Casilla de diálogo........................................................................................ 70 4.5.8. Botones para cerrar la aplicación............................................................... 70 4.5.9. Diagrama de flujo general .......................................................................... 70 4.6. Código fuente de la GUI...................................................................................... 72 4.6.1. Función de Apertura.................................................................................... 72 4.6.2. Parámetros de entrada ................................................................................ 76 4.6.2.1. Consigna.............................................................................................. 76 4.6.2.2. Rampa.................................................................................................. 77 4.6.2.3. Inversión de giro.................................................................................. 77 4.6.2.4. Tiempo de retardo ............................................................................... 77 4.6.3. Parámetros del controlador ........................................................................ 77 4.6.3.1. Constante proporcional....................................................................... 77 4.6.3.2. Constante integral ............................................................................... 78 4.6.3.3. Constante derivativa............................................................................ 78 4.6.3.4. Ajuste manual por función de transferencia ....................................... 78 4.6.3.5. Función controlador............................................................................ 78 4.6.4. Parámetros de ejecución ............................................................................. 79 4.6.4.1. Tiempo inicial ...................................................................................... 79 ii Índice 4.6.4.2. Tiempo final......................................................................................... 79 4.6.4.3. Tiempo discreto ................................................................................... 79 4.6.4.4. Conexión y ejecución de la aplicación ................................................ 80 4.6.4.5. Parada de la ejecución ........................................................................ 80 4.6.4.6. Compilación ........................................................................................ 81 4.6.5. Limitación de puntos de ejecución .............................................................. 82 4.6.6. Visualización de gráficos ............................................................................ 83 4.6.6.1. Opción de gráfico AND ....................................................................... 83 4.6.6.2. Opción de gráfico OR.......................................................................... 84 4.6.6.3. Opción de gráfico SCOPE................................................................... 84 4.6.6.4. Selección de variable a visualizar ....................................................... 85 4.6.6.5. Borrar pantalla.................................................................................... 85 4.6.6.6. Activación de la cuadrícula de pantalla.............................................. 85 4.6.6.7. Casillas de selección de área de visualización ................................... 86 4.6.6.8. Zoom in ................................................................................................ 86 4.6.6.9. Zoom out .............................................................................................. 86 4.6.6.10. Selección automática de visualización ................................................ 87 4.6.6.11. Área de visualización de gráficos........................................................ 87 4.6.6.12. Visualización de gráficos .................................................................... 87 4.6.7. Parámetros de guardar y cargar datos ....................................................... 90 4.6.7.1. Nombre de la variable ......................................................................... 90 4.6.7.2. Ruta para salvar/guardar datos .......................................................... 91 4.6.7.3. Salvar/guardar datos........................................................................... 91 4.6.8. Parámetros de casilla de diálogo y cerrar aplicación ................................ 93 4.6.8.1. Casilla de diálogo................................................................................ 93 4.6.8.2. Salvar................................................................................................... 93 5. Conclusiones................................................................................................................ 94 6. Bibliografía.................................................................................................................. 95 7. Anexos ......................................................................................................................... 96 7.1. Compatibilidad de bloques de Simulink y RTWT .............................................. 96 7.2. Preguntas realizadas al servicio técnico de Matlab ........................................... 104 iii Memoria Técnica 1. Introducción Desde que Michael Faraday descubrió en el siglo XIX que mediante la generación de una corriente eléctrica en un conductor en movimiento en el interior de un campo magnético producía el fenómeno de la inducción, se ha evolucionado mucho respecto a los primeros prototipos de motores eléctricos. Existen una gran variedad de tipos de motores según su tamaño, funcionamiento, tensión de alimentación, etc. En la actualidad, se hace un gran uso de estas máquinas tanto en el ámbito industrial, como en el doméstico. Hay que decir que la electrónica de potencia y los avances tecnológicos han contribuido a dar mayor cabida a estos dispositivos, tanto por la reducción del tamaño, de los consumos y de los rendimientos. Ello hace posible verlos en el interior de un teléfono móvil, de un ordenador, o en juguetes. Pero es en la industria donde se hace más latente el uso de estas máquinas, y es donde se incorporan sistemas realimentados para el control de velocidad, de par o de ángulo. Ya desde el 300 a.C. los griegos y los árabes tuvieron la necesidad de querer medir el tiempo, conduciéndoles a realizar grandes aportes en la teoría y práctica del control automático. Pero no fue hasta el siglo XVIII, a manos del movimiento ideológico de la Ilustración, que se hicieron los avances más significativos. Durante la Revolución Industrial, con la implementación de máquinas más complejas: molinos de grano avanzados, hornos, calderas y motores a vapor; se llevaron a cabo reguladores de flotador, temperatura, presión, y control de velocidad. Los controladores proporcionan una mayor fiabilidad; lo que conlleva una mejora de cualquier proceso de fabricación, tanto en calidad como en cantidad de producción. 2. Objetivos El objetivo principal que se plantea es la realización de un entorno gráfico que permita el control ajustable de la velocidad de una máquina de corriente continua en tiempo real. Para ello se deberá conocer los siguientes entornos para desarrollar la aplicación: La herramienta para el desarrollo del interfaz gráfico (GUIDE). Las herramientas de programa, y en especial las de Tiempo Real (RTWT/Simulink). Los elementos físicos de la aplicación, como el driver de corriente continua elaborado en el laboratorio, y los módulos de la casa LEYBOLD-DIDACTIC. Mediante el desarrollo de la aplicación en Tiempo Real se pretende dar una visión práctica del diseño de controladores que se imparte en las clases de teoría, permitiendo al alumno entender y visualizar gráficos del controlador que el mismo haya diseñado. Se tendrán que establecer unas protecciones para acotar los valores de tensión de entrada y salida, y así evitar desperfectos en los elementos físicos del sistema. 6 Memoria Técnica 3. Memoria descriptiva 3.1. Introducción a MATLAB El nombre de MATLAB proviene de la contracción de los términos MATrix LABoratory y fue concebido para el fácil acceso a las librerías que son de gran importancia en el campo de la computación y el cálculo matricial. MATLAB es un entorno de computación y desarrollo de aplicaciones totalmente integrado, orientado para el desarrollo de proyectos con elevados cálculos matemáticos y la visualización gráfica de estos. MATLAB integra análisis numérico, cálculo matricial, procesado de señal, todo ello en un entorno fácil para el usuario. Tanto en el mundo universitario como en el industrial, MATLAB se ha convertido en una herramienta básica para la resolución de complejos problemas matemáticos en diferentes áreas como la computación, el cálculo numérico, prototipaje algorítmico, teoría de control automático, estadística, etc. MATLAB consta de diferentes aplicaciones o toolboxes especializados orientados a ingenieros, científicos y todo tipo de profesionales técnicos. Entre ellos destacan: Sistemas de Control, Adquisición de Datos, Tiempo Real, Lógica Fuzzy, Procesamiento de imágenes, Redes Neuronales, Optimización, Procesamiento de Señal, etc. 3.2. Entorno en tiempo real con MATLAB MATLAB presenta una aplicación para hacer simulaciones en tiempo real, la toolbox Real Time Windows Target. Esta herramienta permite realizar aplicaciones de control y simulaciones en tiempo real para plantas físicas, como puede ser el caso que nos ocupa: un motor de corriente continua. 3.2.1. Real Time Windows Target Real Time Windows Target es una herramienta de MATLAB que permite capturar y generar señales en tiempo real mediante diagramas de bloques generados con Simulink. Además, se pueden visualizar estas señales, cambiando y controlando parámetros, todo en tiempo real. Para hacerlo posible tiene que haber un elemento físico que interactúe entre Simulink y el elemento exterior que queremos controlar, recoger señales,... este elemento es la placa de adquisición de datos DAQ, que es la que permite operar con señales de entrada y/o salidas analógicas y digitales. La integración entre Simulink en modo externo y Real Time Windows Target permite utilizar el modelo de Simulink con un interfaz gráfico para: Visualización de señales: se puede utilizar el bloque “Scope” para visualizar señales en tiempo real. 7 Memoria Técnica Ajuste de parámetros: se realiza mediante las cajas de diálogo de los bloques en Simulink durante la ejecución en tiempo real. 3.2.2. Real-Time Windows Kernel Un componente clave del Real Time Windows Target es un kernel en tiempo real que hace de interfaz con el sistema operativo Windows para asegurar que la aplicación en tiempo real se está ejecutando en el tiempo de muestreo seleccionado. El kernel asigna la prioridad más elevada de ejecución para la aplicación en tiempo real, y lo hace utilizando el reloj interno del ordenador como fuente principal de tiempo. Interrupciones de tiempo: el kernel intercepta la interrupción del reloj del PC antes que el sistema operativo Windows la reciba, y bloquea cualquier llamada al sistema operativo. Entonces, el kernel utiliza la interrupción para iniciar la ejecución del modelo compilado. Para garantizar un periodo de muestreo preciso el kernel reprograma el reloj del PC a una frecuencia mayor. Debido a que el reloj del PC es también la principal fuente de tiempo para el sistema operativo, el kernel envía una interrupción al sistema operativo manteniendo la tasa de interrupción inicial. Planificador: las interrupciones hacen de base de tiempo para un sencillo planificador que se encarga de ejecutar las aplicaciones en tiempo real. El número de tareas es igual al número de períodos de muestreo utilizados en el modelo, configurado en modo multitasking. En modo single-tasking sólo existirá una tarea. El máximo número de tareas es 32, y las tareas más rápidas tienen más prioridad de ejecución que las más lentas. Durante la ejecución la aplicación en tiempo real almacena los datos en buffers, y posteriormente el contenido de los buffers es recuperado por el bloque Scope (ya sea para guardarlas en una variable en el Workspace o bien para imprimirlas en pantalla). Comunicación con el hardware: el kernel hace de interfaz y comunica con el hardware de E/S utilizando los correspondientes drivers que comprueban que la instalación de la placa DAQ sea correcta. En el caso que esto no suceda, no se nos permitirá ejecutar la aplicación en tiempo real. Simulink en modo externo: la comunicación entre Simulink y la aplicación en tiempo real se hace mediante Simulink con el modo External. Este es un módulo que se comunica directamente con el kernel y es utilizado para comenzar una aplicación en tiempo real, cambiar parámetros, recuperar datos del bloque Scope. Compilador de C incorporado: las aplicaciones de Real Time Windows Target pueden ser compiladas con LCC (solo C), que es el que viene por defecto con MATLAB. 8 Memoria Técnica 3.2.3. Aplicación Real-Time Una aplicación en tiempo real tiene las siguientes características: Código compilado: es el resultado de compilar el código fuente. En nuestro caso el código es el modelo. Relación con el modelo de Simulink: el ejecutable contiene una relación binaria de todos los componentes del modelo, conexiones entre bloques, dependencias de tiempo y variables. Relación con el kernel: el modelo tiene que ser cargado y ejecutado directamente por el kernel del Real Time Windows Target. Esta nunca podrá ser ejecutada sin el kernel. Checksum: el modelo y el ejecutable de Simulink contienen un valor de Checksum. El kernel utiliza este valor para comparar el modelo y el ejecutable, si estos son coherentes permitirá realizar la ejecución. Cuando se haga un cambio en el modelo de Simulink el valor de Checksum no varía hasta que no se hace un “rebuild”. Esto permite que cuando se cambian valores de los parámetros durante la ejecución, el mapeo de parámetros a memoria se haga de manera correcta. 3.2.4. Análisis y adquisición de señales Se puede adquirir, visualizar y salvaguardar señales utilizando el bloque Scope de Simulink, trabajando en modo externo. Quiere decir que se puede observar el comportamiento del modelo en tiempo real y guardar los datos en el Workspace. Existen dos modalidades de captura y visualización de las señales: Signal Tracing: proceso mediante el cual se puede adquirir y visualizar señales durante la ejecución de una aplicación en tiempo real. Es decir, nos permitirá visualizar los datos mientras que los está capturando, sin tener que esperar a que acabe la simulación (sólo se permite mediante el bloque Scope, no permite exportarlos a medida que los captura). Signal Logging: proceso mediante el cual se puede adquirir y visualizar señales procedentes de la aplicación en tiempo real, una vez haya acabado la ejecución o bien se haya parado manualmente. Hasta que no se cumpla alguna de las dos condiciones no se permite visualizar, guardar y/o exportar las señales (es un problema cuando se trabaja con una interfaz gráfica externa a Simulink). 3.2.5. Ajuste de parámetros Cambiar parámetros y observar los cambios que se producen durante la ejecución en tiempo real es posible desde Simulink o bien a través de una interfaz gráfica externa. 9 Memoria Técnica Modo External en Simulink: trabajar en este modo nos permite cambiar valores de parámetros y transferirlos automáticamente mientras se ejecuta la aplicación en tiempo real. Durante la ejecución en tiempo real se pueden cambiar parámetros en los siguientes elementos: Parámetros de bloques Parámetros de bloques de subsistemas. MATLAB variables 3.2.6. Entorno del hardware El hardware está formado por un ordenador y una placa de adquisición de datos compatibles. 3.2.6.1. Compatibilidad del PC Se pueden utilizar ordenadores que utilicen Windows NT 4.0, Windows 2000 o Windows XP. 3.2.6.2. Soporte del driver de entrada/salida El Real Time Windows Target utiliza tarjetas de adquisición estándar y económicas para ordenadores compatibles tipo PC. Cuando se ejecuta un modelo en tiempo real, el Real Time Windows Target captura los datos muestreados por medio de uno o más canales de entrada, inmediatamente son procesados en los bloques del modelo creados y los datos obtenidos se envían a los canales de salida que correspondan. Tarjetas de adquisición: el Real Time Windows Target soporta una variedad gama y cantidad de tarjetas (ISA, PCI y PCMCIA). El número de placas soportadas está por encima de las 200. Un listado completo y las posibles autorizaciones se pueden encontrar la siguiente dirección: http://www.mathworks.com/products/supportedio.html?prodCode=WT. Librería de bloques para DAQ: el Real Time Windows Target provee una librería de bloques para Simulink que contienen los drivers universales para todas las placas compatibles. Esta librería es la “rtwinlib” y contiene los bloques: Analog Input, Analog Output, Digital Input, Digital Output, Counter Input y Encoder Input. 10 Memoria Técnica 3.2.7. Entorno del software El entorno de software es un sitio para diseñar, construir, y testear en tiempo no real y en tiempo real. 3.2.7.1. Simulación en tiempo no real Se crea un modelo con Simulink y se pone en modo “normal” para llevar a cabo una simulación en tiempo no real. Al realizar una simulación en tiempo no real, Simulink utiliza un vector de tiempo para gestionar el modelo. Después de que las salidas sean computadas por un determinado valor de tiempo, Simulink inmediatamente repite esta operación para el siguiente valor del vector de tiempo y así sucesivamente. Este proceso finalizará en el momento en que se para la simulación o bien cuando se llegue al tiempo final. Dado que este vector de tiempo no está asociado a ningún reloj, las salidas son calculadas en tiempo no real, y lo hacen tan rápido como el ordenador le permita. 3.2.7.2. Ejecución en tiempo real Para ejecutar una aplicación en tiempo real, se crea un modelo en Simulink y se pone en modo External. Para hacer una aplicación en tiempo real intervienen Real-Time Workshop, Real Time Windows Target y el compilador C/C++. La respuesta del compilador es un ejecutable que el kernel puede ejecutar en tiempo real. Esta aplicación utiliza como parámetros iniciales los que hay en el modelo en el momento de la generación del código. Durante la ejecución en tiempo real, utilizando el tiempo de muestreo fijado por el usuario, el Real Time Windows Target utiliza las interrupciones para gestionar la aplicación en tiempo real. En cada nueva interrupción el ejecutable computa los valores de salida de los bloques del modelo. Para generar código con Real-Time Workshop se utiliza el algoritmo Fixed-Step Discrete. Este algoritmo calcula el valor del tiempo para la siguiente muestra añadiendo un incremento de tiempo al actual. La precisión de la señal a representar y la longitud del tiempo de simulación resultante dependen del tiempo de muestreo escogido. Es decir, cuanto menor sea el tiempo de muestreo escogido mayor será la calidad de la señal muestreada, pero menor será el tiempo de simulación máximo. En caso que el usuario no seleccione un tiempo de muestreo, Simulink escoge uno por defecto dividiendo por 50 la diferencia del tiempo final e inicial. También hay que remarcar que este algoritmo no permite simular estados continuos. 11 Memoria Técnica 3.2.8. Simulink en modo externo El modo externo requiere una interfaz de comunicación para pasar parámetros externos a Simulink, y al acabar la recepción, el mismo protocolo de comunicación tiene que ser utilizado para aceptar nuevos valores e insertarlos en la correspondiente posición de memoria para que sean utilizados por la aplicación en tiempo real. En algunas tarjetas de Real-Time Workshop la interfaz de comunicación utiliza protocolo TCP/IP. En el caso de Real Time Windows Target, el ordenador servidor también sirve como ordenador objetivo. Entonces, sólo se necesita un driver virtual para intercambiar parámetros entre MATLAB, el espacio de memoria de Simulink, y la memoria que es accesible para la aplicación en tiempo real. Hay que recordar que trabajando en este modo se puede obtener y visualizar señales con el bloque Scope, así como ajustar parámetros. Cuando se modifica algún parámetro de un bloque de entrada, la simulación queda pausada hasta que no se cierra la ventana de diálogo. 3.2.9. Buffers y transferencia de datos Para cada intervalo de muestreo de la aplicación en tiempo real, Simulink almacena de manera continua datos en memoria hasta que el buffer de datos se llena. Una vez el buffer está lleno, Simulink suspende la captura de datos hasta que éstos no hayan sido transferidos a MATLAB a través del modo externo de Simulink. Cuando esto sucede, la aplicación en tiempo real continúa ejecutándose. Los datos capturados dentro del buffer son continuos. Cuando el buffer ha sido transferido a Simulink, se visualiza inmediatamente en el bloque Scope. Existe la posibilidad de poder guardar estos datos directamente en un fichero MAT. 3.3. Elementos físicos de la aplicación en Tiempo Real El conjunto del hardware que forma la aplicación en Tiempo Real se puede desglosar en seis bloques de elementos que interactúan entre sí. PC Entradas/Salidas Driver del motor de corriente continua Motor de corriente continua Alimentación externa Realimentación 12 Memoria Técnica Alimentación Rampa Sentido de giro Errores Entradas/Salidas Velocidad Driver Motor CC MOTOR Realimentación Ilustración 1: Representación en bloques de los componentes del controlador. 3.3.1. PC El ordenador personal es el encargado de capturar los datos que transmite el usuario al driver (velocidad, rampa, etc), y los datos obtenidos del motor (errores, datos de la realimentación, etc), para realizar los cálculos algorítmicos necesarios y así actualizar los valores del modelo en cada intervalo de tiempo. Es decir, la computadora y el modulo de entrada/salida, o también placa de adquisición de datos, establecerán un intercambio de parámetros para cada instante de tiempo. El PC aloja en su interior la tarjeta de adquisición de datos, los drivers de la misma, el programa MATLAB, la aplicación en tiempo real, y Simulink. Las características de la computadora utilizada y su sistema operativo son: Procesador INTEL PENTIUM 4 a 1,80 GHz 512 MB de RAM WINDOWS 2000 (Service Pack 4) MATLAB R2006a v7.2.0.232 SIMULINK R2006a v6.4 VISUAL C/C++ v6.0 Hay que decir que estas características contribuirán a la restricción del tiempo de muestreo máximo, el número máximo de bloques en Simulink o por ejemplo la velocidad de compilación de la aplicación durante el desarrollo, entre otros. 13 Memoria Técnica 3.3.1.1. Placa de adquisición de datos La tarjeta de adquisición de datos permite capturar y/o generar señales reales e interactuar con ellas desde la aplicación en tiempo real. Un sistema de adquisición de datos esta formado por un hardware y un software que permite a un sistema digital conectarse al mundo real. El sistema de adquisición de datos típico está formado por: Sensores y actuadores Hardware de adquisición de datos Hardware de acondicionamiento de señal Computadora o procesador Programa Ilustración 2: Esquema del proceso de adquisición de datos 3.3.1.1.1. Sensores y actuadores Los sensores y actuadores son aquellos que actúan como transductores, es decir estos elementos transforman una señal capturada de una naturaleza en otra señal de salida de otra naturaleza. En el caso que nos ocupa, el sensor seria el tacómetro que lee las vueltas que realiza el eje del motor y genera una señal eléctrica proporcional. El actuador es el que mediante una señal eléctrica hace que el motor gire a determinada velocidad. 3.3.1.1.2. Hardware de adquisición de datos Es el corazón de cualquier sistema de adquisición de datos. Su función es convertir señales analógicas provenientes del mundo real a señales digitales, o bien convertir señales digitales a analógicas 14 Memoria Técnica 3.3.1.1.3. Hardware de acondicionamiento de la señal Normalmente las señales de los sensores son incompatibles con el hardware de adquisición de datos. Para lograr esta compatibilidad habrá que acondicionar la señal, es decir que si la señal es muy pequeña habrá que amplificarla, de lo contrario atenuarla. También es muy común eliminar componentes frecuenciales de las señales. 3.3.1.1.4. La computadora La computadora proporciona un procesador, un reloj, un bus para transferir datos y espacio de memoria o disco para almacenar datos. 3.3.1.1.5. Software El software de adquisición de datos permite intercambiar información entre la computadora y el hardware. Por ejemplo, los programas típicos permiten configurar la tasa de muestreo de una tarjeta de adquisición y adquirir un número concreto de muestras. 3.3.1.1.6. Hardware de la adquisición de datos El hardware de la adquisición de datos es una tarjeta de la empresa National Instruments, modelo NI-6024-E. 3.3.1.1.6.1. Descripción de la placa de adquisición de datos NI-6024-E Las características de la placa son las siguientes: 16 canales de entrada analógica (8 diferenciales) 2 canales de salida analógica 8 líneas de entrada/salida digital conector de 86 pines Sistema de control de tiempo propio (DAQ-STC). Consta de tres grupos para control de entradas y salidas analógicas, y para funciones de contador para propósitos generales. Estos grupos incluyen un total de siete contadores de 24 bits i tres de 16 bits con una resolución máxima de tiempo de 50 ns. Sistema específico que permite la sincronización de varias funciones de medida a un mismo disparo o evento de reloj, y lo hacen mediante los sistemas de bus de integración en tiempo real (Real-Time System Integration, RTSI). Conexión a bus de PC mediante ranura PCI. 15 Memoria Técnica Ilustración 3: Diagrama de bloques de la PCI-6024E Para hacer funcionar la placa DAQ es necesario tener los drivers e instalarlos en el PC. Para poder trabajar en el entorno de Matlab, la Toolbox Real-Time es la encargada de detectar automáticamente el dispositivo para darle funcionalidad. 3.3.1.1.6.2. Conexión Entrada/Salida A continuación se muestra la disposición de pines de la placa de adquisición de datos, así como una breve descripción de las entradas/salidas y sus rangos. 16 Memoria Técnica Ilustración 4: Patillaje del conector de la placa de adquisición de datos 17 Memoria Técnica En la Tabla 1 se muestran las señales de entrada/salida con más relevancia. AIGND Analog input ground—these pins are the reference point for single-ended measurements in RSE configuration and the bias current return point for DIFF measurements. All three ground references—AIGND, AOGND, and DGND—are connected on your device. ACH<0..15> AIGND Input Analog input channels 0 through 15—you can configure each channel pair, ACH<i, i+8> (i = 0..7), as either one DIFF input or two single-ended inputs. AISENSE AIGND Input Analog input sense—this pin serves as the reference node for any of channels ACH <0..15> in NRSE configuration. DAC0OUT AOGND Output Analog channel 0 output—this pin supplies the voltage output of analog output channel 0. DAC1OUT AOGND Output Analog channel 1 output—this pin supplies the voltage output of analog output channel 1. AOGND Analog output ground—the analog output voltages are referenced to this node. All three ground references—AIGND, AOGND, and DGND—are connected together on your device. DGND Digital ground—this pin supplies the reference for the digital signals at the I/O connector as well as the +5 VDC supply. All three ground references—AIGND, AOGND, and DGND—are connected on your device. DIO<0..7> DGND Input or Output Digital I/O signals—DIO6 and 7 can control the up/down signal of general-purpose counters 0 and 1, respectively. +5V DGND Output +5 VDC Source—these pins are fused for up to 1 A of +5 V supply on the PCI and PXI devices, or up to 0.75 A from a DAQCard device. The fuse is self-resetting. Tabla 1: Descripción de las señales de entrada y salida En la Tabla 2 se reflejan los rangos y características eléctricas de las entradas/salidas de la NI-6024-E. Signal Name Signal Type and Direction Impedance Input/ Output Protection (Volts) On/Off Source (mA at V) Sink (mA atV) Rise Time (ns) Bias ACH<0..15> AI 100 GΩ in parallel with 100 pF 42/35 ±200 pA AISENSE AI 100 GΩ in parallel with 100 pF 40/25 ±200 pA AIGND AO — — — — — — DAC0OUT (6024E and 6025E only) AO 0.1 Ω Short-circuit to ground 5 at 10 5 at-10 10 V/us — DAC1OUT (6024E and 6025E only) AO 0.1 Ω Short-circuit to ground 5 at 10 5 at-10 10 — V/jis AOGND AO — — — — — — DGND DO — — — — — — VCC DO 0.1 Ω 1A fused — — — DIO<0..7> DIO — Short-circuit to ground Vcc +0.5 13 at (Vcc -0.4) 24 at 0.4 1,1 50kΩpu AI = Analog Input AO = Analog Output Note: The tolerance on the 100 kΩ DIO = Digital Input/Output pu = pullup DO = Digital Output 50 kΩ pullup and pulldown resistors is very large. Actual value can range between 17 kΩ and Tabla 2: Características eléctricas de las entradas/salidas de la placa de adquisición de datos 18 Memoria Técnica En la Ilustración 5 se muestra el esquema de los canales 0 y 1 de las correspondientes salidas analógicas: DAC0OUT y DAC1OUT, que darán una tensión de salida referenciada respecto a AOGND. En la figura de la derecha hay las entradas/salidas digitales DIO<0…7> que se podrán configurar individualmente como entrada o salida según interese. En este caso, concretamente, las DIO<0…3> están configuradas como entradas y las DIO<4…7> como salidas. Las entradas digitales pueden recibir señales TTL y sensar señales de dispositivos externos, como por ejemplo el estado de un interruptor como el de la figura. Las salidas digitales pueden enviar señales TTL y controlar dispositivos externos como un LED. Ilustración 5: Esquema salidas analógicas y entradas/salidas digitales respectivamente 3.3.1.1.6.3. Características del bus PCI Está claro que las características del bus son un factor a tener en cuenta respecto a posibles limitaciones en el tiempo de muestreo, tamaño de los datos, transformaciones ADC y DAC, etc. Sin entrar en mucho detalle, se comentan algunas de las características más destacables. En el manual del fabricante nos advierten que estas especificaciones se han determinado a una temperatura de 25 ºC. 19 Memoria Técnica Entrada Analógica Características de entrada Conversión ADC por aproximaciones succesivas Error ±1,5 LSB en modo no diferencial Resolución de 12 bits, 1 bit 4096 Velocidad de muestreo de 200 kS/s garantizada Board Gain (Software-Selectable) 0,5 1 10 100 Voltaje máximo de trabajo de ±11 V Potección contra sobretensiones Signal ACH<0..15> AISENSE Range ±10 V ±5 V ±500 mV ±50 mV Powered On ±42 ±40 FIFO buffer size: 512 S Configuration memory size: 512 words Tabla 3: Características entrada analógica Salida Analógica Características de salida 2 canales Resolución de 12 bits Error ±1,5 LSB (solo no diferencial) Tiempo máximo de actualización DMA: 10 kHz, system dependent Interrupts: 1 kHz, system dependent Conversión DAC: Double buffering, multiplying FIFO buffer size: No Transferencia de datos: DMA, Interrupciones, E/S programadas Voltage de salida Rango: ± 10 V Impedancia de salida: 0.1 Ω max Corriente de salida: ±5 mA max Protección contra cortocircuitos a masa Estado de equilibrio al enceder: ±200 mV Tabla 4: Características salida analógica 20 Powered Off ±35 ±25 Memoria Técnica Entradas/Salidas Digitales DIO<0..7> Digital logic levels Level Input low voltage Input high voltage Input low current (Vin= 0 V) Input high current (Vin= 5 V) Output low voltage (IOL= 24 mA) Output high voltage (IOH= 13 mA) Min 0V 2V — — — 4.35 V Max 0.8 V 5V –320 µA 10 µA 0.4 V — Estado al encender: Alta impedancia en la entrada.50 kΩ pull up to +5 VDC Transferencia de datos: E/S programadas Tabla 5: Características de las Entradas/Salidas Digitales 3.3.2. Driver del Motor CC El driver del motor de corriente continua está formado por toda aquella circuiteria electrónica que ha sido diseñada para gobernar la tensión de armadura del motor, entre otras funciones. Para poder realizar sus funciones consta de dos partes: la de control y la de potencia. En la de control tendremos el microcontrolador y la GAL (Gate Array Logic) que controlan al puente en H que se encarga de suministrar la potencia necesaria según mande el driver. 3.3.2.1. Microcontrolador Para realizar la gestión de las consignas de velocidad y rampa se utilizará el PIC18F252. Este elemento dispone de seis entradas analógicas y dos salidas de pwm. Sus funciones serán: Generar una señal de salida PWM en función de la consigna de velocidad, que variará tan rápido como lo permita el valor de la rampa. Mediante un bit externo se indicará al microcontrolador el sentido de giro del motor. En función del valor se activará una diagonal u otra del puente en H, lo que permite girar a derechas o a izquierdas. Es decir, se genera un bit para cada transistor del puente, siendo el valor cero como el corte y uno la saturación. 21 Memoria Técnica 3.3.2.2. GAL (Gate Array Logic) El dispositivo Lógico Programable GAL es el que confiere seguridad y fiabilidad a los elementos de potencia, protegiéndolos de la recirculación de sobrecorrientes, evita cruces en las ramas de los puentes y trasmite el PWM a la señal de activación de la parte alta de los transistores del puente. El modelo de GAL es el Ispv22v10 y este tipo de dispositivos destacan por la gran rapidez - del orden de nanosegundos - , característica importante para la protección de sobrecorrientes. 3.3.2.3. Puente en H La configuración del puente en H se basa en el funcionamiento de cuatro interruptores controlados, que gestionan en todo momento la tensión media y la recirculación de la corriente de armadura. La excitación del puente en H se realiza mediante modulación por anchura de pulsos y existen dos estrategias: Mantener una diagonal bloqueada y actuar en los dos transistores opuestos superior e inferior -. Para invertir el sentido de giro habrá que realizar la situación contraria. Mantener una diagonal bloqueada y actuar con el PWM en el transistor superior y dejando el inferior de la otra diagonal activado. Para invertir el sentido de giro se intercambian los papeles de las diagonales. Ilustración 6: Estructura de puente en H típica mediante transistores IGBT 3.3.2.4. Cuadrantes de trabajo de un motor El motor de corriente continua puede trabajar en cuatro cuadrantes en función de la polaridad de la tensión y del sentido de la corriente de armadura. Modificando estos dos parámetros podremos variar velocidad o par en el eje del motor, respectivamente. Partiendo de las analogías par-intensidad y velocidad-tensión, se puede construir la siguiente tabla. 22 Memoria Técnica Cuadrante Velocidad 1º + 2º + 3º 4º - Par + + Tabla 6: Tabla cuadrantes Par-Velocidad Para entender el funcionamiento hay que pensar en un montacargas, que es el ejemplo más completo al respecto de los cuatro cuadrantes. En el primer cuadrante velocidad y par son positivos, lo que se pretende es subir la carga a velocidad máxima. El segundo cuadrante sería cuando se está llegando al destino y hay que frenar, entonces el par – o análogamente intensidad – se invierte para continuar subiendo pero frenando. El tercero hace bajar la carga a velocidad máxima, es la situación inversa del primer cuadrante, velocidad y par negativos. El cuarto cuadrante pasa al revés que en el segundo, se está llegando al destino y se disminuye la velocidad invirtiendo el sentido del par – el motor trabaja como generador - . Este sistema de trabajo se llama freno a contramarcha. Con una buena gestión del motor se pueden controlar todas las situaciones que pueda demandar una carga. Para ello es necesaria una topología en H. 3.3.2.5. Pulse Width Modulation La técnica del PWM está basada en que el valor medio de una señal periódica es igual a la integral entre cero y el periodo de la función de la señal respecto el tiempo, según la expresión ( 1 ). T Vmed = ∫ 0 (1) f (t ) ⋅ dt T En el caso de una señal digital y considerando el periodo constante, se puede considerar que la función no es continua sino definida a trozos. Entonces, se puede decir que el valor medio de la señal durante un periodo fijo es igual al producto del valor de la señal en estado alto y su tiempo más el producto del valor y tiempo en estado bajo, todo ello divido por el periodo. Vmed = (2) VH × TH VL × TL + T T El ancho de la parte positiva respecto el periodo T se conoce como ciclo de trabajo: 23 Memoria Técnica D= (3) Ton T Se modifica el valor de la velocidad mediante la utilización de una tensión variable de armadura, que además es modulada por amplitud de pulsos (PWM). Disponiendo de una sola fuente de tensión a valor constante y con la ayuda de un interruptor controlado se puede trocear esta tensión hasta conseguir el valor necesario en cada momento. Si el interruptor está cerrado un 5% de su ciclo y el resto abierto, la tensión media resultante será un 5% de la tensión máxima de entrada. Por otra parte, si el interruptor queda cerrado todo el ciclo, el valor medio de salida será igual a la totalidad del valor máximo de entrada. Se puede ver el efecto en la Ilustración 7. Ilustración 7: PWM en los 4 cuadrantes 3.3.3. Motor de corriente continua Un motor eléctrico de corriente continua se entiende como el convertidor electromecánico rotativo que mediante los fenómenos de inducción y de par electromecánico transforma la corriente continua en energía eléctrica. Las expresiones que definen el funcionamiento de un motor de corriente continua son relativamente sencillas. Si se considera que el flujo de excitación o también flujo de campo es constante se pueden tomar las siguientes consideraciones: Par proporcional a la intensidad de inducido o de armadura. Velocidad proporcional a la f.e.m interna. Esto nos simplifica mucho el control ya que modificando la tensión de armadura podremos regular la velocidad. Obtener una tensión continua variable es relativamente sencillo, además si se alimenta el motor cc con una etapa de potencia adecuada y se 24 Memoria Técnica escoge una técnica de control adecuada, se consigue una muy buena respuesta dinámica (fiable y rápida). Existen diversos tipos de motores cc: con escobillas, sin escobillas (brushless) y los motores pasos a paso. Nos centraremos en el de escobillas porqué es el caso que nos ocupa. Ilustración 8: Estator, rotor y motor cc montado (se señala una escobilla), sucesivamente. La función del colector de delgas y las escobillas es alimentar correctamente las bobinas del devanado de armadura del rotor. El colector de delgas está unido al rotor y las escobillas al estator. En ciertas potencias existen diferentes configuraciones para las conexiones entre el devanado de excitación y armadura: excitación independiente, paralelo o shunt, serie y la compuesta. La que se va utilizar es la independiente por tanto nos centraremos en solo en esta configuración. 3.3.3.1. Excitación independiente En la Ilustración 9 se puede observar el esquema eléctrico equivalente de una máquina cc con excitación independiente, menospreciando la inductancia de armadura, trabajando como generador. 25 Memoria Técnica Ilustración 9: Esquema eléctrico de una máquina cc con excitación independiente. La nomenclatura es la siguiente: Va: tensión en bornes de la armadura. Ia: intensitat de armadura. Ea: f.e.m interna de inducido. Ra: resistencia de inducido o armadura. Incluye la resistencia ohmica del devanado de armadura, de las escobillas y de los devanados de compensación. La: inductancia del bobinado de inducido o armadura. Vb: caída de tensión del arco eléctrico a las escobillas (brush). w : Velocidad mecánica en el eje del motor (rad/s). n : Velocidad mecánica en el eje en r.p.m. Ti: par interno en N·m. Ts: par externo en N·m. En la Ilustración 10 se muestran las curvas características par-velocidad de un motor cc a flujo constante y con tensiones de alimentación de armaduras diferentes. El hecho más interesante de estas curvas es que tienen una característica dura para un elevado margen de tensiones. Esto quiere decir que si varia la demanda de par de la carga mecánica la velocidad varía poco, lo que permitirá regular fácilmente la velocidad de este tipo de motor. Ilustración 10: Curvas características par-velocidad de un motor cc a flujo constante. 26 Memoria Técnica 3.3.3.2. Determinación de la constante K·Φ En este apartado se explica el proceso practico para encontrar las constantes K·Φ. Determinando este parámetro y con las formulas de Ea y Ti se puede saber teóricamente el valor de la tensión e intensidad que debe aplicar al motor para conseguir una determinada velocidad o par en el eje de salida. Para el estudio se parten de las siguientes constantes: Ea = K ⋅ φ ⋅ w (4) Ti = K ⋅ φ ⋅ Ia (5) Va = Ia ⋅ Ra + Vb + Ea (6) Al trabajar con rpm substituimos w por 0.1047·n, quedando la expresión de Ea: (7) Ea = K ⋅ φ ⋅ 0.1047 ⋅ n De las ecuaciones ( 4 ) y ( 5 ) se pueden llegar a conocer el voltaje de Va, la resistencia Ra y la intensidad Ia. Para hallar la constante K·Φ se igualan la ( 6 ) y la ( 7 ): K ⋅φ = (8) Va − Vb − Ia ⋅ Ra 0.1047 ⋅ n Vb se desprecia al ser poco significativa, con lo que la ecuación final queda: K ⋅φ = (9) Va − Ia ⋅ Ra 0.1047 ⋅ n 3.3.3.3. Placa de características del motor de corriente continua El valor de la placa de característiques del motor de LEYBOLD-DIDACTIC VDE 0530 Tensió nominal Intensidad nominal Potencia nominal 220 V Tensión excitación 1,8 A Intensidad nominal de excitación 0,3 kW Velocidad nominal Tabla 7: Valores placa de características 27 220 V 0,25 A 2000 rpm Memoria Técnica 3.3.4. Modulo de Control El modulo de control se tiene que utilizar conjuntamente con la unidad de motor y carga. El modulo es un dispositivo controlador que tiene integrado un variador de frecuencia para suministrar la energía eléctrica y poder realizar el control de máquinas trifásicas, así como mostrar los valores medidos de velocidad y par en la pantalla de 7 segmentos. Existe la posibilidad conectarse mediante una comunicación serie a través de un PC y registrar valores. Las características técnicas: Alimentación 230V, a frecuencia de 47 a 62 Hz, 2 kW Control automático de velocidad (5000 a -5000 rpm) Control automático de par (±9 N·m) Los valores se pueden modificar mediante un potenciómetro externo Simulación de diferentes cargas: k·n2, k/n, características arbitrarias Mi ~ ni, etc Permite realizar un control externo inyectando una valor de continua de -10 V a 10 V Visualización de cuadrantes de trabajo leds de siete segmentos de 25 mm, 4 dígitos para la velocidad y 3 para el par Monitorización de la temperatura: Device Under Test (DUT) de la unidad de motor y carga Medida directa de voltaje para el DUT Comunicación serie para (RS232) para la transmisión de valores medidos y el control remoto Comunicación serie para la conexión de equipos adicionales Existen 6 tipos de error que puede dar el dispositivo según la Tabla 8. Tipo de Error ERR 1 ERR 2 ERR 3 ERR 4 ERR 5 ERR 6 Descripción Generator operation Temperature of the DUT Overvoltage in the link circuit of the control unit Temperature of the D & B Unit Temperature of the control unit DUT is switched off via the output DUT ENABLE by removing the coupling guard or the shaft end guard Tabla 8: Descripción tipos de errores en modulo de control de Leybold-Didactic La interconexión entre el modulo y el conjunto motor-carga se realiza mediante dos conectores: uno de 7 pines (16) y otro de 25 pines (17) según la Ilustración 11. 28 Memoria Técnica Ilustración 11: Modulo de control de velocidad y par. La descripción de los puntos que se reflejan en la Ilustración 11 se lista a continuación. Estos son un extracto del datasheet que se ha creído oportuno dejar constancia al lector. 29 Memoria Técnica of the DUT is the product of its speed/ torque characteristic. The recording of the characteristic is started by pressing the START button. 7.2 Run-up characteristic The speed, which is preset using the incremental control knob or externally, is kept constant. The load of the DUT is the product of its speed/ torque Description of the individual operating elements: 1 Main switch S: ON / OFF switch for the control electronics and supply voltages for the pendulum machine. 2 2- or 4-quadrant operation (ONLY MOTOR OPERATION) If this LED lights up the control unit automatically switches off when the DUT is operating in the 2nd or 4th quadrants (generator operation). This is a function used to protect power sources which are not energy recovery-proof, if the DUT is being supplied by such a source. characteristic. The recording of the characteristic is started by pressing the START button. 7.3 Automatic torque control (TORQUE CONTROL) The torque, which is set by means of the incremental control knob or externally, is kept constant. The DUT operates under constant load. After the device is switched on at switch S ,the LED lights up (only 2-quadrant operation possible). If the device is switched on by pressing the START button (directly under the LED), the LED does not light up (4-quadrant operation possible). 7.4 Load simulation M ~ k n The D & B Unit simulates the load response of a fan (M ~ k n2). 7.5 Load simulation M ~ k / n The D & B Unit simulates the load response of a winding drive (M ~ k / n). 7.6 Load simulation Mi ~ ni The D & B Unit simulates the load response with arbitrary characteristic edited by the user. 3 Pushbutton to start automatic recording of the characteristics. If the operating mode load characteristic or run-up characteristic is actice, automatic recording of characteristics can be started by pressing pushbutton. In the case of the load characteristic the speed range, starting from the momentary speed value and automatically proceeding up to the stop speed. For the run-up characteristic the machine-generator set is rapidly braked to the stop speed in order to run up again to the speed applicable for start or recording. Before starting the characteristic recording the momentary speed can be changed using the incremental control knob . At the end of the characteristic recording the machine-generator set sheds its load and the stop speed flashes for approx. 7 seconds. 7.7 Load simulation flywheel The D & B Unit simulates the load response of a flywheel. 8 RESET If an error message is displayed or switch off has been carried out because the torque limit has been exceeded, the control unit can be switched on using this button. However, this is only possible if the corresponding error has been eliminated. In the case of switch-off due to overheating this entails a cooling off of the corresponding components. 9 Four-quadrant display Display of the instantaneous load type of the DUT. Quadrant Load type Rotation direction 1st quadrant Motor operation clockwise 2nd quadrant Generator operation couterclockwise 3rd quadrant Motor operation counterclockwise 4th quadrant Generator operation clockwise 4 The pushbutton M = 0 serves to interrupt any given operating state. Any given operating state can be interrupted by pressing the pushbutton. At the same time the torque display shows OFF. The D & B Unit no longer develops any torque, comes to a standstill or is set to its no-load speed by the machine under test. Consequently, the activation of the pushbutton M = 0 results at all times to the load shedding of the machine-generator set. Reactivation of the pushbutton M = 0 results in the reactivation of the control unit and therewith the frequency converter. 5 Operating mode switch (MODE) Switchover to the next operating mode occurs each time this pushbutton is pressed. The current operating mode is displayed by an LED (7). 10 L1IN, L2IN, L3IN Input sockets to the internal DUT's measurement circuits for connection of external power supply: Input ranges for voltages: 0... 600 VAC/DC currents: 0... 10 A AC/DC frequenties: 0... 120 Hz 6 Error message LED: ERROR A multicolored LED is situated with the following significance: green: No error at all! red: An error appears and is displayed as ERR n (n stands for 1 to 6) Acknowledge by pressing RESET button (8). 7 Modes of operation: 7.1 Load characteristic The rotation speed, specified by the incremental control knob or externally, is kept constant. The load 11 L1OUT, L2OUT, L3OUT Output sockets for connection of different DUT-machines (DC, AC, 3~) 12 INTERN / EXTERN-switch 30 Memoria Técnica INTERN: Depending on the operating mode reference variable is set for speed, or torque via the incremental control knob. EXTERN: Depending on the operating mode the reference variable is set for speed or torque via the external input CONTROLIN (13). 21 Incremental control knob to change the reference variable and the limit The reference variable to be changed depends on the operating mode set and thus on the control loop currently activated. The speed setpoint is varied in the operating modes load characteristic and run-up characteristic Setting range: -5000 rpm...0 rpm...5000 rpm In the automatic torque control mode (TORQUE CONTROL) the setpoint value for the torque control loop is varied. Setting range: -9.99 Nm...0 Nm...+9.99 Mm In the case of external operation the incremental control knob cannot induce a change in the setpoint. If the stop speed or the torque limit is displayed (by pressing or, the incremental control knob can be used to vary the value currently being displayed. Setting range stop speed: 0 rpm...5000 rpm Setting range torque limit: 0 Nm...9.99 Nm The load simulation operating modes only permit an effective setting of the torque limit, for load simulation of a winding drive (M ~ k/n) the maximum adjustable torque limit is at 5 Nm (this torque has to be overcome during start up). 13 External control input CONTROLIN This input is active if the INTERN / EXTERN-switch is set to EXTERN. For external operation the setpoint value for the control loop selected by the MODE button is supplied via this socket. Here the following linear relationships apply to some extent: Automatic torque control (TORQUE CONTROL): ±10 V corresponds to ±10 N Automatic speed control (SPEED CONTROL): ±10 V corresponds to ±5000 rpm The setpoint value is supplied to the selected controller via a run-up generator. This means that setpoint step changes are possible and lead to a slight overshoot of the controller in question. 14 Temperature monitoring of the DUT: TERR This input is connected to the thermal contact of the DUT. This connection is always established as otherwise there would be no overload protection for the DUT. 15 DUT ENABLE-sockets Potential-free relay-driven output sockets in the operation mode as a switcher used with the /INH input of Control Unit PWM Characterisitc Method, cat. no. 735 291, a cut-off used with power circuit breakers e.g. cat. no. 745 561. The operation modes dut nc (normally closed) and dut no (normally open) can be changed by pressing the MODE key (5) during the first seconds when control unit is switched on. With each pressing a delay time will be started. The default mode of DUT ENABLE is dut no. 22 Auxiliary ground sockets 23 Analog DUT's current output (I [ 1 V / A ]) The voltage is proportional to the DUT's supply current when connected to DUT socket field (1 V corresponds to 1 A). 24 Analog DUT's voltage output (U [ 1 V / 100 V ]) The voltage is proportional to the DUT's supply voltage when connected to DUT socket field (1 V corresponds to 100 V). 16 Connection socket to supply the D & B Unit. 25 Analog torque output (M [ 1 V / Nm ]) The voltage is proportional to the instantaneous torque of the D & B Unit (1 V corresponds to 1 Nm). 17 Control connection input Multifunction Input for the connection of the D & B unit's build-in incremental tacho-generator, torque measurement- and protection circuits. 26 Analog speed output (n [ 1 V / 500 rpm ]) The voltage is proportional to the momentary speed of the machine-generator set (1 V corresponds to 500 rpm). 18 Digital speed output (TACHOOUT) The signals of the tacho-generator are automatically forwarded. 27 Pushbutton to display torque limit (|MMAX|) When operated switchover occurs between the torque limit and the momentary torque. If the torque limit is being displayed, the display flashes. This value can now be changed using the incremental control knob. If the display flashes, max. limit switch off (machine torque > set torque limit) is performed at the value now shown in the display. The DUT sheds its load: M = 0. 19 Serial interface (SERIAL OTHER) Available for connection of the control unit PWM characterisitc method, cat.no. 735 291. As such the device can be operated on the same PC interface as the control unit. 20 Serial interface (SERIAL PC) This interface is electrically isolated and outputs the speed and torque of the D & B Unit. If the sockets in the DUT sockets field are connected, also the current consumption and the voltage supply of the DUT is transmitted. Control of the control unit can a l s o b e c a r r i e d o u t u s i n g t h e s o ft w a r e C B M 1 0 V 5 , cat. no. 728 421. 28 Pushbutton to display speed limit nSTOP When operated switchover occurs between stop speed and current speed. If the stop speed is displayed, the display flashes. This value can now be changed using the incremental control knob. 31 Memoria Técnica 29 3-digit 7-segment display to indicate the torque error codes. To acknowledge error see RESET (8)! 30 4-digit 7-segment display for the indication of the speed, the condition of DUT ENABLE output and 32 Memoria Técnica 3.3.5. Fuente de Alimentación Variable La fuente de alimentación variable servirá para alimentar la excitación y el driver del motor de corriente continua. La fuente nos da la posibilidad de dar tensión alterna o continua, además de poder modificarla de 0 a 250 V. La fuente está formada por un transformador con un potenciómetro, proporcionando una relación de transformación variable. En la salida del transformador hay un rectificador que elimina la parte negativa, dando en la salida una señal de potencia continua. Ilustración 12: Vistas de la fuente de alimentación variable En su interior lleva un condensador para filtrar la tensión de salida del rectificador y conseguir una continua sin rizamiento. Para evitar los picos de intensidad de hasta 50 A producidos por la presencia del condensador, se provoca que el condensador se cargue a través de una resistencia con la intención de minimizar los efectos de la capacitancia en la salida. Una vez se haya cargado el condensador el circuito de disparo del relé se activarà cortocircuitando la resistencia para en la salida haya el valor deseado de tensión. Ilustración 13: Circuito de protección de sobreintensidad y fotografía de situación en la fuente variable 33 Memoria Técnica 3.4. Elementos de Software 3.4.1. Herramienta GUIDE Para el desarrollo de la aplicación en tiempo real, se trabaja con una herramienta de MATLAB llamada GUIDE (Graphical Use Interface Development Environment). Esta herramienta esta pensada para desarrollar GUIs (Graphical User Interfaces) fácil y rápidamente haciendo sencillo el diseño y presentación de los controles de la interfaz, reduciendo la labor en el momento de seleccionar, deshacer, arrastrar y centrar controles, así como la personalización de las propiedades de estos. El proceso a seguir para el desarrollo de un programa mediante GUIDE es que una vez se tienen todos los controles en posición, se editan las funciones de llamada (Callback) de cada uno de ellos, escribiendo el código de MATLAB que se ejecutará cuando el control sea utilizado. GUIDE está diseñado para hacer menos tedioso el proceso de desarrollo de la interfaz gráfica, para ello cuenta con un editor de propiedades (property editor) con el que se podrá modificar en cualquier momento los nombres, valores por defecto y las propiedades de los elementos. Para poder acceder a la herramienta GUIDE se puede de tres maneras: Tecleando el comando >>guide desde el prompt de Matlab A través del Launch Pad Pinchando en File -> New ->GUI dentro de Matlab, como se muestra a continuación Ilustración 14: Inicio de la aplicación GUIDE mediante menú Una vez iniciemos la aplicación aparece la siguiente interfaz, y nos pedirá si queremos realizar una aplicación nueva o bien abrir una existente. En el caso que se cree una nueva aplicación se puede partir de aplicaciones prefabricadas, como por ejemplo: con controles, con una pantalla para gráficos y menú, o un cuadro de dialogo. 34 Memoria Técnica Ilustración 15: Menú de la herramienta GUIDE En este caso se pide que comience el GUI en blanco, siendo nosotros quienes tengamos absoluto control y seamos quienes añadamos los controles que necesitemos. Aparecerá la ventana de la Ilustración 16. 1 3 2 5 4 7 6 9 8 11 10 13 12 17 15 16 20 18 21 19 14 Ilustración 16: Editor de la GUI en blanco y sus iconas Las correspondencias de los botones se han ordenado en la Tabla 9 a modo de resumen con un breve apunte de su utilización. 35 Memoria Técnica Item 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Tag Select Push Button Slider Radio Button Check Box Edit Box Static Text Pop-up menu List Box Toggle Button Axes Panel Button Group Activex Control Align objects Menu Editor Tab order Editor M-file Editor Property inspector Object Browser Run Detalles Selección de un objeto Botón Barra de desplazamiento Botón de selección circular Botón de selección tipo lista Casilla de edición Casilla de texto fijo Menú desplegable Menú en lista Botón con memoria Pantalla para visualización de gráficos Opción para generar un panel Opción para agrupar botones Opción para generar controles ActiveX Opción para alinear objetos Editor de opciones de menú Opción para cambiar el orden de las ventanas en el editor Editor de los ficheros .m Editor propiedades de los controles Buscador de Objetos Botón de compilación Tabla 9: Explicación de los botones de la Ilustración 16 Cuando se crea una GUI se generan dos ficheros: Un archivo .FIG, que es el que contiene los elementos gráficos así como las propiedades de la interfaz. Un archivo .M que es el contiene el código con las correspondencias de los botones de control de la interfaz. Cada vez que se introduzca un elemento gráfico en el .FIG se generará unas líneas de programa automáticamente asociadas a ese tipo de control. Estas líneas de programas son vacías, es decir, es como un contenedor que necesita que ser llenado para llevar a cabo alguna acción durante la ejecución del programa. Este modo de trabajo es como el de LABWINDOWS, VISUAL BASIC, etc Para que haya una correspondencia entre elemento gráfico y el código, cada vez que se pulse un botón se genera un evento, que provoca la ejecución de la función asociada a este elemento. Esta función es la callback que se anunciaba con anterioridad. A través de la Ilustración 16 se pueden diferenciar 2 barras: la paleta de componentes, y la de iconos varios. 36 Memoria Técnica 3.4.1.1. Paleta de componentes Siguiendo la Ilustración 16, la paleta de componentes va desde los número 1 hasta el 14. Son los controles (objetos) que aparecen en la GUI. 3.4.1.2. Iconos varios Siguiendo la Ilustración 16, la paleta de componentes va desde los número 15 hasta el 21. 3.4.2. Estructura de los gráficos en MATLAB Para entender mejor el entorno de programación se explicará las jerarquías de los gráficos, identificadores, propiedades de objetos, etc 3.4.2.1. Jerarquía de MATLAB Los gráficos en MATLAB tienen una jerarquía formada por objetos de distintos tipos. Esta jerarquía tiene una distribución de árbol con el aspecto como el que se muestra en la Ilustración 17. Panel Pantalla Ventana 1 (figure) Ejes 1 (axes) Ejes 2 (axes) Líneas (lines) Ventana 2 (figure) Controles (uicontrol) Superfícies (surfaces) Menús (uimenu) Texto (text) Imagen (image) Polígono (patch) Ilustración 17: Diagrama de bloques de la jerarquía de MATLAB El objeto más general es la pantalla o panel, es la raíz de todos los demás y solo puede haber un objeto pantalla. Una pantalla puede contener una o más ventanas (figures). A su vez cada una de las ventanas puede tener uno o más ejes de coordenadas (axes) en los que se puede representar objetos de más bajo nivel. Una ventana puede también puede tener también controles (uicontrols) como botones de selección o de opción,… y menús. Finalmente, los ejes pueden contener los cinco tipos de elementos gráficos que permite 37 Memoria Técnica MATLAB: líneas (lines), polígonos (patch), superficies (surfaces), imágenes tipo bitmap (image) y texto (text). La jerarquía de objetos indica que en MATLAB hay objetos padre e hijos. Por ejemplo, el objeto ventana es hijo de pantalla, y a su vez cada objeto ventana es padre de los ejes. En el momento que se borre un objeto de MATLAB se borrarán todos todos los objetos que son descendientes. Es decir, al borrar el objeto eje se borrarán las líneas, superficies, texto, imagen y polígono. 3.4.2.2. Identificadores (handles) Cada uno de los objetos de MATLAB tiene un identificador único a los que se les llamará handle o id. Algunos gráficos tienen muchos objetos, en cuyo caso tienen múltiples handles. El objeto raíz (pantalla) es siempre único y su identificador siempre es cero. El identificador de las ventanas siempre es un entero que aparece en la barra de nombre de dicha ventana. Los identificadores de otros elementos gráficos son números float. En Matlab puede haber múltiples ventanas abiertas pero solo una esta activa. Cada una de estas ventanas puede tener ejes abiertos, pero solo se dibuja en los ejes activos. Los identificadores de la ventana activa, de los ejes activos y del objeto activo se pueden obtener con los siguientes comandos: gcf (get current figure): Devuelve el entero que es el handle de la ventana activa. gca(get currant axis): Devuelve handle de los ejes activos. gco(get current object): Devuelve handle del objeto activo. delete handle: borra el objeto correspondiente y todos sus hijos. 3.4.2.3. Propiedades de los objetos Los objetos de Matlab pueden tener distintas propiedades: Children Clipling Parent Type UserData Visible Las propiedades tienen valores por omisión que se utilizan cuando el usuario no indique otra cosa. Es posible cambiar las propiedades por omisión y también devolverles el valor original. Hay propiedades que solo pueden ser consultados sus valores, sin poder ser modificados, y otros que tendrán un conjunto limitado de valores (p.e. on/off). 38 Memoria Técnica 4. Memoria de cálculo En esta parte se verá la parte práctica del proyecto, en la que se explicará la configuración de hardware y de software, así como los cálculos realizados para el diseño del controlador y la explicación del programa mediante un diagrama de flujo. 4.1. Configuración de los elementos Hardware Antes de nada hay que tener claro cuales son los elementos que se van a utilizar para que el motor de corriente continua pueda girar, y que se pueda implantar un lazo de velocidad y un controlador que haga cumplir nuestras exigencias de diseño. También será de suma importancia establecer las conexiones y asignar las entradas/salidas en la placa de adquisición de datos. 4.1.1. Esquema de conexionado Siguiendo lo establecido en el apartado 3.3, y utilizando los elementos descritos en el, tenemos el siguiente esquema de conexionado con el que se ha desarrollado la aplicación en tiempo real. Este esquema corresponde a un sistema realimentado. DRIVER VARIADOR DE TENSIÓN 220Vca Vcc+ SH_OUT 0V IDE20-E/S SH_IN Vcc_puente GND_puente M+ M- F1 M+ M- 0V MODULO CONTROL n (V) 9PIN 25 PIN CON CON SALIDAS Varmadura ENTRADAS F2 Vexcitación 25 PIN 9PIN CON CON MOTOR+CARGA PLACA DAQ Ilustración 18: Esquema de conexionado En la Ilustración 19 se muestra el puente del modulo de velocidad de Leybold-Didactic, de esta manera se evita el error 6, explicado en el apartado 3.3.3.3. 39 Memoria Técnica Ilustración 19: Puente de de entrada de sensado de temperatura 4.1.2. Tabla de conexiones A continuación se muestra una tabla resumen que engloba el conexionado desde el IDE de 20 pines hasta la placa de adquisición (DAQ) que hay en la Ilustración 18, así como: los pines de la DAQ y el rango de tensión, diferenciando las entradas de las salidas. 1 2 3 4 5 1 2 3 Descripción de la señal ENTRADAS Medida Sensor Hall Sobrecorriente Shall y MC33153 Cruce Rama B Cruce Rama A Lectura Velocidad (modulo ext.) SALIDAS Velocidad Rampa Sentido de giro Pin IDE Placa# Pin DAQ# Rango Tensión (V) 20 ACH0 ±12 11 DIO3 12 DIO2 13 DIO1 0-5 0-5 0-5 - ACH1 ±10 19 DAC0OUT 18 DAC1OUT 17 DIO0 Tabla 10: Resumen de conexiones entre driver y placa DAQ La distribución de pines en el conector IDE de 20 pines del driver: 40 0-5 0-5 0-5 Memoria Técnica Ilustración 20: Conector IDE de 20 pines en vista frontal El listado de pines del conector IDE del driver de corriente continua se muestra en la siguiente tabla. N°PIN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 IN/OUT de la placa al PC OUT OUT OUT OUT N.C. N.C. N.C. N.C. N.C. N.C. OUT OUT OUT IN OUT IN IN IN IN OUT Descripción -12 V +12 V GND +5 V Sobrecorriente (Shall i MC33153) Cruce rama B Cruce rama A Entrada al pic (libre) Salida del pic (libre) reset/rearme por soft (no implement.) Sentido de giro: 0 izq., 1 derecha Señal analógico rampa Señal analógico velocidad Medida de corriente al Shall (±12 V) Tabla 11: Lista de entradas salidas en el conector IDE de 20 pins del driver cc 4.2. Configuración elementos de Software A continuación se explica como instalar y configurar todos los elementos de MATLAB para trabajar con la toolbox de real-time. 4.2.1. Instalación MATLAB En el caso que haya que instalar MATLAB, hay que tener en cuenta que durante el proceso hay que seleccionar la instalación de SIMULINK y TOOLBOX REAL-TIME. Es aconsejable una instalación completa en caso de dudas. 41 Memoria Técnica Ilustración 21: Proceso de instalación con MATLAB Una vez concluido el proceso de instalación es necesario agregar el driver de la mochila, o dongle, así como tenerla conectada físicamente al PC, porque es lo que nos permite arrancar satisfactoriamente la sesión de trabajo. La versión utilizada es MATLAB R2006a. 4.2.2. Instalación Compilador Para poder desarrollar la aplicación en tiempo real es necesario un compilador que traduzca las líneas de programa escritas en el fichero .m, así el depurador de Matlab permitirá visualizar los errores, detener el programa en un determinado punto de la ejecución, permitir la ejecución paso a paso, etc. El compilador es externo, y por lo tanto habrá que instalarlo y configurarlo para que Matlab lo reconozca y pueda trabajar con él. Se instala un compilador C/C++, en nuestro caso se ha escogido el Visual C/C++, ya que el Open Watcom C/C++ daba problemas en las pruebas que se realizaron con Matlab. 4.2.3. Configuración Compilador Para que Matlab pueda trabajar correctamente y reconozca el compilador habrá que seguir los siguientes pasos: Teclear el siguiente comando para determinar que compiladores reconoce >> mex –setup El comando provoca la respuesta: Please choose your compiler for building external interface (MEX) files: 42 Memoria Técnica Would you like mex to locate installed compilers [y]/n? y Le decimos que queremos ver todos los compiladores instalados Select a compiler: [1] Lcc C version 2.4.1 in C:\ARCHIVOS DE PROGRAMA\MATLAB\R2006A\sys\lcc [2] Open WATCOM C/C++ version 1.3 in c:\watcom [3] Microsoft Visual C/C++ version 6.0 in c:\visual [0] None Compiler: Se marca la opción 3, el compilador de Microsoft, y aparece el siguiente mensaje: Please verify your choices: Compiler: Microsoft 6.0 Location: C:\visual Are these correct?([y]/n): Se confirma con un yes, y se muestra por pantalla siguiente mensaje confirmando la actualización de la opción. Trying to update options file: C:\Documents and Settings\user\Application Data\MathWorks\MATLAB\R2006a\mexopts.bat From template: C:\ARCHIVOS DE PROGRAMA\MATLAB\R2006A\BIN\win32\mexopts\lccopts.bat Done . . . ****************************************************** Warning: The file extension of 32-bit Windows MEXfiles was changed from ".dll" to ".mexw32" in MATLAB 7.1 (R14SP3). The generated MEX-file will not be found by MATLAB versions prior to 7.1. Use the -output option with the ".dll" file extension to generate a MEX-file that can be called in previous versions. For more information see: MATLAB 7.1 Release Notes, New File Extension for MEX-Files on Windows ****************************************************** 43 Memoria Técnica 4.2.4. Instalación del Kernel Real-Time Windows Target El kernel del RTWT de la placa es imprescindible para que la aplicación en tiempo real se conecte con el sistema operativo Windows y se ejecuten las interrupciones de manera acorde al tiempo de muestreo seleccionado. El kernel es el gestor de las tareas y los tiempos de ejecución de cada una de ellas, sin él no se podría ejecutar ninguna aplicación en tiempo real. Aunque el kernel es copiado automáticamente durante el proceso de instalación, hay que instalarlo manualmente mediante el siguiente comando: >>rtwintgt -setup You are going to install the Real-Time Windows Target kernel. Do you want to proceed? [y] : Se confirma con un yes, entonces el programa confirma la correcta instalación del kernel. The Real-Time Windows Target kernel has been successfully installed. Para comprobar la correcta instalación del kernel y la versión instalada, se teclea el comando: >> rtwintgt -version The installed version of the Real-Time Windows Target kernel is 2.6.1. 4.2.5. Obtención de información de estado del kernel Con Real-Time Windows Target disponemos de una herramienta para poder acceder a la información de estado del kernel. Tecleando el siguiente comando: >> rtwho Real-Time Windows Target version 2.6.1 (C) The MathWorks, Inc. 1994-2005 Running on Uniprocessor APIC computer. MATLAB performance = 100.0% Kernel timeslice period = 1 ms En la respuesta que produce debería haber reconocido el driver de la placa de adquisición de datos. Para indicarle manualmente el driver de la placa de adquisición habrá que teclear: >> rtload 44 Memoria Técnica Y aparecerá la siguiente ventana: Ilustración 22: Pantalla de selección manual del driver de la placa de adquisición de datos Vamos a la carpeta de Nacional Instruments (NI) y seleccionamos el fichero correspondiente a nuestra placa: pci-6024e.rwd Hacemos la comprobación para ver si ha cogido el driver, y efectivamente nos muestra el correcto, además de la dirección que ocupa. >> rtwho Real-Time Windows Target version 2.6.1 (C) The MathWorks, Inc. 1994-2005 Running on Uniprocessor APIC computer. MATLAB performance = 100.0% Kernel timeslice period = 1 ms DRIVERS: Parameters Name Address National Instruments PCI-6024E 0x2 [0 0 0 0 0] Para deshacer los cambios existe un comando que deshace la selección del driver: >>rtunload 4.3. Modelado de la planta Para diseñar un controlador sobre un sistema real se podría realizar de diferentes formas: empiríricamente o analíticamente. Los métodos empíricos se pueden englobar en 3 grupos: el analítico, el de lazo abierto y el de lazo cerrado. El analítico se basa en calcular y simular las diferentes acciones, solas y conjuntamente e ir viendo el comportamiento de la respuesta hasta que sea satisfactoria. El de lazo abierto y el lazo 45 Memoria Técnica cerrado son métodos en que la sintonía de los parámetros del controlador se realiza aplicando las variables obtenidas empíricamente sobre las formulas de unas tablas. El método escogido es el analítico porque se ha pensado que era el más interesante, ya que permite utilizar los conocimientos de teoría de control y es más atractivo para el alumnado. Para la consecución de este método es necesario determinar la planta de todo el sistema que controla el motor de corriente continua. Para ello se hacen pruebas en lazo abierto del sistema según la Ilustración 23. Se utiliza la carga y el modulo de Leybold para obtener la lectura de velocidad. Ilustración 23: Diagrama de bloques del sistema Para capturar los parámetros que definen la respuesta del sistema se utiliza un modelo en Simulink que permita introducir una consigna y visualizar los valores de la salida, aunque también se utilizado el osciloscopio para asegurar que la respuesta sea correcta. Los valores de salida permitirán reconstruir y estudiar los valores que definen la respuesta del motor de corriente contínua en lazo abierto. La frecuencia de muestreo escogida es superior a 10 veces la frecuencia del sistema, para evitar el fenómeno de aliasing, y así obtener una buena representación. (a) (b) 46 Memoria Técnica (c) (d) Ilustración 24: Modelo creado para la obtención de la planta y la respuesta obtenida para el escalón unitario (figura a y b) con un tiempo de muestreo de 0,001s. Y la obtención de la planta mediante el osciloscopio (figura c y d). La respuesta obtenida se aproxima a una función de primer orden, cuya expresión y respuesta característica quedan definidas en la ecuación ( 10 ) y la Ilustración 25. Ilustración 25: Respuesta de un sistema de primer orden a una entrada de tipo escalón unitaria. A partir de la gráfica de la Ilustración 24 se obtiene la constante de tiempo que define el sistema de primer orden de la planta del motor de cc. La constante τ corresponde al 63,2% del valor final de la respuesta y(t). G( s) = ( 10 ) K τ ⋅ s +1 A través del valor final – que es 1,1241 – se podrá obtener el valor de la constante de tiempo que corresponde al 63,2% del valor final, gráficamente el valor es de 0,1763 s. El valor de la ganancia K se determina mediante el Teorema del Valor Final. Es decir, se impone en régimen permanente el valor final de salida conocido. 47 Memoria Técnica ( 11 ) y ss = lim s ⋅ Y ( s ) s →0 El valor de K es 6,376. Por tanto la expresión que define el sistema es la siguiente: G( s) = ( 12 ) 6,376 s + 5,762 4.3.1. Discretización de la planta Dado que se trabaja en un sistema digital mediante PC, habrá que discretizar la planta del sistema continuo ( 12 ) para poder diseñar el controlador discreto. Para discretizar la planta se aplica el método analítico de la inclusión de un término de mantenimiento. ( 13 ) -1 1 − e −Ts G ( z ) = Z L ⋅ G ( s) s t =nT Se sustituye la expresión ( 12 ) en la ( 13 ) y se obtiene: ( 14 ) 1 − e −Ts 6,376 G ( z ) = Z L -1 ⋅ s + 5,762 t = nT s Descomponiendo en fracciones simples y haciendo la transformada Z se obtiene la planta discretizada dependiente del tiempo de muestreo. G ( z ) = 1,1066 ⋅ ( 15 ) 1 − e −5, 762T z − e −5,762T 4.3.1.1. Frecuencia de muestreo Para la elección de la frecuencia de muestreo habrá que recurrir al teorema de NyquistShanon. El teorema establece que la frecuencia mínima de muestreo necesaria para evitar el aliasing debe ser: ( 16 ) f s > 2 BW Siendo el ancho de banda: 48 Memoria Técnica ( 17 ) BW = f max − f min Para nuestro sistema consideramos que f min = 0 , por tanto la expresión ( 16 ) quedará: ( 18 ) f s > 2 f max El teorema de Nyquist sólo indica el valor mínimo necesario para que el muestreo resulte eficaz. Por encima de este valor, cuanto mayor sea el número de muestras tomadas más fiable será la representación. Cuantas más muestras se tengan, mejor se podrá reconstruir la señal; aunque, a mayor frecuencia de muestreo mayor será el ancho de banda, es decir que necesitaremos mayor número de bits, mayor tamaño de buffer, lo que ralentiza el procesado de la señal y encarece el equipo, que necesitará más memoria, más procesador, etc. Otro factor a tener en cuenta es que aunque se siga aumentando la frecuencia de muestreo, la calidad de la señal reconstruida no continua incrementándose indefinidamente. Por ello, la experiencia establece un valor aproximado para determinar la frecuencia de muestreo. ( 19 ) f s ≈ 10 f max Partiendo de la expresión ( 12 ), que corresponde a la función de transferencia continua que define el sistema del conjunto motor y carga, se extrae la constante de tiempo y se impone como la inversa de la frecuencia de nuestro sistema. Hay que tener en cuenta que este parámetro es muy restrictivo porque es el tiempo que tarda en llegar al 63,2% del valor final, y el valor que nos interesa es el tiempo que tarda en llegar al 100% del valor final. La frecuencia del sistema es: τ = 0,1763 s → f = 1 τ ( 20 ) = 5,67 Hz La frecuencia y periodo de muestreo imponiendo ( 19 ) es: ( 21 ) f s = 113,44 Hz → Ts ≤ 0,0088 4.3.1.2. Efecto aliasing El efecto aliasing aparece cuando se utiliza una frecuencia de muestreo inferior a la establecida por el teorema de Nyquist-Shanon, entonces se produce este fenómeno, que también se conoce como solapamiento. El aliasing impide recuperar correctamente la señal original. 49 Memoria Técnica Ilustración 26: Efecto aliasing En la Ilustración 26 se aprecia el resultado de la mala elección del tiempo de muetreo. Los cuadrados corresponden a las muestras recogidas y resiguiendo estos se obtiene que la señal reconstruida difiere respecto a la original. 4.3.1.3. Funciones de transferencia discretas Dado que la aplicación de MATLAB/SIMULINK en tiempo real trabaja mejor para frecuencias de muestreo menores. Entonces, se puede afirmar que cuanto menor sea la frecuencia de muestreo: Mayor es el intervalo de tiempo que se podrá visualizar/ejecutar en la aplicación en tiempo real. Mayor es el número de bloques que se podrán insertar en Simulink sin errores de buffer. Rescatando la expresión ( 15 ) de la transformada Z de la planta calculada anteriormente confeccionamos la siguiente tabla resumen que servirá para el cálculo del controlador, ya que la dinámica y la ganancia del sistema nos variará en función del tiempo de muestreo escogido. Tiempo de muestreo (s) Función de Transferencia Discreta (Z) 0,06196 ( 22 ) G( z ) = 0,01 z − 0,944 0,00636 ( 23 ) G( z) = 0,001 z − 0,994 Tabla 12: Funciones de transferencia discreta en función del tiempo de muestreo 4.4. Diseño de controladores Un sistema de control realimentado o también conocido como sistema de control en lazo cerrado es aquel sistema que mantiene una relación entre la salida y la entrada de referencia, comparándolas y usando la diferencia como medio de control. La ventaja de un sistema de control en lazo cerrado es que el uso de la realimentación vuelve la respuesta del sistema relativamente insensible a las perturbaciones externas y 50 Memoria Técnica a las variaciones internas en los parámetros del sistema. Aunque, en sistemas sin perturbaciones y donde se conozcan con anticipación las entradas es aconsejable utilizar un control en lazo abierto. Algunos aspectos que habrá que tener en cuenta en el diseño del controlador es la frecuencia de muestreo a seleccionar en la aplicación en tiempo real, porque afectará a la planta del sistema, modificando la ganancia y la dinámica del sistema. Por lo tanto, el diseño de los controladores se hará para los tiempos de muestreo reflejados en la Tabla 12, mediante el método de diseño del lugar de las raíces. A continuación se muestra la estructura básica de un controlador PID discreto. kp + E H + ki·z/(z-1) + kd·(z-1)/z Ilustración 27: Estructura de controlador discreto con acciones proporcional, integral y derivativa Desarrollando analíticamente la Ilustración 27, se obtiene la función de transferencia de un controlador con todas las acciones (proporcional, integral y derivativa). H ( z ) (kp + ki + kd ) ⋅ z 2 − (kp + 2 ⋅ kd ) ⋅ z + kd = E( z) z2 − z ( 24 ) Acción proporcional e integral ( 25 ) H ( z ) (kp + ki) ⋅ z − kp = E ( z) z −1 Acción proporcional ( 26 ) H ( z) = kp E( z) En los siguientes apartados se estudian las acciones del controlador por separado y combinadas, para la consecución de un control que nos conserve las propiedades de la planta original y que realice una gestión adecuada de la velocidad. 51 Memoria Técnica 4.4.1. Controlador P La estructura de un controlador P introduce una ganancia a la entrada de la planta. La estructura es la que se muestra en la Ilustración 28. Para sistemas de tipo cero, el efecto del controlador proporcional es el siguiente: Disminuye el tiempo de subida Aumenta el sobrepico No provoca grandes cambios en el tiempo de establecimiento Disminuye el error en régimen permanente, pero no lo elimina R(z) Controlador Planta Y(z) + kp G(z) - Ilustración 28: Diagrama de bloques del controlador P con la planta del sistema Para realizar el ajuste de la constante proporcional hay que obtener la función de transferencia en lazo cerrado con la incógnita kp. Mediante la regla de Mason se cierra el lazo quedando la expresión siguiente. ( 27 ) Y ( z) kp ⋅ G ( z ) = R ( z ) 1 + kp ⋅ G ( z ) La expresión del error: E( z) = ( 28 ) R( z ) 1 + kp ⋅ G ( z ) Haciendo el desarrollo de la expresión ( 27 ) y sustituyendo el valor del tiempo de muestreo, se aplica el Teorema del Valor Final: ( 29 ) ( z − 1) ⋅ Y ( z) z →1 z yss = lim A continuación se muestra un resumen de los valores obtenidos para cada tiempo de muestreo. Se considera la entrada como un escalón unitario y el error en estado estacionario es del 1%, lo que quiere decir que el valor de la salida (yss) es 0,99. El valor de la constante proporcional se obtiene aislando ( 29 ). 52 Memoria Técnica Tiempo de muestreo (s) Valor Constante Proporcional kp 0,01 89,5 0,001 93,4 Tabla 13: Valores kp en función del tiempo de muestreo En este caso, al ser un sistema de primer orden, mirar el lugar de las raíces no aporta información significativa debido a que no se introduce ningún polo o cero. Por tanto no habrá grandes cambios dentro de los valores de ganancia para los que el sistema es estable. -4 Root Locus Root Locus x 10 1 6 0.8 0.6 4 0.4 Imaginary Axis Imaginary Axis 2 0.2 0 -0.2 0 -2 -0.4 -0.6 -4 -0.8 -6 -1 -1 -0.5 0 0.5 0.9936 1 0.9938 0.994 0.9942 0.9944 0.9946 0.9948 0.995 Real Axis Real Axis Ilustración 29: Lugar de las raíces del sistema Lo que interesa es estudiar la respuesta obtenida con la simulación. 12 5 Step Response Step Response x 10 1 0.9 0 0.8 0.7 -5 Amplitude Amplitude 0.6 -10 0.5 0.4 0.3 -15 0.2 0.1 -20 0 2 4 6 8 10 12 14 16 18 20 Time (sec) 0 0 2 4 6 8 10 12 14 16 18 Time (sec) Ilustración 30: Respuestas del sistema en lazo cerrado para tiempos 0,01 y 0,001 con sus respectivos valores calculados de la constante proporcional. La respuesta obtenida para el valor calculado en el tiempo de muestreo de 0,01 segundos es inestable. Esto es debido a que se ha calculado el valor de la constante proporcional mediante el teorema del valor final, sin tener en cuenta ningún criterio de seguimiento para la estabilidad. Al utilizar el valor obtenido a través del teorema del valor final, el denominador de la función de transferencia en lazo cerrado crece tanto 53 20 Memoria Técnica que se hace positivo y mayor que la unidad, es decir que tenemos inestabilidad en nuestro sistema de primer orden. Habrá que utilizar un metodo discreto que permita dimensionar un valor de kp que obligue al sistema a comportarse de manera estable, el escogido es el test de Jury. ( 30 ) P ( z ) = a0 z n + a1 z n −1 + ... + a n −1 z + a 0 Las condiciones del test de Jury para un sistema de primer orden: ( 31 ) P (1) > 0 (−1) n ·P (−1) > 0 El margen de valores posibles en que el sistema se comportorá de manera estable: 31,35 > kp > −0,888 En los resultados obtenidos se puede ver que hay que escoger un valor de la constante que cumpla nuestras exigencias, es decir, que no haya ni soprepico, ni oscilaciones, que el valor llegue a la unidad con el mínimo error en estado estacionario posible y lo suficientemente rapido. 4 1.5 Step Response Step Response x 10 2 1.8 1 1.6 1.4 0.5 Amplitude Amplitude 1.2 0 1 0.8 -0.5 0.6 0.4 -1 0.2 0 -1.5 0 50 100 150 200 250 0 50 100 150 200 250 Time (sec) Time (sec) (a) kp = 32 (b) kp = 31 Step Response Step Response 1 0.7 0.9 0.6 0.8 0.7 0.5 Amplitude Amplitude 0.6 0.5 0.4 0.4 0.3 0.3 0.2 0.2 0.1 0.1 0 0 2 4 6 8 10 12 14 16 18 20 Time (sec) 0 0 5 10 15 20 25 30 Time (sec) (c) kp=15 (d) kp = 1 Ilustración 31: Respuestas simuladas con los valores obtenidos en el test de Jury 54 35 40 45 Memoria Técnica Los margenes de estabilidad de la constante proporcional obtenidos con el test de Jury para el tiempo de muestreo a 0,001 segundos es: 313,52 > kp > −0,943 Los valores definitivos de la constante proporcional teniendo en cuenta la estabilidad se muestran en la Tabla 14. Tiempo de muestreo (s) Valor Constante Proporcional kp 0,01 15 0,001 93,4 Tabla 14: Valores kp en función del tiempo de muestreo, siendo el sistema estable A continuación se muestran los valores reales obtenidos, para un tiempo de muestreo de 0,001 segundos y una consigna de 3. Linear Simulation Results 3.5 3 Amplitude 2.5 2 1.5 1 0.5 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Time (sec) (a) Representación tensión de salida en (b) Representación tensión de salida en función del función del número de muestras. Respuesta tiempo. Respuesta simulación controlador a real controlador a Ts=0,001s kp=93,4 Ts=0,001s con kp=93,4 6.376 93.4 s+5.762 Step Gain Saturation Transfer Fcn Zero-Order Hold Scope (c) Representación tensión de salida en (d) Modelo con controlador proporcional y función del número de muestras. Error real saturación a Ts=0,001s Controlador a Ts=0,001s Ilustración 32: Comparación entre controlador P real y simulado 55 Memoria Técnica En la Ilustración 32 se puede observar como las características de las respuestas real y simulada difieren en que la real tiene sobrepico y tarda más en alcanzar el valor final, es diez veces más lenta. El sobrepico es debido a que la planta real de un motor de corriente contínua es un segundo orden, en cambio, la de la simulada es una aproximación a un primer orden. El retraso en alcanzar el valor final es debido a saturaciones que se producen en el sistema real, y que no han sido contempladas en la simulación. A través del modelo propuesto en la Ilustración 32-d se puede explicar el fenómeno de la saturación, que es debido a la limitación de la tensión de control del driver, que puede oscilar entre los valores de 0 y 5 V. Los resultados obtenidos sobre la aproximación de primer orden se muestran en la Ilustración 33, estos se ajustan a las reales pero sin sobrepico porque es un primer orden. Error simulado con saturación 300 2.5 250 2 200 Amplitud (V) Amplitud (V) Respuesta simulada con saturación 3 1.5 150 1 100 0.5 50 0 0 0.1 0.2 0.3 0.4 0.5 0.6 Tiempo (s) 0.7 0.8 0.9 0 1 0 0.1 0.2 0.3 0.4 0.5 0.6 Tiempo (s) 0.7 0.8 0.9 (a) Representación tensión de salida en (b) Representación tensión de salida en función del tiempo. Respuesta simulación función del tiempo. Error real a controlador a Ts=0,001s con kp=93,4 Ts=0,001s con kp=93,4 Ilustración 33: Respuestas obtenidas teniendo en cuenta la saturación 56 1 Memoria Técnica 4.4.2. Controlador PI El controlador PI, al contener la parte integral, a diferencia del anterior incrementa el tiempo de establecimiento y elimina el error en estado estacionario. Con la acción combinada de la parte integral y proporcional habrá que reducir el sobrepico y el tiempo de establecimiento. En la siguiente ilustración se muestra el esquema de bloques típico de un sistema en lazo cerrado con un controlador PI. R(z) + - Controlador PI Planta ( kp + ki ) ⋅ z − kp z −1 G(z) Y(z) Ilustración 34: Diagrama de bloques del controlador PI con la planta del sistema La expresión del controlador PI: ( 32 ) Y ( z) z = kp + ki ⋅ R( z ) z −1 Para realizar la sintonía del controlador se recurre al método del lugar geométrico de las raíces, combinando las simulaciones con MATLAB como comprobación. A modo de ejemplo se utilizará el caso en que el tiempo de muestreo es de 0,001 s. La planta introduce un polo en 0,994 y, según la expresión ( 25 ), al introducir el controlador PI estamos introduciendo un polo en +1 y un cero que habrá que decidir su colocación para obtener la respuesta deseada. Para la búsqueda de las variables que definen el sistema se impondrá el valor de la constante proporcional como 10. Ahora quedará buscar el valor de la constante ki. Mediante simulación se determina que la mejor posición del cero del controlador está entre el origen y el polo de la planta, es decir en 0,98. Root Locus x 10 1 0.8 3 0.6 2 Root Locus 1 0.2 Imaginary Axis Imaginary Axis 0.4 -3 0 -0.2 0 -1 -2 -0.4 -0.6 -3 -0.8 -4 -1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0.992 Real Axis 0.994 0.996 0.998 Real Axis Ilustración 35: Lugar geométrico de las raíces de la planta y el controlador 57 1 1.002 Memoria Técnica Las respuestas obtenidas en la simulación y en la aplicación Real Time para el tiempo de muestreo de 0,001 segundos e introduciendo una consigna escalón de 3 se representan en la Ilustración 37. Linear Simulation Results 3 2.5 Amplitude 2 1.5 1 0.5 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Time (sec) (a) Representación tensión de salida en función (b) Representación tensión de salida en función del número de muestras. Respuesta real del tiempo. Respuesta simulación controlador a controlador a Ts=0,001s Ts=0,001s (c) Representación tensión de salida en función del número de muestras. Error real Controlador a Ts=0,001s Ilustración 36: Comparación entre controlador PI real y simulado Se puede comprobar en las ilustraciones a y b, que el diseño se ha realizado correctamente, aunque en la ejecución real se alcanza el valor final unas décimas de segundo antes que en la simulada. Respecto al diseño del controlador P, se ha conseguido reducir el error y el sobrepico. En la Ilustración 36.c se puede apreciar como el error en la entrada del controlador decrece hasta alcanzar un valor próximo a cero. Las funciones de transferencia de los controladores se reflejan en la siguiente tabla. 58 Memoria Técnica Tiempo de muestreo (s) Función de Transferencia Discreta (Z) z − 0,996 ( 33 ) D( z ) = 0,01 z −1 z − 0,98 ( 34 ) D( z ) = 0,001 z −1 Tabla 15: Funciones de transferencia en función del tiempo de muestreo 4.4.3. Limitaciones en la frecuencia de muestreo La elección de la frecuencia de muestreo máxima está sujeta a diferentes parámetros. El primero es asegurar que se está cumpliendo el teorema de Shanon-Nyquist, es decir que estamos dentro de la frecuencia mínima (la frecuencia 100 Hz se considera dentro de la mínima). La segunda concierne a los diferentes parámetros de ejecución de la aplicación en tiempo real como: tiempos inicial y final, número de bloques utilizados en el modelo, así como las características de velocidad de procesador, RAM y disco duro del ordenador de sobremesa que se disponga. Se han realizado diferentes pruebas para la determinación de la relación de estos parámetros, pero sin demasiado éxito. Pero si que se ha conseguido establecer unos márgenes que reflejan las limitaciones del sistema como se verá más adelante. La primera prueba que se ha realizado es poner un modelo muy sencillo con dos bloques: uno que reciba la señal de entrada procedente de un generador de funciones exterior y el otro que lo muestre en un bloque Scope. Con esta estructura se han realizado pruebas a diferentes frecuencias. Se han ordenado los resultados y se han concentrado en la siguiente tabla resumen. ∆t representado Npt max. Duración Ts (s) fs (kHz) (s) representados (106 s) Ejecución 0,0001 10 100 1.000.000 1 Correcto 0,0001 10 200 2.000.000 2 Correcto 0,00001 100 0,01 1.000 1 Correcto 0,00001 100 2 819 2 Error 0,00001 100 1 820 2 Error 0,00001 100 0,01 1.000 2 Correcto 0,00001 100 0,02 2.000 2 Error 0,000001 1000 0,0001 100 2 Error grave Tabla 16: Ensayos para determinación de limitaciones en la aplicación en tiempo real, con MATLAB 7 El valor mostrado en la tercera columna corresponde al intervalo de tiempo que es representado gráficamente en Matlab. La cuarta columna refleja el número de puntos que tiene la variable que se visualizará, o mejor dicho, los puntos que se utilizarán en la representación. El parámetro duración es la capacidad máxima que le hemos establecido 59 Memoria Técnica a Matlab para la captura de variables a visualizar. La última columna es el indicador si el sistema ha respuesto correctamente a la frecuencia de trabajo. Para conocer la relación entre los parámetros anteriores se ha determinado la siguiente expresión: Npt = ( 35 ) pt ⋅ ∆t Ts Donde: Npt: Es el numero total de puntos que se pueden visualizar durante la ejecución de la aplicación en tiempo real. pt: Es el numero de puntos que se capturan por intervalo de tiempo muestreado. Por defecto es igual a la unidad, y es aconsejable que se deje así. Ts: Es el periodo de muestreo seleccionado en la aplicación en tiempo real. ∆t: Es el intervalo de tiempo total que se desea representar en la aplicación en tiempo real. Es la diferencia entre el tiempo inicial y final seleccionado por el usuario en la apliación en tiempo real. La expresión ( 35 ) tiene matices, ya que está acotada por otras dos expresiones. Una es la limitación que tiene el sistema en cuanto a la velocidad de capturar puntos por unidad de tiempo, se ha decido llamarlo slew rate (SR) como en los operacionales. SR = ( 36 ) Npt [ puntos ] = t [segundos ] La otra expresión sería la que resultaría de las expresiones ( 35 ) y ( 36 ), el intervalo máximo de tiempo representable para un determinado periodo de muestreo. Se considera pt = 1. ∆t max = ( 37 ) Ts ⋅ Npt = Ts 2 ⋅ SR pt Estas expresiones funcionan en la teoría, pero en la práctica vemos que no se cumplen porque existen limitaciones de memoria del sistema de adquisición con la aplicación. Puede suceder que determinemos un SR para un determinado modelo, y que no sirva en para otro modelo diferente. Esto es debido a que le afecta el número de bloques utilizados en Simulink, los procesos que corren detrás de la aplicación Matlab, los recursos que disponga la máquina, la versión de Matlab y todas sus herramientas. 60 Memoria Técnica 4.5. Funcionamiento del interfaz gráfico A continuación se presenta el interfaz gráfico realizado con la herramienta de Matlab, GUIDE. El interfaz permitirá controlar la velocidad de un motor y su carga en lazo cerrado, pudiendo modificar parámetros como: velocidad, rampa, sentido de giro, valores de controlador, tiempo de simulación, tiempo de muestreo, etc. y una vez acabada la simulación se podrán visualizar los parámetros y grabarlos en un fichero .MAT. Otra característica interesante es poder decirle al programa si queremos trabajar en lazo abierto o cerrado, según convenga. Más adelante se explicará con detalle que opciones tiene el programa, como trabaja, y cual es el código que lo hace funcionar. Para hacer mucho más ameno el seguimiento del funcionamiento de la aplicación se divide el programa según las partes más relevantes, que son las siguientes: Elección del modelo de trabajo Parámetros de entrada Parámetros del controlador Parámetros de ejecución Visualización de datos Guardar datos Casilla de diálogo Función de cierre de programa Ilustración 37: Interfaz gráfica en fase de diseño 61 Memoria Técnica 4.5.1. Elección del modelo de trabajo A través de las casillas de selección se puede escoger el modelo de Simulink con el que se desea trabajar. Existen tres opciones: Modelo en lazo cerrado con controlador discreto (en Z) y con carga Modelo en lazo abierto Modelo en lazo cerrado sin controlador y con carga A continuación se explican más en profundidad cada una de estas opciones. 4.5.1.1. Modelo en lazo cerrado con controlador y carga Esta es la elección por defecto con la que arranca el programa. El modelo que se abre es el fichero rtw.mdl y tiene el aspecto de la Ilustración 38. Por defecto arranca con un controlador PI diseñado para las condiciones con las que inicia. Aunque también es posible diseñar cualquier otro controlador que tenga las partes proporcional, integral y/o derivativa. El patrón utilizado en este modelo es el mismo que se utiliza en los otros modelos, de esta manera las rutas y los nombres de las variables y bloques serán aprovechables en la parte de programación, lo que simplificará mucho el trabajo. Ilustración 38: Aspecto del modelo de Simulink en lazo cerrado con controlador y con carga Observando la parte principal del modelo, es decir el control, podemos ver que mediante la variación del bloque Constant se podrá modificar el valor del escalón. El 62 Memoria Técnica bloque Sortida9 permitirá visualizar las diferencias entre el valor de entrada respecto al de salida. Mediante el bloque Sortida2 se podrá visualizar el error del controlador. Se ha puesto un limitador en la salida para absorber cualquier variación imprevista superior a unos valores de 0 a 5 V. De esta manera se protege la entrada del driver CC que trabaja con rangos de tensiones TTL. Después del limitador se encuentra el bloque de salida que inyectará el valor de la velocidad al driver de cc en ese instante de tiempo. El valor real de la velocidad del conjunto motor+carga es capturado por el tacómetro de la carga y reinyectado en el sumador para volver a calcular el valor velocidad en el siguiente instante de tiempo, haciendo que el error tienda a cero. El valor de la constante Constante2 es el valor de la rampa, que como hemos dicho anteriormente el driver cc trabaja con lógica TTL, los valores admisibles son de 0 a 5 V y para que se cumpla esta condición esta el limitador. Cuanto más alto sea el valor de la constante más lenta será la aceleración y la frenada. El valor de la constante Constant1 es el valor para modificar el sentido de giro, que en este modelo la opción queda deshabilitada a través del GUI debido a conflictos con el modulo D&B de LEYBOLD. A mano de derecha de la Ilustración 38 quedan las entradas: Sobreintensidad en la rama A Sobreintensidad en la rama B Sobreintensidad en el sensor Hall Medición procedente del sensor Hall Todos los valores se guardan y pueden ser visualizados a posteriori. 4.5.1.2. Modelo en lazo abierto Esta es la segunda elección posible y el fichero que abre es el rtwol.mdl, y en caso que existiera cualquier otro modelo abierto lo cerraría guardando los cambios. El modelo no tiene ningún control como es lógico, ya que es un lazo abierto. El patrón que sigue es como el explicado en el anterior apartado. 63 Memoria Técnica Ilustración 39: Aspecto del modelo en lazo abierto En esta opción es posible realizar cambios en el sentido de giro del motor, además de poder regular la rampa de aceleración y deceleración como se puede hacer en los otros modelos. Ilustración 40: Inversión de giro y aceleración/deceleración del motor cc. La Ilustración 40 muestra el cambio en el sentido de giro del motor, se puede ver como primeramente como acelera a una rampa de valor 2 hasta conseguir el valor de la consigna que es 4, es a partir de este momento que se solicita el cambio de giro. Cuando se realiza el cambio de giro sería de esperar que fuera decrementando hasta el valor de -4, pero por lo contrario el tramo de 2 a -2 lo realiza de manera vertiginosa. Cuando alcanza el valor de -4 lo obligamos a ir a consigna cero. 4.5.1.3. Modelo en lazo cerrado sin controlador y con carga Esta es la tercera opción posible, y abrirá el modelo rtw_cl2.mdl que es una réplica del rtw.mdl pero sin controlador. De esta manera se deja una puerta abierta a un posible control diferente al Z, como por ejemplo mediante la utilización de lógica borrosa. 64 Memoria Técnica Ilustración 41: Aspecto del modelo en lazo cerrado sin controlador y con carga Para conocer los detalles del modelo ir al apartado 4.5.1.1, ya que siguen el mismo patrón. 4.5.2. Parámetros de entrada La interfaz de los parámetros de entrada permite modificar la consigna, la rampa, el sentido de giro (solo en lazo abierto) y el tiempo de retardo, de cualquiera de los tres modelos. Ilustración 42: Aspecto de la interfaz para la entrada de parámetros de entrada Cuando se abra un modelo en lazo cerrado, como por ejemplo la opción 1 ó 3, el botón del sentido de giro permanecerá invisible. 4.5.3. Parámetros del controlador Mediante el marco de los parámetros del controlador es posible modificar las constantes de este, y será el programa el encargado de calcular la función de transferencia del control. Esta opción ha sido pensada para hacer un ajuste manual afinando 65 Memoria Técnica empíricamente el diseño, o bien simplemente para ver el efecto de la variación de una acción (proporcional, integral o derivativa). También existe la posibilidad de hacer un ajuste manual directamente sobre el bloque de la función de transferencia. Esta última opción se ha contemplado para el caso que se haga un diseño en papel del controlador, en que sea calculado todo el bloque. Ilustración 43: Aspecto del marco del ajuste de parámetros de controlador 4.5.4. Parámetros de ejecución La interfaz de los parámetros de ejecución permite modificar el instante de tiempo inicial, final, el tiempo de muestreo, la conexión de la placa con la aplicación real time, la ejecución del modelo, la parada de la ejecución y la compilación. La compilación es necesaria cada vez que se realice algún cambio en modelo, es decir, cada vez que se cambien conexiones, se generen bloques nuevos o se cambien características de simulación como el periodo de muestreo o los valores de tiempo inicial o final. No es necesario realizar una compilación cuando se realice el cambio del Value de los bloques, por ejemplo, cuando se cambie el valor de la consigna del escalón, o la rampa, o del sentido de giro. Ilustración 44: Marco con los parámetros de ejecución Existe la posibilidad de conectar la placa y ejecutar la aplicación bajo un mismo control, como también existe la posibilidad de parar la ejecución. 4.5.5. Visualización de gráficos Para la visualización de gráficos se ha implementado esta herramienta, que permitirá visualizar datos en tiempo real (mediante el bloque Scope) y en post-procesado (mediante la GUI). Una limitación importante en Matlab es que no podemos capturar o visualizar datos si la ejecución en tiempo real no ha finalizado. Esto hecho solo se produce trabajando en modo externo y no trabajando en modo normal. Lo que ocurre cuando se hace una ejecución en tiempo real (en modo externo) es que las variables no son accesibles hasta que ha finalizado el tiempo de ejecución, es solo en 66 Memoria Técnica ese momento cuando los datos son pasados al Workspace de Matlab y pueden ser utilizados para hacer gráficas u operaciones. Esta limitación ha sido confirmada por el servicio técnico de Matlab, que respondió que en futuras versiones lo resolverían (consultar anexos de cartas a Matlab). Ilustración 45: Aspecto de la interfaz para la visualización de datos 4.5.5.1. Opciones para la visualización de datos de entrada/salida Para visualizar datos de entrada/salida existen tres posibles soluciones: Opción AND: Cada vez que se selecciona este radiobutton nos permite visualizar gráficos conservando el anterior cada vez que se selecciona un dato en la lista desplegable. Pudiendo visualizar de 1 hasta n gráficos en la ventana, solo se borrará la pantalla cuando se le indique a través del botón de borrar pantalla. A cada gráfico se le asigna un color diferente para poder ser diferenciados cuando estén solapados. La visualización es a post-procesado. Opción OR: Esta opción solo permite la visualización de un gráfico a la vez. Cuando haya un gráfico en pantalla y se seleccione un dato a visualizar, el nuevo machacará al anterior. El color de los valores gráficos por defecto es el azul. La visualización es a post-procesado. Opción Scope: Esta opción se diferencia de las anteriores porqué permite la visualización de datos en tiempo real. Es posible accediendo directamente al bloque Scope que tenemos en el modelo. 67 Memoria Técnica Ilustración 46: Opciones de gráfico de las de la interfaz, opción AND y Scope respectivamente 4.5.5.2. Selección datos a visualizar Los pasos para visualizar un gráfico son: seleccionar el modo de visualización (ANDOR-Scope), seleccionar el dato que queremos en el gráfico mediante la listbox: Velocidad Error Controlador Sensor Hall Sobreintensidad Rama A Sobreintensidad Rama B Sobreintensidad Sensor Hall Entrada Velocidad de Salida Control Velocidad Salida Control sin limitador, y Por último confirmar con el botón Plota. Ilustración 47: Lista desplegable de variables a visualizar 4.5.5.3. Opciones de zoom y de centrado Cuando se tenga un gráfico en pantalla se podrá hacer un zoom para ampliar una región de visualización de datos (zoom out), o bien para reducirla (zoom in). A parte de todo estos podemos marcar los limites del gráfico que más interese marcando las 68 Memoria Técnica coordenadas: Xmax, Xmin, Ymax e Ymin. Para que los valores tengan efecto se deberá deseleccionar la configuración automática de los ejes (el radiobutton Eixos Auto). Cuando se marque la opción de Eixos Auto el gráfico volverá a tener los valores por defecto, es decir se visualizará todo el gráfico. En ambos casos se deberá confirmar con el botón plota. Ilustración 48: Marco con las opciones para visualizar las zonas que sean de interés 4.5.6. Guardar y cargar datos Existe la posibilidad de guardar los datos procedentes de la ejecución en tiempo real en un fichero .MAT. Como también existe la posibilidad de recuperar esos datos y visualizarlos en la GUI. Para poder guardar los datos habrá que: Especificar la ruta donde se desea guardar los ficheros, se aconseja que sea la que coge por defecto, que es la del directorio de trabajo de nuestra sesión de trabajo con Matlab. Escribir el nombre del fichero que se desea guardar. En caso que no se escriba un nombre escogerá el nombre por defecto matlab.dat. Pulsar el botón de guardar. Para poder cargar un fichero el procedimiento es similar: Especificar la ruta donde se encuentra el fichero. Escribir el nombre del fichero que deseamos cargar. En caso que no exista o no se introduzca un nombre en la casilla, la ventana de dialogo se quejará y nos pedirá que volvamos a introducir un nombre correcto, o que lo introduzcamos respectivamente. Pulsar el botón de cargar. Ilustración 49: Aspecto de la interfaz antes de grabar o cargar y una vez se carga la variable y su ruta 69 Memoria Técnica 4.5.7. Casilla de diálogo En ocasiones se hace interesante que la aplicación en tiempo real establezca mensajes de respuesta a acciones realizadas por el usuario. Es decir, que de mensajes de error, que avise el inicio o fin de las compilaciones, o la conexión y desconexión con la placa de adquisición, etc. Pues bien, se ha contemplado esta opción mediante la casilla de diálogo, que no es nada más que un texto estático. Esto quiere decir que es un texto que puede ser leído, pero no puede ser modificado por el usuario. Ilustración 50: Ejemplos de mensajes generados por la aplicación en la casilla de diálogo 4.5.8. Botones para cerrar la aplicación Ilustración 51: Botones para cerrar la aplicación En la Ilustración 51 se pueden apreciar los botones que nos permiten cerrar la aplicación de tiempo real, es decir, la GUI y el modelo que se esté utilizando. La diferencia entre Tanca y Tanca i Salva, es que el primero cierra la aplicación sin guardar cambios y el segundo cierra guardando los cambios producidos en el modelo. Hay que remarcar que al arrancar la GUI la siguiente vez, se actualizarán todos los datos del modelo en los campos correspondientes de la aplicación: consigna, valor retraso, tiempos de muestreo, inicial y final, etc. 4.5.9. Diagrama de flujo general A continuación se muestra el diagrama de bloques general de la aplicación desarrollada para trabajar en tiempo real. El siguiente diagrama no intenta entrar en detalle, sino resumir el principio de funcionamiento de la GUI. 70 Memoria Técnica Inicio de Programa: RTWT_OpeningFcn No Lazo Cerrado? Sin Control Lazo Cerrado? Control Z No Si No Lazo Abierto? Si Si Abrir modelo: rtw_cl2 (si es que no está abierto) Abrir modelo: rtw_cl (si es que no está abierto) Abrir modelo: rtw (si es que no está abierto) - Captura de la ruta de trabajo - Transferencia de parametros modelo a las editboxes de la aplicación - Invisibilidad de los comandos: inversión de giro y parametros del controlador. - Limitación puntos simulación - Inicialización de variables generales - Captura de la ruta de trabajo - Transferencia de parametros modelo a las editboxes de la aplicación - Visibilidad de los comandos: inversión de giro y parametros del controlador. - Limitación puntos simulación - Inicialización de variables generales - Captura de la ruta de trabajo - Transferencia de parametros modelo a las editboxes de la aplicación - Invisibilidad de los comandos: inversión de giro y parametros del controlador. - Limitación puntos simulación - Inicialización de variables generales Transferencia de los valores de las editboxes a el modelo en funcionamiento Si Evento? No Ejecución de la acción demandada y actualización de las variables Cerrar? Si Fin Programa Si Ilustración 52: Diagrama de flujo general de la GUI 71 Cerrar Salvando? Memoria Técnica 4.6. Código fuente de la GUI De la misma manera que en el apartado anterior se separaban los elementos que componen la GUI para poder explicar el funcionamiento de esta. En este apartado se separa el código que compone la GUI para poder hacer más inteligible los contenidos. Las partes que los compondrán se ajustarán bastante a la estructura anterior, es interesante que así sea, ya que permitirá relacionar más fácilmente la operatibilidad de la GUI y su código. Función de apertura Parámetros de entrada Parámetros del controlador Parámetros de ejecución Visualización de gráficos Guardar y cargar datos Ventana de diálogo y cerrar aplicación 4.6.1. Función de Apertura En el momento en que se inicie el programa de la aplicación en tiempo real, la primera función que se ejecuta es la OpeningFcn, o traducido literalmente función de apertura. Dentro de ella se inicializan las variables globales que indican con que modelo se comienza la aplicación en tiempo real. El modelo que se arranca por defecto es lazo cerrado con controlador. Posteriormente se hace una llamada a la función inici y actualitza. function RTWT_OpeningFcn(hObject, eventdata, handles, varargin) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % Se comienza con el modelo el lazo cerrado y controlador por defecto set(handles.rboto_cl,'Value',1); cl=1;ol=0;cl2=0; assignin('base','cl',cl); assignin('base','ol',ol); assignin('base','cl2',cl2); inici(handles); actualitza(handles); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Choose default command line output for RTWT handles.output = hObject; % Update handles structure guidata(hObject, handles); La función inici se ejecuta al arrancar la aplicación por primera vez y lo que hace es capturar todos los valores que tiene el modelo y pasarlos a la GUI o aplicación. Esta 72 Memoria Técnica rutina se encarga de capturar la ruta de trabajo que será la utilizada para grabar los datos del Wokspace de Matlab, es decir, los parámetros obtenidos en la ejecución que podrán ser visualizados posteriormente y siempre que se desee. Como se ha dicho con anterioridad, la rutina se encarga de capturar los valores del modelo y los pone dentro de las editboxes correspondientes. Por ejemplo, se capturan los valores de: Consigna Rampa Tiempo de retardo Valor de la inversión de giro Inicialización del contador del grid. Inicialización de los valores para plotar por defecto Antes de capturar los valores del modelo determinará que modelo es el que está abierto para saber la ruta donde buscarlos. function inici(handles) cl=evalin('base','cl'); ol=evalin('base','ol'); cl2=evalin('base','cl2'); % Se abre por primera vez el modelo para coger los valores % en el modelo y ponerlos en la GUI, en el caso que sea la % se haya abierto el programa. % % % % % % % % % % % % INICIO PARAM.GENERALES % % % % % % % % % Se capturan los valores de los parametros generales, son no % dependen del modelo escogido que tiene primera vez % % % % % % % aquellos que % Se coge la ruta por defecto de matlab para poder grabar las variables en % un fichero .MAT ruta=cd; set(handles.edit_ruta,'String',ruta); % Se hace invisible la editbox del nombre de la variable a guardar en el WS set(handles.edit_nomvar,'Visible','off'); % Variable para el grid para que actue como un pushbutton pero sin % enclavarse cnt=0; assignin('base','cnt',cnt); % Parametros para plotar por defecto set(handles.rboto_and,'Value',1); set(handles.rboto_or,'Value',0); set(handles.rboto_scope,'Value',0); set(handles.popupmenu1,'Value',1); pand=1;or=0;scope_stat=0;popval=1; assignin('base','pand',pand); assignin('base','or',or); assignin('base','scope',scope_stat); assignin('base','popval',popval); % % % % % % % % % % % % FIN PARAM.GENERALES % % % % % % % % % % % % % % % % % if cl==1 73 Memoria Técnica if isempty(find_system('Name','rtw'))open_system('rtw');end if isempty(find_system('Name','rtwol')) else close_system('rtwol',1);end if isempty(find_system('Name','rtw_cl2')) else close_system('rtw_cl2',1);end % Se cogen los valores del modelo y se ponen dentro de las editboxes % Consigna set(handles.edit_consigna,'String',get_param('rtw/Constant','Value')); % Rampa set(handles.edit_rampa,'String',get_param('rtw/Constant2','Value')); % Tiempo de retardo para la rampa y el escalón set(handles.edit_td, 'String',get_param('rtw/Step','time')); limitapunts(handles); controlador(handles); end if ol==1 if isempty(find_system('Name','rtwol'))open_system('rtwol');end if isempty(find_system('Name','rtw')) else close_system('rtw',1);end if isempty(find_system('Name','rtw_cl2')) else close_system('rtw_cl2',1);end % Se cogen los valores del modelo y se ponen dentro de las editboxes % Consigna set(handles.edit_consigna,'String',get_param('rtwol/Constant','Value')); % Rampa set(handles.edit_rampa,'String',get_param('rtwol/Constant2','Value')); % Tiempo de retardo para la rampa y el escalón set(handles.edit_td, 'String',get_param('rtwol/Step','time')); %Sentido de giro set(handles.tboto_inversio,'Value',str2num(get_param('rtwol/Constant1',' Value'))); limitapunts(handles); end if cl2==1 if isempty(find_system('Name','rtw_cl2'))open_system('rtw_cl2');end if isempty(find_system('Name','rtwol')) else close_system('rtwol',1);end if isempty(find_system('Name','rtw')) else close_system('rtw',1);end % Se cogen los valores del modelo y se ponen dentro de las editboxes % Consigna set(handles.edit_consigna,'String',get_param('rtw_cl2/Constant','Value') ); % Rampa set(handles.edit_rampa,'String',get_param('rtw_cl2/Constant2','Value')); % Tiempo de retardo para la rampa y el escalón set(handles.edit_td, 'String',get_param('rtw_cl2/Step','time')); limitapunts(handles); end 74 Memoria Técnica La rutina actualitza viene a ser la inversa de la rutina inici, ya que su función es capturar los valores que se encuentran dentro de las editboxes y ponerlos dentro de los bloques del modelo para que los cambios realizados en la GUI tengan efecto durante la ejecución de la aplicación. La filosofía de funcionamiento es la misma que en la rutina inici, donde tenemos unos parámetros generales y unos parámetros específicos de cada modelo. A continuación se pueden ver las líneas de programa que detallan lo explicado. function actualitza(handles) ol=evalin('base','ol'); cl=evalin('base','cl'); cl2=evalin('base','cl2'); if cl==1 if isempty(find_system('Name','rtw'))open_system('rtw');end if isempty(find_system('Name','rtwol')) else close_system('rtwol',1);end if isempty(find_system('Name','rtw_cl2')) else close_system('rtw_cl2',1);end %figure(RTWT); % Se coge el valor de la editbox i lo pone el bloque del modelo set_param('rtw/Constant','Value',... get(handles.edit_consigna,'String')) set_param('rtw/Constant2','Value',... get(handles.edit_rampa,'String')) % Tiempo de retardo para el escalon y la rampa set_param('rtw/Step','Time',get(handles.edit_td,'String')); set_param('rtw/Step1','Time',get(handles.edit_td,'String')); % Se coge el valor de la editbox y se coloca como parametro general de % la simulación %PARAMETROS DE LA SIMULACION set_param('rtw','FixedStep',get(handles.edit_ts, 'String')); set_param('rtw','Starttime',get(handles.edit_ti,'String')); set_param('rtw','Stoptime',get(handles.edit_tf,'String')); limitapunts(handles); controlador(handles); end if ol==1 if isempty(find_system('Name','rtwol'))open_system('rtwol');end if isempty(find_system('Name','rtw')) else close_system('rtw',1);end if isempty(find_system('Name','rtw_cl2')) else close_system('rtw_cl2',1);end %figure(RTWT); set_param('rtwol/Constant1','Value',num2str(get(handles.tboto_inversio,' Value'))); % Se coge el valor de la editbox i lo pone el bloque del modelo set_param('rtwol/Constant','Value',get(handles.edit_consigna,'String')); set_param('rtwol/Constant2','Value',get(handles.edit_rampa,'String')); % Tiempo de retardo para el escalon y la rampa set_param('rtwol/Step','Time',get(handles.edit_td,'String')); set_param('rtwol/Step1','Time',get(handles.edit_td,'String')); % Se coge el valor de la editbox y se coloca como parametro general de 75 Memoria Técnica % la simulación %PARAMETROS DE LA SIMULACION set_param('rtwol','FixedStep',get(handles.edit_ts, 'String')); set_param('rtwol','Starttime',get(handles.edit_ti,'String')); set_param('rtwol','Stoptime',get(handles.edit_tf,'String')); limitapunts(handles); end if cl2==1 if isempty(find_system('Name','rtw_cl2'))open_system('rtw_cl2');end if isempty(find_system('Name','rtwol')) else close_system('rtwol',1);end if isempty(find_system('Name','rtw')) else close_system('rtw',1);end %figure(RTWT); % Se coge el valor de la editbox i lo pone el bloque del modelo set_param('rtw_cl2/Constant','Value',... get(handles.edit_consigna,'String')) set_param('rtw_cl2/Constant2','Value',... get(handles.edit_rampa,'String')) % Tiempo de retardo para el escalon y la rampa set_param('rtw_cl2/Step','Time',get(handles.edit_td,'String')); set_param('rtw_cl2/Step1','Time',get(handles.edit_td,'String')); % Se coge el valor de la editbox y se coloca como parametro general de % la simulación %PARAMETROS DE LA SIMULACION set_param('rtw_cl2','FixedStep',get(handles.edit_ts, 'String')); set_param('rtw_cl2','Starttime',get(handles.edit_ti,'String')); set_param('rtw_cl2','Stoptime',get(handles.edit_tf,'String')); limitapunts(handles); end 4.6.2. Parámetros de entrada Los parámetros de entrada se utilizan en dos casos. El primero cuando se genera un evento provocado por el clic del ratón o bien por la pulsación de la tecla enter. El segundo cuando existe una función que solicita conocer su valor actual, a través de un get o bien cuando hay una función que cambia el valor de este parámetro a través de la función set. A continuación se listan los parámetros de entrada y se muestran sus rutinas. 4.6.2.1. Consigna Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_consigna. Cada vez que se genere un evento se realiza una llamada a actualitza, que actualiza el valor de todos los elementos, incluido el presente. function edit_consigna_Callback(hObject, eventdata, handles) actualitza(handles); 76 Memoria Técnica 4.6.2.2. Rampa Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_rampa. Cada vez que se genere un evento se realiza una llamada a actualitza, que actualiza el valor de todos los elementos, incluido el presente. function edit_rampa_Callback(hObject, eventdata, handles) actualitza(handles); 4.6.2.3. Inversión de giro Este parámetro es un togglebutton y como tal le corresponde un tag de la forma tbutton_inversio. Cada vez que se genere un evento se realiza una llamada a actualitza, que actualiza el valor de todos los elementos, incluido el presente. function tboto_inversio_Callback(hObject, eventdata, handles) actualitza(handles); 4.6.2.4. Tiempo de retardo Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_td. Cada vez que se genere un evento se realiza una llamada a actualitza, que actualiza el valor de todos los elementos, incluido el presente. function edit_td_Callback(hObject, eventdata, handles) actualitza(handles); 4.6.3. Parámetros del controlador Los parámetros del controlador se utilizan en dos casos. El primero cuando se genera un evento provocado por el clic del ratón o bien por la pulsación de la tecla enter. El segundo cuando existe una función que solicita conocer su valor actual, a través de un get o bien cuando hay una función que cambia el valor de este parámetro a través de la tecla set. A continuación listamos los parámetros del controlador y mostramos sus rutinas. 4.6.3.1. Constante proporcional Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_kp. Cada vez que se genere un evento se realiza una llamada a la función controlador, que actualizará el valor de todos los elementos, incluido el presente. function edit_kp_Callback(hObject, eventdata, handles) controlador(handles); 77 Memoria Técnica 4.6.3.2. Constante integral Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_ki. Cada vez que se genere un evento se realiza una llamada a la función controlador, que actualizará el valor de todos los elementos, incluido el presente. function edit_ki_Callback(hObject, eventdata, handles) controlador(handles); 4.6.3.3. Constante derivativa Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_kd. Cada vez que se genere un evento se realiza una llamada a la función controlador, que actualizará el valor de todos los elementos, incluido el presente. function edit_kd_Callback(hObject, eventdata, handles) controlador(handles); 4.6.3.4. Ajuste manual por función de transferencia Este parámetro es un radiobutton y como tal le corresponde un tag de la forma rboto_ajustFcnTf. Cuando se selecciona esta opción, lo primero hace invisible las casillas de ajuste de las constantes y abre el bloque de la función de transferencia del controlador para que se modifique directamente, sin necesidad de poner los valores de cada una de las constantes. En caso contrario, cuando se vuelva a seleccionar la opción, las casillas de las constantes se harán visibles. function rboto_ajustFcnTf_Callback(hObject, eventdata, handles) if(get(hObject,'Value')) set(handles.edit_kp,'Visible','off'); set(handles.edit_ki,'Visible','off'); set(handles.edit_kd,'Visible','off'); open_system('rtw/Discrete Transfer Fcn'); else set(handles.edit_kp,'Visible','on'); set(handles.edit_ki,'Visible','on'); set(handles.edit_kd,'Visible','on'); end 4.6.3.5. Función controlador Esta función es la encargada de coger los valores de las editboxes y realiza las operaciones oportunas para obtener los coeficientes del numerador y del denominador de la función de transferencia del controlador. function controlador(handles) kd=str2double(get(handles.edit_kd,'String')); ki=str2double(get(handles.edit_ki,'String')); kp=str2double(get(handles.edit_kp,'String')); 78 Memoria Técnica p=(kp+ki+kd); q=-(kp+2*kd); r= kd; u=1; v=-1; w=0; num=[p q r]; den=[u v w]; numdz=strcat('[', num2str(num),']'); dendz=strcat('[', num2str(den),']'); set_param('rtw/Discrete Transfer Fcn','Denominator',dendz); set_param('rtw/Discrete Transfer Fcn','Numerator',numdz); 4.6.4. Parámetros de ejecución Los parámetros de ejecución son aquellos que conciernen a la ejecución de la aplicación en tiempo real, y como tales necesitan ser compilados cada vez que se modifiquen. De la misma manera que los parámetros anteriores, se vuelven activos en dos casos: eventos de ratón o teclado y consultas o modificaciones de su valor. A continuación listamos los parámetros de ejecución y sus rutinas. 4.6.4.1. Tiempo inicial Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_ti. Cada vez que se genere un evento se realiza una llamada a la función actualitza, que actualizará el valor de todos los elementos, incluido el presente. function edit_ti_Callback(hObject, eventdata, handles) actualitza(handles); 4.6.4.2. Tiempo final Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_tf. Cada vez que se genere un evento se realiza una llamada a la función actualitza, que actualizará el valor de todos los elementos, incluido el presente. function edit_tf_Callback(hObject, eventdata, handles) actualitza(handles); 4.6.4.3. Tiempo discreto Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_ts. Cada vez que se genere un evento se realiza una llamada a la función actualitza, que actualizará el valor de todos los elementos, incluido el presente. 79 Memoria Técnica function edit_ts_Callback(hObject, eventdata, handles) actualitza(handles); 4.6.4.4. Conexión y ejecución de la aplicación Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_connecta. Cada vez que se pulse este botón se imprime un mensaje en la casilla de diálogo diciendo que se está conectando y ejecutando. Y las acciones que lleva a cabo es poner el modelo con el que se esté trabajando en modo externo, conectar la placa y seguidamente comenzar a ejecutar la aplicación. function boto_connecta_Callback(hObject, eventdata, handles) ol=evalin('base','ol'); cl=evalin('base','cl'); cl2=evalin('base','cl2'); if cl==1 set(handles.text_dialeg,'String',... 'Connectant i executant...'); set_param('rtw','SimulationMode','external'); set_param('rtw','SimulationCommand','connect'); set_param('rtw','SimulationCommand','start'); end if ol==1 set(handles.text_dialeg,'String',... 'Connectant i executant...'); set_param('rtwol','SimulationMode','external'); set_param('rtwol','SimulationCommand','connect'); set_param('rtwol','SimulationCommand','start'); end if cl2==1 set(handles.text_dialeg,'String',... 'Connectant i executant...'); set_param('rtw_cl2','SimulationMode','external'); set_param('rtw_cl2','SimulationCommand','connect'); set_param('rtw_cl2','SimulationCommand','start'); end assignin('base','cl',cl); assignin('base','ol',ol); assignin('base','cl2',cl2); 4.6.4.5. Parada de la ejecución Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_stop. Al pulsar este botón se para automáticamente la ejecución que se esté llevando a cabo y desconecta la placa de adquisición de la aplicación en tiempo real. 80 Memoria Técnica function boto_stop_Callback(hObject, eventdata, handles) ol=evalin('base','ol'); cl=evalin('base','cl'); cl2=evalin('base','cl2'); if cl==1 set_param('rtw','SimulationCommand','stop'); set_param('rtw','SimulationCommand','disconnect'); set(handles.text_dialeg,'String',... 'S´ha parat l´Execució de l´aplicació "Real Time"!'); end if ol==1 set_param('rtwol','SimulationCommand','stop'); set_param('rtwol','SimulationCommand','disconnect'); set(handles.text_dialeg,'String',... 'S´ha parat l´Execució de l´aplicació "Real Time"!'); end if cl2==1 set_param('rtw_cl2','SimulationCommand','stop'); set_param('rtw_cl2','SimulationCommand','disconnect'); set(handles.text_dialeg,'String',... 'S´ha parat l´Execució de l´aplicació "Real Time"!'); end assignin('base','cl',cl); assignin('base','ol',ol); assignin('base','cl2',cl2); 4.6.4.6. Compilación Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_compila. Al pulsar este botón se inicia la compilación del modelo que corresponda indicando el comienzo y el final de este proceso a través de la casilla de diálogo. function boto_compila_Callback(hObject, eventdata, handles) ol=evalin('base','ol'); cl=evalin('base','cl'); cl2=evalin('base','cl2'); if cl==1 set(handles.text_dialeg,'String',... 'Compilant...'); pause(0.5); rtwbuild('rtw'); %figure(RTWT); set(handles.text_dialeg,'String',... 'Finalitzada tasca de compilar'); end if ol==1 set(handles.text_dialeg,'String',... 'Compilant...'); 81 Memoria Técnica pause(0.5); rtwbuild('rtwol'); %figure(RTWT); set(handles.text_dialeg,'String',... 'Finalitzada tasca de compilar'); end if cl2==1 set(handles.text_dialeg,'String',... 'Compilant...'); pause(0.5); rtwbuild('rtw_cl2'); %figure(RTWT); set(handles.text_dialeg,'String',... 'Finalitzada tasca de compilar'); end assignin('base','cl',cl); assignin('base','ol',ol); assignin('base','cl2',cl2); 4.6.5. Limitación de puntos de ejecución Con la intención de acotar las posibilidades de error del usuario se ha ideado esta función. Durante el diseño de la aplicación en tiempo real se ha tenido deshabilitada está opción porque interesaba ver los límites tanto de la captura como de la representación de datos. Es decir, sin esta opción activada puede ser que conduzca al error al usuario y de errores de compilación, o lo más probable, dará representaciones erróneas por insuficiencia de datos. Mediante esta rutina se indica al usuario si el incremento de tiempo es correcto con el tiempo de muestreo seleccionado, la corrección es instantánea, si se excede el número de puntos máximos de representación estimados se utilizará el valor máximo. Por el contrario, si el valor es inferior al máximo no se hará ninguna corrección. function limitapunts(handles) ol=evalin('base','ol'); cl=evalin('base','cl'); ti=str2num(get_param(gcs,'Starttime')); tf=str2num(get_param(gcs,'Stoptime')); At=tf-ti; if cl==1 && ol==0 Ts=str2num(get_param('rtw','FixedStep')); elseif cl==0 && ol==1 Ts=str2num(get_param('rtwol','FixedStep')); end % puntos máximos de representación pt=str2num(get_param(gcs,'Decimation')); % Calculo del numero de puntos div=pt/Ts; Npt=At*div; Nptmax=40000; if(Npt>Nptmax) At=(Nptmax*Ts)/pt; ti=0; tf=num2str(At); 82 Memoria Técnica msge='S´ha excedit el número máxim de punts...Recàlcul amb la freqüència de mostreig seleccionada:'; msge2='tf='; msge3=strcat(msge,msge2,tf); set(handles.text_dialeg,'String',... msge3); end % Se ponen los valores en las casillas correspondientes set(handles.edit_ti,'String',num2str(ti)); set(handles.edit_tf,'String',num2str(tf)); set(handles.edit_ts,'String',num2str(Ts)); % Se actualizan los valores en el modelo if cl==1 && ol==0 set_param('rtw','Starttime',num2str(ti)); set_param('rtw','Stoptime',num2str(tf)); set_param('rtw','FixedStep',num2str(Ts)); elseif cl==0 && ol==1 set_param('rtwol','Starttime',num2str(ti)); set_param('rtwol','Stoptime',num2str(tf)); set_param('rtwol','FixedStep',num2str(Ts)); end 4.6.6. Visualización de gráficos En la visualización de gráficos intervienen hasta 15 elementos, y son de los tipos: radiobutton, pushbutton, editbox, popupmenu y axes. Dado que en el apartado anterior se ha descrito el funcionamiento, a continuación se numeran los elementos y las líneas de programa que contienen. 4.6.6.1. Opción de gráfico AND Este parámetro es un radiobutton y como tal le corresponde un tag de la forma rboto_and. Permite la visualización múltiple de gráficos poniendo su flag a 1 (a través de la variable pand). function rboto_and_Callback(hObject, eventdata, handles) pand = get (hObject,'Value'); if pand == 1 set(handles.rboto_or, 'Value',0); set(handles.rboto_scope, 'Value',0); scope_stat=0 pand=1; or=0; else set(handles.rboto_or, 'Value',0); set(handles.rboto_and, 'Value',1); set(handles.rboto_scope, 'Value',0); scope_stat=0; or=0; pand=1; end assignin('base','pand',pand); assignin('base','or',or); assignin('base','scope_stat',scope_stat); 83 Memoria Técnica 4.6.6.2. Opción de gráfico OR Este parámetro es un radiobutton y como tal le corresponde un tag de la forma rboto_or. Permite la visualización exclusiva de un solo gráfico poniendo su flag a 1 (a través de la variable por). function rboto_or_Callback(hObject, eventdata, handles) or = get (hObject,'Value'); if or == 1 set(handles.rboto_and, 'Value',0); set(handles.rboto_scope, 'Value',0); scope_stat=0; or=1; pand=0; else set(handles.rboto_and, 'Value',0); set(handles.rboto_or, 'Value',1); set(handles.rboto_scope, 'Value',0); scope_stat=0; pand=0; or=1; end assignin('base','or',or); assignin('base','pand',pand); assignin('base','scope_stat',scope_stat); 4.6.6.3. Opción de gráfico SCOPE Este parámetro es un radiobutton y como tal le corresponde un tag de la forma rboto_scope. Permite la visualización en tiempo real sobre el modelo de un gráfico poniendo su flag a 1 (a través de la variable scope_stat). function rboto_scope_Callback(hObject, eventdata, handles) scope_stat=get(hObject,'Value'); assignin('base','scope_stat',scope_stat); if scope_stat== 1 set(handles.rboto_and, 'Value',0); set(handles.rboto_or, 'Value',0); scope_stat=1; or=0; pand=0; else set(handles.rboto_and, 'Value',0); set(handles.rboto_or, 'Value',0); set(handles.rboto_scope, 'Value',1); scope_stat=1; pand=0; or=0; end assignin('base','or',or); assignin('base','pand',pand); assignin('base','scope_stat',scope_stat); 84 Memoria Técnica 4.6.6.4. Selección de variable a visualizar Este parámetro es un popupmenu y como tal le corresponde un tag de la forma popupmenu1. Permite la visualización de 9 tipos de variables descritas en el apartado 4.5.5.2rmite la visualización de 9 tipos de variables descritas en el apartado 4.5.5.2. En esta rutina simplemente recogemos el valor de la opción seleccionada en la variable popval para luego en la rutina de boto_plota imprimirla en pantalla. function popupmenu1_Callback(hObject, eventdata, handles) popval = get(hObject,'Value'); assignin('base','popval',popval); 4.6.6.5. Borrar pantalla Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_esborrap. Esta rutina tiene una variable que permite conocer el estado de la cuadrícula, en caso de que se borre pantalla evitará la desaparición del grid. function boto_esborrap_Callback(hObject, eventdata, handles) hold off; newplot quadricula=evalin('base',quadricula); if cnt==1 grid on; end 4.6.6.6. Activación de la cuadrícula de pantalla Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_grid. Mediante esta función conseguimos que un pushbutton se comporte como un togglebutton, y la variable que actúa como memoria es cnt. Cada vez que se pulse el botón que activa la cuadrícula, el valor de cnt irá oscilando de 0 a 1 de la misma manera que el grid de la pantalla se desactivará o activará respectivamente. De esta manera, cuando se borre la pantalla de visualización se recuperará el estado del grid en la siguiente gráfica. function boto_grid_Callback(hObject, eventdata, handles) quadricula=get(hObject,'Value') cnt=evalin('base','cnt'); if quadricula==1 cnt=~cnt assignin('base','cnt',cnt) end if cnt==1 hold on; grid on elseif cnt==0 hold off grid off end 85 Memoria Técnica 4.6.6.7. Casillas de selección de área de visualización Estos parámetros son cuatro, indicando el valor mínimo y máximo de las coordenadas x e y. Son del tipo editbox y sus respectivos tags se corresponden a edit_xmin, edit_xmax, edit_ymin y edit_ymax. Su función es la de marcar una superficie de visualización que vendrá siempre acompañada de un zoom in o un zoom out para que surta efecto, por tanto no tendrá una rutina concreta. Esto quiere decir que su valor solo será consultado por las rutinas que se generan con boto_zi y boto_zo. 4.6.6.8. Zoom in Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_zi. Cada vez que se pulse este botón, se reduce un 61,8% el tamaño del área de visualización. function boto_zi_Callback(hObject, eventdata, handles) %handles.axes_plot.zoomIn if 1 xm = str2double(get(handles.edit_xmin, 'String')); xM = str2double(get(handles.edit_xmax, 'String')); ym = str2double(get(handles.edit_ymin, 'String')); yM = str2double(get(handles.edit_ymax, 'String')); axis ([0.618*xm 0.618*xM 0.618*ym 0.618*yM]); eixos_e = axis; set(handles.edit_xmin, 'String', num2str(eixos_e(1,1))); set(handles.edit_xmax, 'String', num2str(eixos_e(1,2))); set(handles.edit_ymin, 'String', num2str(eixos_e(1,3))); set(handles.edit_ymax, 'String', num2str(eixos_e(1,4))); end 4.6.6.9. Zoom out Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_zo. La función que realiza es la contraria a la que realiza el zoom in, es decir, que cada vez que se pulse este botón se aumenta el 61,8% del área de visualización. function boto_zo_Callback(hObject, eventdata, handles) % hObject handle to boto_zo (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) if 1 xm = str2double(get(handles.edit_xmin, 'String')); xM = str2double(get(handles.edit_xmax, 'String')); ym = str2double(get(handles.edit_ymin, 'String')); yM = str2double(get(handles.edit_ymax, 'String')); axis ([1.618*xm 1.618*xM 1.618*ym 1.618*yM]); eixos_e = axis; set(handles.edit_xmin, 'String', num2str(eixos_e(1,1))); set(handles.edit_xmax, 'String', num2str(eixos_e(1,2))); set(handles.edit_ymin, 'String', num2str(eixos_e(1,3))); set(handles.edit_ymax, 'String', num2str(eixos_e(1,4))); end 86 Memoria Técnica 4.6.6.10. Selección automática de visualización Este parámetro es un radiobutton y como tal le corresponde un tag de la forma rboto_eixosauto. La función que realiza este control es la de recuperar la visualización global de la gráfica cuando se presiona el botón de plotar. 4.6.6.11. Área de visualización de gráficos Este elemento es del tipo axes y tiene el nombre de axes_plot, que tiene la función de recibir todos los datos que deben ser plotados. 4.6.6.12. Visualización de gráficos Este parámetro es un pushbutton y como tal le corresponde un tag de la forma boto_plot. En esta rutina se recogen todos los valores de opción de visualización, así como el modelo que se encuentra abierto y el modo de visualización. Si se selecciona un parámetro que no exista en el modelo seleccionado, entonces aparecerá un mensaje en la editbox box indicando que la selección no es válida. function boto_plot_Callback(hObject, eventdata, handles) pand=evalin('base','pand'); or=evalin('base','or'); popval=evalin('base','popval'); scope_stat=evalin('base','scope_stat'); cnt=evalin('base','cnt'); ol=evalin('base','ol'); cl=evalin('base','cl'); cl2=evalin('base','cl2'); if scope_stat==1 if cl==1 if popval==1 open_system('rtw/Sortida3') elseif popval==2 open_system('rtw/Sortida2') elseif popval==3 open_system('rtw/Entrada1') elseif popval==4 open_system('rtw/Sortida5') elseif popval==5 open_system('rtw/Sortida6') elseif popval==6 open_system('rtw/Sortida7') elseif popval==7 open_system('rtw/Sortida9') elseif popval==8 open_system('rtw/Sortida1') elseif popval==9 open_system('rtw/Sortida4') end 87 Memoria Técnica end if ol==1 if popval==1 open_system('rtwol/Sortida3') elseif popval==2 set(handles.text_dialeg,'String',... 'Opció no valida amb el model seleccionat'); elseif popval==3 open_system('rtwol/Entrada1') elseif popval==4 open_system('rtwol/Sortida5') elseif popval==5 open_system('rtwol/Sortida6') elseif popval==6 open_system('rtwol/Sortida7') elseif popval==7 open_system('rtwol/Sortida9') elseif popval==8 open_system('rtw/Sortida3') elseif popval==9 open_system('rtw/Sortida2') end end if cl2==1 if popval==1 open_system('rtw/Sortida3') elseif popval==2 open_system('rtw/Sortida2') elseif popval==3 open_system('rtw/Entrada1') elseif popval==4 open_system('rtw/Sortida5') elseif popval==5 open_system('rtw/Sortida6') elseif popval==6 open_system('rtw/Sortida7') elseif popval==7 open_system('rtw/Sortida9') elseif popval==8 open_system('rtw/Sortida1') elseif popval==9 open_system('rtw/Sortida4') end end end if pand==1 hold if popval == 1 x = evalin('base','velocitat(:,2)'); plot(x,'b'); elseif popval==2 x = evalin('base','error(:,2)'); plot(x,'r'); elseif popval==3 88 Memoria Técnica x = evalin('base','shall(:,2)'); plot(x,'y'); elseif popval==4 x = evalin('base','sia(:,2)'); plot(x,'g'); elseif popval==5 x = evalin('base','sib(:,2)'); plot(x,'c'); elseif popval==6 x = evalin('base','sishall(:,2)'); plot(x,'m'); elseif popval==7 x = evalin('base','entrada(:,2)'); plot(x,'r'); elseif popval==8 x = evalin('base','sortida(:,2)'); plot(x,'y'); elseif popval==9 x = evalin('base','sortida3(:,2)'); plot(x,'g'); end auto = get(handles.rboto_eixosauto, 'Value'); if auto == 1 axis auto; eixos_e = axis; set(handles.edit_xmin, 'String', num2str(eixos_e(1,1))); set(handles.edit_xmax, 'String', num2str(eixos_e(1,2))); set(handles.edit_ymin, 'String', num2str(eixos_e(1,3))); set(handles.edit_ymax, 'String', num2str(eixos_e(1,4))); else xm = str2double(get(handles.edit_xmin, 'String')); xM = str2double(get(handles.edit_xmax, 'String')); ym = str2double(get(handles.edit_ymin, 'String')); yM = str2double(get(handles.edit_ymax, 'String')); axis ([xm xM ym yM]); end hold; end %fin del while and==1 if or == 1 if popval == 1 x = evalin('base','velocitat(:,2)'); plot(x); elseif popval==2 x = evalin('base','error(:,2)'); plot(x); elseif popval==3 x = evalin('base','shall(:,2)'); plot(x); elseif popval==4 x = evalin('base','sia(:,2)'); 89 Memoria Técnica plot(x); elseif popval==5 x = evalin('base','sib(:,2)'); plot(x); elseif popval==6 x = evalin('base','sishall(:,2)'); plot(x); elseif popval==7 x = evalin('base','entrada(:,2)'); plot(x); elseif popval==8 x = evalin('base','sortida(:,2)'); plot(x,'y'); elseif popval==9 x = evalin('base','sortida3(:,2)'); plot(x,'g'); end auto = get(handles.rboto_eixosauto, 'Value'); if auto == 1 axis auto; eixos_e = axis; set(handles.edit_xmin, 'String', num2str(eixos_e(1,1))); set(handles.edit_xmax, 'String', num2str(eixos_e(1,2))); set(handles.edit_ymin, 'String', num2str(eixos_e(1,3))); set(handles.edit_ymax, 'String', num2str(eixos_e(1,4))); else xm = str2double(get(handles.edit_xmin, 'String')); xM = str2double(get(handles.edit_xmax, 'String')); ym = str2double(get(handles.edit_ymin, 'String')); yM = str2double(get(handles.edit_ymax, 'String')); axis ([xm xM ym yM]); end end %fin while or==1 if cnt==1 grid on; else grid off; end 4.6.7. Parámetros de guardar y cargar datos Para realizar la función de cargar y guardar datos en formato .mat, correspondientes a las simulaciones, intervienen 4 elementos. 4.6.7.1. Nombre de la variable Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_nomvar. Mediante esta casilla se captura el nombre del fichero .mat que se desea guardar o cargar. 90 Memoria Técnica function edit_nomvar_Callback(hObject, eventdata, handles) a=get(hObject,'String'); assignin('base','a',a); 4.6.7.2. Ruta para salvar/guardar datos Este parámetro es un editbox y como tal le corresponde un tag de la forma edit_ruta. Mediante esta casilla se captura el nombre del fichero .mat que se desea guardar o cargar. function edit_ruta_Callback(hObject, eventdata, handles) ruta=get(handles.edit_ruta,'String'); cd(ruta) 4.6.7.3. Salvar/guardar datos Estos dos elementos son del tipo pushbutton y tienen el formato boto_guarda y boto_carga. function boto_guarda_Callback(hObject, eventdata, handles) %Es mira que la var a existeixi, que es la que porta el nom evalin('base','exist a'); f=evalin('base','ans'); if (f) a=evalin('base','a'); assignin('base','a',a); set(handles.edit_nomvar,'Visible','on'); set(handles.edit_nomvar,'String',a); set(handles.text_dialeg,'String',... 'Miri si el nom de la variable i la ruta son correctes i premi "guarda"'); a=get(handles.edit_nomvar,'String'); assignin('base','a',a); if(~isempty(a)) cola='.mat'; assignin('base','cola',cola) g=evalin('base','strcat(a,cola)'); if(exist(g,'file')) set(handles.text_dialeg,'String',... 'Nom Fitxer Existent.Vol Sobreescriue? Premi Guarda (SI).'); if(handles.boto_guarda) evalin('base','save (a)'); set(handles.text_dialeg,'String',... 'Fitxer .MAT Guardat'); end else evalin('base','save (a)'); set(handles.text_dialeg,'String',... 'Fitxer .MAT Guardat'); end end 91 Memoria Técnica else set(handles.edit_nomvar,'Visible','on'); set(handles.text_dialeg,'String',... 'Introduiexi el nom pel fitxer .MAT a guardar'); a=get(handles.edit_nomvar,'String'); assignin('base','a',a); %Es torna a comprovar que shagui introduit un nom evalin('base','exist a'); f=evalin('base','ans'); if(f) evalin('base','save (a)'); set(handles.text_dialeg,'String',... 'Fitxer .MAT Guardat'); else set(handles.text_dialeg,'String',... 'Si us plau, introduiexi el nom pel fitxer .MAT a guardar'); end end function boto_carga_Callback(hObject, eventdata, handles) evalin('base','exist a'); f=evalin('base','ans'); if (f) a=evalin('base','a'); assignin('base','a',a); set(handles.edit_nomvar,'Visible','on'); set(handles.edit_nomvar,'String',a); set(handles.text_dialeg,'String',... 'Miri si el nom de la variable i la ruta son correctes i premi "carrega"'); a=get(handles.edit_nomvar,'String'); assignin('base','a',a); if(~isempty(a)) cola='.mat'; assignin('base','cola',cola) g=evalin('base','strcat(a,cola)'); if(exist(g,'file')) evalin('base','load (a)'); set(handles.text_dialeg,'String',... 'Fitxer .MAT Carregat'); else set(handles.text_dialeg,'String',... 'Fitxer .MAT NO Existent. Torna-hi'); end end else set(handles.edit_nomvar,'Visible','on'); set(handles.text_dialeg,'String',... 'Introdueix a la casella el nom del fitxer .MAT a carregar'); a=get(handles.edit_nomvar,'String'); assignin('base','a',a); %Es torna a comprovar que shagui introduit un nom 92 Memoria Técnica evalin('base','exist a'); f=evalin('base','ans'); e=evalin('base','isempty(a)'); if(f==1 && e==0) evalin('base','load (a)'); set(handles.text_dialeg,'String',... 'Fitxer .MAT Carregat'); else set(handles.text_dialeg,'String',... 'Introdueix a la casella el nom del fitxer .MAT a carregar'); end end 4.6.8. Parámetros de casilla de diálogo y cerrar aplicación 4.6.8.1. Casilla de diálogo Este elemento es del tipo text y tiene le corresponde el tag del tipo text_dialeg. 4.6.8.2. Salvar Existen dos elementos que son del tipo pushbutton y tienen el formato boto_tanca y boto_s_i_g. function boto_tanca_Callback(hObject, eventdata, handles) if isempty(find_system('Name','rtw')) else close_system('rtw');end if isempty(find_system('Name','rtwol')) else close_system('rtwol');end close function boto_s_i_g_Callback(hObject, eventdata, handles) close_system('rtw',1); close_system('rtwol',1); close 93 Memoria Técnica 5. Conclusiones Se puede decir que se han cumplido satisfactoriamente los propósitos planteados inicialmente, aunque han quedado temas por desarrollar y se han detectado limitaciones del sistema RTWT de Matlab, que en futuro podrán ser solventadas. Pero lo que es más importante, es que se ha conseguido sentar las bases para trabajos futuros en un entorno muy desconocido como es el trabajo con sistemas reales y en tiempo real mediante Matlab. Se ha utilizado con éxito y ha quedado documentada la información referente a las herramientas: GUIDE Toolbox de Real-Time con Simulink Controlador discreto para un motor de corriente continua, y que podrá ser utilizado para el control de velocidad de cualquier otro motor con algunas adaptaciones. Driver de corriente continua desarrollado íntegramente en el laboratorio de la URV. El modulo de control de Leybold. Todo ello se ha relacionado con la teoría de control para la obtención de un sistema realimentado para la regulación de la velocidad de un motor de corriente continua. A través de la aplicación ideada se podrá diseñar cualquier tipo de controlador soportado por Simulink (fuzzy, discreto o continuo), para posteriormente visualizar las gráficas reales y corroborarlas con las teóricas. También se ha abierto un canal de comunicación con el servicio técnico de Matlab, a través de e-mail. De esta manera se podrá solventar cuestiones y sugerir mejoras futuras como ya se ha hecho. Se han detectado deficiencias y para enmendarlas se proponen posibles trabajos futuros: Poner un PC con mayores características: RAM, procesador y disco duro. Se conseguirá reducir el tiempo de compilación, mayor rapidez de respuesta de la aplicación en tiempo real, mayor frecuencia de muestreo y tamaño de modelos en Simulink. Prescindir del modulo de control de LEYBOLD, tomando las señales directamente de la carga y llevándolas al driver de cc y la placa de adquisición. Añadir un filtro en el modelo de Simulink para eliminar el ruido provocado por la conmutación de los IGBTs del puente en H. Estar pendiente de las nuevas actualizaciones de Matlab para la resolución del problema de la imposibilidad para capturar datos y/o realizar operaciones con las variables hasta que no haya acabado la ejecución en tiempo real de la aplicación. 94 Memoria Técnica 6. Bibliografía [1] Pol Toldrà Fernández, Implementació d’un driver commutat a alta freqüència per un accionament regulat amb motor DC, PFC URV,2004. [2] Rafael Moragues, Sistema de control en temps real a través de MATLAB/SIMULINK, PFC URV, 2004. [3] David Oliveras, Desenvolupament d'una Plataforma Hardware/Software per a l'Experimentació d'Accionaments DC, PFC URV, 2005. [4] Pedro Garcés, Apuntes de la asignatura de Ingeniería de Control II, URV 2004. [5] Sistemas de control en tiempo discreto, Katsuhiko Ogata, Ed. Pentice Hall, 2 edición. [6] Ayudas de Matlab dentro de Programa. [7] http://www.mathworks.com [8] The MathWorks, Real-Time Windows Target User’s Guide (Version 2). 95 Anexos 7. Anexos En el siguiente capítulo se dará aquella información que es interesante pero que no es imprescindible para entender el funcionamiento de la aplicación en tiempo real, y que de alguna manera no ha tenido cabida en la memoria técnica. 7.1. Compatibilidad de bloques de Simulink y RTWT En la Tabla 17 se muestran los bloques de Simulink separados por categorías y unas notas explicativas. Estos bloques son compatibles con la toolbox de tiempo real de Matlab, ya que RTWT no puede trabajar con todos los bloques de Simulink. Sublibrary Additional Math and Discrete: Additional Discrete Additional Math and Discrete: Additional Discrete Additional Math and Block Fixed-Point State-Space Support Notes SN1 Transfer Fen Direct Form II SN1, SN2 Transfer Fen Direct Form II Time Varying Unit Delay Enabled SN1. SN2 Unit Delay Enabled External IC SN1, SN2 Unit Delay Enabled Resettable SN1. SN2 Unit Delay Enabled Resettable External IC SN1. SN2 Unit Delay External IC SN1, SN2 Unit Delay Resettable SN1. SN2 Unit Delay Resettable External IC SN1, SN2 Unit Delay With Preview Enabled SN1, SN2 Unit Delay With Preview Enabled Resettable SN1. SN2 Unit Delay With Preview Enabled Resettable External RV SN1. SN2 Unit Delay With Preview Resettable SN1. SN2 Unit Delay With Preview Resettable External RV SN1. SN2 Decrement Real World SN1 96 SN1. SN2 Anexos Discrete: Increment/Decrement Continuous Discontinuities Discrete Decrement Stored Integer SN1 Decrement Time To Zero — Decrement To Zero SN1 Increment Real World SN1 Increment Stored Integer SN1 Derivative Integrator State-Space SN3. SN4 SN3. SN4 SN3. SN4 Transfer Fen SN3. SN4 Transport Delay SN3. SN4 Variable Time Delay SN3. SN4 Variable Transport Delay SN3. SN4 Zero-Pole Backlash Coulomb & Viscous Friction SN3. SN4 SN2 SN1 Dead Zone Dead Zone Dynamic — SN1 Hit Crossing SN4 Quantizer Rate Li miter — SN5 Rate Limiter Dynamic SN1. SN5 Relay Saturation Saturation Dynamic — — SN1 Wrap To Zero SN1 Difference Discrete Derivative SN1 SN2. SN6 Discrete Filter SN2 Discrete State-Space SN2 97 Anexos Logic and Bit Operations Discrete Transfer Fen SN2 Discrete Zero-Pole SN2 Discrete-Time Integrator SN2. SN6 First-Order Hold SN4 Integer Delay SN2 Memory Transfer Fen First Order — SN1 Transfer Fen Lead or Lag SN1 Transfer Fen Real Zero SN1 Unit Delay Weighted Moving Average SN2 — Zero-Order Hold — Bit Clear — Bit Set Bitwise Operator — — Combinatorial Logic — Compare to Constant — Compare to Zero — Detect Change SN2 Detect Decrease SN2 Detect Fall Neaative SN2 Detect Fall Nonpositive SN2 Detect Increase SN2 Detect Rise Nonnegative SN2 Detect Rise Positive SN2 Extract Bits Interval Test Interval Test Dynamic — — — Loaical Operator — 98 Anexos Lookup Tables Math Operations Relational Operator — Shift Arithmetic — Cosine Direct Lookup Table (n-D) SN1 SN2 Interpolation (n-D) — Lookup Table — Lookup Table (2-D) — Lookup Table (n-D) — Lookup Table Dynamic — PreLookup Index Search — Sine Abs Algebraic Constraint SN1 — Not supported Assignment Bias Complex to Magnitude-Angle SN2 — — Complex to Real-lmag — Concatenate Dot Product Gain Maanitude-Anale to Complex SN2 — — — A Math Function (10 u) Math Function (conj) Math Function (exp) Math Function (hermitian) Math Function (hypot) Math Function (log) Math Function (Iog10) A Math Function (maanitude 2) Math Function (mod) Math Function (pow) Math Function (reciprocal) Math Function (rem) Math Function (square) Math Function (sqrt) Math Function (transpose) MinMax 99 — — — — — — — — — — — — — — — — Anexos Model Verification Ports & Subsystems MinMax Running Resettable — Polynomial Product Real-lmaa to Complex — SN2 — Reshape Rounding Function — — Sign Sine Wave Function — — Slider Gain Sum Trigometric Function — — SN7 Unary Minus Weighted Sample Time Math — — Assertion Check Discrete Gradient — — Check Dynamic Gap — Check Dynamic Lower Bound — Check Dynamic Range — Check Dynamic Upper Bound — Check Input Resolution — Check Static Gap — Check Static Lower Bound — Check Static Range — Check Static Upper Bound — Atomic Subsystem — Code Reuse Subsystem — Configurable Subsystem — Enabled Subsystem — Enabled and Triaaered Subsystem — For Iterator Subsystem — 100 Anexos Signal Attributes Signal Routing Function-Call Generator — Function-Call Subsystem — If If Action Subsystem — — Model Subsystem Switch Case — — — Switch Case Action Subsystem — Triggered Subsystem — While Iterator Subsystem — Data Type Conversion — Data Type Conversion Inherited — Data Type Duplicate — Data Type Propogation — Data Type Scaling Strip — JC Probe Rate Transition SN4 — SN2. SN5 Sianal Conversion — Signal Specification — Weighted Sample Time — Width Bus Assianment — — Bus Creator Bus Selector Data Store Memory — — — Data Store Read — Data Store Write — Demux Environment Controller — — 101 Anexos Sinks Sources From Goto Goto Tag Visibility — — — Index Vector Manual Switch — SN4 Merge Multiport Switch — SN2 Mux Selector — — Switch Display Floating Scope SN2 SN8 SN8 Output (Out1) Scope — SN8 Stop Simulation Terminator Not supported — To File SN4 To Workspace SN8 XY Graph SN8 Band-Limited White Noise SN5 Chirp Signal SN4 Clock SN4 Constant — Counter Free-Running Counter Limited SN4 SN1 Diaital Clock SN4 From File SN8 From Workspace SN8 Ground Inport(lni) Pulse Generator — — SN5. SN9 Ramp SN4 102 Anexos User-Defined Random Number — Repeating Sequence SN10 Repeating Sequence Interpolated SN1. SN5 Repeating Sequence Stair SN1 Signal Builder SN4 Sianal Generator SN4 Sine Wave SN6. SN9 Step Uniform Random Number SN4 — Embedded MATLAB Function — Fen MATLAB Fen — SN11 S-Function S-Function Builder SN12 — Tabla 17: Listado de bloques de Simulink y sus compatibilidades Symbol — SN1 SN2 SN3 SN4 SN5 SN6 SN7 SN8 SN9 Note Real-Time Workshop supports the block and requires no special notes. Real-Time Workshop does not explicitly group primitive blocks that constitute a nonatomic masked subsystem block in the generated code. This flexibility allows for more optimal code generation. In certain cases, you can achieve grouping by configuring the masked subsystem block to execute as an atomic unit by selecting the Treat as atomic unit option. Generated code relies on memepy or memset (string, h) under certain conditions. Consider using the Simulink Model Discretizer to map continuous blocks into discrete equivalents that support code generation. To start the Model Discretizer, click Tools > Control Design. Not recommended for production code. Cannot use inside a triggered subsystem hierarchy. Depends on absolute time when used inside a triggered subsystem hierarchy. The three functions — asinh, acosh, and atanh—are not supported by all compilers. If you use a compiler that does not support these functions, Real-Time Workshop issues a warning message for the block and the generated code fails to link. Ignored for code generation. Does not refer to absolute time when configured for sample-based operation. Depends on absolute time when in time-based operation. 103 Anexos SN10 SN11 SN12 Consider using the Repeating Sequence Stair or Repeating Sequence Interpolated block instead. Consider using the Embedded MATLAB block instead. S-functions that call into MATLAB are not supported for code generation. Tabla 18: Notas referentes a la Tabla 17 7.2. Preguntas realizadas al servicio técnico de Matlab Este apartado ha sido concebido para solucionar posibles dudas que hayan podido surgir a lo largo de la lectura de la memoria técnica, y con la intención de dar continuidad al trabajo realizado en el presente proyecto. Esto dará la posibilidad a la persona que prosiga en esta misma línea de investigación o en otra similar las limitaciones de las toolboxes de Real-Time para esta versión de Matlab, y posibles mejoras que se van implementar en un futuro como nos aseguran en una de estas cartas. A continuación se mostrarán algunos de los e-mails de Matlab. From: august.cilento@estudiants.urv.es Sent: 5/4/2005 1:31:21 PM To: soporte@mathworks.es Subject: Matlab trabajando en tiempo real Estimados Srs. De MathWorks, Estoy trabajando en la Universidad Rovira y Virgili de Tarragona en un proyecto de control de un motor de CC mediante una placa de adquisición en tiempo real (RTWT). En la página de Mathworks he visto que la placa puede llegar a trabajar de 10 a 40 kHz con Windows. He estado haciendo pruebas y he visto que no puedo trabajar a frecuencias de muestreo tan altas. He podido comprobar que con una frecuencia de muestreo de 10 kHz y tomando como entrada una señal sinusoidal a 1 kHz, el sistema operativo se vuelve inestable, cuando no se reinicia la computadora, y solo captura unos 1000 puntos. Nuestro hardware es el siguiente: - PCI NI-6024e como placa de adquisición en Tiempo Real - Computadora: Intel Pentium 4 a 1,86 GHz 256 MB Ram El software: - Matlab 6.5 R13 - Windows 2000 (Service Pack) - Ejecutando el comando “rtwho” da como respuesta: o Real Time Windows Target v 2.2. o MATLAB performance = 100% o Kernel timeslice period = 1ms Mis preguntas son: - Con el hardware y software que tenemos se puede muestrear hasta los 40 kHz? - Cual es la limitación de puntos guardando datos en Tiempo Real con 104 Anexos “To Workspace” o “Scope”? – He observado que el máximo numero de puntos es de 1000 puntos – - Cual es la relación entre el tiempo de muestreo del “Simulation Parameters” del Simulink y el tiempo de cada uno de los bloques. Atentamente, Augusto Cilento De: support@mathworks.de Data: Dilluns, Juny 6, 2005 9:40 am Assumpte: RE: Matlab trabajando en tiempo real Hola Sr Cliento - Con el hardware y software que tenemos se puede muestrear hasta los 40 kHz? Esto no se sabe hasta que se prueba. Por favor mira la pagina siguiente: http://www.mathworks.com/support/solutions/data/118N6Z.html?solution=1-18N6Z - Cual es la limitación de puntos guardando datos en Tiempo Real con “To Workspace” o “Scope”? – He observado que el máximo numero de puntos es de 1000 puntos – En el bloque Scope y To Workspace hay una casilla "Limit Data Points To Last". Tiene el valor 1000? - Cual es la relación entre el tiempo de muestreo del “Simulation Parameters” del Simulink y el tiempo de cada uno de los bloques. El tiempo de muestro del bloque es igual precendente si su casilla tiene un valor tienen un valor -1 es igual al tiempo de Configuration Parameters). He añadido un al valor del bloque -1. Si todos los bloques muestra fundamental (en ejemplo. Necesito conocer su número de licencia. Puede utilizar el comando "ver" dentro de la ventana de comandos de MATLAB y devolvernos su salida. Si tiene màs preguntas esciribemelas. Un saludo cordial, Tobias Gemperli From: august.cilento@estudiants.urv.cat Sent: 2006-08-21 11:48:33 AM To: soporte@mathworks.es Subject: RE: RE: RE: RE: Respondre el missatge: RE:Matlabtrabajandoentiemporeal Hello Tobias, Can you explain me, how can I display a block scope into a GUI and see that in real-time by means of "external mode" ? Can I export this data to grafical user interface axes? I need work in signal tracing mode (acquiring and visualizing signals while running a target application). 105 Anexos Can you help me? Best regards, August Cilento ----- Missatge original ----De: soporte@mathworks.es Data: Dilluns, Agost 21, 2006 9:40 Assumpte: RE: RE: RE: RE: Respondre el missatge: RE: Matlabtrabajandoentiemporeal Per a: august.cilento@estudiants.urv.cat > > > > > > > > Hello August I tried to call you on the number +34 977 55 96 59. The person who took off the phone said that he doesn't know you. Do you have another phone number? Thank you Tobias De: soporte@mathworks.es Data: Dimarts, Agost 22, 2006 16:28 Assumpte: RE: RE:Matlabtrabajandoentiemporeal Per a: august.cilento@estudiants.urv.cat > Hello August > > I'm still investigating if the data can be displayed in a GUI. I > will tell you when I have further information about it. > > You wrote: > https://estudiants.urv.cat/popup.html?nopop 2 de 4 14/09/2006 16:40 > > 2. Granted that the size of buffer of data is very > small, would be possible to do more than a simulation and chain > all the values obtained within a same variable, thus to obtain > more points for a representation? > > Unfortunately this is not possible. Please check if the > following hints help: > > > Solution Id: 1-1J9KLJ > > Summary: Why do I receive an error stating that the external > mode packet buffer is too small in Real-Time Windows Target > 2.5.2 (R14SP2)? > > Solution: > There is a bug in Real-Time Windows Target 2.5.2 (R14SP2) in > the way that Real-Time Windows Target interacts with external > mode. This bug is under investigation and no fully tested > workarounds exist. However, the following are three techniques > that may resolve the problem. This is a machine-dependent issue, > and the techniques cannot be guaranteed to work on all machines. > 106 Anexos > > > > > > > > > > > > > > > > > > > > > > > > > > 1) Minimize the number of external mode communication channels, such as scopes and displays. Users often attach scopes and displays to signals "just in case". While this approach is acceptable for simulation, it wastes packet buffer space, which is one of the most critical resources when running in external mode. 2) Reduce the amount of data transmitted through external mode channels. In the External Mode Control Panel, set the Duration (which must be a positive integer) as low as possible. The shorter duration reduces the number of samples in one buffer. 3) If the computer supports hyperthreading, disable hyperthreading in the BIOS setup. Hyperthreading helps few applications. For real-time applications it does not help at all, and can cause additional problems. You should have your System Administrator do this for your machine. 3. Which is approximately the number of points maximum/frequency of sampling for a simulation? But as it could obtain the relation? Do you mean the number of points that can be saved? Un saludo, Tobias Gemperli From: august.cilento@estudiants.urv.cat Sent: 2006-08-24 04:50:16 AM To: soporte@mathworks.es Subject: RE: RE:Matlabtrabajandoentiemporeal Hello Tobias, You clarified me some doubts about buffer size, I will prove it. 3. Which is approximately the maximum number of points/frequency of sampling for asimulation? But as it could obtain the relation? Do you mean the number of points that can be saved? Yes, I mean the maximum I number of points by unit of time (at minimum increase of time or maximum frequency). Thank you De: soporte@mathworks.es Data: Dimarts, Desembre 04, 2006 16:28 Assumpte: RE: RE:Matlabtrabajandoentiemporeal Per a: august.cilento@estudiants.urv.cat Dear August I'm sorry about the delay in my reply. Unfortunately there is no formula to calculate the maximum buffer size. I have made tests on several computers. I found out that the "out of memory" error occurs between 20'000'000 and 40'000'000 time steps. Unfortunately it is not yet possible to prealocate the memory which will be used by the scopes. I have forwarded such a request to development to be considered in a future release of matlab. Do you need to log every sample or can you just log every tenth? If the second applies please specify the field "Sampling" in the scope block: Scope, Floating Scope, Signal Viewer Scope :: Blocks (Simulink) 107 Anexos http://www.mathworks.com/access/helpdesk/help/toolbox/simulink/slref/s cope.shtml Regards Tobias 108