10
FASE DE DESARROLLO II ADQUISICIÓN DE SEÑALES EMG (Detección de movimientos de Extensión y Flexión) ADQUISICIÓN DE SEÑAL – DESPLIEGUE Y ALMACENAMIENTO EN SOFTWARE JENNIFER NATHALY MUÑOZ RENGIFO FERNANDO ARIAS LEANDRO ORDÓÑEZ ANTE Ing. JUAN SEBASTIAN CABRERA UNIVERSIDAD DEL CAUCA FACULTAD DE INGENIERIA ELECTRONICA Y TELECOMUNICACIONES POPAYÁN 2008.

Data_adq

Embed Size (px)

Citation preview

Page 1: Data_adq

FASE DE DESARROLLO II ADQUISICIÓN DE SEÑALES EMG

(Detección de movimientos de Extensión y Flexión) ADQUISICIÓN DE SEÑAL – DESPLIEGUE Y ALMACENAMIENTO EN SOFTWARE

JENNIFER NATHALY MUÑOZ RENGIFO FERNANDO ARIAS

LEANDRO ORDÓÑEZ ANTE

Ing. JUAN SEBASTIAN CABRERA

UNIVERSIDAD DEL CAUCA FACULTAD DE INGENIERIA ELECTRONICA Y TELECOMUNICACIONES

POPAYÁN 2008.

Page 2: Data_adq

SEGUNDA FASE DE DESARROLLO

1. DESCRIPCIÓN DE PROCEDIMIENTOS REALIZADOS. La segunda fase de desarrollo tiene como objetivo digitalizar la señal adquirida de la salida del

amplificador EMG para posteriormente enviar esta señal digitalizada a un computador, donde será

desplegada en una gráfica de voltaje EMG contra tiempo.

Para esto se abordaron dos posibles soluciones:

1.1 Digitalización de señal EMG usando un PIC (18F452), envío de datos al computador a

través del puerto paralelo y adquisición de los mismos mediante una rutina de Matlab.

1.2 Adquisición de la Señal a través de la tarjeta de sonido de un computador usando el

toolbox de Matlab para adquisición de datos: Data Acquisition Toolbox.

Para la primera solución se implementó sobre el PIC una rutina programada en lenguaje C que

permitía digitalizar la señal con una frecuencia de muestreo de 2 kHz con una resolución de 10

bits, además de un bit de sincronización que cambiaba de estado cada vez que el Conversor A/D

procesaba una muestra. Cada muestra obtenida era enviada a dos de los puertos del

microcontrolador para, posteriormente enviarlos a un PC a través del puerto paralelo.

El puerto paralelo debe recibir las señales digitales provenientes del PIC para que tengan el

respectivo procesamiento en el PC, MATLAB se encarga de hacer la lectura de estos valores por

este puerto, el cual permite obtener la información a la tasa de baudios requerida.

Control del Puerto Paralelo desde Matlab

La adquisición de datos en MATLAB se maneja por medio de los subsistemas DIO (Entradas-Salidas

Digitales) los cuales están diseñados para transferir valores digitales desde y hacia el hardware,

estos valores pueden ser en forma de bits (o líneas) o como puertos (típicamente formados por 8

líneas), un objeto DIO puede asociarse al puerto paralelo o a otra tarjeta de adquisición.

El puerto paralelo esta conformado por 3 registros o puertos

– Puerto de Datos: 8 bits bidireccionales

– Puerto de Estado: 5 bits de solo lectura (entrada de datos)

– Puerto de Control: 4 bits bidireccionales

Page 3: Data_adq

Figura 1. Puerto paralelo

Los cuales están identificados de la siguiente manera:

Si ID = 0 Puerto de Datos

Si ID = 1 Puerto de Estado

Si ID = 2 Puerto de Control

Para el puerto paralelo, el dispositivo puede ser LPT1, LPT2 o LPT3 y las direcciones base de estos

puertos generalmente son: 378, 278 y 3BC respectivamente.

Para obtener información de los adaptadores y de los Ids soportados se ejecuta la función

‘daqhwinfo’ en la ventana de comandos así:

>> out = daqhwinfo;

>> out.InstalledAdaptors

Lo que da como resultado en este caso:

ans =

'parallel'

'winsound'

Una vez que Matlab ha reconocido el PP, ejecutamos:

>> daqhwinfo('parallel')

Page 4: Data_adq

ans =

