Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Control de Motor de CC Con Matlab PDF
Control de Motor de CC Con Matlab PDF
mediante Matlab
Memoria Técnica
1. Introducción................................................................................................................... 6
2. Objetivos........................................................................................................................ 6
3. 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
ii
Índice
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:
6
Memoria Técnica
3. Memoria descriptiva
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.
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:
7
Memoria Técnica
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.
8
Memoria Técnica
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.
Parámetros de bloques
Parámetros de bloques de subsistemas.
MATLAB variables
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
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.
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.
11
Memoria Técnica
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.
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.
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.
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
Velocidad
Entradas/Salidas
Rampa
Realimentación
3.3.1. PC
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
Sensores y actuadores
Hardware de adquisición de datos
Hardware de acondicionamiento de señal
Computadora o procesador
Programa
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.
14
Memoria Técnica
3.3.1.1.4. La computadora
3.3.1.1.5. Software
15
Memoria Técnica
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.
16
Memoria Técnica
17
Memoria Técnica
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 Digital I/O signals—DIO6 and 7 can control the up/down
Output 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.
AOGND AO — — — — — —
DGND DO — — — — — —
VCC DO 0.1 Ω Short-circuit to 1A fused — — —
ground
DIO<0..7> DIO — Vcc +0.5 13 at (Vcc -0.4) 24 at 0.4 1,1 50kΩpu
AI = Analog Input AO = DIO = Digital Input/Output pu = pullup DO = Digital Output 50 kΩ pullup and 17 kΩ and
Analog Output Note: pulldown resistors is very large. Actual value can range between
The tolerance on the 100
kΩ
18
Memoria Técnica
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
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
20
Memoria Técnica
Entradas/Salidas Digitales
DIO<0..7>
Digital logic levels
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
21
Memoria Técnica
3.3.2.3. Puente en H
22
Memoria Técnica
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.
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.
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 f (t ) (1)
Vmed = ∫ ⋅ dt
0 T
23
Memoria Técnica
Ton (3)
D=
T
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.
25
Memoria Técnica
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.
26
Memoria Técnica
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.
Ea = K ⋅ φ ⋅ w (4)
Ti = K ⋅ φ ⋅ Ia (5)
Va = Ia ⋅ Ra + Vb + Ea (6)
Ea = K ⋅ φ ⋅ 0.1047 ⋅ n (7)
Va − Vb − Ia ⋅ Ra (8)
K ⋅φ =
0.1047 ⋅ n
Va − Ia ⋅ Ra (9)
K ⋅φ =
0.1047 ⋅ n
27
Memoria Técnica
28
Memoria Técnica
29
Memoria Técnica
30
Memoria Técnica
INTERN: Depending on the operating mode 21 Incremental control knob to change the reference
reference variable is set for speed, or torque variable
via the incremental control knob. and the limit
EXTERN: Depending on the operating The reference variable to be changed depends on the
mode the reference variable is set for speed operating mode set and thus on the control loop
or torque via the external input CONTROLIN currently activated. The speed setpoint is varied in
(13).
the operating modes load characteristic and run-up
characteristic
13 External control input CONTROLIN
This input is active if the INTERN / EXTERN-switch Setting range: -5000 rpm...0
is set to EXTERN. For external operation the rpm...5000 rpm
setpoint value for the control loop selected by the In the automatic torque control mode (TORQUE
MODE button is supplied via this socket. Here the CONTROL) the setpoint value for the torque control
following linear relationships apply to some extent:
loop is varied.
Automatic torque control (TORQUE CONTROL):
Setting range: -9.99 Nm...0
±10 V corresponds to ±10 N Nm...+9.99 Mm
Automatic speed control (SPEED CONTROL): In the case of external operation the incremental
±10 V corresponds to ±5000 rpm control knob cannot induce a change in the setpoint.
The setpoint value is supplied to the selected If the stop speed or the torque limit is displayed (by
controller via a pressing or, the incremental control knob can be
run-up generator. This means that setpoint step used to vary the value currently being displayed.
changes are
possible and lead to a slight overshoot of the Setting range stop speed: 0
controller in rpm...5000 rpm Setting range
question.
torque limit: 0 Nm...9.99 Nm
14 Temperature monitoring of the DUT: TERR The load simulation operating modes only permit an
This input is connected to the thermal contact of the effective setting of the torque limit, for load
DUT. This connection is always established as simulation of a winding drive (M ~ k/n) the
otherwise there would be no overload protection for maximum adjustable torque limit is at 5 Nm (this
the DUT. torque has to be overcome during start up).
15 DUT ENABLE-sockets
22 Auxiliary ground 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, 23 Analog DUT's current output (I [ 1 V / A ])
cat. no. 735 291, a cut-off used with power circuit The voltage is proportional to the DUT's supply
breakers e.g. cat. no. 745 561. The operation modes current when connected to DUT socket field (1 V
dut nc (normally closed) and dut no (normally corresponds to 1 A).
open) can be changed by pressing the MODE key (5)
during the first seconds when control unit is switched 24 Analog DUT's voltage output (U [ 1 V / 100 V ])
on. With each pressing a delay time will be started. The voltage is proportional to the DUT's supply
The default mode of DUT ENABLE is dut no. 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 ])
17 Control connection input The voltage is proportional to the instantaneous
Multifunction Input for the connection of the D & B torque of the D & B Unit (1 V corresponds to 1 Nm).
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
18 Digital speed output (TACHOOUT)
of the machine-generator set (1 V corresponds to 500
The signals of the tacho-generator are automatically
rpm).
forwarded.
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
33
Memoria Técnica
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.
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
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.
3 2
15 17 18 20
5 4
16 19 21
7 6
9 8
11 10
13 12
14
35
Memoria Técnica
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.
36
Memoria Técnica
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.
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 Ventana 2
(figure) (figure)
Controles Menús
Ejes 1 (axes) Ejes 2 (axes)
(uicontrol) (uimenu)
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
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.
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.
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.
DRIVER
VARIADOR DE TENSIÓN
220Vca
Vcc+
IDE20-E/S
SH_IN
SH_OUT
0V Vcc_puente
GND_puente
M+
M-
F2 F1 M+ M-
ENTRADAS
0V
SALIDAS
39
Memoria Técnica
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.
Pin Rango
IDE Tensión
Descripción de la señal Placa# Pin DAQ# (V)
ENTRADAS
1 Medida Sensor Hall 20 ACH0 ±12
Sobrecorriente Shall y
2 MC33153 11 DIO3 0-5
3 Cruce Rama B 12 DIO2 0-5
4 Cruce Rama A 13 DIO1 0-5
Lectura Velocidad (modulo
5 ext.) - ACH1 ±10
SALIDAS
1 Velocidad 19 DAC0OUT 0-5
2 Rampa 18 DAC1OUT 0-5
3 Sentido de giro 17 DIO0 0-5
Tabla 10: Resumen de conexiones entre driver y placa DAQ
40
Memoria Técnica
El listado de pines del conector IDE del driver de corriente continua se muestra en la
siguiente tabla.
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
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.
Para que Matlab pueda trabajar correctamente y reconozca el compilador habrá que
seguir los siguientes pasos:
42
Memoria Técnica
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:
Done . . .
******************************************************
Warning: The file extension of 32-bit Windows MEX-
files 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
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.
>>rtwintgt -setup
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
>> rtload
44
Memoria Técnica
Ilustración 22: Pantalla de selección manual del driver de la placa de adquisición de datos
>> rtwho
Para deshacer los cambios existe un comando que deshace la selección del driver:
>>rtunload
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.
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.
K ( 10 )
G( s) =
τ ⋅ 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.
47
Memoria Técnica
y ss = lim s ⋅ Y ( s ) ( 11 )
s →0
6,376 ( 12 )
G( s) =
s + 5,762
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.
-1 1 − e −Ts ( 13 )
G ( z ) = Z L ⋅ G ( s)
s t =nT
1 − e −5, 762T ( 15 )
G ( z ) = 1,1066 ⋅
z − e −5,762T
48
Memoria Técnica
BW = f max − f min ( 17 )
Para nuestro sistema consideramos que f min = 0 , por tanto la expresión ( 16 ) quedará:
f s > 2 f max ( 18 )
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.
49
Memoria Técnica
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
+
H
E +
ki·z/(z-1)
kd·(z-1)/z
Ilustración 27: Estructura de controlador discreto con acciones proporcional, integral y derivativa
H ( z ) (kp + ki + kd ) ⋅ z 2 − (kp + 2 ⋅ kd ) ⋅ z + kd ( 24 )
=
E( z) z2 − z
Acción proporcional
H ( z) ( 26 )
= 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
Controlador Planta
R(z) Y(z)
+
kp G(z)
-
Ilustración 28: Diagrama de bloques del controlador P con la planta del sistema
Y ( z) kp ⋅ G ( z ) ( 27 )
=
R ( z ) 1 + kp ⋅ G ( z )
R( z ) ( 28 )
E( z) =
1 + kp ⋅ G ( z )
( z − 1) ( 29 )
yss = lim ⋅ Y ( z)
z →1 z
52
Memoria Técnica
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 x 10 Root Locus
1
6
0.8
0.6 4
0.4
2
0.2
Imaginary Axis
Imaginary Axis
0 0
-0.2
-2
-0.4
-0.6
-4
-0.8
-6
-1 0.9936 0.9938 0.994 0.9942 0.9944 0.9946 0.9948 0.995
-1 -0.5 0 0.5 1
Real Axis Real Axis
0.9
0 0.8
0.7
-5 0.6
Amplitude
Amplitude
0.5
-10 0.4
0.3
-15 0.2
0.1
-20 0
0 2 4 6 8 10 12 14 16 18 20 0 2 4 6 8 10 12 14 16 18 20
Time (sec) 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.
53
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.
P ( z ) = a0 z n + a1 z n −1 + ... + a n −1 z + a 0 ( 30 )
P (1) > 0 ( 31 )
1.8
1
1.6
1.4
0.5
1.2
Amplitude
Amplitude
0 1
0.8
-0.5
0.6
0.4
-1
0.2
-1.5 0
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
0.6
0.4
Amplitude
Amplitude
0.5
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 0
Time (sec) 0 5 10 15 20 25 30 35 40 45
Time (sec)
54
Memoria Técnica
2.5
2
Amplitude
1.5
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 Scope
Hold
55
Memoria Técnica
2.5 250
2 200
Amplitud (V)
Amplitud (V)
1.5 150
1 100
0.5 50
0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Tiempo (s) Tiempo (s)
56
Memoria Técnica
4.4.2. Controlador PI
Controlador PI Planta
R(z) Y(z)
+ ( kp + ki ) ⋅ z − kp
G(z)
z −1
-
Ilustración 34: Diagrama de bloques del controlador PI con la planta del sistema
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.
-3
Root Locus x 10 Root Locus
1
0.8 3
0.6 2
0.4
1
0.2
Imaginary Axis
Imaginary Axis
0
0
-1
-0.2
-0.4 -2
-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 0.994 0.996 0.998 1 1.002
Real Axis Real Axis
57
Memoria Técnica
2.5
Amplitude
1.5
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
58
Memoria Técnica
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.
59
Memoria Técnica
pt ( 35 )
Npt = ⋅ ∆t
Ts
Donde:
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í.
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.
Npt [ puntos ] ( 36 )
SR = =
t [segundos ]
Ts ⋅ Npt ( 37 )
∆t max = = Ts 2 ⋅ SR
pt
60
Memoria Técnica
61
Memoria Técnica
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:
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.
Sobreintensidad en la rama A
Sobreintensidad en la rama B
Sobreintensidad en el sensor Hall
Medición procedente del sensor Hall
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
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.
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.
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.
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.
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
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).
67
Memoria Técnica
Ilustración 46: Opciones de gráfico de las de la interfaz, opción AND y Scope respectivamente
Los pasos para visualizar un gráfico son: seleccionar el modo de visualización (AND-
OR-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
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
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.
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
70
Memoria Técnica
Inicio de Programa:
RTWT_OpeningFcn
No
Lazo Lazo No
No Lazo
Cerrado? Sin Cerrado?
Abierto?
Control Control Z
Si Si Si
Si
Evento?
No
Si Si Cerrar
Cerrar? Fin Programa
Salvando?
71
Memoria Técnica
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
inici(handles);
actualitza(handles);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Choose default command line output for RTWT
handles.output = hObject;
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 que tiene
% en el modelo y ponerlos en la GUI, en el caso que sea la primera vez
% se haya abierto el programa.
% % % % % % % % % % % % INICIO PARAM.GENERALES % % % % % % % % % % % % %
% %
% Se capturan los valores de los parametros generales, son aquellos que
no
% dependen del modelo escogido
% 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.1. Consigna
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_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.
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.
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.
77
Memoria Técnica
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.
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.
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);
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.
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.
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
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);
80
Memoria Técnica
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
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);
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
83
Memoria Técnica
84
Memoria Técnica
if cnt==1
grid on;
end
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
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
86
Memoria Técnica
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.
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
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
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
if cnt==1
grid on;
else
grid off;
end
90
Memoria Técnica
Estos dos elementos son del tipo pushbutton y tienen el formato boto_guarda y
boto_carga.
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
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)');
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.
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.
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.
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.
[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.
[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.
Additional Math and Unit Delay With Preview Enabled SN1. SN2
Discrete: Additional Resettable
Discrete
Unit Delay With Preview Enabled SN1. SN2
Resettable External RV
96
Anexos
Discrete:
Increment/Decrement
Dead Zone —
Dead Zone Dynamic SN1
Quantizer —
Rate Li miter SN5
Relay —
Saturation —
Saturation Dynamic SN1
97
Anexos
Memory —
Transfer Fen First Order SN1
Zero-Order Hold —
Combinatorial Logic —
Compare to Constant —
Compare to Zero —
Extract Bits —
Interval Test —
Interval Test Dynamic —
Loaical Operator —
98
Anexos
Relational Operator —
Shift Arithmetic —
Interpolation (n-D) —
Lookup Table —
Sine SN1
Math Operations Abs —
Algebraic Constraint Not supported
Assignment SN2
Bias —
Complex to Magnitude-Angle —
Complex to Real-lmag —
Concatenate SN2
Dot Product —
Gain —
Maanitude-Anale to Complex —
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
Polynomial —
Product SN2
Real-lmaa to Complex —
Reshape —
Rounding Function —
Sign —
Sine Wave Function —
Slider Gain —
Sum —
Trigometric Function SN7
Unary Minus —
Weighted Sample Time Math —
Configurable Subsystem —
Enabled Subsystem —
100
Anexos
Function-Call Generator —
Function-Call Subsystem —
If —
If Action Subsystem —
Model —
Subsystem —
Switch Case —
Triggered Subsystem —
JC SN4
Probe —
Rate Transition SN2. SN5
Sianal Conversion —
Signal Specification —
Width —
Signal Routing Bus Assianment —
Bus Creator —
Bus Selector —
Data Store Memory —
Demux —
Environment Controller —
101
Anexos
From —
Goto —
Goto Tag Visibility —
Index Vector —
Manual Switch SN4
Merge —
Multiport Switch SN2
Mux —
Selector —
Switch SN2
Sinks Display SN8
Floating Scope SN8
Output (Out1) —
Scope SN8
To File SN4
To Workspace SN8
XY Graph SN8
Clock SN4
Constant —
Ground —
Inport(lni) —
Pulse Generator SN5. SN9
Ramp SN4
102
Anexos
Random Number —
Step SN4
Uniform Random Number —
Fen —
MATLAB Fen SN11
S-Function SN12
S-Function Builder —
Symbol Note
— Real-Time Workshop supports the block and requires no special notes.
SN1 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.
SN2 Generated code relies on memepy or memset (string, h) under certain
conditions.
SN3 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.
SN4 Not recommended for production code.
SN5 Cannot use inside a triggered subsystem hierarchy.
SN6 Depends on absolute time when used inside a triggered subsystem
hierarchy.
SN7 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.
SN8 Ignored for code generation.
SN9 Does not refer to absolute time when configured for sample-based
operation. Depends on absolute time when in time-based operation.
103
Anexos
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
104
Anexos
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
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
Best regards,
August Cilento
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
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