SciELO - Scientific Electronic Library Online

 
vol.26 issue1Evaluating, selecting and relevance software tools in technology monitoringRapid casting and new technologies in investment casting author indexsubject indexarticles search
Home Pagealphabetic serial listing  

Services on Demand

Article

Indicators

Related links

  • On index processCited by Google
  • Have no similar articlesSimilars in SciELO
  • On index processSimilars in Google

Share


Ingeniería e Investigación

Print version ISSN 0120-5609

Ing. Investig. vol.26 no.1 Bogotá Jan./Apr. 2006

 

Control y adquisición serial de señales ultrasónicas con Matlab

Control and serial acquisition of ultrasonic signals with Matlab

Andrés D. Restrepo G.1, Humberto Loaiza C.2 y Eduardo F. Caicedo B.3


1 Ingeniero Electrónico y Magíster en Automática de la Universidad del Valle. Profesor del programa de Ingeniería Electrónica y vinculado al Grupo de Instrumentación Electrónica (GIE) de la Universidad Santiago de Cali. adareg@telesat.com.co; adareg378@yahoo.com
2 Ingeniero Electricista y Magíster en Automática de la Universidad del Valle. Ph.D. en Robótica y Visión Artificial de L'Université d'Evry, Francia. Profesor titular de la Escuela de Ingeniería Eléctrica y Electrónica de la Universidad del Valle. y vinculado al grupo de investigación en Percepción y Sistemas Inteligentes (PSI). Director del PPIEE de la misma Universidad. hloaiza@eiee.univalle.edu.co
3 Ingeniero Electricista de la Universidad del Valle, Magíster en Informática Industrial y Doctor Ingeniero en Informática Industrial de la Universidad Politécnica de Madrid. Profesor titular de la Escuela de Ingeniería Eléctrica y Electrónica de la Universidad del Valle y vinculado al grupo de investigación en Percepción y Sistemas Inteligentes (PSI). Director del Departamento de Educación Desescolarizada de la misma Universidad. ecaicedo@eiee.univalle.edu.co


RESUMEN

Este artículo pretende brindar una introducción a la característica del programa MATLAB, a partir de la versión 6.1, de permitir la transferencia de datos a través del puerto serial para leerlos o escribirlos directamente desde su entorno, ya sea con el fin de soportar varias interfaces comerciales de instrumentación, o para manejar los puertos COM del PC. El trabajo toma como referencia un sistema microcontrolado diseñado con el fin de lograr un reconocimiento de formas de obstáculo mediante ecos ultrasónicos.

Palabras clave: adquisición de datos, pseudovisión ultrasónica, señal ultrasónica, puerto serial, matlab, sistemas microcontrolados, familia HC11.


ABSTRACT

This article intends to introduce features of Matlab (version 6.1 onwards) which lets data be transferred through a serial port for reading it or writing it directly from Matlab. This can be done for supporting several commercial instrumentation interfaces or driving PC COM ports. This work is based on a micro-controlled system designed in such a way that the shape of an object can be recognised by ultrasonic echoes.

Keywords: data acquisition, sonar pseudo-vision, ultrasound, serial port, Matlab, microcontroller system, HC11 family


Recibido: mayo 10 de 2005
Aceptado: octubre 2 de 2005

Introducción

Las características de MATLAB se ven potenciadas cuando se cuenta con una tarjeta de adquisición de datos; sin embargo, existen aplicaciones que no requieren demasiada precisión y en las cuales una costosa tarjeta de adquisición puede ser reemplazada por un hardware menos complejo y más barato. Ejemplo de esto es el hardware que se describe en la sección de descripción del sistema de exploración ultrasónica, consistente en un circuito con microcontrolador (µC) y una interfaz a MATLAB, diseñados para implementar un sistema de pseudovisión ultrasónica cuyo objetivo es lograr un reconocimiento de la forma del objeto irradiado (Restrepo, 2005a y Restrepo, 2005b). Tomando esta aplicación como referencia se mostrará la forma de implementar una interfaz serial manejada directamente desde MATLAB, explicando en las secciones de control de la secuencia de exploraciones y adquisición de muestras respectivamente el control de la exploración ultrasónica y la adquisición de las señales de eco. Luego, en el apartado: apartes del código en matlab, se revelan detalles del código de los procedimientos para establecer la comunicación entre MATLAB y el hardware de adquisición, terminando entonces con las conclusiones de esta exposición.

