viernes, 24 de enero de 2014

Eco de señal generada vía Simulink.

DESCRIPCIÓN


La comunicación serial consiste en el envío de un bit de información de manera secuencial, es decir, un bit a la vez y a una velocidad definida entre el emisor y el receptor.
La comunicación serial siguelos estándares definidos por el RS-232 (Recommended Standard 232) que establece niveles de voltaje, velocidad de transmisión de los datos, etc.
La parte física encargada de la comunicación serial es la UART (Universal Asynchronous Receiver and Transmitter). En la comunicación asincrónica, la velocidad de envío de los datos es acordada entre el emisor y el receptor. 


Figura 1. Comunicación asíncrona.




OBJETIVO


Generar una señal en Simulink y enviarla al puerto serial hacia el canal de recepción del microcontrolador, este a su vez generar un eco de la señal por medio del uso del DAC (Digital to Analog Converter) y ADC (Analog to Digital Converter), y retornar esa señal vía serial hacia Simulink.

DESARROLLO


La comunicación serial con el MatLab, puede ser realizada vía un modelo en Simulink. Para esto se hace uso de los bloques localizados en la herramienta Instrument Control Toolbox, dentro de la librería Simulink.

Figura 2. Bloques para comunicación serial.

El modelo implementado en Simulink es el siguiente.


Figura 3. Modelo en Simulink para envío y recepción de datos vía puerto serie.
Los bloques to instrument y Query Instrumet, ocupados para el envío y recepción de datos respectivamente en forma serial, son configurados a 115200 Baudios, y direccionados al puerto COM4. Tal y como se muestra en la figura siguiente.


Figura 4. Configuración de bloques de envío y recepción en Simulink.

Además el bloque Query Instrument, requiere de la configuración del terminador de la cadena de caracteres que recibirá, esto con el fin de determinar que una cadena de datos completa ha sido recibida. En este caso el terminador utilizado es el 0x55 hexadecimal, que corresponde al carácter U. Los datos son enviados y recibidos por medio de cadenas en formato ASCII, los cuales tambien se especifican en las configuraciones del bloque en la pestaña “query”.



Figura 5. Configuraciones del bloque de recepción serial Query Intrument.

Tambien es necesario definir la variable Ts en el espacio de trabajo del MatLab, para el tiempo de muestreo a la que trabajaran todos los bloques dentro del modelo Simulink. Previamente la variable Ts deberá ser colocada en la casilla correspondoente al tiempo de muestreo, dentro de las configuraciones de todos los bloques como lo indican las figuras anteriores.
Por otra parte, el bloque de la Función  seno, es configurado a una amplitud de 2040 unidades, y a una frecuencia de 60 hz, expresada en rad/seg.



Figura 6. Configuración del bloque función seno.


El programa se desarrolla en MQX lite, cuenta con 2 tareas y 3 interrupciones detalladas en las siguientes tablas.
Name
Stack Size
Priority
MQX_AUTO_START_TASK
Task1
512
8
ENABLE
Task2
512
8
DISABLE
Tabla 1. Configuración de tareas.


Name
Description
AD1_OnMeasurementComplete
Evento que es invocado cuando una medición ha sido realizada.
AS1_OnRxChar
Evento que es invocado cuando un carácter ha sido recibido correctamente.
AS1_OnTxChar
Evento que es invocado después que un carácter ha sido transmitido.
Tabla 2. Lista de eventos.

El desarrollo del programa se basa en una tarea 1 de inicialización y espera, para habilitar la tarea 2, encargada de la conversión de la cadena recibida en entero, escritura en el DAC y disparo del ADC para lectura de valor retroalimentado físicamente mediante un cable del DAC (PTE30) hacia el ADC (PTB3). Por Su parte el evento del canal de recepción es el encargado de guardar en un buffer circular los datos recibidos provenientes del MatLab, via puerto serial. El evento del ADC se encarga de leer valor cuando le es indicado y llama a la función Int2str, la cual convierte el valor de entero a cadena con terminador (para nuestro caso ‘U’ y ‘\n’), lista para ser enviada al  puerto serial, y envía el primer dato mediante la función AS1_SendChar().Una vez enviado el primer carácter, el evento de transmisión continúa elenvío carácter por carácter. El proceso se repite en forma indefinida mientras se estén recibiendo datos vía serial.

Ver Código

Resultados

No hay comentarios:

Publicar un comentario