AdaptorDllName: [1x50 char]

AdaptorDllVersion: '2.7 (R14SP3)'

AdaptorName: 'parallel'

BoardNames: {'PC Parallel Port Hardware'}

InstalledBoardIds: {'LPT1'}

ObjectConstructorName: {'' '' 'digitalio('parallel','LPT1')'}

Lo que nos permite ver información detallada del puerto paralelo para su programación.

Después de haber verificado toda la información del puerto en el sistema se procede a

implementar el código que nos permita recibir los datos, para esto se empieza por crear un objeto

de tipo DIO por medio de la función ‘digitalio’ de la siguiente manera:

>> parport = digitalio('parallel','LPT1');

Una vez creada la entrada digital del PP, lo que sigue es asignar que pines serán para entrada y

cuales para salida. Para lo que utilizamos la función ‘addline’, en este caso solo se necesita

configurar los pines del puerto de datos y los pines 1, 14, 16 del puerto de control como entradas,

así:

>> addline(parport,0:7,0,'in')% los 8 pines de datos

>> addline(parport,0:2,2,'in')% 3 de los pines de control

Se debe tener en cuenta que NO se permite tener pines combinados (entrada/salida) en un

puerto.

A cada línea se le asocia un índice (Index), que es el que usa MATLAB para acceder a los pines y

con la propiedad ‘Line’ tenemos acceso a estos índices

>> parport.Line(1:11)

Se usa la función ‘putvalue’ para escribir datos en el puerto:

>>putvalue(parport.Line(1:8),data)%data es un valor decimal de 8 bits

Se usa la función ‘getvalue’ para leer datos del puerto:

>> lineval = getvalue(parport.Line(1:11))% leer 11 bits del puerto

Page 5: Data_adq

En la implementación de la comunicación con el computador para transferir los datos de las

señales electromiográficas digitalizadas provenientes del PIC, el cual envía 10 bits de datos y un bit

de control que permite saber en que momento debe recibirse el dato de la señal para ser

almacenado.

El siguiente es el archivo en Matlab para la recepción de datos recibir.m:

clear all

clc

A=[];

parport = digitalio('parallel','LPT1');

addline(parport,0:7,0,'in');

addline(parport,0:2,2,'in');

bandera=getvalue(parport.Line(11));

if (bandera==0)

datos = getvalue(parport.Line(1:8));

datos1 = getvalue(parport.Line(9));

datos2 = getvalue(parport.Line(10));

datos3 = [datos,datos1,datos2]

A=[A;datos3]

end

Bandera es el bit de control para recibir cada dato de la señal digital.

Además de implementar el código para el control del puerto paralelo que permita la adquisición

de datos, se deben realizar las configuraciones correspondientes en la BIOS del PC (accesible en

unos PCs con la tecla F2) para que el puerto LPT1 pueda actuar como un dispositivo de entrada y

salida, lo que va a permitir usar los pines del 2 al 9 como de entrada.

La segunda alternativa que se consideró como solución consistió en la adquisición de la señal EMG

proveniente del amplificador a través de la tarjeta de sonido de un computador. Para esto, al igual

que en el caso anterior se usó la toolbox de adquisición de datos de Matlab:

Page 6: Data_adq

Control de la tarjeta de sonido desde Matlab

De la misma manera que con el puerto paralelo, el control de la tarjeta de sonido se realiza

mediante el toolbox de adquisición de datos de MATLAB el cual se divide en tres componentes

principales:

• Las funciones M establecidas

• El motor de adquisición de datos

• Los manejadores (drivers) de la tarjeta de adquisición de datos (en este caso, la de sonido)

Como se muestra en la figura 2, estos componentes permiten intercambiar información entre

Matlab y el hardware de adquisición de datos.

Figura 2. Componentes del toolbox de adquisición de datos.

Propiedades

Con el manejo de las propiedades es posible controlar el comportamiento de la aplicación. Las

propiedades contienen información sobre la configuración del hardware.

Page 7: Data_adq

Datos

Pueden ser datos provenientes de un sensor conectado a un subsistema de entrada analógica para

ser almacenados en Matlab o también pueden ser datos de salida de Matlab a un actuador

conectado a un subsistema de salida analógica.

Eventos

Un evento ocurre en un tiempo particular una vez que ciertas condiciones se hayan cumplido y se

produzcan una o más acciones predeterminadas. Los eventos solo pueden generarse después de