Descripción del sistema de exploración ultrasónica

La Figura 1 muestra un diagrama general del circuito mencionado en el que pueden reconocerse las siguientes etapas básicas:

- Módulos de Emisión Ultrasónica.

- Módulos de Recepción Ultrasónica.

- Etapa Microcontrolada.

- Interfaz con MATLAB

Módulos de Emisión Ultrasónica.

El funcionamiento del módulo (Figura 2) se sintetiza de esta manera: una señal de disparo /TRIG manejada por el µC inicia la emisión de un tren de pulsos de igual frecuencia que la de resonancia del elemento piezoeléctrico del transductor (Restrepo, 1999 y Gwirs et al.).

Cuando le llega este pulso de disparo, el módulo se sincroniza con la onda cuadrada de entrada de tal forma que todos los pulsos de emisión resulten del mismo ancho. La cantidad de estos pulsos (2, 4 u 8 pulsos) puede ajustarse con jumpers que seleccionan las líneas adecuadas de un contador binario. De otra parte, se cuenta con una línea de salida que puede usarse como señal de desactivación de la recepción durante la zona muerta del sistema pulso – eco.

Módulos de recepción ultrasónica.

Este receptor (Figura 3) consiste en un recortador seguido por un primer amplificador de ganancia fija que además filtra las frecuencias superiores a 40KHz; a continuación, una red RC filtra cualquier posible componente inferior a 40KHz para que posteriormente una segunda etapa de amplificación, que puede configurarse como Amplificador de Ganancia Programable (PGA), lleve a la señal de eco a una amplitud de voltaje adecuado (salida eco). Después de un nuevo desacople de DC, aparece un rectificador activo de media onda (salida eco_rect ), para continuar con un filtro pasa – bajos de 2do orden con el fin de obtener a través de la salida envolv, la envolvente del eco.

Por último se tiene un detector ajustable de umbral que genera la señal de detección de eco (DETEC). En el desarrollo del estudio sobre el reconocimiento de formas con ultrasonido se deseaba tener toda la información del eco tal cual es captado, razón por la cual se eligió la salida eco para ser digitalizada.

Etapa microcontrolada.

Esta etapa (Figura 4), controla la emisión de cada transmisor ultrasónico, adquiere la señal captada durante el intervalo de recepción, almacena las muestras digitales, y se comunica con el PC a través del puerto serial.

El corazón de la misma lo constituye el µC de 8 bits 68HC11A8 de MOTOROLA (M86HC11Reference Manual., 1991 y Restrepo, 1999), del cual, se utilizan dos canales de conversión A/D con sus respectivas protecciones, uno por cada receptor; además, dos salidas digitales, una por cada emisor, para generar los pulsos de Disparo de Emisión con un ancho de 24 µs. Como memoria externa de programa se tiene una EEPROM 28C64, mientras que para el almacenamiento de las 2000 muestras digitales se emplea una RAM 6116. Así mismo, el sistema de Comunicación Serial Asíncrona (SCI) del µC es ideal para establecer una comunicación bidireccional con el PC a través del puerto serial con velocidades de hasta 250Kbaudios con un cristal de 16MHz. Todo el sistema está basado en una frecuencia de reloj de 16MHz, lo que a su vez genera un período de muestreo de 8µs.

Interfaz con MATLAB.

La comunicación serial RS-232 entre el microcontrolador y el PC se estableció a una velocidad de 9.6Kbaudios, con ayuda del integrado MAX232. El mando general del sistema y la lectura de datos corre por cuenta de una función en MATLAB desarrollada con las instrucciones del toolbox de Instrumentación (Instrument Control Toolbox, Version 1. MATHWORKS). Adicionalmente y para controlar la interacción entre el programa en MATLAB y el µC se creó un conjunto de 6 comandos, mostrados a continuación con sus nombres y valores decimales:

- REQUERIMIENTO DE RECONOCIMIENTO = 170

- RECONOCIMIENTO INICIAL = 85

- EMISIÓN =240

- SEÑAL DETECTADA = 15

- LECTURA DE MUESTRAS = 51

- NUEVA EXPLORACIÓN = 204

Control de la secuencia de exploraciones

Los transductores ultrasónicos están ubicados en las esquinas de un rectángulo imaginario, similar al implementado en Kleeman, 2001. A través de los dos receptores en la parte inferior del montaje se obtienen dos puntos de vista del eco producido por la reflexión de la onda generada en uno solo de los emisores en la parte superior; por consiguiente, teniendo dos emisores se recogerán en total cuatro perspectivas del objeto irradiado, o sea, cuatro señales de eco.

En la Figura 5 se presenta el esquema de exploración llevada a cabo en cuatro pasos claramente distinguibles. Fue necesario emitir dos veces con el mismo transductor debido a que muestrear dos canales a la vez haría incrementar al doble el período de muestreo del µC por efecto de la multiplexación de los canales análogos. El esquema de exploración se implementa tanto en la función desarrollada para MATLAB como en el Programa Principal del µC.

Durante la exploración y en cada emisión se toman y se almacenan en RAM 2000 muestras de la señal de eco captada por la línea de recepción activa, más una muestra del nivel de DC en dicha línea justo antes de iniciar una nueva emisión. Esta muestra será usada para compensar el offset introducido por los circuitos con el fin de trabajar con conversores unipolares. En conclusión, durante cada vaciado de RAM se transmiten serialmente 2001 bytes.

Adquisición de muestras

El diagrama de flujo de la Figura 6a corresponde al programa ejecutado en el PC para la exploración, en el cual cada bloque de Emisión Txi – Recepción Rxj comparte el diagrama de flujo de la Figura 6b.

El programa se implementó como una función de nombre explorus1.m, ejecutándose de esta forma:

La variable ultrason corresponde al objeto definido para manejar el puerto serial, y la variable margent es un valor real que representa el tiempo en milisegundos que debe esperar la rutina antes de iniciar una nueva emisión. Por su parte, la variable ecos contendrá las 8000 muestras provenientes de las cuatro emisiones que componen una exploración completa. Cada conjunto de 2000 muestras es almacenado en una variable de nombre eco_Tx#Rx# donde: Tx# y Rx# representan respectivamente el transmisor y el receptor activos en dicha exploración parcial. Al final, los cuatro vectores fila anteriores se reúnen formando las filas de una matriz de dimensión 4x2000 bautizada con el nombre de ecos.

Existen dos casos que conllevan a dar por terminada la ejecución de esta función: el primero consiste en un valor erróneo del comando recibido, mientras que el segundo se da cuando se ha alcanzado un tiempo determinado de espera sin que ningún dato llegue al PC, o sin que lleguen completas las 2001 muestras de eco.

Apartes del código en Matlab

A continuación se presentan algunas instrucciones importantes para establecer la comunicación a través de MATLAB. La primera instrucción que debe verse es:

La función serial permite crear el objeto (al cual se le ha dado el nombre ultrason) que contendrá todas las características del puerto físico que se usará y el tipo de interfaz. Al requerirse el manejo de uno de los puertos seriales del PC, se pasa como argumento de la función el nombre que identifica a dicho puerto (COM1) según las definiciones del toolbox. Si se va a usar cualquier otra interfaz de instrumentación reconocida por MATLAB, se pasa como argumento el nombre que le identifica. Como toda variable tipo objeto, ultrason va a tener una lista de propiedades configurables por el usuario. Para ver la lista de estas propiedades puede usarse la función set en esta forma:

La misma función permite ajustar el valor o cualidad para una propiedad específica. De esta manera, desde la aplicación que corra en MATLAB es posible alterar la configuración del puerto sin necesidad de hacerlo desde el sistema operativo. Por ejemplo, para ajustar la rata de baudios a 9600bps basta con hacer:

es válido también: ultrason.BaudRate=9600;

Adicionalmente, fue necesario ajustar el tamaño del buffer de entrada, ya que por defecto es de 512 bytes de capacidad, y el número total de bytes que se leerán de la RAM es de 2001. Por tanto, se ejecuta la siguiente instrucción, dejando una cierta holgura en la capacidad del buffer:

Una vez que se han ajustado las propiedades requeridas para el puerto, es necesario habilitarlo (conectarlo o abrirlo) para la lectura y escritura de datos mediante la orden:

Mientras tanto, la lectura y la escritura asíncronas se realizan empleando las funciones fread y fwrite, las cuales trabajan con datos binarios de distintos tipos; por defecto los datos son de tipo caracter o enteros de 8 bits.

Antes de entablar con el hardware el enlace de comunicación con el comando REQUERIMIENTO_ RECONOCIMIENTO, es aconsejable detectar al inicio de cada exploración completa, si en el puerto existen bytes no leídos con el fin de asegurar que el primer caracter que llegue después del envío de dicho comando sea la respuesta de reconocimiento del µC. Para ello, se necesita ahora obtener el valor actual de la propiedad de bytes disponibles del puerto:

El comando get también puede utilizarse para el propósito de indagar por el valor de una propiedad del puerto:

Mientras tanto, la función fread necesita como argumentos, el nombre del objeto que representa al puerto, el número de bytes que se leerán y el tipo de dato que se recuperará.

En este momento, ya es seguro enviar el comando de petición de reconocimiento:

Como se observa, la función fwrite necesita como argumentos: el nombre del objeto, el dato a enviar y el tipo de dato.

De otra parte, puesto que el µC está programado para responder siempre a cualquiera de los comandos que le envíe el PC, como una medida de seguridad se implementa una rutina de espera que aborta toda la operación si se excede un tiempo máximo determinado.

La función clock entrega el tiempo actual basado en el reloj del PC, mientras que etime compara el tiempo actual (mediante clock) con otro instante previo y entrega la diferencia en segundos. En este caso, si después de 5 segundos no ha llegado nada al buffer de entrada al puerto (ultrason.bytesavailable==0) se cancela todo el procedimiento de exploración. Al mismo tiempo es vital que se realicen las operaciones contrarias a las que se hicieron para la activación del puerto serial, detalle que se retoma más adelante. Si se recibe un dato en el puerto dentro del tiempo permitido, se ejecuta entonces la lectura correspondiente:

Ahora, se compara el dato leído con el comando que debería haber llegado (rutina de comprobación), que en este punto corresponde al de RECONOCIMIENTO_INICIAL:

En general, después de cada envío de un comando hacia el µC se ejecuta una rutina de espera y después de una lectura de un comando enviado por el µC se corre una pequeña rutina de comprobación, ambas similares a las anteriores. Enseguida se continúa con el proceso de exploración enviando el comando de EMISION:

Ante el comando anterior el µC, en este prototipo inicial del sistema ultrasónico, sabe qué transductor debe excitar para armar la secuencia correcta de emisiones y recepciones, de acuerdo al esquema de exploración explicado en el punto 3. Luego se lee el comando de respuesta (SENAL_DETECTADA):

Después de la comprobación, se ordena el vaciado de la memoria RAM donde se almacenaron las muestras obtenidas de la señal de eco correspondiente:

Puesto que son 2001 muestras en total, la rutina de espera cambia con respecto a las anteriores en la siguiente línea:

Si no existe ninguna contingencia, se procede con la lectura de las muestras:

Se finaliza el proceso de emisión – recepción con la organización de las muestras de eco en un vector y la compensación del offset, y antes de iniciar una nueva emisión se espera el tiempo que se pasó como argumento en la variable margent. Todo el procedimiento se repite hasta completar las cuatro emisiones y se envía el comando de NUEVA_EXPLORACION para dejar listo al µC ante una nueva exploración. Una vez que esto sucede, debe hacerse lo pertinente para inhabilitar las operaciones de lectura y escritura sobre el puerto, liberar el mismo o borrarlo definitivamente. De hecho, para culminar la función explorus se inhabilita (se desconecta o se cierra) el puerto serial, se quita de la memoria el espacio reservado para el objeto creado, y finalmente se quita el mismo del WORKSPACE, mediante las órdenes respectivas:

En realidad, la función explorus es invocada por un programa principal, por lo que la creación de la variable objeto para manejar el puerto, la liberación de memoria y la eliminación del mismo objeto, pueden ejecutarse en el programa principal; mientras tanto, la conexión y desconexión del puerto corre por cuenta de la función explorus. Esta estrategia permite mantener el puerto serial disponible mientras el programa principal se ejecute para que en cualquier momento se pueda hacer una exploración, evitando siempre la situación en la que se intente abrir el puerto cuando no ha sido previamente cerrado, ya que se producirá un error. En la Figura 7 aparece un ejemplo de visualización de las señales de eco captadas.

Conclusiones

En el presente artículo se ha presentado un sistema barato de adquisición de señales ultrasónicas desarrollado alrededor de un µC de 8 bits de la familia HC11 de MOTOROLA, y controlado directamente desde MATLAB a través del puerto serial. La ventaja principal de aprovechar esta cualidad de transferencia serial de datos, consiste en que se puede tener una interfaz completa que interactúe con un hardware específico usando únicamente los comandos y funciones de MATLAB, y desapareciendo la necesidad de desarrollar programas en otros lenguajes para que sean invocados por la herramienta al realizar las tareas de comunicación con el exterior del PC. Si bien esta característica es aprovechable en la medida en que la velocidad de ejecución de las rutinas de adquisición en MATLAB no constituya un elemento crítico para el buen funcionamiento de la aplicación que haga uso de ella, cabe la posibilidad como trabajo futuro de experimentar con la interfaz USB, más veloz, a través de los llamados puertos COM virtuales. Específicamente, el Sistema Ultrasónico de Reconocimiento de Formas presentado en el artículo tuvo un desempeño exitoso haciendo uso de esta utilidad, permitiendo que con un solo click en una interfaz gráfica de MATLAB se hiciera todo el proceso, desde explorar el obstáculo hasta obtener un resultado de su ubicación y su forma.

Bibliografía

Kleeman, L., Advanced Sonar Sensing, Proceedings 10th International Symposium Robotics Research, Lorne Victoria Australia, Noviembre 2001, pp. 286-295.        [ Links ]

Gwirc, S.; Ferdeghini, F; Comastri, A y Lupi, D., Sensores Ultrasónicos: Respuesta a Distintas Formas de Onda, Centro de Investigación y Desarrollo en Electrónica e Informática (CITEI), Instituto Nacional de Tecnología Industrial, Argentina., [on line] http://sumar.utic.com.ar/ondas.pdf        [ Links ]

Instrument Control Toolbox, Version 1., MATHWORKS.        [ Links ]

M86HC11Reference Manual., Rev.3, MOTOROLA INC, 1991.        [ Links ]

Restrepo, A. y Millán, J., Medición de Nivel en Líquidos Inmiscibles con un Sensor Ultrasónico Inteligente, Tesis de Ingeniería Electrónica, Escuela de Ingeniería Eléctrica y Electrónica, Universidad del Valle, 1999.        [ Links ]

Restrepo, A. D., Concepción de un Sistema de Pseudovisión Ultrasónica Aplicando Técnicas Frecuenciales y de Inteligencia Computacional, Tesis de Maestría, PPIEE, Universidad del Valle. Cali, Colombia, 2005a.        [ Links ]

Restrepo, A., Loaiza, H. y Caicedo, E., Sistema Ultrasónico de Reconocimiento de Formas basado en Técnicas Frecuenciales e Inteligencia Computacional, Memorias del X Simposio de Señales, Imágenes y Visión Artificial, Universidad del Valle, octubre de 2005b.        [ Links ]

Creative Commons License All the contents of this journal, except where otherwise noted, is licensed under a Creative Commons Attribution License