haber configurado las propiedades correspondientes. Una forma de utilizar los eventos puede ser

el analizar o graficar datos una vez que se adquiere un número predeterminado de ellos.

Funciones M

Para ejecutar cualquier tarea con la aplicación de adquisición de datos, debe llamarse algunas

funciones M. Entre otras cosas, estas funciones permiten:

• Crear dispositivos de objetos que proporcionan un camino de Matlab al hardware y permite

controlar el comportamiento de la aplicación

• Capturar datos o sacar datos

• Configurar las propiedades

• Evaluar el estado y los recursos del hardware de adquisición

El motor de adquisición de datos

Es una librería de enlace dinámico (.dll) en forma de archivo MEX que:

• Guarda los dispositivos de objetos y sus valores asociados de configuración que controlan la

aplicación de adquisición de datos

• Controla la sincronización de eventos

• Controla el almacenaje de datos capturados o en espera de ser sacados

Mientras el motor ejecuta estas tareas, puede usarse Matlab para ejecutar otras tareas como el

análisis de los datos adquiridos. En otras palabras, el motor y Matlab son asíncronos.

El adaptador del manejador del hardware

El adaptador del manejador del hardware, o simplemente el manejador, es una interfaz entre el

motor de adquisición de datos y el manejador de la tarjeta. El propósito principal del adaptador es

pasar información entre Matlab y la tarjeta adquisitora a través del manejador (driver)

generalmente proporcionado por el fabricante. En la siguiente tabla se muestran las tarjetas

soportadas por el toolbox de adquisición de datos.

Page 8: Data_adq

Adquisición de Datos

Para realizar la sesión de un sistema de adquisición de datos se realizan los siguientes pasos:

1. Creación del objeto de tipo dispositivo. Crear el objeto del canal analógico de entrada ‘ai’ para

la tarjeta de sonido.

ai=analoginput(‘winsound’)

2. Agregar canales. Agregar un canal de hardware (E/S analógicas).

addchannel(ai,1);

3. Configurar propiedades. Configurar la tasa de muestreo deseada y tiempo de captura de

muestras

set(ai,'SampleRate',8000)% minima frecuencia de mue streo 8000HZ

set(ai,'SamplesPerTrigger',160000)% 20 segundos de muestreo

4. Adquirir datos e Iniciar la adquisición. Cuando terminen de adquirir todos los datos, ‘ai’

automáticamente detiene la ejecución.

start(ai)

data = getdata(ai);

plot(data)

Page 9: Data_adq

5. Limpiar el espacio de trabajo. Una vez que ya no se requiera utilizar ‘ai’, debe eliminarse de la

memoria y del espacio de trabajo de Matlab.

delete(ai)

clear ai

Para las pruebas realizadas sobre el circuito amplificador EMG, se utilizaron algunas de las

herramientas que dispone Matlab en la toolbox de adquisición de datos:

Softscope: El softscope es una interfaz gráfica interactiva para mostrar en pantalla datos en

tiempo de ejecución y almacenarlos en arreglos de Matlab o archivos *.mat.

Figura 3. Softscope de Matlab.

demoai_fft: crea un objeto de tipo entrada analógica asociado con el adaptador de la tarjeta de

sonido. La señal de entrada y su espectro son desplegados en tiempo de ejecución.

Page 10: Data_adq

Figura 4. demoai_fft.

2. PRUEBAS Y RESULTADOS.

Después de realizar todas las pruebas necesarias para adquirir los datos por el puerto paralelo y a

pesar de realizar las configuraciones pertinentes para habilitar la lectura de datos por este medio y

de utilizar diferentes drivers, no fue posible obtener los datos provenientes del PIC, sin embargo,

las consultas posteriores referentes al tema permitieron establecer que la configuración de este

puerto en el sistema operativo Windows XP no admite su lectura ya que tiene demasiadas

restricciones de seguridad.

Por lo tanto se opto trabajar en la adquisición de datos a través de la tarjeta de sonido, de tal

manera que después de seguir el procedimiento descrito anteriormente, se realizaron pruebas de

las cuales se obtuvo resultados satisfactorios, logrando desplegar y almacenar 10 muestras de

señales corresponedientes a los movimientos de extensión y flexión. Estas muestras serán

utilizadas en la siguiente fase de desarrollo sometiéndolas a un proceso de extracción de

características que permitan identificar que tipo de movimiento se desea realizar.