DISEÑO DE PROTOTIPO ELECTRÓNICO PARA LA ADQUISICIÓN ...
Transcript of DISEÑO DE PROTOTIPO ELECTRÓNICO PARA LA ADQUISICIÓN ...
DISEÑO DE PROTOTIPO ELECTRÓNICO PARA LA ADQUISICIÓN
MULTICANAL DE SEÑALES DE ELECTROENCEFALOGRAMA
CRISTIAN DAVID PEÑA CARRERA
RICARDO MORENO CAMACHO
UNIVERSIDAD DE SAN BUENAVENTURA CALI
FACULTAD DE INGENIERÍA
PROGRAMA DE INGENIERÍA ELECTRÓNICA
CALI, 2016
DISEÑO DE PROTOTIPO ELECTRÓNICO PARA LA ADQUISICIÓN
MULTICANAL DE SEÑALES DE ELECTROENCEFALOGRAMA
CRISTIAN DAVID PEÑA CARRERA
RICARDO MORENO CAMACHO
Trabajo de investigación como opción de grado para optar al título de
INGENIERO ELETRÓNICO
DIRECTOR
ING. JOSE FERNANDO VALENCIA MURILLO, PhD
UNIVERSIDAD DE SAN BUENAVENTURA CALI
FACULTAD DE INGENIERÍA
PROGRAMA DE INGENIERÍA ELECTRÓNICA
CALI, 2016
3
Este trabajo de grado, en la modalidad de
proyecto de investigación, es aceptado como uno
de los requisitos para obtener el título de
Ingeniero Electrónico en la Universidad de San
Buenaventura Cali.
ING. JOSE FERNANDO VALENCIA MURILLO, PhD
ING. GUILLERMO ADOLFO DAVID
ING. JOSE DANIEL BOLAÑOS JOJOA
Santiago de Cali, 23 de Noviembre del 2016
4
CONTENIDO
CAPÍTULO I .......................................................................................................... 12
1.1. RESUMEN ............................................................................................... 12
1.2. DEFINICIÓN DEL PROBLEMA ................................................................ 12
1.3. JUSTIFICACIÓN ...................................................................................... 13
1.4. OBJETIVOS ............................................................................................. 14
1.4.1. Objetivo General ................................................................................ 14
1.4.2. Objetivos Específicos ........................................................................ 14
1.5. METODOLOGÍA ...................................................................................... 15
1.5.1. Etapa de fundamentación .................................................................. 15
1.5.2. Etapa de diseño ................................................................................. 15
1.5.3. Etapa de implementación .................................................................. 16
1.5.4. Etapa de validación ........................................................................... 16
1.5.5. Etapa de documentación ................................................................... 17
CAPÍTULO II ......................................................................................................... 18
2.1. MARCO REFERENCIAL .......................................................................... 18
2.1.1. Señal biomédica ................................................................................ 18
2.1.2. Señales bioeléctricas ......................................................................... 18
2.1.3. Electroencefalograma ........................................................................ 21
2.1.4. Electrodos de biopotenciales ............................................................. 22
2.1.5. Amplificadores de biopotenciales ...................................................... 24
2.1.6. Adquisición y análisis de las señales ................................................. 24
2.2. ESTADO ACTUAL ................................................................................... 26
2.3. NORMA INTERNACIONAL PARA EQUIPOS ELECTROMÉDICOS ....... 30
CAPÍTULO III ........................................................................................................ 31
3.1. CONSIDERACIONES DE DISEÑO.......................................................... 31
3.2. IDENTIFICACIÓN DEL SISTEMA ............................................................ 32
5
3.2.1. Circuitos integrados de aplicación específica para la captura de
biopotenciales ................................................................................................. 32
3.2.2. Plataformas de desarrollo .................................................................. 35
CAPÍTULO IV ........................................................................................................ 40
4.1. IMPLEMENTACIÓN ................................................................................. 40
4.2. HARDWARE ............................................................................................ 40
4.2.1. Circuito principal ADS1299 ................................................................ 42
4.2.2. Fuentes de Alimentación ................................................................... 42
4.2.3. Conexión de electrodos ..................................................................... 44
4.2.4. Aislamiento ........................................................................................ 46
4.2.5. PC BOARD ........................................................................................ 48
4.3. SOFTWARE ............................................................................................. 50
4.3.1. Programación en Lenguaje SPIN ...................................................... 50
4.3.2. Programación en lenguaje C Propeller: ............................................. 58
4.3.3. Problema del Propeller y cambio de procesador ............................... 60
4.3.4. Raspberry Pi: ..................................................................................... 61
4.3.5. Programación en lenguaje Python 2.7 ............................................... 68
4.3.6. Señal de prueba interna .................................................................... 69
4.3.7. Señal de prueba externa ................................................................... 71
4.3.8. Generador Quantium Medical (QM) ................................................... 76
4.3.9. Detección de LEAD-OFF ................................................................... 80
4.3.10. Medición de impedancias .................................................................. 83
4.3.11. Almacenamiento de datos ................................................................. 88
4.3.12. Visualización de datos almacenados ................................................. 88
4.3.13. Interfaz gráfica de usuario en rapsberry pi ........................................ 90
4.3.14. PROTOCOLO DE COMUNICACIÓN ................................................ 91
CAPÍTULO V ......................................................................................................... 92
5.1. RESULTADOS ......................................................................................... 92
5.1.1. Resultados de la detección de LEAD-OFF y medición de impedancias
92
6
5.1.2. Resultados de adquisición de señal con generador QM .................... 95
5.1.3. Resultados de adquisición de señal en paciente ............................. 104
CAPÍTULO VI ...................................................................................................... 110
6.1. CONCLUSIONES................................................................................... 110
6.2. RECOMENDACIONES Y OBSERVACIONES ....................................... 111
REFERENCIAS ................................................................................................... 112
ANEXOS ............................................................................................................. 115
7
LISTA DE TABLAS
Tabla 1: Equipos médicos comerciales para captura de EEG. (Los Autores) ....... 28
Tabla 2: Tarjetas electrónicas para entornos educativos. (Los Autores) ............... 29
Tabla 3: ASIC para la captura de biopotenciales. (Los Autores) ........................... 34
Tabla 4: Plataformas de desarrollo. (Los Autores) ................................................ 36
Tabla 5: Características de las fuentes de alimentación. (Los Autores) ................ 43
Tabla 6: Configuración de registros para la captura a 250 SPS ............................ 52
Tabla 7: Frecuencias de muestreo ADS1299. (Texas Instruments®, 2012) ......... 55
Tabla 8: Configuración de registros para captura de señal de prueba interna. (Los
Autores, 2016) ....................................................................................................... 70
Tabla 9: Proporción de aumento en voltaje de salida con ganancia unitaria. ........ 75
Tabla 10: Valor de voltaje pico medido a la entrada del canal 1 positivo .............. 84
Tabla 11 ................................................................................................................ 87
Tabla 12: Protocolo de comunicación implementado. ........................................... 91
8
LISTA DE FIGURAS
Figura 1: Ejemplos de las tres señales bioeléctricas más importantes registradas
sobre la superficie del cuerpo: (a) un electroencefalograma el cual contiene
actividad alfa, (b) un electrocardiograma durante ritmo sinusal, y (c) un
electromiograma obtenido del mentón en estado despierto. Todas estas señales
se obtuvieron de distintos sujetos normales. (Carrión Pérez, Ródenas García, &
Rieta Ibáñez, 2007) ............................................................................................... 20
Figura 2: Ejemplos de señales bioeléctricas como respuesta a una estimulación.
(a) un potencial evocado resultado de una estimulación audible. La señal mostrada
es de hecho el resultado de promediar varias respuestas con el objetivo de reducir
el alto nivel de ruido de la señal original. (b) un electroneurograma registrado en
dos posiciones de electrodos, donde el retardo entre las dos señales se usa para
estimar la velocidad de conducción nerviosa. (c) un electroretinograma obtenido
durante estimulación con un flash de luz. (Carrión Pérez, Ródenas García, & Rieta
Ibáñez, 2007) ........................................................................................................ 21
Figura 3: Ejemplo de la distribución 10-20 en la ubicación de electrodos para la
captura de un electroencefalograma típico. (García & Soria, 2012). ..................... 23
Figura 4: Diagrama de bloques generalizado que describe los principales pasos en
el análisis de las señales biomédicas. (Texas Instruments®, 2012) ..................... 26
Figura 5: Etapas de monitor EEG .......................................................................... 32
Figura 6: Hardware “Propeller Quickstart”. (Parallax INC, 2012) ........................... 37
Figura 7: Casco para electroencefalografía. (Open BCI, 2016) ............................. 41
Figura 8: Circuito principal ADS1299. (Los Autores, 2016) ................................... 42
Figura 9: Fuentes de alimentación. (Los Autores, 2016) ....................................... 43
Figura 10: Símbolo del integrado PESD5V0S2BT. (NXP Semiconductors, 2009) 44
Figura 11: Conexión de electrodos. (Los Autores, 2016) ...................................... 45
Figura 12: Diagrama del integrado ADuM6401. .................................................... 47
Figura 13: Aislamiento de alimentación externa y bus SPI. (Los Autores, 2016) .. 47
Figura 14: Capa de dimensión. (Los Autores, 2016) ............................................. 48
Figura 15: Capa “TOP”. (Los Autores, 2016)......................................................... 49
Figura 16: Capa “BOTTOM”. (Los Autores, 2016) ................................................. 49
Figura 17: Esquema de conexión Propeller QuickStart – ADS1299. (Los Autores,
2016) ..................................................................................................................... 50
Figura 18: Lectura del registro ID en lenguaje SPIN. (Los Autores, 2016) ........... 51
Figura 19: Diagrama de tiempos captura de datos en modo RDATAC. (Texas
Instruments®, 2012) .............................................................................................. 52
Figura 20: Programa “señal de prueba” en lenguaje SPIN. (Los autores) ............. 53
9
Figura 21: Configuración Estándar ADS1299 – Procesador. (Texas Instruments®,
2012) ..................................................................................................................... 54
Figura 22: Detector de flanco implementado en lenguaje SPIN. (Los Autores,
2016) ..................................................................................................................... 54
Figura 23: Esquema de datos bus SPI. (Texas Instruments®, 2012) .................... 56
Figura 24: Señal de prueba obtenida con lenguaje SPIN. (Los Autores, 2016) .... 56
Figura 25: Programa ID_EPROM en lenguaje C. (Los Autores, 2016) ................. 59
Figura 26: Detector de flanco implementado en lenguaje C. (Los Autores, 2016) 59
Figura 27: Tarjeta de desarrollo Raspberry PI. (Raspberry PI Foundation) .......... 61
Figura 28: Descripción de Hardware Raspberry PI. (Raspberry PI Foundation) ... 62
Figura 29: Descripción del Bus de comunicación de Raspberry PI. (Raspberry PI
Foundation) ........................................................................................................... 63
Figura 30: Instalación software Raspbian Jessie. (Los Autores, 2016) ................. 65
Figura 31: Rasberry Pi Configuración. (Los Autores, 2016) .................................. 67
Figura 32: Esquema de conexión Raspberry Pi – ADS1299. (Los Autores, 2016) 68
Figura 33: Board ADS1299 con cuatro canales habilitados. (Los Autores, 2016) . 69
Figura 34: Prueba de señal interna para cuatro canales. (Los Autores, 2016) ..... 71
Figura 35: Circuito esquemático para conexión de señal de prueba externa. (Los
Autores, 2016) ....................................................................................................... 72
Figura 36: Señal de prueba externa. (Los Autores, 2016) ..................................... 72
Figura 37: Diagrama de tiempos captura de datos en modo RDATA. (Texas
Instruments®, 2012) .............................................................................................. 73
Figura 38: Señal de prueba externa a 2Hz, 200mVp, ganancia 2. (Los Autores,
2016) ..................................................................................................................... 74
Figura 39: Señal de prueba externa a 5Hz, 140mVp, ganancia 1. (Los Autores,
2016) ..................................................................................................................... 75
Figura 40: Señal de prueba externa a 5Hz, 70mVp, ganancia 4. (Los Autores,
2016) ..................................................................................................................... 76
Figura 41: Generador Quantium Medical. (Los Autores, 2016) ............................. 77
Figura 42: Fuente de alimentación del Generador Quantium Medical. (Los Autores,
2016) ..................................................................................................................... 77
Figura 43: Captura de Señal generador QM con nivel de DC. (Los Autores, 2016)
.............................................................................................................................. 78
Figura 44: Captura de Señal generador QM con nivel de DC pasando de un tipo de
señal a otro. (Los Autores, 2016) .......................................................................... 79
Figura 45: Captura de Señal generador QM sin nivel de DC. (Los Autores, 2016) 79
Figura 46: Diagrama de Bloques para detección de LEAD-OFF. (Texas
Instruments®, 2012) .............................................................................................. 80
10
Figura 47: Modelo circuital de electrodo conectado a la piel del paciente. (Los
Autores, 2016) ....................................................................................................... 82
Figura 48: Detección de LEAD-OFF para canales habilitados .............................. 82
Figura 49: Grafica del Voltaje pico de acuerdo a resistencia de prueba. (Los
Autores, 2016) ....................................................................................................... 85
Figura 50: Medición de impedancias para canales habilitados (Los Autores, 2016)
.............................................................................................................................. 87
Figura 51: Comando “fopen” y “fread” implementados en MatLab. (Los Autores,
2016) ..................................................................................................................... 89
Figura 52: Grafica desde Matlab para señal de prueba almacenada en archivo
binario. (Los Autores, 2016) .................................................................................. 89
Figura 53: Interfaz de usuario implementada en Raspberry Pi. (Los Autores, 2016)
.............................................................................................................................. 90
Figura 54: Detección de LEAD-OFF con canales habilitados en OFF. (Los Autores,
2016) ..................................................................................................................... 93
Figura 55: Medición de impedancia en canal conectado. (Los Autores, 2016) ..... 94
Figura 56: Medición de impedancia en canales 1 y 3. (Los Autores, 2016) .......... 95
Figura 57: Generador QM en conexión paralela. (Los Autores, 2016) .................. 96
Figura 58: Montaje realizado para captura de señal con generador QM en paralelo.
(Los Autores, 2016) ............................................................................................... 96
Figura 59: Señal 1 capturada con prototipo Quantium Medical. (Los Autores, 2016)
.............................................................................................................................. 98
Figura 60: Señal 1 capturada con Raspberry Pi. (Los Autores, 2016) .................. 98
Figura 61: Señal 2 capturada con prototipo Quantium Medical. (Los Autores, 2016)
.............................................................................................................................. 99
Figura 62: Señal 2 capturada con Raspberry Pi. (Los Autores, 2016) .................. 99
Figura 63: Señal 3 capturada con prototipo Quantium Medical. (Los Autores, 2016)
............................................................................................................................ 100
Figura 64: Señal 3 capturada con Raspberry Pi. (Los Autores, 2016) ................ 100
Figura 65: Señal 4 capturada con prototipo Quantium Medical. (Los Autores, 2016)
............................................................................................................................ 101
Figura 66: Señal 4 capturada con Raspberry Pi. (Los Autores, 2016) ................ 101
Figura 67: Análisis de componentes frecuenciales de señal capturada con
prototipo Quantium Medical. (Los Autores, 2016) ............................................... 102
Figura 68: Análisis de componentes frecuenciales de señal capturada con
Raspberry Pi. (Los Autores, 2016) ...................................................................... 102
Figura 69: Análisis de componentes frecuenciales de señal capturada con
Raspberry Pi a 250 SPS. (Los Autores, 2016) .................................................... 104
11
Figura 70: Posicionamiento de electrodos para captura de EEG (Los Autores,
2016) ................................................................................................................... 104
Figura 71: Registro EEG capturado en paciente (Los Autores, 2016) ................. 106
Figura 72: Registro EEG Con artefactos oculares y paciente en reposo. (Los
Autores, 2016). .................................................................................................... 107
Figura 73: Registro EEG Con artefactos oculares y paciente en reposo con filtro de
60Hz. (Los Autores, 2016)................................................................................... 108
Figura 74: Registro EEG de artefactos oculares con filtro de 60Hz. (Los Autores,
2016). .................................................................................................................. 108
12
CAPÍTULO I
1.1. RESUMEN
En el presente documento se presenta la implementación, resultados y
conclusiones del proyecto de grado denominado “Diseño de prototipo electrónico
para la adquisición multicanal de señales de electroencefalograma”.
Se utiliza el circuito integrado de aplicación específica ADS1299 que permite
realizar la captura de ocho canales diferenciales y la tarjeta de desarrollo
Rapsberry Pi como procesador del sistema implementado. Se utiliza el protocolo
de comunicación SPI para realizar la transferencia de datos bidireccional entre el
ADS1299 y la Raspberry Pi, así mismo se implementan los aislamientos
necesarios de acuerdo con la norma IEC 60101-1 en la cual se describen los
requisitos generales que deben cumplir los sistemas electromédicos para efectos
de seguridad del paciente.
Se muestra la identificación adecuada del sistema, diseño de Hardware e
implementación de Software y se tiene en cuenta la implementación de detección
de LEAD-OFF (desconexión de electrodos) y medición de impedancias en la
conexión de electrodos en el paciente.
1.2. DEFINICIÓN DEL PROBLEMA
Este trabajo de grado se enmarca dentro de uno de los proyectos de investigación
del grupo LEA (Laboratorio de Electrónica aplicada), perteneciente al programa de
Ingeniería Electrónica de la Universidad de San Buenaventura de Cali. El proyecto
macro del grupo LEA pretende “desarrollar e implementar en sistemas electrónicos
embebidos, índices clínicos con mayor capacidad predictiva para monitorear los
niveles de sedación y analgesia, utilizando señales registradas con monitores
neurofisiológicos y hemodinámicos en procedimientos de endoscopia”. Lo cual
requiere, entre otras cosas, del registro, almacenamiento y procesamiento de las
señales neurofisiológicas y hemodinámicas que se vayan a utilizar.
La parte que se desea implementar en este proyecto de grado es el diseño de un
prototipo electrónico que permita la captura multicanal de señales bioeléctricas
provenientes de Electroencefalogramas (EEGs), dado que el grupo LEA no cuenta
13
con un dispositivo de este tipo. Por lo tanto, es pertinente plantear la siguiente
pregunta de investigación: ¿cómo desarrollar un sistema electrónico que permita
la adquisición de varios canales de señales de electroencefalograma de manera
confiable y segura para los pacientes?
1.3. JUSTIFICACIÓN
En la actualidad es importante medir la actividad eléctrica del cerebro debido a
que monitoreando los cambios en las formas de las señales de los EEG se puede
deducir el grado de anestesia en que se encuentran los pacientes en procesos
médicos.
Se está de acuerdo en que el registro de la actividad eléctrica cerebral es de gran
ayuda en la evaluación de encefalopatías, lesiones focales cerebrales, cambios
anormales en la química corporal que afectan el cerebro, enfermedades
cerebrales como el mal de Alzheimer, infecciones, convulsiones, tumores, evaluar
problemas con el sueño, monitorear el cerebro durante una cirugía cerebral, en el
estudio de la maduración cerebral en niños, en el diagnóstico y seguimiento de
pacientes con epilepsia. (Martinez, 2006). Así mismo, el EEG puede utilizarse para
mostrar que el cerebro no tiene ninguna actividad, como en el caso de alguien que
esté en un coma profundo o para determinar si una persona tiene muerte cerebral.
Particularmente el EEG se puede emplear para la medición del efecto
farmacológico de los anestésicos con el fin de controlar el nivel de la profundidad
del estado anestésico o para controlar el efecto de fármacos como ocurre cuando
se crea un coma barbitúrico que busca inducir cierto grado de supresión en las
ondas del EEG. (Purdy, Herman, & Homan, 1987)
Teniendo presente que en medicina todo procedimiento es más seguro cuanto
más simple sea pero que por razones fisiológicas, morales, humanitarias y éticas,
el dolor debe ser controlado de manera segura y efectiva. Por lo tanto, los niveles
de sedación y analgesia deben ser debidamente controlados. Un inadecuado
control en la sedación y la analgesia puede llevar a una baja tolerancia por parte
del paciente, o un mayor consumo de fármacos, a una mayor estancia del
paciente en salas de recuperación. (López Rosés, 2006)
Debido a que la electrónica es una herramienta que nos proporciona beneficios en
diferentes campos de acción, en el caso de este proyecto, puede clasificarse como
Electro-medicina, lo cual sería la correcta planificación, aplicación y desarrollo de
14
equipos y técnicas utilizadas en los exámenes y tratamientos médicos, así como el
control de calidad de los equipos empleados y el control y prevención de los
riesgos asociados.
Actualmente existen dispositivos electrónicos integrados de aplicación específica
(ASIC: application-specific integrated circuit) diseñados especialmente para el
registro de señales biomédicas, incluyendo el EEG. Estos han sido diseñados con
todas las aplicaciones necesarias para la captura multicanal de señales de EEG,
abarcando características tales como control de ganancia programable,
conversores análogo/digital interno y niveles bajos de ruido para la adquisición de
señales.
1.4. OBJETIVOS
1.4.1. Objetivo General
Desarrollar un dispositivo electrónico multicanal que realice la captura de señales
provenientes de electroencefalogramas utilizando circuitos integrados de
aplicación específica.
1.4.2. Objetivos Específicos
Seleccionar e interpretar recursos bibliográficos de utilidad para definir las
características del equipo, cumpliendo con los requerimientos de las normas
técnicas para equipos médicos y las condiciones de un electroencefalograma
estándar.
Identificar el sistema que reúna los componentes necesarios para que el prototipo
cumpla con las características planteadas y tenga un óptimo funcionamiento. Esto
incluye la selección adecuada del circuito integrado de aplicación específica.
Configurar el circuito integrado de aplicación específica para la adquisición
multicanal de señales EEG y la transmisión de los datos hacia una tarjeta de
desarrollo.
Definir un protocolo de comunicación para enviar datos hacia una interfaz que
grafique la señal adquirida.
15
Registrar los resultados obtenidos en un artículo que sintetice la investigación y
muestre con claridad lo que se desarrolló durante el trabajo de grado.
1.5. METODOLOGÍA
El diseño metodológico se proyecta a través de cinco etapas en las cuales se
planea desarrollar cada una de las actividades necesarias para el cumplimiento de
los objetivos planteados para el proyecto. Las etapas estas denominadas de la
siguiente manera, para las cuales se planea elaborar un cronograma que
distribuya de buena forma el proceso de elaboración del trabajo de grado:
1.5.1. Etapa de fundamentación
Se realizará una extensa recopilación bibliográfica de gran utilidad para definir las
características del equipo que se desea desarrollar, para que este cumpla con los
requerimientos de las normas técnicas para equipos médicos y las condiciones de
un electroencefalograma estándar, como se desea en el primer objetivo del
proyecto. Las actividades a realizar en esta etapa son:
Buscar y seleccionar trabajos e investigaciones realizadas a nivel local,
nacional e internacional sobre monitores de EEG.
Ordenar la información encontrada y seleccionar el tipo de protocolos que
mejor conviene utilizar en el desarrollo del proyecto.
Presentar informe del avance realizado y las conclusiones obtenidas en la
etapa de investigación.
1.5.2. Etapa de diseño
Para esta etapa se planea identificar el sistema que reúna los componentes
necesarios para que el prototipo cumpla con las características planteadas y tenga
un óptimo funcionamiento, además de configurar el circuito integrado de aplicación
específica para la adquisición multicanal de señales y la transmisión de los datos
hacia una tarjeta de desarrollo. Las actividades a realizar en esta etapa son:
16
Con base en la información recopilada sobre los monitores de EEG, se
identifican los diferentes elementos y equipos requeridos para llevar a cabo la
captura multicanal de señales provenientes de EEG.
Realizar cálculos de los valores necesarios que se deben estimar en el proceso
de diseño del monitor y del modelo circuital.
Obtener un modelo circuital, para la aplicación electrónica.
Definir un protocolo de comunicación entre el prototipo y la interfaz gráfica
1.5.3. Etapa de implementación
En esta etapa se implementa el diseño propuesto en la etapa anterior, de manera
que se logre obtener un prototipo funcional que adquiera las señales del EEG y las
comunique a una interfaz. Las actividades a realizar en esta etapa son:
Diseñar y construir las tarjetas PCB.
Consecución de elementos e insumos electrónicos necesarios para construir el
prototipo.
Montar elementos electrónicos en las tarjetas PCB.
Pruebas básicas para garantizar funcionamiento del hardware del prototipo.
Programación del prototipo para adquirir las señales del EEG.
Programación del prototipo para transmitir señales adquiridas a la interfaz
gráfica.
1.5.4. Etapa de validación
En esta etapa se realizarán diferentes actividades para verificar que el prototipo
electrónico cumple debidamente con las funciones para las cuales fue diseñado.
Las actividades a realizar en esta etapa son:
17
Practicar simulaciones y pruebas en el laboratorio con condiciones semejantes
a las reales para identificar errores en el circuito.
Con base en los errores encontrados, realizar correcciones para lograr el
perfecto funcionamiento del circuito.
Someter la aplicación electrónica a un periodo de prueba en el que se simulen
las condiciones de funcionamiento requeridas.
De ser posible, poner a prueba el sistema implementado en un entorno médico
real para determinar si hay fallas y realizar las correcciones adecuadas.
1.5.5. Etapa de documentación
Terminando con el proceso de trabajo de grado se espera registrar los resultados
obtenidos en un artículo que sintetice la investigación, muestre con claridad lo que
se desarrolló durante el trabajo de grado y resalte que se cumplió con el objetivo
general y las especificaciones planteadas en un principio. Las actividades a
realizar en esta etapa son:
Escribir un informe final donde se presente el desarrollo de los objetivos
planteados, los resultados obtenidos y el alcance de la implementación del
proyecto.
Escribir un artículo, donde se presente el desarrollo y alcances del proyecto.
18
CAPÍTULO II
2.1. MARCO REFERENCIAL
2.1.1. Señal biomédica
El funcionamiento del cuerpo humano se asocia frecuentemente con señales de
origen eléctrico, químico o acústico. Estas señales son portadoras de información
que, en ocasiones, no pueden ser percibidas de forma inmediata, sino que esta
oculta en la propia estructura de la señal. Por tanto, esta información necesita ser
“decodificada” o extraída de alguna forma para poder dar alguna interpretación útil
a estas señales. Las señales reflejan propiedades de los sistemas biológicos
asociados a ellas, y la decodificación se ha mostrado muy útil para explicar e
identificar distintas condiciones patológicas de los mismos. (Carrión Pérez,
Ródenas García, & Rieta Ibáñez, 2007)
Tradicionalmente la investigación en procesado de señales biomédicas se ha
ocupado sobre todo del análisis aislado de cada tipo de señal ignorando la
información presente en otros tipos de señales. Sin embargo, el creciente interés
en el análisis de señales multimodales ayudará, sin duda alguna, a explicar, en
mayor detalle, como diferentes subsistemas fisiológicos interactúan entre sí, tales
como la interacción de la presión sanguínea y el ritmo cardiaco en el sistema
cardiovascular. Explorando la información mutua contenida en los diferentes tipos
de señales se pueden hacer diagnósticos más precisos. (Carrión Pérez, Ródenas
García, & Rieta Ibáñez, 2007)
2.1.2. Señales bioeléctricas
Un importante tipo de señales son las de origen bioeléctrico, las cuales describen
la actividad del cerebro, el corazón y los músculos. Algunas de estas señales
reflejan actividad espontanea continua mientras que otras solo aparecen como
resultado de un estímulo externo. Las características de estas señales hacen que
sea necesario el uso de una gran cantidad de diferentes técnicas de procesado;
una forma de onda individual puede en algunas señales estar directamente
relacionado con un diagnóstico clínico especifico, mientras en otras señales ser el
resultado compuesto de muchas formas de onda lo que hace que esta deba ser
19
analizada antes de que una interpretación útil pueda ser hecha. Algunos de los
tipos de señales bioeléctricas más comunes son:
El electroencefalograma (EEG) refleja la actividad eléctrica del cerebro registrada
colocando varios electrodos sobre el cuero cabelludo, ver la figura 1(a). (Carrión
Pérez, Ródenas García, & Rieta Ibáñez, 2007)
El electrocardiograma (ECG) refleja la actividad eléctrica del corazón y se obtiene
colocando electrodos sobre el pecho, manos y pies, ver figura 1(b). Asociado a
cada latido cardiaco, viaja un impulso eléctrico a través del corazón determinando
su ritmo y frecuencia. Este impulso hace que el musculo cardiaco se contraiga y
bombee sangre. El ECG representa un procedimiento clínico estándar para la
investigación de las enfermedades cardiacas tales como el infarto de miocardio.
(Carrión Pérez, Ródenas García, & Rieta Ibáñez, 2007)
El electromiograma (EMG) registra la actividad eléctrica de los músculos
esqueléticos, los cuales producen una corriente eléctrica, usualmente proporcional
al nivel de actividad, ver figura 1 (c). El EMG se usa para detectar actividad
musculas anormal la cual aparece en muchas enfermedades tales como distrofia
muscular, inflamación de los músculos, y daños en los nervios de las manos y los
pies. (Carrión Pérez, Ródenas García, & Rieta Ibáñez, 2007)
Los potenciales evocados (EPs) constituyen una forma de actividad cerebral, la
cual es usualmente evocada por un estímulo sensorial de origen tal como visual o
acústico. Su uso clínico incluye el diagnostico de desórdenes relacionados con los
canales de comunicación visual y el cerebro. Los EPs, también conocidos como
potenciales relacionados con un evento, son señales transitorias compuestas de
ondas de tan baja amplitud que su presencia sobre el “EEG de fondo” es casi
invisible al ojo humano, ver figura 2(a). los potenciales evocados se registran
usando una configuración de electrodos similar a la de un EEG. (Carrión Pérez,
Ródenas García, & Rieta Ibáñez, 2007)
El electroneurograma (ENG) resulta de la estimulación de un nervio periférico con
impulso eléctrico tal que la respuesta al propagarse a lo largo del nervio puede
medirse. El ENG, generalmente obtenido con electrodos de aguja se usa para
determinar la velocidad de conducción del nervio, de modo que ayuda en el
diagnóstico del nervio dañado. Registrando la señal en dos sitios diferentes
separados por una distancia conocida, es posible estimar la velocidad de
20
conducción a partir de una distancia temporal que separa a las dos señales
resultantes, ver figura 2 (b).
El electroretinograma (ERG) se usa para estudiar los potenciales eléctricos
generados por la retina del ojo durante una estimulación luminosa, ver figura 2(c).
(Carrión Pérez, Ródenas García, & Rieta Ibáñez, 2007)
Figura 1: Ejemplos de las tres señales bioeléctricas más importantes registradas sobre la superficie
del cuerpo: (a) un electroencefalograma el cual contiene actividad alfa, (b) un electrocardiograma
durante ritmo sinusal, y (c) un electromiograma obtenido del mentón en estado despierto. Todas
estas señales se obtuvieron de distintos sujetos normales. (Carrión Pérez, Ródenas García, &
Rieta Ibáñez, 2007)
21
Figura 2: Ejemplos de señales bioeléctricas como respuesta a una estimulación. (a) un potencial
evocado resultado de una estimulación audible. La señal mostrada es de hecho el resultado de
promediar varias respuestas con el objetivo de reducir el alto nivel de ruido de la señal original. (b)
un electroneurograma registrado en dos posiciones de electrodos, donde el retardo entre las dos
señales se usa para estimar la velocidad de conducción nerviosa. (c) un electroretinograma
obtenido durante estimulación con un flash de luz. (Carrión Pérez, Ródenas García, & Rieta
Ibáñez, 2007)
2.1.3. Electroencefalograma
La electroencefalografía es una técnica de exploración neurofisiológica que
registra la actividad bioeléctrica cerebral. Un encefalograma (EEG) es el registro
obtenido mediante esta técnica. Con el EEG se pueden observar los distintos tipos
de ondas cerebrales en estado de vigilia, durante el sueño, en reposo o bajo
ciertas condiciones de activación. El EEG se usa como ayuda al diagnóstico
cuando un paciente sufre convulsiones, un traumatismo craneoencefálico, un
tumor, o incluso una enfermedad degenerativa del sistema nervioso. Es
igualmente útil para evaluar trastornos del sueño y analizar la actividad cerebral
durante períodos de pérdida de consciencia. (Adserá, 2009)
Un electroencefalograma común dura unos 30 minutos. Son 10 minutos de
preparación para poner un casquete con electrodos sobre el cuero cabelludo y
22
probar las impedancias, y 20 minutos aproximadamente del registro EEG
propiamente. Cabe resaltar que esto es para algunos casos debido a que el EEG
puede registrase por mucho más tiempo, inclusive todo el día o toda una noche.
Durante el EEG la persona está sentada en posición relajada y los ojos cerrados.
Habitualmente a media sesión se le pide que respire hondo con la boca abierta
(hiperventilación), después se vuelve a la respiración normal. En la parte final del
EEG se realiza una estimulación visual intermitente con una lámpara (Adserá,
2009).
2.1.4. Electrodos de biopotenciales
Los electrodos, son dispositivos que permiten medir los biopotenciales debido a su
principio de funcionamiento, convierten corrientes iónicas producidas al interior de
tejidos vivos en corrientes eléctricas o electrónicas formando un flujo de electrones
entre dos conductores metálicos que están conectados a un equipo médico.
Los electrodos en la medición de funciones corporales, son adheridos a los
pacientes con el fin de que equipos especializados detecten impulsos o reacciones
que se generan dentro del cuerpo. Un claro ejemplo de ello es la utilización de
electrodos para visualizar el funcionamiento del sistema nervioso.
Para el caso de los EEG, los electrodos serán utilizados para medir los impulsos
eléctricos que provienen del cerebro en diferentes estados del cuerpo humano
(reposo, actividad física, sedación). Dichos electrodos se posicionan en la cabeza
del paciente típicamente mediante un esquema llamado “Distribución 10-20”. La
siguiente figura muestra un ejemplo de la distribución 10-20:
23
Figura 3: Ejemplo de la distribución 10-20 en la ubicación de electrodos para la captura de un
electroencefalograma típico. (García & Soria, 2012).
Existen distintos tipos de electrodos utilizados para los EEG, a continuación se
mencionan algunos de ellos.
Electrodos de oro: Utilizados debido a su gran capacidad de conducción y
fijeza en la cabeza del paciente. Mantienen una baja impedancia y pueden ser
utilizados en varias ocasiones. Son costosos y susceptibles a señales no
deseadas en las muestras. (Alvarez Osorio, 2007).
Electrodos de cloruro de plata: Son comunes debido a producir un potencial
de juntura muy estable. Se adhieren a la piel del cuero cabelludo utilizando un
gel especial. Son los más comunes del mercado. (Alvarez Osorio, 2007).
Electrodos de polímeros conductivos: Son hechos de material conductivo
con alta resistividad, lo que hace que no muestren buen desempeño en
mediciones bajo ruido. Cuando se tienen niveles de señal altos estos
electrodos ofrecen una solución buena y a su vez económica. (Alvarez Osorio,
2007).
24
2.1.5. Amplificadores de biopotenciales
Lo amplificadores de biopotenciales, juegan un papel muy importante durante el
proceso de captura de señales biomédicas. Como su nombre lo indica tienen
como función principal amplificar en amplitud las señales capturadas, debido a que
están son bastante pequeñas (del orden de µV o mV). Estos amplificadores deben
tener algunas consideraciones especiales debido al entorno en que se utilizan. Se
recomienda que el amplificador tenga una impedancia de entrada de mínimo
10MΩ para que no represente ninguna carga significativa a la señal en medición.
Debe tener un alto CMRR con el fin de atenuar interferencias producidas por la
frecuencia de la red doméstica con que se alimenta el equipo (50 - 60 Hz). Una
relación señal a ruido alta hará que no se incorpore ruido a la señal, lo que mejora
su calidad en la muestra y por último se recomienda que los amplificadores tengan
ganancias y filtros configurables para la medición de diferentes biopotenciales.
(Montoya, 2013)
2.1.6. Adquisición y análisis de las señales
La adquisición de señales bioeléctricas se realiza hoy en día con equipamiento
relativamente barato que amplifica y digitaliza adecuadamente la señal. Como
resultado, varios protocolos clínicos basados en señales bioeléctricas se utilizan
hoy de forma generalizada en los hospitales a lo largo del mundo. En muchas
situaciones, los sistemas basados en PCs pueden ser utilizados como una
solución eficiente y barata de análisis de señal, especialmente considerando la
accesibilidad de tarjetas de expansión para adquisición de datos. Tales sistemas
incluyen uno o varios sensores, hardware externo para aislamiento eléctrico del
paciente y amplificación de señal, una tarjeta de adquisición con conversión
analógica/digital (A/D) y software para análisis de señales (figura 4). En
situaciones donde el análisis se lleva a cabo en un equipo implantable, el diseño
del sistema implica consideraciones adicionales, por ejemplo, las relacionadas con
el diseño de circuitos integrados para aplicaciones específicas, y la selección de la
adecuada tecnología para las baterías. (Carrión Pérez, Ródenas García, & Rieta
Ibáñez, 2007)
En el proceso de digitalización es usualmente suficiente con usar 12-14 bits para
la cuantificación en amplitud de forma que se cubre el rango dinámico de la señal;
se asume que variaciones muy lentas, de gran amplitud en el nivel de continua
(DC) de la señal se han eliminado antes de la cuantificación, lo cual no modifica el
contenido fisiológico de la señal. La amplitud de las formas de onda individuales
25
varía desde 0.1 µV, observado en ciertos tipos de EPs una vez que han sido
sometidos a un proceso de reducción de ruido, hasta varios milivoltios, como los
observados en el ECG. (Carrión Pérez, Ródenas García, & Rieta Ibáñez, 2007)
La mayoría de las señales bioeléctricas registradas sobre la superficie del cuerpo
tienen un contenido espectral confinado en un intervalo bastante por debajo de 1
kHz, y por ello las frecuencias de muestreo elegidas para ser al menos la
frecuencia de Nyquist raramente exceden unos pocos kilohercios. Sin embargo,
como las señales medidas sobre la superficie del cuerpo están sujetas a un filtrado
paso bajo causado por el tejido intermedio, señales registradas invasivamente,
tales como los potenciales de acción, presentan generalmente un contenido
frecuencial más alto. (Carrión Pérez, Ródenas García, & Rieta Ibáñez, 2007)
En un sistema basado en un PC, el análisis de señal se hace a menudo
localmente, bien sea en la CPU interna o en una expansión de una tarjeta de
procesado de señal (DSP). Sin embargo, con la disponibilidad actual de recursos
basados en la Web, ya no es necesario realizar todo el análisis localmente. Es
igualmente posible adquirir la señal en una ubicación física, usando un sistema
basado en PC, y procesar la señal en otro lugar. Por ejemplo, a través de una
solución cliente/servidor. Dado que la señal adquirida en la mayoría de los casos
se almacena en una base de datos residente en un servidor, puede ser también
útil procesar la señal en el servidor ya que éste puede ofrecer mayor potencia de
cálculo. (Carrión Pérez, Ródenas García, & Rieta Ibáñez, 2007)
26
Figura 4: Diagrama de bloques generalizado que describe los principales pasos en el análisis de
las señales biomédicas. (Texas Instruments®, 2012)
2.2. ESTADO ACTUAL
El electroencefalograma (EEG) está surgiendo como instrumento de interés para
el seguimiento clínico durante la anestesia y sedación. Lo anterior, es el resultado
de dos recientes acontecimientos: primero, el uso del EEG para confirmar los
niveles de anestesia profunda en procedimientos quirúrgicos y la evaluación de los
niveles de sedantes, y en segundo lugar, la nueva tecnología que ha producido
progresos tangibles en la creación de un monitor para la medición de la
profundidad de la anestesia (Ira, 2007).
De acuerdo con las aplicaciones que se han venido desarrollando a lo largo del
tiempo, en la actualidad se tienen diversos equipos para la adquisición de señal de
EEG cuyo fin es la medición de índices de conciencia durante la anestesia y
sedación en pacientes que se realizan procedimientos médicos. Así mismo
analizar trastornos de sueño, confusión mental, amnesia, Alzheimer, entre otros.
En la actualidad los equipos desarrollados para la captura de EEG que se utilizan
en entornos médicos presentan características particulares necesarias para la
adquisición de la señal de manera correcta. El número de canales, aplicaciones
específicas como detección de desconexión de electrodos, e interfaz gráfica, son
detalles que diferencian los equipos y orientan al usuario para su uso.
27
Por otra parte, grandes empresas desarrolladoras de electrónica han
implementado una serie de tarjetas para ser utilizadas en entornos académicos
con el objetivo de contextualizar a los estudiantes con el proceso de captura de
Biopotenciales. Estas tarjetas cuentan con una programación por defecto, que por
lo general se limita únicamente a hacer la captura de las señales, sin embargo
poseen un software abierto para que este programa sea modificado y se puedan
implementar complementos para la aplicación.
En la tabla No. 1, se muestran algunos equipos comerciales utilizados en la
actualidad en entornos médicos y se mencionan las características más relevantes
de estos equipos (natus MedicalExpo, 2016; natus Sistemas Latinos, 2016;
mennen medical, 2016; Recorders & Medicare Systems Pvt Ltd, 2016).
En la tabla No. 2, se mencionan las tarjetas electrónicas para la adquisición de
señales EEG desarrolladas en la actualidad para entornos de aprendizaje (Texas
Instruments®, 2014; Open BCI, 2016; BALALAIKA, 2016; Open Electronics Lab,
2014).
28
Tabla 1: Equipos médicos comerciales para captura de EEG. (Los Autores)
EEG Comet-PLUS XL Brain View PLUS Bio-Logic Netlink Cerebral Logik
No. CANALES 32 24 8 2
DETECCIÒN DE
LEAD_OFF SI SI SI NO
MEDICIÓN DE
IMPEDANCIAS SI SI NO NO
PERIFERICOS ETHERNET - USB ETHERNET ETHERNET NO
PROCESADOR PC ALTO
RENDIMIENTO
PC ALTO
RENDIMIENTO --- ---
PROTECCIÓN DEL
PACIENTE SI SI SI SI
INTERFAZ MONITOR LCD MONITOR LCD NO NO
ENTORNO EN EL QUE SE
UTILIZA
HOSPITAL - CENTRO
MÉDICO
HOSPITAL - CENTRO
MÉDICO
HOSPITAL - CENTRO
MÉDICO
HOSPITAL - UNIDAD
NEONATAL
29
Tabla 2: Tarjetas electrónicas para entornos educativos. (Los Autores)
EEG Front -End Performance
Demostration Kit Open BCI OpenHardware ExG Balalaika Project
No. CANALES 8 8 8 8
CONVERSOR A/D ADS1299 ADS1299 ADS1299 ADS1299
PROCESADOR DSP TMS320 –
VC5509APGE PIC32MX250F128B
Atmel SAM3X (ARM
Cortex M3) Atmel ATMega
DETECCIÓN DE
LEAD_OFF SI SI SI NO
MEDICIÓN DE
IMPEDANCIAS NO NO NO NO
PERIFERICOS USB Micro SD CARD,
BlueTooth, Acelerometro UART, USB
BlueTooth, Modulo IMU
GY-89
PROTECCIÓN DEL
PACIENTE NO NO NO NO
INTERFAZ SI SI SI NO
ENTORNO EN EL QUE
SE UTILIZA ACADEMICO ACADEMICO ACADEMICO ACADEMICO
30
Se puede observar que los equipos médicos utilizados tienen características
específicas para su óptimo funcionamiento directamente en el paciente. Las
tarjetas electrónicas desarrolladas tienen una cantidad de canales inferior a los
utilizados normalmente en entornos clínicos, sin embargo, la cantidad de canales
no es una limitante para realizar una buena captura del procedimiento.
Es de suma importancia tener en cuenta las protecciones necesarias que deben
tener estos equipos para que no se vea afectado el paciente cuando ocurra un
daño o un fenómeno no deseado en el equipo, como por ejemplo picos de voltaje
en la etapa de alimentación, o corrientes inducidas a través de los electrodos que
se conectan directamente al paciente.
De manera general, un equipo para captura de EEG debe tener entre 4 y 32
canales, poder detectar la desconexión de un electrodo en el paciente durante el
procedimiento, realizar la medición de impedancia entre el paciente y la conexión
de cada uno de los sensores, almacenar datos para reproducciones futuras de las
capturas que se realicen y poder mostrar de manera gráfica al usuario las capturas
de señal realizadas durante el procedimiento.
2.3. NORMA INTERNACIONAL PARA EQUIPOS ELECTROMÉDICOS
Los equipos médicos que son utilizados directamente en el paciente, por lo
general, tienen aplicados una serie de normas y reglamentos que cumplen
distintas exigencias para algunas de sus características tales como sensibilidad,
reducción de efectos de señales no deseadas, distorsión de las señales
registradas, aislamientos y seguridad del paciente.
La norma IEC 60601-1 describe los requisitos generales que deben cumplir los
sistemas electromédicos para efectos de seguridad del paciente en el cual va a
ser usado el equipo.
Para los electroencefalógrafos la norma por la que se rigen es la “IEC 60601-2-26
Equipos Electromédicos – Requisitos particulares para la seguridad de equipos de
medición de EEG”.
En el presente proyecto, se busca implementar el diseño del dispositivo
cumpliendo con los estándares básicos y normativas que cobijan los equipos
electromédicos, con el objetivo de lograr un desarrollo integral aplicando los
conceptos de la ingeniería electrónica a otras ciencias aplicadas como la
medicina.
31
CAPÍTULO III
3.1. CONSIDERACIONES DE DISEÑO
Para realizar un diseño que cumpla con el objetivo general de este trabajo, deben
tenerse en cuenta las características de cada biopotencial debido a que éstas,
determinaran a su vez las características del sistema que se quiere diseñar. Dicho
sistema debe cumplir con cualidades para minimizar las interferencias que puedan
ocurrir en el proceso de captura de las señales y considerar que el ruido y
aparición de artefactos son elementos que podrían entorpecer la adquisición de
las señales. (Montoya, 2013)
Para abordar el proceso de adquisición de los biopotenciales podrían utilizarse
amplificadores de bajo ruido buscando amplificar significativamente la señal y
utilizar conversores análogo-digital de baja resolución para tener menos cambios
de la señal digitalizada en el proceso de muestreo. Otra solución es el caso
contrario donde se busca dar menos ganancia a la señal y utilizar conversores
análogo-digital de alta resolución para obtener una muestra mucho más parecida a
la señal original. (Montoya, 2013)
Usualmente el sistema de instrumentación para la adquisición de biopotenciales,
es diseñado de manera discreta, es decir con componentes separados de
diferentes fabricantes de semiconductores principalmente amplificadores de
instrumentación, amplificadores operacionales y conversores análogo-digital, que
se combinan para lograr un sistema de adquisición. Con los avances tecnológicos
de los últimos años, específicamente en el área de microelectrónica, diferentes
fabricantes de semiconductores han sacado al mercado circuitos integrados de
aplicación específica (ASIC por sus siglas en inglés “Aplication Specific Integrated
Circuit”) con características mejoradas de velocidad, bajos niveles de ruido, alta
resolución y bajo consumo de energía. La función principal del ASIC es
acondicionar la señal que se toma del sensor y realizar una conversión análoga-
digital confiable. (Montoya, 2013)
Teniendo en cuenta lo anterior, una estructura básica para el diseño de un
dispositivo capaz de capturar señales de EEG es implementar un circuito
integrado de aplicación específica (ASIC) con los conversores análogo-digital
adecuados para el proceso. Dicho ASIC, siguiendo un tipo particular de
comunicación, tendrá la capacidad de ser programado por un procesador que
32
indique como se debe hacer el proceso de adquisición y pueda leer lo que está
pasando en el conversor. El procesador, debe guardar los datos del muestreo para
posteriormente mostrar la gráfica de la señal capturada. La Figura 5 muestra las
etapas principales de un monitor estándar para captura de señales de EEG, donde
se logra apreciar las protecciones del paciente que esta de manera directa en
contacto con el dispositivo de captura, además de los aislamientos apropiados del
bus de voltaje y bus de datos de la tarjeta electrónica donde se instala el ASIC al
procesador.
Figura 5: Etapas de monitor EEG
3.2. IDENTIFICACIÓN DEL SISTEMA
Basados en la pregunta planteada para el presente proyecto de grado -“¿Cómo
desarrollar un sistema electrónico que permita la adquisición de varios canales de
señales de electroencefalograma de manera confiable y segura para los
pacientes?”- se orienta la investigación a la identificación del sistema que dé
respuesta óptima y conlleve al cumplimiento de los objetivos planteados para el
trabajo.
3.2.1. Circuitos integrados de aplicación específica para la captura de
biopotenciales
3.2.1.1. ADAS1000 – Analog Devices
El ADAS1000 es un circuito integrado desarrollado para captura de biopotenciales
tales como los ECG. Está diseñado para simplificar la tarea de adquisición de las
señales y garantizar la calidad de las mismas. Permite varias aplicaciones de
usuario debido a la entrada de voltaje diferencial mediante amplificadores
operacionales y a su arquitectura que cuenta con una relación de potencia-ruido
donde el ruido puede ser reducido para evitar las pérdidas de información.
PROTECCIÓN
DE
SOBRECARGA
S
ASIC
AISLAMIENTO
DE VOLTAJE
AISLAMIENTO
DE
COMUNICACIÓN
PROCESADOR FUENTE DE
ALIMENTACIÓN
33
3.2.1.2. Familia ADS129X – Texas instruments
La marca Texas Instruments® ha desarrollado una familia de circuitos integrados
para la captura de Biopotenciales en los cuales incluyen distintos tipos de señales
y un amplio portafolio de acuerdo con la necesidad de la aplicación a
desarrollarse.
En esta familia de integrados se pueden encontrar dispositivos para captura de
señales de ECG, EEG, EMG entre otros. La familia de integrados propone
distintas características en cada dispositivo tales como resolución de bits para la
digitalización de las señales, tipo de comunicación y número de canales. Así
mismo está compuesto por circuitos integrados de diferentes precios que varían
dependiendo de las características y funcionalidad del dispositivo (ver Tabla 3).
34
Tabla 3: ASIC’s para la captura de biopotenciales. (Los Autores)
ASIC Res.
(Bits) Biopotencial
No.
Canales
CMRR
(dB)
Potencia
(mW) Comunicación
Precio
USD
ADAS1000 24 ECG. 5 110 21 SPI $ 19.20
ADS1299 24 EEG, ECG. 8 110 5 SPI $ 36.00
ADS1298 24 EEG, EMG,
ECG 8 115 6 SPI $ 23.95
ADS1198 16 ECG 8 105 4,3 SPI $ 14.35
ADS1296 24 EEG, EMG,
ECG 6 115 5,3 SPI $ 17.95
ADS1294 24 EEG, EMG,
ECG 4 115 4.1 SPI $ 11.95
Después de valorar los diferentes ASIC para la captura de Biopotenciales se
seleccionó el ADS1299, puesto que cumple con todos los requerimientos técnicos
descritos con anterioridad, permitiendo la captura simultanea de ocho canales,
reducir los niveles de ruido en la captura de la señal, tener ganancia programable
por el usuario y contar la posibilidad de usar comunicación SPI (Serial Peripheral
Interface) para interactuar con el procesador.
A continuación se describe de manera general el ASIC para la captura de señales
de EEG que se utiliza en el proyecto.
35
3.2.1.3. Circuito integrado ADS1299
El ADS1299 es un circuito integrado de bajo nivel de ruido, multicanal, el cual
incluye para cada canal un amplificador de ganancia programable incorporado
(PGA) con muestreo simultáneo, utilizando un conversor análogo / digital (ADC) de
24 bits tipo delta-sigma ΔΣ. También posee una referencia interna, y un oscilador
interno. El ADS1299 incorpora todas las características comúnmente requeridas
para aplicaciones de electroencefalograma (EEG) (Texas Instruments®, 2012).
El ADS1299 presenta altos niveles de integración y rendimiento excepcional, lo
cual permite la creación de sistemas de instrumentación médica escalables
reduciendo significativamente el tamaño, consumo y costo total. (Texas
Instruments®, 2012)
El ADS1299 tiene un multiplexor de entrada flexible, por canal que se puede
conectar independientemente a las señales generadas internamente para la
prueba de los amplificadores, medición de la temperatura, y la detección de
desconexión de electrodos (lead-off). El ADS1299 opera a velocidades de datos
de 250 SPS a 16 kSPS (SPS, samples per second). Se pueden conectar varios
dispositivos ADS1299 en cascada para incrementar el número de canales para
adquisición del EEG (Texas Instruments®, 2012)
3.2.2. Plataformas de desarrollo
Una unidad de desarrollo típica está formada por tres elementos principales:
microprocesador, puertos y memoria. Para que esta unidad funcione, el diseñador
debe acompañar al microprocesador de todo un sistema de circuitos integrados
adicionales que le permitan suministrar las señales de control y de datos
indispensables para que los puertos y la memoria desempeñen su papel. (Gallego,
Nieto, & García, 2000)
Por ejemplo, aparecerán varios chips que se encarguen de la decodificación de las
líneas de dirección del microprocesador, para que él pueda tener acceso al puerto
o módulo de memoria que le especifica el software. De la misma forma se pueden
encontrar controladores de teclado, generadores de reloj, decodificadores a
display y controladores de puertos síncronos o asíncronos. (Gallego, Nieto, &
García, 2000)
36
Las plataformas de desarrollo están compuestas de dos partes para su uso, la
parte de software que es el entorno de desarrollo integrado en el cual se escribe,
compila y se cargan los programas, y el componente de hardware, que consta de
la plaqueta diseñada por un fabricante en específico la cual podría venir en
diferentes versiones y para distintas aplicaciones.
La tabla 4, describe las características principales de algunas de las plataformas
de desarrollo más comunes en el mercado actual.
Tabla 4: Plataformas de desarrollo. (Los Autores)
BeagleBone Propeller Arduino Raspberry Pi
MODELO Rev. A5 QuickStart Rev. B UNO Modelo B
PRECIO USD 90,00 USD 34,99 USD 30,00 USD 35,00
PROCESADOR AM3559 P8X32A ATMega 328 ARM1176JZ-F
TIPO DE
PROCESAMIENTO Secuencial Paralelo (8 cogs) Secuencial Secuencial
VELOCIDAD CPU 750 MHz 5 MHz 16 MHz 700 MHz
MEMORIA RAM 256 MB 64 KB 2 KB 256 MB
MEMORIA FLASH micro SD CARD NO 32 KB SD CARD
VOTAJE DE
ENTRADA 5 V 3.3 V 5 V 5 V
CONSUMO
MINIMO 0,85 W 1 W 0,3 W 3,5 W
GPIO 66 32 14 8
SPI SI NO SI SI
UART SI SI SI SI
ETHERNET 10/100 NO NO 10/100
USB 1 USB 2.0 NO NO 2 USB 2.0
VIDEO NO NO NO HDMI, Compuesto
AUDIO Análogo NO NO HDMI, Análogo
SISTEMA
OPERATIVO
AMSTRONG,
UBUNTU,
ANDROID.
NO NO
RASPBIAN,
UBUNTU,
PIDORA
Para el presente proyecto se ha elegido como plataforma de desarrollo la tarjeta
denominada “Propeller QuickStart Rev. B” la cual tiene un procesador P8X32A. La
37
elección de esta plataforma se da debido a sus características para el
procesamiento de información de manera paralela, contando con una rápida
reacción y facultades para comunicarse fácilmente con interfaces y circuitos en
periferias. Al tener 8 procesadores llamados “cogs” se tiene la posibilidad de
destinar cada canal del circuito ADS1299 a un “cog” en particular, de esta manera
se busca lograr procedimientos eficientes y mejorar el rendimiento general de la
aplicación.
3.2.2.1. Propeller QuickStart Rev. B - P8X32A
El Propeller QuickStart es una plataforma de desarrollo simple y accesible para el
procesador P8X32A. Utiliza un diseño de referencia de código abierto que ofrece
circuitos básicos, de manera que los desarrolladores pueden utilizar los archivos
de diseño de PCB para expandir y realizar su proyecto. El “Propeller QuickStart”
es totalmente ampliable y proporciona acceso a todos los pines de entrada y
salida a través de una cabecera de expansión, y también incluye botones de
entrada y LEDs. (Parallax INC, 2012)
Las principales características de la tarjeta son:
Procesador: Propeller P8X32A.
Cabecera de expansión que proporciona acceso a Vss, Vdd y 32 pines de
entrada y salida.
Cristal de 5Mhz.
8 botones táctiles resistivos.
8 LED´s.
Figura 6: Hardware “Propeller Quickstart”. (Parallax INC, 2012)
El Integrado P8X32A está diseñado para proporcionar procesamiento de alta
velocidad en sistemas embebidos y al mismo tiempo mantener bajo consumo de
38
corriente. El Propeller proporciona flexibilidad y potencia a través de sus ocho
procesadores, llamados cogs, que pueden desarrollar de manera independiente
tareas cooperativas o simultaneas. (Parallax INC, 2012)
El diseño del Propeller facilita a los desarrolladores la realización de aplicaciones
complejas que son comunes en los sistemas embebidos. Por ejemplo:
El mapeo de memoria es plano. No hay necesidad de esquemas de páginas
con bloques de código, datos o variables. Esto permite ahorrar tiempo durante
el desarrollo de la aplicación.
Los eventos asíncronos son más sencillos de manejar que aquellos que usan
interrupciones, solo se debe asignar los cogs para tareas individuales y
mantener los otros libres.
El lenguaje ensamblador Propeller tiene características de ejecución
condicional y escritura opcional de los resultados para cada instrucción
individual.
El Propeller cuenta con su propio lenguaje de programación interpretado llamado
Spin, es un lenguaje de alto nivel diseñado específicamente para él y provee
control sobre el hardware multi-nucleo. Está inspirado en lenguajes de
programación como C, Delphi y python. Al ser Spin un lenguaje interpretado, es
interesante notar que el chip posee su propio intérprete grabado en una sección
de su memoria ROM interna. También puede programarse el Propeller en su
propio lenguaje assembler, sin embargo al ser Spin un lenguaje muy eficiente, no
es necesario el uso del assembler excepto en ciertos casos específicos. (Parallax
INC, 2012)
El Propeller P8X32A, se propone inicialmente como una solución óptima para el
proyecto macro del que se desprende el presente trabajo de grado, buscando con
el procesamiento paralelo poder incluir en un futuro la captura de señales
provenientes de diferentes procedimientos como Electrocardiogramas o
electromiograma, así mismo, biopotenciales derivados de diferentes variables del
cuerpo humano como frecuencia cardiaca o presión sanguínea.
39
Contextualizándolo con el presente proyecto, este procesador presenta de manera
práctica y novedosa una forma de programación que permite al usuario
comunicarse directamente con el ASIC de su predilección.
En el transcurso de este documento se realizan pruebas que demuestran que el
procesador Propeller P8X32A inicialmente seleccionado, no es el indicado para
realizar el correcto desarrollo de este proyecto, por lo tanto, se justifica la
selección de un nuevo procesador que cumple con las especificaciones
necesarias para el correcto desarrollo de este proyecto de grado.
40
CAPÍTULO IV
4.1. IMPLEMENTACIÓN
En el presente capítulo se describe la implementación del prototipo electrónico que
se desarrolla en este trabajo de grado. Se detallan las etapas de hardware y
software, mostrando como se construyen cada una y que función cumplen dentro
del prototipo.
4.2. HARDWARE
El diseño de hardware está fundamentado principalmente en los circuitos
esquemáticos que proporciona el fabricante del circuito integrado ADS1299 en el
documento que lleva como nombre “EEG Front-End Performance Demostration
Kit” debido a que este documento presenta, a manera de manual de usuario, una
descripción completa del ASIC, su diagrama esquemático y listado de materiales.
Principalmente el documento describe las características, funcionamiento y el uso
del ADS1299. Implementa un módulo de evaluación que cuenta con 8 canales,
resolución de 24 bits y bajo consumo de energía que ha sido diseñado para la
captura especifica de señales de EEG. (Texas Instruments®, 2014)
Así mismo, para el diseño de PC Board se toma como guía la tarjeta electrónica
“OpenBCI” descrita en la tabla No. 2. Se tiene como propósito seguir la forma del
diseño octagonal y conservar sus medidas con el objetivo de instalar el prototipo
dentro de una malla tipo casco donde están acondicionados de forma adecuada
los electrodos según el estándar de conexión 10-20.
41
Figura 7: Casco para electroencefalografía. (Open BCI, 2016)
Se da inicio a la implementación del diseño de hardware del prototipo electrónico
haciendo uso del programa EAGLE 7.3.0 (Easily Applicable Graphical Editor).
El diseño consta de cuatro etapas las cuales se componen del Circuito principal
del ADS1299, fuentes de alimentación reguladas, conexión de electrodos al
paciente y etapa de aislamiento.
A continuación se describe cada una de las etapas que componen el prototipo
desarrollado.
42
4.2.1. Circuito principal ADS1299
Figura 8: Circuito principal ADS1299. (Los Autores, 2016)
En el circuito principal del ADS1299 se presenta el ASIC con sus conexiones
típicas para la captura de las señales. Se logra apreciar en la parte inferior
derecha la conexión con su oscilador externo. De igual manera sus respectivas
etiquetas para la conexión de electrodos y Bus SPI.
4.2.2. Fuentes de Alimentación
La etapa de fuentes de alimentación es la encargada de generar los niveles de
voltaje necesarios para el funcionamiento adecuado del ASIC.
43
De manera general, este circuito realiza la adecuación de 5V externos a una
fuente positiva llamada AVDD cuyo valor es de 2.5V y a una fuente negativa VSS
de -2.5V.
Figura 9: Fuentes de alimentación. (Los Autores, 2016)
La tabla No. 5. Describe el funcionamiento de los circuitos integrados utilizados en
la etapa de fuentes de alimentación.
Tabla 5: Características de las fuentes de alimentación. (Los Autores)
Integrado Package Vin Vout Iout Aplicaciones Descripción
TPS60403 SOT-23 (5) 1,6V a
5,5V
-1.6V a
-5.5V 60mA
- Fuente Bipolar
- Instrumentación
médica
- Fuente portable
Inversor de
Voltaje de 1,6V
a 5,5V
TPS73225 SOT-23 (5) 1,7V a
5,5V 2,5V 250mA
- Resgulador para
DSPs, ASICs y
Microprocesadores
Regulador de
voltaje de 5V a
2.5V
TPS73325 SOT-23 (5) -1.2 V
a - 10V -2.5V 200mA
- Amplificadores
de video.
- Optical Drivers
Regulador de
voltaje de -5V a
-2.5V
44
4.2.3. Conexión de electrodos
Para la conexión de electrodos al paciente se deben tener en cuenta las
protecciones de sobrecargas adecuadas para cada una de las entradas que estén
directamente en él y garanticen los aislamientos necesarios en caso de eventos
transitorios que puedan afectarle.
Cada uno de los canales cuenta con una protección bidireccional contra
descargas electrostáticas de hasta 30kV y picos de potencia de 130W
proporcionada por el integrado PESD5V0S2BT el cual es representado en el
diseño del circuito esquemático mediante el nombre PESD1CAN. Este integrado
contiene diodos de protección que pueden encargarse de las descargas en dos
líneas de señales cumpliendo con las normativa para descargas electrostáticas
IEC 61000-4-2 nivel 4 e IEC 61000-4-5, por tal motivo está conectado a cada una
de las entradas diferenciales de los canales del ASIC. El integrado se presenta en
un encapsulado de tamaño SOT23 para montaje superficial.
Figura 10: Símbolo del integrado PESD5V0S2BT. (NXP Semiconductors, 2009)
45
Figura 11: Conexión de electrodos. (Los Autores, 2016)
46
4.2.4. Aislamiento
La etapa de aislamiento juega un papel de suma importancia en el diseño del
circuito puesto que también contribuye a garantizar la seguridad del paciente.
Debido a que los electrodos imponen una conexión de baja impedancia entre una
persona y el equipo, es necesario interponer una barrera de aislamiento que
impida el paso de corrientes y descargas peligrosas. (Guerrero, Haberman, &
Spinelli, 2014)
La norma IEC60601-1 da especificaciones para la seguridad eléctrica del
equipamiento médico junto con la IEC60601-2-26 que se enfatiza en particular en
los electroencefalógrafos.
El paciente debe encontrarse aislado de cualquier circuito eléctrico externo que
tenga contacto con líneas de distribución de energía eléctrica o etapa que ante
alguna falla pudiera quedar en contacto directo con él. (Guerrero, 2011)
Las protecciones implementadas deben estar presentes tanto en los canales de
alimentación como en el de transmisión de datos. Por lo anterior, debe
establecerse una barrera de aislamiento entre la alimentación externa del circuito y
la etapa de fuentes, en conjunto con el Bus SPI que comunica el procesador y el
ASIC.
Por lo general, estos aislamientos se implementan en etapas separadas, sin
embargo en el presente proyecto de grado se utiliza un dispositivo que tiene la
capacidad de aislar tanto la etapa de alimentación como la de transmisión de
datos.
El circuito integrado de la empresa “Analog Devices” ADuM6401 cuenta con la
capacidad de aislar y entregar a su salida 5Viso Regulados y las líneas necesarias
para implementar un bus SPI aislado. Este componente está certificado en el
cumplimiento de la norma IEC 60601-1 para tensiones de trabajo de hasta
250Vrms. (Guerrero F. N., 2011)
La figura 11, muestra el diagrama del dispositivo ADuM6401 con el cual se
implementa en la etapa de aislamiento que se muestra en la figura 12.
47
Figura 12: Diagrama del integrado ADuM6401.
Figura 13: Aislamiento de alimentación externa y bus SPI. (Los Autores, 2016)
48
4.2.5. PC BOARD
En el diseño del PC Board se desarrolla una plaqueta a dos capas con forma de
octágono regular de 27.94 mm de lado con el propósito de simplificar el diseño.
La figura 14 muestra las dimensiones y forma del diseño de PCB.
Figura 14: Capa de dimensión. (Los Autores, 2016)
En la figura 15 se muestra la capa “Top” y en la figura 16 la capa “Bottom” del PCB
diseñado.
49
Figura 15: Capa “TOP”. (Los Autores, 2016)
Figura 16: Capa “BOTTOM”. (Los Autores, 2016)
50
4.3. SOFTWARE
4.3.1. Programación en Lenguaje SPIN
Se inicia el proceso de programación en lenguaje SPIN, verificando la
comunicación entre la tarjeta de desarrollo Propeller QuickStart y el ASIC
ADS1299.
Figura 17: Esquema de conexión Propeller QuickStart – ADS1299. (Los Autores, 2016)
Para esto se inicializa la librería de comunicación SPI en el Propeller con la
finalidad de llevar a cabo la lectura del registro ID (ID control register) del
ADS1299 y así comprobar que existe comunicación entre el conversor y el
procesador. (Texas Instruments®, 2012).
Se espera según la configuración del registro por defecto (Solo lectura) que los
valores de los bits (3:0) correspondan al binario 1110, y en Hexadecimal a la letra
“E”.
Al correr el código “Lectura RID” (figura 18) se pudo comprobar que se tenía
comunicación entre el propeller y el ADS1299.
51
Figura 18: Lectura del registro ID en lenguaje SPIN. (Los Autores, 2016)
Se obtuvo “Registro ID: 0x3E”, donde los primeros 4 bits del registro no se tienen
en cuenta y los últimos 4 bits equivalen al valor esperado. Esto se obtiene
configurando el bus SPI para que la transferencia de datos inicie con el bit más
significativo primero (MSB).
Conclusión: Se comprobó la comunicación SPI Propeller – Ads (Maestro -
esclavo).
Al comprobar que se obtuvo comunicación se procedió a realizar un código fuente
para la configuración de registros necesarios del conversor para la captura de
muestras de una señal de prueba propia del ASIC. Es decir, el mismo ADS1299
genera una señal cuadrada cuyo objetivo es comprobar la captura de las señales
por medio de los canales a utilizar.
La señal de prueba esperada se define de la siguiente manera según el fabricante:
𝐴𝑚𝑝𝑙𝑖𝑡𝑢𝑑 𝑝𝑖𝑐𝑜 = 1 ∗ [𝑉𝑟𝑒𝑓𝑝 − 𝑉𝑟𝑒𝑓𝑛
2.4] ∗ 𝑚𝑣
𝐴𝑚𝑝𝑙𝑖𝑡𝑢𝑑 𝑝𝑖𝑐𝑜 = 1 ∗ [4.5
2.4] ∗ 𝑚𝑣
𝑨𝒎𝒑𝒍𝒊𝒕𝒖𝒅 𝒑𝒊𝒄𝒐 = 𝟏. 𝟖𝟕𝟓𝒎𝒗
52
𝐹𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 = 𝑓𝑐𝑙𝑘𝐴𝐷𝑆
221
𝑭𝒓𝒆𝒄𝒖𝒆𝒏𝒄𝒊𝒂 = 𝟐. 𝟎𝟒𝟖 𝑴𝑯𝒛
𝟐𝟐𝟏= 𝟎. 𝟗𝟕𝟔𝟓 𝑯𝒛 ≅ 𝟏 𝑯𝒛
Para realizar la captura se configuran los respectivos registros para adquirir la
señal de prueba, realizar la captura a una frecuencia de muestreo de 250 SPS y
utilizar el modo de lectura continuo.
Tabla 6: Configuración de registros para la captura a 250 SPS
REGISTRO DIRECCIÓN
(HEX)
PRIMER
OPCODE (HEX)
SEGUNDO
OPCODE (HEX) VALOR (HEX)
CONFIG1 01 41 00 96
CONFIG2 02 42 00 D0
CONFIG3 03 43 00 E0
CHnSET 05 45 07 05
El siguiente diagrama de tiempos describe la manera en cómo se capturan los
datos.
Figura 19: Diagrama de tiempos captura de datos en modo RDATAC. (Texas Instruments®, 2012)
El programa “Señal de prueba” realiza la configuración descrita anteriormente y
captura los datos cada vez que detecta un flanco de bajada en la señal DRDY
(Data Ready). Dicho flanco de bajada indica que los datos correspondientes a una
muestra ya están listos para que el procesador los capture.
53
Figura 20: Programa “señal de prueba” en lenguaje SPIN. (Los autores)
Idealmente la señal DRDY debería estar conectada al pin de interrupción del
procesador como se muestra en la fig. 21, pero el Propeller no maneja
interrupciones. Por lo tanto, lo que se implementó fue un detector de flanco de
bajada para la señal DRDY en un pin de propósito general dentro del programa
“Señal de prueba” (ver Fig. 22).
54
Figura 21: Configuración Estándar ADS1299 – Procesador. (Texas Instruments®, 2012)
Figura 22: Detector de flanco implementado en lenguaje SPIN. (Los Autores, 2016)
55
Se realizó la respectiva configuración de los registros del ADS1299 para realizar la
conversión de la señal de prueba (Señal cuadrada, f=1Hz) utilizando la mínima
frecuencia de muestreo (250 SPS):
fCLK = 2.048MHz
fMOD =fCLK
2=
2.048MHz
2= 1024KHz
DATA RATE = fMOD
4096=
1024KHz
4096= 250
El ADS1299 cuenta con frecuencias de muestreo más altas, el registro CONFIG1
permite escoger entre las siguientes frecuencias de muestreo.
Tabla 7: Frecuencias de muestreo ADS1299. (Texas Instruments®, 2012)
BIT DATA RATE SAMPLE RATE
000 𝑓𝑀𝑂𝐷/64 16kSPS
001 𝑓𝑀𝑂𝐷/128 8kSPS
010 𝑓𝑀𝑂𝐷/256 4kSPS
011 𝑓𝑀𝑂𝐷/512 2kSPS
100 𝑓𝑀𝑂𝐷/1024 1kSPS
101 𝑓𝑀𝑂𝐷/2048 500SPS
110 (default) 𝑓𝑀𝑂𝐷/4096 250SPS
111 Do not use n/a
Lo que se espera es ver reconstruida la señal cuadrada de prueba con las 250
SPS que capturaría el ADS por medio de su canal 1.
La comunicación entre el controlador P8X32A y el conversor ADS1299 se realiza
por medio de SPI (Serial Peripheral Interface). El controlador no cuenta con pines
de aplicación específica para realizar este tipo de comunicación, pero cuenta con
dos librerías de comunicación SPI realizadas en lenguaje “spin” y en
“Ensamblador propeller” la cual permite utilizar los pines de propósito general para
realizar la comunicación.
Los pines que se pueden configurar son los siguientes:
P28 - I2C SCL connection to optional, external EEPROM.
P29 - I2C SDA connection to optional, external EEPROM.
56
P30 - Serial Tx to host.
P31 - Serial Rx from host.
Los resultados de la prueba con el programa “Señal de prueba” fueron los
siguientes.
Se capturan 216 bits, de los cuales 24 bits pertenecen al registro STATUS y el
resto son los 8 canales del ASIC. La Figura 23 muestra el esquema de datos del
bus SPI de ADS1299.
Figura 23: Esquema de datos bus SPI. (Texas Instruments®, 2012)
Se grafica la captura de varios datos del canal uno en la herramienta MATLAB y
se obtiene una gráfica, en la que al parecer le hacen falta muchas muestras para
poder obtener una forma de onda cuadrada.
Figura 24: Señal de prueba obtenida con lenguaje SPIN. (Los Autores, 2016)
57
Después de analizar los datos y buscar explicaciones, se detecta que se
presentan problemas en la captura de los datos ya que las instrucciones del
lenguaje “spin” y las librerías se demoran muchos ciclos de reloj para ser
ejecutados, estos tiempos se presentan a continuación.
Ciclos de reloj para sacar los 216 bits: 4.277.072
Tiempo = 4.277.072 ∗ 1
80MHz= 53.46ms
Data Rate = 250 SPS = 1
250 SPS= 4ms
Este tiempo de ejecución de las instrucciones es mucho mayor comparado con el
de la conversión, esto se debe a que las instrucciones y librería SPI en lenguaje
SPIN se demoran demasiados ciclos de reloj para ejecutarse.
Si se utiliza la librería “SPI_Asm”, realizada en ensamblador propeller, se logra
disminuir considerablemente los ciclos de reloj como se muestra a continuación.
Ciclos de reloj para sacar los 216 bits: 89.840
Tiempo = 89.840 ∗ 1
80MHz= 1.123ms
De esta manera si se podrían adquirir los datos utilizando la frecuencia de
muestreo de 250 SPS, sin embargo este es el muestreo mínimo que puede
realizar el conversor, de tal manera que si utilizara una frecuencia de muestreo
mayor se tendría el mismo inconveniente. Se debe tener en cuenta que estos son
los valores mínimos de ciclos de reloj para lograr la comunicación, faltaría agregar
el tiempo que llevan las otras instrucciones para lograr la captura completa de los
datos.
En general, la problemática que se tuvo es que las instrucciones del leguaje SPIN
tardan demasiados ciclos de reloj, igualmente que el reloj de la comunicación SPI.
Por estas razones no se lograban adquirir las 250 muestras en su totalidad.
Otra razón por la que se presentan problemas en la captura de los datos es que el
Propeller no cuenta con pines de aplicación específica para comunicación SPI. Lo
que se configuró fueron unos pines de propósito general para realizar este tipo de
comunicación, utilizando librerías desarrolladas en lenguaje SPIN y lenguaje
ensamblador del Propeller. Estas librerías son óptimas para bajas velocidades del
58
reloj de la comunicación SPI, pero al aplicarlas a nuestro requerimiento las
librerías no son suficientes para procesar la captura de la totalidad de los datos.
Debido a que el lenguaje SPIN es un lenguaje interpretado, la ejecución de sus
instrucciones tardan más ciclos de reloj que los esperados normalmente en un
lenguaje de programación. Por lo tanto se procede a realizar estas mismas
pruebas en códigos fuentes desarrollados en lenguaje C.
4.3.2. Programación en lenguaje C Propeller:
Para la implementación de los códigos fuente en lenguaje C de las pruebas
anteriormente mencionadas se utiliza la herramienta “Propeller GCC Simple IDE”
el cual es un compilador de lenguaje C para la tarjeta de desarrollo Propeller
QuickStart. Se inicia realizando la configuración de las librerías en lenguaje C
necesarias para la comunicación SPI entre el procesador y el circuito integrado.
Con la finalidad de mejorar el tiempo de captura de los datos y reducir los ciclos de
reloj que tardan las instrucciones para este proceso, se busca utilizar la memoria
EPROM del Propeller. Los datos capturados se guardan en la memoria, y
finalizado el proceso de muestreo se leen desde la EPROM y se imprimen en
pantalla para su verificación. El protocolo de comunicación usado por la memoria
EPROM de referencia 24LC256ST es I2C (Inter-Integrated Circuit).
Realizadas las configuraciones de las librerías se procede a realizar la prueba de
validación de comunicación entre el Propeller QuickStart y el circuito integrado
ADS1299.
El programa “ID_EPROM.c”, homologo al programa “Lectura_RID.spin”, configura
los registros necesarios para comprobar la comunicación (ver figura 25). Al
ejecutar el programa se guarda el estado del ID CONTROL REGISTER en una
posición de la memoria EPROM. Al leer esta posición de memoria se obtiene el
número hexadecimal 3E, el cual comprueba la identificación del ADS1299.
59
Figura 25: Programa ID_EPROM en lenguaje C. (Los Autores, 2016)
Posteriormente, siguiendo la serie de pruebas realizadas inicialmente, se genera
el programa “RDATAC_EPROM.c” equivalente al anteriormente usado “Señal de
prueba”.
En general, en éste programa, se configuran los respectivos registros para realizar
la captura multicanal de la señal cuadrada de prueba que genera internamente el
ADS1299. La captura de los datos se guarda en la memoria EPROM y
posteriormente se imprime en pantalla cada uno de los valores a los que equivalen
las muestras. Del mismo modo, se desarrolló un detector de flanco de bajada de la
señal DRDY con la finalidad de realizar la captura de la muestra cada que esta
variable se active.
Figura 26: Detector de flanco implementado en lenguaje C. (Los Autores, 2016)
60
Como resultado de esta prueba se obtienen inconvenientes similares a los de las
pruebas realizadas con lenguaje SPIN.
A pesar de que las instrucciones de lenguaje C se ejecutan más rápido y la
captura de muestras dura menos ciclos de reloj, los datos capturados no son
suficientes para replicar la señal original. Se está perdiendo mucha información y
no se obtienen las 250 SPS que se esperaban.
El registro CONFIG1: Configuration Register 1 del ADS1299, es el utilizado para
configurar la frecuencia de muestreo del conversor A/D. 250 SPS es la frecuencia
de muestreo más baja que se puede configurar en el ASIC. Para el desarrollo del
presente proyecto se planea utilizar frecuencias de muestreo mayores a 250SPS
con el motivo de que la reconstrucción de las señales sea lo más parecido a la
señal EEG original. Evidentemente, si se configura el registro CONFIG1 para
frecuencias mayores a 250SPS los problemas presentados van a agravarse y no
se logrará tener la cantidad de muestras necesarias para graficar un EEG
estándar.
4.3.3. Problema del Propeller y cambio de procesador
Se llega a la conclusión de que los problemas presentados parten del hecho de
que el procesador P8X32A no tiene pines de aplicación específica para
comunicación SPI. Esto genera que la frecuencia de reloj para la comunicación
SPI (SCLK) del propeller se estime en aproximadamente 100KHz, cuando en
realidad lo que se busca es que la frecuencia para una óptima captura de los
datos sea por lo menos del orden de los MHz e ir aumentando dependiendo de la
frecuencia de muestreo configurada en el ASIC. Lo anterior se puede interpretar
básicamente en que la captura de los datos en el procesador no logra ser más
rápida que el envió de las muestras por parte del circuito integrado ADS1299.
Por otra parte, las librerías utilizadas para configurar los pines de propósito
general del Propeller QuickStar para realizar comunicación SPI no son las más
óptimas para el tipo de aplicación que tiene como objetivo general el presente
proyecto de grado. Las instrucciones con que fueron desarrolladas tanto para
lenguaje SPIN como lenguaje C requieren de demasiados ciclos de máquina para
ser ejecutadas en su totalidad.
61
Debido a los inconvenientes presentados con la tarjeta de desarrollo Propeller
QuickStart durante el desarrollo del proyecto, se llega al consolidado entre
integrantes del grupo y director del proyecto de buscar un nuevo procesador que
se ajuste mejor a los requerimientos para interactuar con el circuito integrado
ADS1299 de la manera adecuada.
4.3.4. Raspberry Pi:
Dentro de la búsqueda de un nuevo procesador se identifica la tarjeta de
desarrollo llamada “Raspberry PI”.
Figura 27: Tarjeta de desarrollo Raspberry PI. (Raspberry PI Foundation)
En primera instancia se da un acercamiento a esta tarjeta de desarrollo debido a
que dentro del Laboratorio de electrónica aplicada LEA de la universidad de San
Buenaventura Cali, se desarrolló el proyecto titulado “Sistema embebido destinado
a la detección y eliminación de artefactos en señales EEG para aplicaciones
médicas” en donde se utiliza la tarjeta de desarrollo Raspberry PI como sistema
embebido para procesamiento de señales del electroencefalograma registradas en
una base de datos.
62
Raspberry PI es una microcomputadora de bajo costo con una tarjeta cuya
implementación permite conectarse a un monitor o a un televisor, además de ser
capaz de usar un teclado y un mouse estándar. Es un dispositivo pequeño que
permite explorar la computación para aprender a programar en lenguajes como
Python, C y Java. Esta tarjeta logra hacer todas las funciones básicas de un PC,
desde navegar en la web hasta reproducir un video en HD. (Raspberry PI
Foundation)
Una de sus mayores ventajas parte de que su distribución de software es de
código abierto con un sistema operativo basado en Linux. Tiene la posibilidad de
desarrollar aplicaciones concretas, y en este sentido puede funcionar como
procesador principal de un sistema embebido.
La placa de Raspberry PI tiene unas dimensiones aproximadas de 8.5 x 5.6 [cm]
con una ligera sobresaliente para la inserción de una memoria micro SD. Pesa
aproximadamente 45 [gr] lo que la hace una tarjeta de fácil portabilidad.
Figura 28: Descripción de Hardware Raspberry PI. (Raspberry PI Foundation)
63
Se evalúa la posibilidad de que la tarjeta de desarrollo “Raspberry PI” sea utilizada
en el presente proyecto como nuevo procesador con el objetivo de solucionar los
problemas presentados con el procesador elegido inicialmente (Propeller
P8X32A). Se procede a evaluar si “Raspberry PI” cumple con las características
necesarias para la comunicación SPI correcta con el ADS1299.
A diferencia del procesador anterior, Rasberry PI está equipada con un bus de
comunicación SPI (ver figura 29) que cuenta con dos “chip selects” (Raspberry PI
Foundation). Se verifica que el reloj de la comunicación SPI soporte frecuencias
mayores a 2MHz, con el motivo de realizar una captura completa de los datos
provenientes desde el ASIC.
Figura 29: Descripción del Bus de comunicación de Raspberry PI. (Raspberry PI Foundation)
Raspberry PI soporta un rango de velocidades para comunicación SPI desde 7629
Hz hasta 125 MHz, lo que es suficiente para generar una comunicación correcta,
considerando que las frecuencias necesarias para recoger las muestras que se
64
generan en el ASIC se encuentran dentro del rango descrito anteriormente.
(Raspberry PI Foundation).
Posterior a la evaluación de las características técnicas de la tarjeta Raspberry Pi
y la verificación de que cumpliera con los requerimientos necesarios para dar
continuación al presente proyecto, se selecciona esta tarjeta como nuevo
procesador. Esta decisión fue motivada debido a que esta tarjeta de desarrollo
también integra otras cualidades ideales planteadas desde el inicio del desarrollo
del trabajo. Además, como valor agregado, tiene la capacidad de manejar
interfaces graficas de manera directa, se puede programar en distintos lenguajes y
permite el uso de librerías propias de los lenguajes en particular.
4.3.4.1. Configuración de la tarjeta “Raspberry Pi”:
Con el fin de dar inicio al uso del nuevo procesador se deben realizar las
configuraciones necesarias para trabajar con la tarjeta de desarrollo. Estas
configuraciones empiezan con la instalación del sistema operativo, para lo cual es
necesario una memoria micro SD de capacidad suficiente para el almacenamiento
del sistema a instalarse. Para este proyecto se utiliza una memoria de 8 GB.
El sistema operativo a instalar se obtiene directamente de la página web del
fabricante ingresando al enlace que se presenta a continuación:
http://www.raspberrypi.org/downloads/raspbian
Raspberry ofrece dos versiones de sistema operativo RASPBIAN JESSIE de la
siguiente manera: “RASPBIAN JESSIE full desktop image” y “RAPSBIAN JESSIE
LITE minimal image”. En el proyecto en desarrollo se decide trabajar con la
versión full del sistema operativo.
La diferencia más importante entre estas dos versiones es que la versión full
presenta una interfaz gráfica completa al usuario en donde permite tener un
escritorio y explorador de archivos predeterminado, por el contrario, la versión
“minimal image” como su nombre lo indica presenta únicamente una ventana de
terminal de comandos donde el usuario únicamente puede interactuar por medio
de instrucciones.
Para llevar a cabo la instalación del sistema operativo en la memoria SD es
necesario ejecutar con antelación el programa Win32DiskImager disponible en el
enlace:
65
http://sourceforge.net/projects/win32diskimager/files/latest/download
El programa Win32DiskImager se ejecuta en modo administrador dentro un PC en
el que se ha insertado con anterioridad la memoria micro SD para instalar el
sistema operativo “RAPSBIAN JESSIE” en la ruta de ubicación de la memoria.
Posteriormente se selecciona el archivo imagen referente al sistema operativo
RASPBIAN JESSIE y se pulsa la opción Write.
Figura 30: Instalación software Raspbian Jessie. (Los Autores, 2016)
Finalizada la instalación del sistema operativo en la memoria SD, ésta se inserta
en la tarjeta Raspberry PI para realizar la configuración inicial del sistema. De esta
manera el dispositivo quedará listo para su funcionamiento puesto que por defecto
tiene instalada la herramienta de programación Python 2.7 con la cual se trabajará
en el proyecto en desarrollo.
Python 2.7 es un lenguaje de programación desarrollado como una herramienta
matemática óptima para procesos cuantitativos que permite la implementación de
gráficas. Es un lenguaje global en el que la programación no se sujeta al
dispositivo donde se esté desarrollando el código fuente.
Para el uso de este lenguaje en el sistema operativo “Raspbian Jessie” es
necesario la configuración de sus librerías, las cuales se instalan a través de la
ejecución de comandos particulares en el terminal de la tarjeta Raspberry PI.
66
A continuación se presentan las librerías configuradas en el sistema operativo de
Rasperry PI y sus comandos de instalación.
RPi.GPIO:
Esta librería se configura con el objetivo de habilitar el uso de los pines de
propósito general (General Pines Input Output) de la tarjeta Raspberry PI.
Se ejecuta el comando “sudo apt-get install python-rpi.gpio”.
NumPy:
La librería NumPy se define como una extensión del lenguaje Python que le
agrega mayor soporte para operaciones con vectores y matrices, constituyendo
una biblioteca de funciones matemáticas de alto nivel.
Se ejecuta el comando “sudo pip-2.7 install – upgrade numpy”.
Binascii:
Con la librería Binascii se podrá realizar el cambio de base numérica de datos
utilizados dentro del programa fuente.
Librería instalada por defecto en el sistema operativo.
Time:
Librería para hacer retardos de tiempo dentro del programa.
Librería instalada por defecto en el sistema operativo.
CSV:
Esta herramienta permite importar hacia el programa o exportar desde el
programa archivos con extensión “.csv”.
MatplotLib.pyplot:
Esta librería se utiliza para generar gráficas a partir de datos contenidos en
listas o arreglos.
Se ejecuta el comando “sudo pip-2.7 install – upgrade matplotlib”.
Spidev:
Permite utilizar lo pines de aplicación específica para comunicación SPI en
lenguaje Python.
Para la configuración se sigue la siguiente ruta en la tarjeta Raspberry Pi:
Menú, preferences, Raspberry Pi configuration, en la ventana de configuración
se abre la pestaña interfaces y se habilita la comunicación SPI (ver figura 31).
67
Figura 31: Rasberry Pi Configuración. (Los Autores, 2016)
Posterior a estas modificaciones el sistema se reinicia automáticamente y se
verifica que realmente la comunicación SPI quedo habilitada escribiendo el
comando “lsmod” en el terminal y se debe observar en la lista que arroja que
exista el modulo “spi_bcm2835”.
Ahora se confirma la instalación de la librería con el comando “apt-mark showauto
| grep spi” y se debe observar “python-spidev”.
Para realizar la correcta instalación de las librerías mencionadas anteriormente, se
debe tener en cuenta que la tarjeta Raspberry PI debe tener conexión a internet.
Habiendo configurado en su totalidad la tarjeta Raspberry PI se procede a
implementar nuevamente el prototipo electrónico que se busca desarrollar en el
presente proyecto, conectando la tarjeta del ADS1299 con el nuevo procesador
Raspberry PI para posteriormente ejecutar las pruebas realizadas con el
procesador anterior y dar continuidad al proceso de nuevos resultados.
68
La figura 32 muestra la conexión realizada entre al circuito integrado ADS1299 y la
tarjeta de desarrollo Raspberry PI.
Figura 32: Esquema de conexión Raspberry Pi – ADS1299. (Los Autores, 2016)
4.3.5. Programación en lenguaje Python 2.7
Al igual que con el procesador anterior se da inicio a la programación de este
dispositivo implementando cada una de las pruebas anteriormente descritas en la
cuales se obtuvieron óptimos resultados.
Para realizar estas pruebas y dar continuidad con el desarrollo del proyecto se
utilizó una tarjeta suministrada por el grupo de investigación LEA en la cual se
encuentra instalado el integrado ADS1299 con sus respectivas conexiones para su
uso (figura 33). Cabe aclarar que esta tarjeta solo tiene habilitado cuatro canales
de las ocho entradas diferenciales que posee el circuito, razón por la que se
realizaron los primeros avances restringiéndonos al uso de los canales habilitados.
69
Figura 33: Board ADS1299 con cuatro canales habilitados. (Los Autores, 2016)
4.3.6. Señal de prueba interna
Se procedió con la captura de la señal cuadra de prueba que se genera dentro del
circuito integrado ADS1299 para verificar su correcto funcionamiento. Teniendo en
cuenta que se espera una señal de amplitud pico de 1.875mV y de frecuencia
aproximada de 1Hz como se describió cuando se hizo la prueba con el procesador
anterior, se configuran los respectivos registros para adquirir cuatro canales,
realizar la captura a una frecuencia de muestreo de 1000 SPS y utilizar el modo de
lectura continuo.
70
Tabla 8: Configuración de registros para captura de señal de prueba interna. (Los Autores, 2016)
REGISTRO DIRECCIÓN
(HEX)
PRIMER
OPCODE
(HEX)
SEGUNDO
OPCODE
(HEX)
VALOR (HEX)
CONFIG1 01 41 00 94
CONFIG2 02 42 00 D0
CONFIG3 03 43 00 E0
CH1SET 05 45 00 05
CH2SET 06 46 00 05
CH3SET 07 47 00 05
CH4SET 08 48 00 05
CH5SET 09 49 00 E0
CH6SET 0A 4A 00 E0
CH7SET 0B 4B 00 E0
CH8SET 0C 4C 00 E0
Las señales adquiridas en los cuatro canales se obtuvieron de manera correcta
bajo la salvedad que presentaban niveles de DC diferentes en cada canal, esto se
ajustó de manera matemática aplicando una formula dentro del código fuente para
que las gráficas se mostrarán de manera correcta.
La fórmula general utilizada para corregir estos niveles es al siguiente:
𝐶𝐴𝑁𝐴𝐿𝑋 = 𝐶𝐴𝑁𝐴𝐿𝑋 − (𝑉𝑃𝐶𝐴𝑁𝐴𝐿𝑋 − 𝑉𝑃𝐸𝑆𝑃𝐸𝑅𝐴𝐷𝑂)
Dónde:
𝐶𝐴𝑁𝐴𝐿𝑋 = 𝑀𝑈𝐸𝑆𝑇𝑅𝐴 𝐴 𝐺𝑅𝐴𝐹𝐼𝐶𝐴𝑅 𝑃𝑂𝑅 𝐶𝐴𝐷𝐴 𝐶𝐴𝑁𝐴𝐿
𝑉𝑃𝐶𝐴𝑁𝐴𝐿𝑋 = 𝑉𝑂𝐿𝑇𝐴𝐽𝐸 𝑃𝐼𝐶𝑂 𝐶𝑂𝑁 𝑁𝐼𝑉𝐸𝐿 𝐷𝐸 𝐷𝐶 𝐷𝐸 𝐶𝐴𝐷𝐴 𝐶𝐴𝑁𝐴𝐿
𝑉𝑃𝐸𝑆𝑃𝐸𝑅𝐴𝐷𝑂 = 𝑉𝑂𝐿𝑇𝐴𝐽𝐸 𝑃𝐼𝐶𝑂 𝐸𝑆𝑃𝐸𝑅𝐴𝐷𝑂 𝑃𝑂𝑅 𝐶𝐴𝑁𝐴𝐿 (1.875𝑚𝑉)
Aplicando los ajustes correspondientes, se grafica la señal de prueba para cada
uno de los canales habilitados durante un tiempo de cinco segundos cómo se
muestra a continuación.
71
Figura 34: Prueba de señal interna para cuatro canales. (Los Autores, 2016)
Se puede observar que los resultados son los esperados y que la señal de prueba
es la misma en cada uno de los canales.
4.3.7. Señal de prueba externa
Una vez capturada la señal de prueba interna que se genera dentro del circuito
integrado, se realizan pruebas con una señal externa. Esta nueva señal se obtiene
de un generador de señales sinusoidales y verificando su amplitud y frecuencia
utilizando un osciloscopio.
La señal externa se conecta a cada uno de los canales haciendo uso de su
entrada diferencial y conectando el BIAS (Pin 62 - BIASN IN) el cual es una señal
de entrada que sirve como referencia al integrado. El circuito esquemático para la
conexión de la señal externa se muestra en la figura 35.
72
Figura 35: Circuito esquemático para conexión de señal de prueba externa. (Los Autores, 2016)
Se configuran los respectivos registros para adquirir inicialmente un canal, realizar
la captura de la señal a una frecuencia de muestreo de 1000 SPS y utilizar el
modo de lectura continuo. Se grafica la señal de prueba para cada uno de los
canales habilitados durante un tiempo de cinco segundos (figura 36).
Figura 36: Señal de prueba externa. (Los Autores, 2016)
73
Como se puede observar en la figura anterior, haciendo la captura de los datos en
modo de lectura continua RDATAC, algunas de las muestras tienen valor cero. El
modo de lectura RDATAC es recomendado para la captura de datos donde los
registros del integrado se establecen una sola vez y no se reconfiguran. En el
desarrollo de este proyecto va a ser necesario reconfigurar registros durante la
captura de los datos, por esta razón se realiza el cambio al modo de lectura
RDATA (read data) debido a que es el más adecuado para los sistemas de tipo
EEG, donde los valores de los registros deben ser leídos o cambian a menudo
durante la captura de los datos.
El siguiente diagrama de tiempos describe la manera en cómo se capturan los
datos con el modo RDATA.
Figura 37: Diagrama de tiempos captura de datos en modo RDATA. (Texas Instruments®, 2012)
Cada vez que detecta un flanco de bajada en la señal DRDY (Data Ready) se
indica que los datos correspondientes a una muestra ya están listos para que el
procesador los capture. Antes de capturar los datos siempre se debe escribir el
respectivo OPCODE del registro RDATA y posteriormente realizar la captura.
Se realiza nuevamente la captura de la señal de prueba externa configurando el
generador de señales a 2Hz y entrada al canal de 200mVp El circuito integrado se
configuró para ganancia 2, los resultados se muestran en la figura 38.
74
Figura 38: Señal de prueba externa a 2Hz, 200mVp, ganancia 2. (Los Autores, 2016)
Se puede apreciar que la señal con el modo de lectura RDATA se captura sin los
errores anteriores, sin embargo la señal no es la que se espera en su totalidad
debido a que la amplitud no corresponde de acuerdo con la ganancia programada.
La frecuencia y forma de la señal si son las correctas.
Para corregir el problema de la amplitud se realizan una serie de capturas
programando el integrado con ganancia unitaria. Lo que se espera ver es que el
voltaje aplicado a la entrada sea el mismo a la salida.
Cuando se realizó esta serie de capturas se observa que los voltajes no
corresponden con los esperados, por lo tanto se procede a tabular los valores de
voltaje de entrada con los respectivos valores de voltaje de salida con el fin de
verificar si existe una proporción constante en los aumentos de voltaje de salida
con el integrado programado para ganancia unitaria. Los resultados se consignan
en la tabla 9.
75
Tabla 9: Proporción de aumento en voltaje de salida con ganancia unitaria.
Voltaje de Entrada (V) Ganancia Voltaje de Salida (V) Proporción Voltaje Corregido
0,050 1 0,08225 0,60790 0,050
0,100 1 0,16493 0,60634 0,100
0,132 1 0,22161 0,59564 0,132
0,172 1 0,28267 0,60848 0,172
0,200 1 0,32958 0,60683 0,200
0,230 1 0,38472 0,59783 0,230
0,280 1 0,46218 0,60582 0,280
0,300 1 0,49343 0,60799 0,300
De acuerdo a los resultados, se puede apreciar que la proporción en el aumento
de voltaje de salida sí es constante. Para corregir estos aumentos de voltaje,
dentro del programa de captura de datos se multiplica el promedio de las
proporciones obtenidas por cada muestra.
Posterior a estas correcciones se procede a realizar una nueva captura de datos
para verificar que el voltaje de salida corresponda al esperado, los resultados se
muestran a continuación.
Figura 39: Señal de prueba externa a 5Hz, 140mVp, ganancia 1. (Los Autores, 2016)
76
Figura 40: Señal de prueba externa a 5Hz, 70mVp, ganancia 4. (Los Autores, 2016)
Se logra apreciar que después de las correcciones los resultados fueron los
esperados y las gráficas corresponden a los valores de prueba.
Se realiza un periodo de prueba con valores aleatorios y de igual manera los datos
son los esperados.
4.3.8. Generador Quantium Medical (QM)
El generador Quantium Medical (ver figura 41) es una herramienta de simulación
de señales de EEG que proporciona cuatro tipos de señales distintas del orden de
µV y rango de frecuencias de 4Hz – 40Hz. Estas señales son predeterminadas
para indicar al usuario lo que debe observar en la captura de sus datos, las
señales se activan solo una a la vez y cada una de estas señales posee un
indicativo LED para mostrar al usuario que tipo de señal obtendrá a la salida del
generador.
El Generador QM está diseñado para hacer pruebas en un solo canal puesto que
sus puertos de salida corresponden a positivo, negativo y BIAS.
El generador se alimenta con un tipo de fuente especial para equipos médicos,
puesto que su objetivo es cumplir con la respectiva normativa internacional por la
que se rige, además de contar con filtros especiales para la reducción de
77
frecuencias no deseadas como la de la red doméstica (50 Hz – 60Hz) y que las
señales que reproduzca sean lo más parecidas a las de un EEG estándar.
Figura 41: Generador Quantium Medical. (Los Autores, 2016)
Figura 42: Fuente de alimentación del Generador Quantium Medical. (Los Autores, 2016)
78
Posterior a las pruebas realizadas con el generador de señales sinusoidales, se
utilizó el generador QM para realizar captura de datos. El objetivo de estas
capturas es poder simular en un entorno más cercano las señales de un EEG.
Para estas pruebas se tuvieron en cuenta una serie de cuidados para que el
dispositivo de captura no adquiriera señales no deseadas. Lo primero que se
implementó fue adicionar un supresor de polo en cada uno de los dispositivos
utilizados dentro del prototipo electrónico con el fin de reducir el ruido producido
por la red de 60 Hz. Así mismo, se debe tener en cuenta que la conexión entre el
generador QM y la tarjeta electrónica del ADS1299 debe ser implementada de
manera ordenada y con insumos de buena calidad, es decir, se debe evitar cables
y conectores en mal estado.
En las primeras capturas, se tomaron datos para un periodo de menos de diez
segundos, se observa que la señal capturada corresponde a la esperada, sin
embargo, presenta un nivel de DC similar al de las pruebas anteriores.
Las figuras 43 y 44 muestran la señal capturada utilizando el generador QM.
Figura 43: Captura de Señal generador QM con nivel de DC. (Los Autores, 2016)
79
Figura 44: Captura de Señal generador QM con nivel de DC pasando de un tipo de señal a otro.
(Los Autores, 2016)
Se realiza la corrección del nivel de DC implementada por software para realizar
nuevas capturas y verificar el funcionamiento del programa. Se pudo observar que
se corrige el nivel de DC, sin embargo la señal se estabiliza en cero
aproximadamente en un tiempo de un segundo.
Figura 45: Captura de Señal generador QM sin nivel de DC. (Los Autores, 2016)
80
Para cada uno de los canales habilitados en la tarjeta ADS1299 se realizan
capturas obteniendo resultados de manera correcta. Se puede concluir que el
desarrollo implementado hasta el momento funciona de manera correcta y
responde a señales de tipo EEG estándar.
4.3.9. Detección de LEAD-OFF
El LEAD-OFF es detectar la desconexión de algún electrodo en el paciente al que
se le realiza el procedimiento de captura de EEG. La importancia de detectar estas
desconexiones se ve ligada directamente a la correcta captura de la señal puesto
que si no se tiene una buena conexión o se está completamente desconectado, se
van a capturar señales que no corresponden a las deseadas o en el peor de los
casos, no se realizara la captura de ninguna señal.
A continuación se presenta el diagrama de bloques de la detección de LEAD-OFF
para cada uno de los canales del ADS1299.
Figura 46: Diagrama de Bloques para detección de LEAD-OFF. (Texas Instruments®, 2012)
El circuito anterior se compone de manera general en cuatro etapas. Paciente,
modelo de electrodo conectado en la piel, resistencia de protección y ADS1299.
81
Los registros LOFF_SENSP y LOFF_SENSN configuran la entrada positiva y
negativa respectivamente de los canales en que se desea detectar la desconexión
del electrodo. Con los registros FLEAD_OFF, ILEAD_OFF y LOFF_FLIP se
determina la frecuencia, la magnitud y la dirección de la corriente que se utiliza
para medir la desconexión de los electrodos, respectivamente. La señal de
excitación puede ser de tipo DC o AC para esto hay que tener en cuenta que si se
elige la detección de desconexión a través de señal AC se debe especificar la
frecuencia de esta señal en el mismo registro.
En el presente proyecto para la detección de LEAD-OFF se utiliza la señal de
excitación en DC para no modificar la forma de onda de la señal capturada, lo
único que se agrega a la señal es un nivel de DC de 1.5 voltios y no se afecta su
componente frecuencial. La conexión de los electrodos debe ser continuamente
monitoreada para verificar que sea la correcta. Estos se monitorean a través del
registro STATUS cuyo formato de 24 bits se compone de la siguiente manera
(1100 + LOFF_STATP + LOFF_STATN + bits [4:7] del registro GPIO). Es
importante del registro STATUS rescatar la información de los registros
LOFF_STATP y LOFF_STATN debido a que en ellos se almacena el estado de
conexión o desconexión del electrodo positivo y negativo de cada canal.
Teniendo en cuenta el diagrama de bloques presentado, se realiza un circuito que
modela de manera general para todos los canales habilitados, un electrodo
conectado a la piel del paciente, con el objetivo de realizar las respectivas pruebas
para verificar la conexión y desconexión de los mismos. Se debe tener en cuenta
que el BIAS es común para todas las entradas diferenciales.
82
Figura 47: Modelo circuital de electrodo conectado a la piel del paciente. (Los Autores, 2016)
Las pruebas realizadas para identificar la desconexión de un electrodo se
muestran en pantalla al usuario de la siguiente manera.
Figura 48: Detección de LEAD-OFF para canales habilitados
83
Posterior a las pruebas realizadas se comprueba el óptimo funcionamiento de la
identificación de conexión o desconexión de los electrodos para cada uno de los
canales habilitados.
Se comprueba para todos los casos posibles en un entorno de prueba real como
se muestra en la figura 48.
4.3.10. Medición de impedancias
La medición de impedancias es el método mediante el cual se comprueba la
óptima conexión de un electrodo a la piel del paciente. Mediante la detección de
LEAD-OFF comprobamos que estén o no conectados los electrodos al paciente,
sin embargo la conexión debe cumplir ciertas características para la correcta
captura de la señal. En algunos casos el LEAD-OFF puede indicar que si hay
conexión, pero no detecta que no es la adecuada para obtener una buena captura.
Es de suma importancia realizar el proceso que se denomina medición de
impedancias en la conexión Electrodo-paciente para identificar que la conexión de
sensor sea la correcta. De acuerdo con el diagrama de bloques para la detección
de LEAD-OFF (figura 46), se configuran los registros FLEAD_OFF, ILEAD_OFF y
LOFF_FLIP para inyectar una señal AC a las entradas diferenciales de cada canal
y medir indirectamente la impedancia que existe entre electrodo y paciente. La
señal AC que se utiliza en este proyecto es una señal de 24 µA y 7.8Hz.
Siguiendo el modelo circuital del electrodo conectado a la piel del paciente (figura
47) se varían las resistencias R1 y R3 en un rango de 1kΩ a 15kΩ con el objetivo
de medir el voltaje pico a la entrada del canal.
Los resultados de estas mediciones se consignan en la tabla 10.
84
Tabla 10: Valor de voltaje pico medido a la entrada del canal 1 positivo
Resistencia de Prueba
(KΩ)
Valor medido multímetro
(KΩ)
Voltaje pico aplicación
desarrollada (V)
1 0,992 0,141186
1,2 1,206 0,145920
1,5 1,503 0,152433
2,2 2,16 0,166849
3,3 3,262 0,191011
3,9 3,846 0,203767
4,7 4,659 0,221827
5,6 5,492 0,239865
6,8 6,89 0,270537
8,2 8,12 0,297572
10 9,98 0,340138
12 12,19 0,386381
15 14,81 0,444367
Se procede a graficar los datos de la tabla anterior para buscar una ecuación que
los relacione. Se toma para la gráfica el voltaje pico para el eje X y los valores
medidos de resistencia para el eje Y.
85
Figura 49: Grafica del Voltaje pico de acuerdo a resistencia de prueba. (Los Autores, 2016)
De la gráfica anterior, se haya la ecuación de la recta a través de su respectiva
pendiente, donde:
𝑦 = 𝑚𝑥 + 𝑏
𝑚 = 𝑦2 − 𝑦1
𝑥2 − 𝑥1
Dónde:
𝑦2 = 14810
𝑦1 = 992
𝑥2 = 0.444367
𝑥1 = 0.141186
0
2
4
6
8
10
12
14
16
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5
RES
ISTE
NC
IA D
E P
RU
EBA
(KΩ
)
VOLTAJE PICO (V)
Medición de Voltaje Pico
86
Entonces:
𝑚 = 14810 − 992
0.444367 − 0.141186
𝒎 = 𝟒𝟓𝟓𝟕𝟔. 𝟕𝟑
Ahora:
𝑏 = 𝑦 − 𝑚𝑥
𝑏 = 14810 − (45576.73 ∗ 0.444367)
𝒃 = −𝟓𝟒𝟒𝟐. 𝟕𝟗
Finamente la ecuación de la recta es la siguiente:
𝒚 = 𝟒𝟓𝟓𝟕𝟔. 𝟕𝟑 𝒙 − 𝟓𝟒𝟒𝟐. 𝟕𝟗
Con esta ecuación se puede conocer de manera indirecta cada uno de los valores
de impedancia en las entradas diferenciales de los canales habilitados en el
ADS1299. Donde “Y” es el valor de impedancia en la entrada y depende de “X”
que es el voltaje pico medido en la entrada del canal.
Cabe aclarar que en cada una de las entradas diferenciales de los canales del
ADS1299 existe una resistencia de 5KΩ la cual no se debe tener en cuenta para el
valor de impedancia de entrada. Esto se puede relacionar con el valor de “b” que
se resta en “Y” para obtener el valor deseado.
Teniendo en cuenta lo descrito se procede a realizar una prueba de medición de
impedancias para las entradas diferenciales habilitadas en el ADS1299 haciendo
uso de una serie de resistencia cuyos valores son conocidos con anterioridad.
Los resultados se muestran en la tabla 11 junto con su porcentaje de error
respecto al valor real.
87
Tabla 11: Medición de impedancia en entradas diferenciales.
Resistencia de
Prueba (KΩ)
Valor medido
multímetro (KΩ)
Valor de impedancia
medido (KΩ)
Porcentaje
de error
1 0,992 1,02 3%
1,2 1,206 1,23 2%
1,5 1,503 1,56 4%
2,2 2,16 2,178 1%
3,3 3,262 3,283 1%
3,9 3,846 3,924 2%
4,7 4,659 4,739 2%
5,5 5,492 5,536 1%
6,8 6,89 6,99 1%
8,2 8,12 8,161 1%
10 9,98 10,003 0%
12 12,19 12,204 0%
15 14,81 14,813 0%
Los valores obtenidos se mostraron en pantalla de la siguiente manera:
Figura 50: Medición de impedancias para canales habilitados (Los Autores, 2016)
88
De acuerdo con las pruebas realizadas se comprueba el óptimo funcionamiento de
la medición de impedancias para cada uno de los canales habilitados. El
porcentaje de error obtenido es inferior al 4% lo cual se considera aceptable para
la medición.
4.3.11. Almacenamiento de datos
El almacenamiento de datos representa las capturas realizadas con el propósito
de reproducir los datos a través de la herramienta Matlab y posteriormente ser
analizadas. Para almacenar las capturas realizadas se guarda un archivo en
formato “long” el cual puede representar un dato binario de hasta 32 bits.
Se utiliza este tipo de formato debido a que cada muestra que captura el ADS1299
es de 24 bits. La forma cómo se organizan los datos para ser almacenados en el
archivo binario se representa en la siguiente serie y ésta se repite continuamente:
STATUS – CH1 – CH2 – CH3 – CH4 – CH5 – CH6 – CH7 – CH8
En el lenguaje de programación Python se utilizan los comandos “fopen” para
crear o abrir el archivo binario y “fwrite” para escribir los datos en el archivo. El
archivo formato “long” se guarda directamente en la SD Card instalada en la
tarjeta de desarrollo Raspberry Pi.
De acuerdo a las pruebas realizadas se comprueba que los datos se almacenan
de forma correcta y corresponden al orden que se describió con anterioridad, esto
se comprueba en la siguiente sección.
4.3.12. Visualización de datos almacenados
Para la visualización de los datos almacenados, se utiliza Matlab como
herramienta para obtener la gráfica de los datos. El archivo binario se extrae de la
SD Card de la tarjeta raspberry y se copia a un PC donde se almacena la
información. En Matlab se lee el archivo y se procesa para obtener la gráfica de la
captura de las señales en cada uno de los canales. El comando “fopen” abre el
archivo y “fread” lo lee (ver vigura 51).
89
Figura 51: Comando “fopen” y “fread” implementados en MatLab. (Los Autores, 2016)
En la siguiente figura se puede apreciar la gráfica desde Matlab donde se
almacenó en un archivo binario de formato “long” la señal cuadrada de prueba que
genera el ADS1299 para cada uno de los canales. Teniendo en cuenta que la
señal es generada por el propio ASIC se logra apreciar la de los 8 canales, a
pesar de tener solamente 4 canales habilitados para la captura de señales
externas.
Figura 52: Grafica desde Matlab para señal de prueba almacenada en archivo binario. (Los
Autores, 2016)
Se observa que las señales son las esperadas y que los datos se han almacenado
de manera correcta en cada uno de los canales utilizados. Así mismo, se valida
que el archivo binario logra almacenar en su totalidad la información necesaria
para reproducir la señal desde otra plataforma.
90
4.3.13. Interfaz gráfica de usuario en rapsberry pi
Una interfaz gráfica es un conjunto de imágenes y objetos que representan la
información de un sistema específico al usuario. Son principalmente utilizadas
para familiarizar y proporcionar de manera sencilla la comunicación entre el
usuario y el sistema a utilizarse. De manera general, la interfaz gráfica de usuario
es un canal que facilita la comunicación entre el usuario y el propio sistema.
En el presente proyecto se desarrolla una interfaz gráfica para que el usuario
interactúe con el proceso de captura de la señal, tenga un constante monitoreo de
la conexión y desconexión de electrodos y compruebe mediante la medición de
impedancias que los sensores se encuentran conectados de manera correcta al
paciente.
La figura 53 muestra la interfaz gráfica de usuario implementada.
Figura 53: Interfaz de usuario implementada en Raspberry Pi. (Los Autores, 2016)
91
Se puede apreciar que la interfaz gráfica de usuario cuenta con dos push-button,
uno de “START” y otro de “STOP” los cuales inician y detienen la captura de la
señal respectivamente. En la parte izquierda, cuenta con una tabla que muestra al
usuario la detección de LEAD-OFF en cada canal y en la parte derecha un listado
donde se muestra la medición de impedancias en cada una de las entradas
diferenciales de los canales utilizados para la captura.
4.3.14. PROTOCOLO DE COMUNICACIÓN
Se desarrolla un protocolo de comunicación para realizar el envío de los datos a
un dispositivo externo. Dicho dispositivo puede ser un computador, un monitor
para graficar directamente los datos u otra memoria externa que sirva como
respaldo al proceso de captura.
El protocolo se compone cuatro etapas las cuales se describen a continuación:
HEADER: Son los Bytes que componen la cabecera de los datos a enviar. En el
diseño de nuestro protocolo el Header se compone de 3 bytes. El primer Byte
corresponde al registro ID del ADS1299 (3E), el segundo byte hace referencia a la
cantidad de dispositivos de captura utilizados en el proceso (01) y el tercero y
último byte corresponde al número de canales que están siendo enviados en el
protocolo de comunicación (08). Este header se ha pensado de manera que pueda
ser utilizado para otros prototipos que utilicen un ASIC diferente al ADS1299 y/o
que incluya varios ASIC conectados en cadena.
DATOS: La trama de datos está compuesta por el registro STATUS y las señales
de los 8 canales capturados durante un segundo, esto corresponde a 27.000
Bytes.
CONTADOR: Es un contador de tamaño 1 Byte, que va desde 0 a 255, el cual
permite contar y hacer seguimiento a los paquetes enviados. Al llegar a 255, el
contador se reinicia y comienza de nuevo la cuenta de paquetes enviados.
CRC16: Es un código de corrección de errores de 2 Bytes que se agregan al final
de la trama para que el receptor pueda verificar si la transmisión de datos fue la
correcta o hubo un error durante su transmisión.
Tabla 12: Protocolo de comunicación implementado.
No. DE BYTES 3 BYTES 27.000 BYTES 1 BYTE 2 BYTES
ETAPA HEADER DATOS CONTADOR CRC16
92
CAPÍTULO V
5.1. RESULTADOS
5.1.1. Resultados de la detección de LEAD-OFF y medición de impedancias
Haciendo uso de la interfaz gráfica implementada en Raspberry Pi se sometió el
sistema desarrollado a la prueba de detección de LEAD-OFF y medición de
impedancias. El funcionamiento adecuado del procedimiento se describe a
continuación
Al pulsar “START” se inicia el proceso de detección de LEAD-OFF, en pantalla se
debe mostrar el estado de las entradas diferenciales de los canales habilitados
para la captura de señal. Existen dos estados para cada entrada, ON indica que la
entrada se encuentra conectada al paciente y OFF el caso de desconexión. En la
figura 54 se muestra la detección de LEAD-OFF con los cuatro canales habilitados
desconectados.
93
Figura 54: Detección de LEAD-OFF con canales habilitados en OFF. (Los Autores, 2016)
Una vez se cumple el proceso de detección de LEAD-OFF se procede a realizar la
medición de impedancia en cada canal, siempre y cuando al menos un canal esté
adecuadamente conectado. En la figura 55 se observa que un canal está
conectado de manera correcta cuando la entrada positiva como la negativa están
en estado “ON”. Para la prueba de medición de impedancias se utilizó el circuito
de la figura 47, el cual contiene resistencias de los valores consignados en la tabla
11. Para este caso concreto, los valores de resistencia, medidos con el multímetro
digital FLUKE, fueron: 4.659KΩ, 1.503KΩ, 14.81KΩ, 5.492KΩ.
94
Figura 55: Medición de impedancia en canal conectado. (Los Autores, 2016)
Posterior a hacer la primera medición de impedancias el sistema entra en su modo
normal de operación capturando las señales de manera continua. Se realizará
nuevamente el proceso de medición de impedancias de manera automática
pasados quince minutos o si se detecta la conexión correcta de un nuevo canal.
En la figura 56 se muestra la medición de impedancias para un nuevo canal
correctamente conectado (canal 1), y se logra apreciar que para los canales 2 y 4
no se realiza la medición puesto que no está conectado adecuadamente.
95
Figura 56: Medición de impedancia en canales 1 y 3. (Los Autores, 2016)
Para la detección de LEAD-OFF y medición de impedancias se obtienen los
resultados esperados en vista de que la aplicación responde a la manera en que
se configura.
5.1.2. Resultados de adquisición de señal con generador QM
Se confrontó el prototipo desarrollado en el presente proyecto con un prototipo
electrónico monocanal de la empresa Quantium Medical. Se realizó la conexión en
paralelo del generador QM para realizar una captura continua de cada uno de los
cuatros tipos de señales que emite el generador.
Las figuras 57 y 58 muestran la conexión en paralelo del generador y el montaje
realizado para la prueba respectivamente.
96
Figura 57: Generador QM en conexión paralela. (Los Autores, 2016)
Figura 58: Montaje realizado para captura de señal con generador QM en paralelo. (Los Autores,
2016)
97
Realizadas las capturas de la señal se generaron dos archivos en formato binario
con la finalidad de ser analizados en Matlab. Se comparan cada una de las formas
de onda obtenidas en ambos prototipos, para este análisis cabe tener en cuenta
que la tarjeta electrónica de Quantium Medical posee una frecuencia de muestreo
de 1024 SPS mientras que la del prototipo desarrollado en Raspberry Pi trabaja
con una de 1000 SPS.
A continuación se confrontan cada una de las formas de ondas obtenidas en la
captura de los cuatro tipos de señales del generador QM y por último el análisis de
los componentes frecuenciales de las señales.
98
GRÁFICAS SEÑAL1
Figura 59: Señal 1 capturada con prototipo Quantium Medical. (Los Autores, 2016)
Figura 60: Señal 1 capturada con Raspberry Pi. (Los Autores, 2016)
99
GRÁFICAS SEÑAL 2
Figura 61: Señal 2 capturada con prototipo Quantium Medical. (Los Autores, 2016)
Figura 62: Señal 2 capturada con Raspberry Pi. (Los Autores, 2016)
100
GRÁFICAS SEÑAL 3
Figura 63: Señal 3 capturada con prototipo Quantium Medical. (Los Autores, 2016)
Figura 64: Señal 3 capturada con Raspberry Pi. (Los Autores, 2016)
101
GRÁFICAS SEÑAL 4
Figura 65: Señal 4 capturada con prototipo Quantium Medical. (Los Autores, 2016)
Figura 66: Señal 4 capturada con Raspberry Pi. (Los Autores, 2016)
102
ANALISIS FRECUENCIAL
Figura 67: Análisis de componentes frecuenciales de señal capturada con prototipo Quantium
Medical. (Los Autores, 2016)
Figura 68: Análisis de componentes frecuenciales de señal capturada con Raspberry Pi. (Los
Autores, 2016)
103
Cabe aclarar que las gráficas de FFT corresponden a la totalidad de la captura, es
decir, se muestran los componentes frecuenciales de los cuatro tipos de señales
que entrega el generador QM.
Se logra apreciar en las figuras anteriores que las formas de onda corresponden a
las esperadas, sin embargo se puede apreciar que las capturadas con Raspberry
Pi tienen algunos niveles de ruido que no se corrigen a pesar de aplicar el filtrado
de 60 Hz correspondiente. Respecto a las gráficas de análisis de frecuencia, se
visualiza claramente que las componentes frecuenciales del ruido están
perturbando la señal en todo el espectro.
Se concluye que el ruido puede estar inducido por la plaqueta que se conecta a
Raspberry Pi para la captura de la señal junto con las conexiones que se realizan.
Por ejemplo, se utiliza como puente un protoboard para la conexión del cable
desde el generador QM a la entrada del canal habilitado para esta prueba.
Comparado con el prototipo Quantum Medical éste tiene integrado el conector al
generador QM de manera directa.
Otra hipótesis es que se inducen interferencias eléctricas externas de las fuentes
de poder y las líneas de voltaje externas al prototipo.
Por último es posible que se esté presentando perdida de muestras durante la
captura de la señal. Para comprobar si esto sucede se procede a implementar una
captura de pocos segundos disminuyendo la frecuencia de muestreo a 250 SPS y
descartando la detección de LEAD-OFF y medición de impedancias con el
propósito de disminuir los procesos dentro de la captura de la señal.
Adicionalmente se realiza la medición de cuánto tiempo se demora en capturar las
250 muestras lo que debería corresponder a un segundo. Se realizaron capturas a
diferentes SPS y en los diferentes casos las muestras corresponden a la totalidad
de las esperadas y no se pierden datos, sin embargo el ruido persiste dentro de la
señal.
104
Figura 69: Análisis de componentes frecuenciales de señal capturada con Raspberry Pi a 250 SPS.
(Los Autores, 2016)
5.1.3. Resultados de adquisición de señal en paciente
Para finalizar las pruebas del prototipo electrónico desarrollado se realiza una
captura de señal EEG en un paciente. Lo que se busca es implementar el
desarrollo en un entorno real utilizando los insumos comunes para este tipo de
procedimientos.
La captura se realiza a través de electrodos los cuales se posicionan en la parte
frontal en búsqueda de una impedancia adecuada para la captura de la señal. Se
habilita un canal del prototipo desarrollado y se posicionan los electrodos tal como
se muestra en la figura 70.
Figura 70: Posicionamiento de electrodos para captura de EEG (Los Autores, 2016)
105
Posterior a la conexión de la entrada positiva, negativa y BIAS se procede a
verificar la conexión adecuada de los electrodos mediante la detección de LEAD-
OFF. El paso a seguir es la medición de impedancias donde se obtienen valores
superiores a 10KΩ.
Se debe tener en cuenta que para la captura de la señal EEG es importante lograr
un buen contacto de los electrodos. Medir la impedancia como se mencionó con
anterioridad, ayuda a la verificación de que este contacto sea el adecuado. Otro
punto para tener en cuenta es la calidad de los electrodos que se utilizan durante
la captura, debido a que pueden inducirse tensiones no deseadas y ruidos que
pueden reducir la calidad de la señal EEG de manera drástica.
Los ruidos que pueden aparecer dentro de la captura están relacionados de
manera directa con la impedancia medida entre el electrodo y el paciente. De
manera general se puede decir que entre menor sea la impedancia se dará una
conexión más adecuada y por tanto se reducirá el ruido dentro de la captura.
Un método para mejorar esta impedancia requiere una limpieza exhaustiva de la
piel donde se posiciona el electrodo. Adicionalmente existen geles conductores
que mejoran la conexión garantizando baja impedancia y estabilidad en la señal.
Otro factor que se debe tener en cuenta en la captura de las señales EEG son
señales que se denominan “Artefactos”. Los artefactos son señales que se
encuentran en el registro EEG, pero no se originan propiamente en el cerebro. Los
artefactos pueden dividirse en dos categorías dependiendo de su origen:
artefactos fisiológicos y artefactos no fisiológicos (Lozada & David, 2015).
Los artefactos fisiológicos surgen de una variedad de actividades corporales, que
pueden ser debidas a movimientos de la cabeza, el cuerpo o el cuero cabelludo o
potenciales bioeléctricos generados por los músculos en el cuero cabelludo,
corazón o glándulas sudoríparas (Lozada & David, 2015). Los artefactos no
fisiológicos surgen de dos fuentes principales: interferencia eléctrica externa de
fuentes de poder tales como líneas eléctricas y equipos eléctricos conectados con
el dispositivo de captura y mal funcionamiento de los electrodos, cables,
amplificadores, entre otros. (Lozada & David, 2015).
Debido al posicionamiento de los electrodos para la prueba mostrado en la figura
70 se debe tener en cuenta la posible la aparición de artefactos oculares los
cuales son producidos por el parpadeo y otros movimientos del ojo. Estos
106
movimientos causan una diferencia de potencial que es captada principalmente
por los electrodos posicionados en la parte frontal y central del cráneo. Estos
artefactos se caracterizan por inducir una señal de baja frecuencia con una alta
amplitud.
Teniendo en cuenta lo mencionado con anterioridad se procede a realizar la
captura de la señal EEG en el paciente donde se inicia la captura con el paciente
en reposo y pasados los primeros segundos se generan una serie de parpadeos
intensos con la finalidad de observar si se obtiene el registro de los artefactos
oculares.
Adicionalmente al iniciar la captura se desconecta el monitor de la tarjeta de
desarrollo con el objetivo de reducir los posibles ruidos que podrían inducirse.
Figura 71: Registro EEG capturado en paciente (Los Autores, 2016)
En la figura 71 se logra apreciar que el monitor induce ruido de 60 Hz a la señal y
que al momento de su desconexión gran parte de este ruido desaparece. Así
mimo se identifica el registro de los artefactos oculares cuando el paciente realiza
parpadeos constantes.
Se realiza una nueva captura donde se muestra el cambio de la señal cuando el
paciente deja de parpadear de manera constante y queda en absoluto reposo.
107
Figura 72: Registro EEG Con artefactos oculares y paciente en reposo. (Los Autores, 2016).
Se logra apreciar claramente la diferencia de la señal capturada cuando el
paciente parpadea y cuando deja de hacerlo, sin embargo la señal aun presenta
ruidos inducidos por las conexiones externas del sistema. Además se debe tener
en cuenta que la impedancia electrodo-paciente fue mayor a 10KΩ y esto implica
que la conexión no fue la ideal.
Se procede al uso de la herramienta Matlab para realizar el filtrado del ruido
inducido por frecuencias de 60Hz, la figura 73 muestra la gráfica con el filtro
aplicado.
108
Figura 73: Registro EEG Con artefactos oculares y paciente en reposo con filtro de 60Hz. (Los
Autores, 2016).
Figura 74: Registro EEG de artefactos oculares con filtro de 60Hz. (Los Autores, 2016).
109
Se logra apreciar que se redujo el ruido de 60 Hz aunque la señal no está libre de
ruidos en su totalidad. Se verifica que el sistema realiza la captura de las señales
pero se deben aplicar otra serie de filtros y procesamientos a la señal para poder
visualizar únicamente la actividad cerebral.
Se recomienda hacer uso de un sistema embebido destinado a la detección y
eliminación de artefactos internos y externos en señales EEG para graficar de
mejor manera la señal capturada.
110
CAPÍTULO VI
6.1. CONCLUSIONES
Se implementó el diseño de un prototipo electrónico multicanal para la captura
de señales de electroencefalograma, utilizando un circuito integrado de
aplicación específica programado con una tarjeta de desarrollo externa, que
permite la medición de biopotenciales EEG mediante el uso de electrodos y
que cumple con los aislamientos necesarios para equipos electromédicos
como se indica en la norma IEC 60601-1.
Utilizando el circuito integrado de aplicación específica ADS1299 se permite la
captura simultánea de ocho canales diferenciales reduciendo los niveles de
ruido y permitiendo programar su ganancia. Así mismo, haciendo uso de éste
integrado se tiene la posibilidad de implementar un bus de datos SPI que
permite el flujo de datos de manera simple y eficiente con la finalidad de
interactuar con un procesador externo que lo programe adecuadamente para
aplicaciones particulares.
La tarjeta de desarrollo Raspberry Pi es un dispositivo eficiente para hacer uso
del protocolo de comunicación SPI con el circuito integrado ADS1299 debido a
su amplio rango de velocidades, lo cual permite trabajar de manera adecuada
con las diferentes frecuencias de muestreo que proporciona el ASIC. De igual
manera Raspberry Pi realiza una correcta lectura y escritura de los registros
del ADS1299 lo que conlleva a una configuración eficiente para la captura de
las señales de EEG.
Se demuestra que la tarjeta de desarrollo Propeller QuickStart Rev.B a pesar
de proporcionar procesamiento de datos de manera paralela, no es la
adecuada para el desarrollo del presente proyecto debido a que no cuenta con
pines de aplicación específica para implementar un protocolo de comunicación
SPI lo que conlleva a una captura incompleta de las señales.
La detección de LEAD-OFF y medición de impedancias son factores de suma
importancia para la correcta captura de las señales de EEG debido a que
indican que el proceso se está llevando en condiciones correctas y permiten la
identificación de manera oportuna de algún evento que perturbe la captura de
la señal.
111
El ADS1299 cuenta con dos modos de captura de datos: RDATAC (modo de
lectura continuo) y RDATA (Read Data). Para la correcta captura de datos se
debe utilizar el modo RDATA debido a que es el más adecuado para los
sistemas de tipo EEG, donde los valores de los registros deben ser leídos o
reconfigurados a menudo durante la captura de los datos como se realiza
durante el proceso de detección de LEAD-OFF y medición de impedancias.
Finalmente, con las pruebas realizadas se pudo comprobar que el diseño del
prototipo implementado en el presente proyecto de grado cumple con las
especificaciones necesarias para realizar la captura de un EEG estándar,
aunque es necesario continuar trabajando especialmente en la manera de
eliminar o reducir los posibles ruidos que se pueden presentar durante la
captura de señales en un paciente real.
6.2. OBSERVACIONES Y RECOMENDACIONES
Es posible realizar la conexión en cascada de varios ADS1299 para las
aplicaciones donde sea necesario el uso de más de ocho canales, recordando
que los electroencefalogramas estándar pueden tener desde 24 hasta 32
canales diferenciales.
Es evidente que la tarjeta de desarrollo Raspberry Pi es demasiado susceptible
a los ruidos que se inducen a través de periféricos externos, lo que perturba
directamente a la señal capturada. Para reducir estos niveles de ruido no
deseado, se recomienda utilizar supresor de polo en todos los dispositivos
conectados al sistema tales como monitor y adaptador de alimentación,
además de realizar mejoras en las conexiones desde Raspberry Pi hacia la
tarjeta del ASIC.
Se sugiere el uso de electrodos de alta calidad para reducir considerablemente
los niveles de impedancia en la conexión electrodo-paciente o en su defecto el
uso de geles conductores que mejoren la calidad de la conexión.
Es posible modificar el programa para realizar la detección y eliminación de
artefactos con el fin de adquirir la señal y procesarla en tiempo real, así mismo
se recomienda utilizar un procesador que cuente con DMA (Acceso directo a
memoria) con el objetivo de aumentar el rendimiento de la aplicación.
112
REFERENCIAS
Adserá, A. (22 de Septiembre de 2009). Enciclopedia de la salud. Recuperado el 7
de Noviembre de 2014, de
http://www.enciclopediasalud.com/categorias/cerebro-y-sistema-
nervioso/articulos/electroencefalograma-eeg
Alvarez Osorio, L. (2007). Acondicionamiento de Señales Bioeléctricas. Pereira:
Programa de ingeniería eléctrica - Universidad Tecnológica de Pereira.
BALALAIKA. (2016). Balalaika Project. Recuperado el Septiembre de 2016, de
www.balalaikaproject.ru
Bowdle, A. (2006). Depth of Anesthesia Monitoring. Anesthesiology clinics, 793 -
822.
Carrión Pérez, P., Ródenas García, J., & Rieta Ibáñez, J. J. (2007). Procesado de
señales biomédicas. Castilla - La Mancha: Ediciones Universidad de
Castilla - La Mancha.
Gallego, A., Nieto, R., & García, Á. (2000). Tarjeta Universal de Desarollo para
microprocesadores. Energía y computación.
García, M., & Soria, C. (Septiembre de 2012). Revista Electrónica Anestesiar.
Recuperado el Noviembre de 2015, de http://anestesiar.org/rear/archivo-sp-
200574518/volumen-v/numero-2/456-electroencefalografia-en-cuidados-
criticos
Guerrero, F. N. (2011). Dispositivo modular para adquisición de biopotenciales con
conexión USB. XVIII Congreso Argentino de Bioingenieria SABI 2011.
Guerrero, F., Haberman, M., & Spinelli, E. (2014). Sistema multicanal para la
adquisición de biopotenciales. Revista Ingeniería Biomédica, 18-26.
Ira, R. (2007). A primer for EEG signal processing in anesthesia. Anesthesiology,
980 - 1002.
López Rosés, L. (2006). Sedation / analgesia guidelines for endoscopy. Revista
española de enfermedades digestivas, 685 - 692.
113
Lozada, C. A., & David, B. D. (2015). Sistema embebido destinado a la detección y
eliminación de artefactos en señales EEG para aplicaciones médicas.
Santiago de Cali.
Martinez, M. I. (2006). Conceptos Basicos de Electroencefalografía. Duazary, 1 -
2.
mennen medical. (2016). MedicalExpo. Recuperado el Agosto de 2016, de
www.medicalexpo.es/prod/mennen-medical/product-112973-756581.html
Montoya, J. C. (2013). Sistema de adquisición de biopotenciales para entornos
académicos. Envigado: Escuela de Ingeniería de Antioquia.
natus MedicalExpo. (2016). MedicalExpo. Recuperado el Agosto de 2016, de
www.medicalexpo.es/prod/natus-medical-incorporated/product-76900-
708553.html
natus Sistemas Latinos. (2016). Sistemas Latinos. Recuperado el Agosto de 2016,
de www.sistemaslatinos.com/natus-quantum-amplifier/
NXP Semiconductors. (09 de Febrero de 2009). PESD5V0S2BT Low capacitance
bidirectional double ESD protection diode.
Open BCI. (2016). OpenBCI. Recuperado el Septiembre de 2016, de
www.openbci.com
Open Electronics Lab. (2014). Open Harware ExG. Recuperado el Septiembre de
2016, de www.openelectronicslab.github.io/OpenHardwareExG/
Parallax INC. (2012). Manual de micro controlador Propeller versión en español
1.1.
Purdy, P., Herman, J., & Homan, R. (1987). Cerebral location of international.
Electroencephalogram Clin Neurophysiol, 376 - 382.
Raeder, J. (2014). EEG-based monitor on anti-nociception during general
anaesthesia: mission imposible? Acta Anaesthesiologica Scandinavica , 911
- 913.
Raspberry PI Foundation. (s.f.). www.raspberrypi.org. Recuperado el Marzo de
2016, de
https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/READ
ME.md
114
Recorders & Medicare Systems Pvt Ltd. (2016). MedicalExpo. Recuperado el
Agosto de 2016, de www.medicalexpo.es/prod/recorders-medicare-
systems-pvt-ltd/product-96227-757995.html
Soundarapandian, K., & Mark, B. (2010). Analog Front-End Design for ECG
Systems Using Delta-Sigma ADCs.
Texas Instruments®. (Agosto de 2012). ADS1299: Low-Noise, 8-Channel, 24-Bit
Analog Front-End for biopotential measurements. Dalas, Texas, Estados
Unidos.
Texas Instruments®. (Octubre de 2014). EEG Front-End performance
demostration Kit. Dallas, Texas, Estados unidos.
Wycherley, A., & Bembridge, J. (2014). Monitoring techniques; neuromuscular
blockade and depth of anaesthesia. Anaesthesia And Intensive Care
Medicine .
115
ANEXOS
ANEXO 1: ARTÍCULO
RASPBERRY COMO UNIDAD DE PROCESAMIENTO EN
UN SISTEMA DE ADQUISICIÓN DEL EEG
RASPBERRY AS A PROCESSING UNIT IN AN EEG
ACQUISITION SYSTEM
Cristian D. Peña-Carrera1, Ricardo Moreno-Camacho2, Daniel F. Valencia-
Vargas3, José F. Valencia-Murillo4
1 Estudiante de Ingeniería Electrónica
Programa de Ingeniería Electrónica, Facultad de Ingeniería
Universidad de San Buenaventura
2 Estudiante de Ingeniería Electrónica
Programa de Ingeniería Electrónica, Facultad de Ingeniería
Universidad de San Buenaventura
3 Ingeniero Electrónico
Programa de Ingeniería Electrónica, Facultad de Ingeniería
Universidad de San Buenaventura
116
4 PhD. en Ingeniería Biomédica
Programa de Ingeniería Electrónica, Facultad de Ingeniería
Universidad de San Buenaventura
RASPBERRY COMO UNIDAD DE PROCESAMIENTO EN
UN SISTEMA DE ADQUISICIÓN DEL EEG
Resumen:
En el presente artículo se presenta la implementación de la tarjeta de desarrollo
Rapsberry Pi como unidad de procesamiento para un sistema de adquisición de
Electroencefalograma (EEG).
Se utiliza el circuito integrado de aplicación específica ADS1299 que permite
realizar la captura de ocho canales diferenciales de manera continua con
diferentes frecuencias de muestreo.
Se muestra la identificación adecuada del sistema para la adquisición de las
señales haciendo uso de la plataforma Raspberry pi y se concluye que esta tarjeta
proporciona el bus de comunicación adecuado para la captura de las señales, sin
embargo si no se tienen los cuidados necesarios, puede llegar a ser muy
suceptible a ruidos externos del sistema.
Palabras clave: EEG, Raspberry Pi, ADS1299, tarjeta de desarrollo.
1. INTRODUCCIÓN
Para abordar el proceso de adquisición de señales de electroencefalograma se
debe tener en cuenta que las señales presentan amplitudes que oscilan entre
unos pocos micro voltios, hasta aproximadamente 100 μV y un contenido de
frecuencia entre 0.5 a 40 Hz siendo adquiridas sobre la corteza craneal para esto
117
podrían utilizarse amplificadores de bajo ruido buscando amplificar
significativamente la señal y utilizar conversores análogo-digital de baja resolución
para tener menos cambios de la señal digitalizada en el proceso de muestreo.
Otra solución es el caso contrario donde se busca dar menos ganancia a la señal
y utilizar conversores análogo-digital de alta resolución para obtener una muestra
mucho más parecida a la señal original. (Montoya, 2013)
Usualmente el sistema de instrumentación para la adquisición de biopotenciales,
es diseñado de manera discreta, es decir con componentes separados de
diferentes fabricantes de semiconductores principalmente amplificadores de
instrumentación, amplificadores operacionales y conversores análogo-digital, que
se combinan para lograr un sistema de adquisición. Con los avances tecnológicos
de los últimos años, específicamente en el área de microelectrónica, diferentes
fabricantes de semiconductores han sacado al mercado circuitos integrados de
aplicación específica (ASIC por sus siglas en inglés “Aplication Specific Integrated
Circuit”) con características mejoradas de velocidad, bajos niveles de ruido, alta
resolución y bajo consumo de energía. La función principal del ASIC es
acondicionar la señal que se toma del sensor y realizar una conversión análoga-
digital confiable. (Montoya, 2013)
Teniendo en cuenta lo anterior, una estructura básica para el diseño de un
dispositivo capaz de capturar señales de EEG es implementar un circuito
integrado de aplicación específica (ASIC) con los conversores análogo-digital
adecuados para el proceso. Dicho ASIC, siguiendo un tipo particular de
comunicación, tendrá la capacidad de ser programado por un procesador que
indique como se debe hacer el proceso de adquisición y pueda leer lo que está
pasando en el conversor. El procesador, como cerebro del procedimiento debe
guardar los datos del muestreo para posteriormente mostrar la gráfica de la señal
capturada. La Figura 1 muestra las etapas principales de un monitor estándar para
captura de señales de EEG, donde se logra apreciar que en varios puntos se
118
intercalan barreras de aislamiento para proteger la integridad física del paciente
que está en contacto con el dispositivo de captura, además de los aislamientos
apropiados del bus de voltaje y bus de datos de la tarjeta electrónica donde se
instala el ASIC al procesador.
Figura 1: Etapas de monitor EEG
Grandes empresas desarrolladoras de electrónica han implementado una serie de
tarjetas para ser utilizadas en entornos académicos con el objetivo de
contextualizar a los estudiantes con el proceso de captura de Biopotenciales.
Estas tarjetas cuentan por lo general con conversores análogo/digital de la familia
ADS129X, cuentan con 8 canales diferenciales para la adquisición de señales y
usan diferentes procesadores tales como el DSPTMS320–VC5509APGE,
PIC32MX250F128B, Atmel Atmega32u4, entre otros (Texas Instruments®, 2014;
Open BCI, 2016; BALALAIKA, 2016; Open Electronics Lab, 2014; Montoya, 2013).
Un circuito integrado que incorpora todas las características comúnmente
requeridas para aplicaciones de electroencefalograma es el ADS1299. Es un
circuito integrado de bajo nivel de ruido, multicanal, el cual incluye para cada canal
un amplificador de ganancia programable incorporado (PGA) con muestreo
simultáneo, utilizando un conversor análogo / digital (ADC) de 24 bits tipo delta-
sigma ΔΣ y la detección de desconexión de electrodos (Lead-Off) (Texas
Instruments®, 2012).
Como unidad de procesamiento la Raspberry PI es una microcomputadora de bajo
costo con una tarjeta cuya implementación permite conectarse a un monitor o a un
televisor, además de ser capaz de usar un teclado y un mouse estándar. Es un
PROTECCIÓN
DE
SOBRECARGAS
ASIC
AISLAMIENTO
DE VOLTAJE
AISLAMIENTO
DE
COMUNICACIÓN
PROCESADOR FUENTE DE
ALIMENTACIÓN
119
dispositivo pequeño que permite explorar la computación para aprender a
programar en lenguajes como Python, C y Java. Esta tarjeta logra hacer todas las
funciones básicas de un PC, desde navegar en la web hasta reproducir un video
en HD. (Raspberry PI Foundation)
Una de sus mayores ventajas parte de que su distribución de software es de
código abierto con un sistema operativo basado en Linux. Tiene la posibilidad de
desarrollar aplicaciones concretas, y en este sentido puede funcionar como
procesador principal de un sistema embebido. (Raspberry PI Foundation).
El objetivo de este artículo es mostrar la correcta configuración de la Raspberry pi
para funcionar como una unidad de procesamiento en un sistema de adquisición
de señales de electroencefalograma utilizando el circuito integrado de aplicación
específica ADS1299, aplicando la detección de Lead-Off y la medición de
impedancias en la conexión electrodo-paciente.
2. METODOLOGIA
Se desarrollarán las actividades necesarias para validar el correcto funcionamiento
del equipo, llevando acabo la configuración de la Raspberry pi para lograr la
correcta adquisición de los datos haciendo uso del protocolo de comunicación SPI.
Posteriormente se realizan pruebas de adquisición usando señales internas y
externas, asimismo usando el generador de señales Quantuim Medical que es
una herramienta de simulación de señales de EEG que proporciona cuatro tipos
de señales distintas del orden de µV y rango de frecuencias de 4Hz – 40Hz. Estas
señales son predeterminadas para indicar al usuario lo que debe observar en la
captura de sus datos, las señales se activan solo una a la vez y cada una de estas
señales posee un indicativo LED para mostrar al usuario que tipo de señal
obtendrá a la salida del generador. El Generador QM está diseñado para hacer
pruebas en un solo canal puesto que sus puertos de salida corresponden a
120
positivo, negativo y BIAS. El objetivo de estas capturas es poder simular en un
entorno más cercano las señales de un EEG y a continuación realizar pruebas en
un paciente real.
2.1. DESCRIPCIÓN DE LOS REGISTROS DEL ADS1299 PARA ADQUISICIÓN
DEL EEG
El ADS1299 tiene un multiplexor de entrada flexible, por canal que se puede
conectar independientemente a las señales generadas internamente para la
prueba de los amplificadores, medición de la temperatura, y la detección de
desconexión de electrodos (lead-off). El ADS1299 opera a velocidades de datos
de 250 SPS a 16 kSPS (SPS, samples per second). Se pueden conectar varios
dispositivos ADS1299 en cascada para incrementar el número de canales para
adquisición del EEG (Texas Instruments®, 2012).
Para la adquisición multicanal de las señales EEG se debe realizar la correcta
configuración del ADS1299, el cual cuenta con los registros necesarios para
modificar la frecuencia de muestreo, capturar señales de prueba internas o
externas, uso del BIAS interno o externo, detección de lead-off para canales
habilitados usando señales de excitación de DC o AC, habilitar o deshabilitar
canales, configuración de ganancia individual, uso de pines de propósito general
(GPIO) y seleccionar el modo en el que se desea realizar la captura de los datos.
Estos registros son modificados usando el protocolo de comunicación SPI y
aplicando los opcodes necesarios para la lectura y escritura de registros desde la
Raspberry pi al ADS1299. La configuración de estos registros permite la correcta
adquisición de los datos para posteriormente ser almacenados y procesados.
121
2.2. DESCRIPCIÓN DE LA RASPBERRY Y DE LAS LIBRERÍAS NECESARIAS
PARA SU CORRECTO FUNCIONAMIENTO
La Raspberry pi cuenta con una CPU ARM1176JZ-F a 700Mhz, 256 MB de
memoria RAM, puertos de propósito general y específicos para realizar diferentes
tipos de comunicación (ver figura 2), para el presente proyecto se utilizan los pines
de aplicación específica SPI para realizar la comunicación con el circuito integrado
ADS1299, lograr la respectiva configuración de los registros y obtener la correcta
captura de los datos.
La Raspberry Pi está equipada con un bus de comunicación SPI que cuenta con
dos “chip selects” y soporta un rango de velocidades para comunicación SPI
desde 7629 Hz hasta 125 MHz, lo que es suficiente para generar una
comunicación correcta, considerando las frecuencias necesarias para recoger las
muestras que se generan en el ASIC (Raspberry PI Foundation).
Figura 2: Descripción del Bus de comunicación de Raspberry PI. (Raspberry PI Foundation)
122
Para utilizar el protocolo de comunicación SPI en la Raspberry se deben realizar
las configuraciones necesarias para trabajar con la tarjeta de desarrollo. Estas
configuraciones empiezan con la instalación del sistema operativo, para lo cual es
necesario una memoria micro SD de capacidad suficiente para el almacenamiento
del sistema a instalarse. Para este proyecto se utiliza una memoria de 8 GB.
El sistema operativo a instalar se obtiene directamente de la página web del
fabricante ingresando al enlace que se presenta a continuación:
http://www.raspberrypi.org/downloads/raspbian
Raspberry ofrece dos versiones de sistema operativo RASPBIAN JESSIE de la
siguiente manera: “RASPBIAN JESSIE full desktop image” y “RAPSBIAN JESSIE
LITE minimal image”. En el proyecto en desarrollo se decide trabajar con la
versión full del sistema operativo.
La diferencia más importante entre estas dos versiones es que la versión full
presenta una interfaz gráfica completa al usuario en donde permite tener un
escritorio y explorador de archivos predeterminado, por el contrario, la versión
“minimal image” como su nombre lo indica presenta únicamente una ventana de
terminal de comandos donde el usuario únicamente puede interactuar por medio
de instrucciones.
Finalizada la instalación del sistema operativo en la memoria SD, ésta se inserta
en la tarjeta Raspberry PI para realizar la configuración inicial del sistema. De esta
manera el dispositivo quedará listo para su funcionamiento puesto que por defecto
tiene instalada la herramienta de programación Python 2.7 con la cual se trabajará
en el proyecto.
Python 2.7 es un lenguaje de programación desarrollado como una herramienta
matemática óptima para procesos cuantitativos que permite la implementación de
123
gráficas. Es un lenguaje global en el que la programación no se sujeta al
dispositivo donde se esté desarrollando el código fuente.
Para el uso de este lenguaje en el sistema operativo “Raspbian Jessie” es
necesario la configuración de sus librerías, las cuales se instalan a través de la
ejecución de comandos particulares en el terminal de la tarjeta Raspberry PI.
A continuación se presentan las librerías configuradas en el sistema operativo de
Rasperry PI y sus comandos de instalación.
RPi.GPIO:
Esta librería se configura con el objetivo de habilitar el uso de los pines de
propósito general (General Pines Input Output) de la tarjeta Raspberry PI.
Se ejecuta el comando “sudo apt-get install python-rpi.gpio”.
NumPy:
La librería NumPy se define como una extensión del lenguaje Python que le
agrega mayor soporte para operaciones con vectores y matrices, constituyendo
una biblioteca de funciones matemáticas de alto nivel.
Se ejecuta el comando “sudo pip-2.7 install – upgrade numpy”.
Binascii:
Con la librería Binascii se podrá realizar el cambio de base numérica de datos
utilizados dentro del programa fuente.
Librería instalada por defecto en el sistema operativo.
Time:
Librería para hacer retardos de tiempo dentro del programa.
Librería instalada por defecto en el sistema operativo.
124
MatplotLib.pyplot:
Esta librería se utiliza para generar gráficas a partir de datos contenidos en listas o
arreglos.
Se ejecuta el comando “sudo pip-2.7 install – upgrade matplotlib”.
Spidev:
Permite utilizar lo pines de aplicación específica para comunicación SPI en
lenguaje Python.
Para la configuración se sigue la siguiente ruta en la tarjeta Raspberry Pi: Menú,
preferences, Raspberry Pi configuration, en la ventana de configuración se abre la
pestaña interfaces y se habilita la comunicación SPI (ver figura 3).
Figura 3: Rasberry Pi Configuración. (Los Autores, 2016)
Posterior a estas modificaciones el sistema se reinicia automáticamente y se
verifica que realmente la comunicación SPI quedo habilitada escribiendo el
comando “lsmod” en el terminal y se debe observar en la lista que arroja que
125
exista el modulo “spi_bcm2835”.Ahora se confirma la instalación de la librería con
el comando “apt-mark showauto | grep spi” y se debe observar “python-spidev”.
Para realizar la correcta instalación de las librerías mencionadas anteriormente, se
debe tener en cuenta que la tarjeta Raspberry PI debe tener conexión a internet.
3. RESULTADOS
3.1. DIAGRAMA DE CONEXIÓN ADS1299 Y RASPBERRY / PUERTO SPI
Se realiza la conexión de la Raspberry pi con el ADS1299, teniendo en cuenta los
pines de la comunicación SPI (/CS, SCLK, MOSI y MISO) además de los pines
/RESET, START y /PWDN los cuales son usados para hacer el “POWER-UP
SEQUENCING” (Página 57 del datasheet ADS1299) y la correcta configuración del
dispositivo para la captura de datos, /DRDY el cual le indica al procesador que hay
un dato listo para ser capturado y VCC-GND que alimentan el ADS1299 desde la
Raspberry pi (ver figura 4).
Figura 4: Esquema de conexión Raspberry pi – ADS1299 (Los Autores, 2016)
Raspberry pi
2011.12 ADS1299
/CS
SCLK
MOSI
MISO
/RESET
START
/PWDN
/DRDY
VCC - GND
126
3.2. DIAGRAMA DE FLUJO DE LA APLICACIÓN DESARROLLADA
Para la captura de los 8 canales y el STATUS del ADS1299, se conecta el pin
/DRDY al pin GPIO02 de la Raspberry pi el cual es utilizado como una
interrupción, esto con el fin de realizar la captura de mil muestras que equivalen a
un segundo de muestreo y en el tiempo restante para la siguiente captura realizar
la detección de desconexión del electrodo (Lead-Off), medición de impedancias y
almacenamiento de los datos.
Para esto se usan dos modos de funcionamiento en el programa principal, el
“modo 1” es el que contiene el funcionamiento normal del equipo, es decir se
realiza la detección de Lead-Off y almacenamiento de los datos, el modo 2 puede
ser activado por un contador que cuente n tiempo el cual puede ser definido por el
usuario para realizar la medición de impedancias (Ejemplo: Cada 10 o 15 minutos)
o también por una bandera la cual se activa al detectar la conexión correcta de un
canal nuevo y poder verificar el correcto contacto de los electrodos conectados a
la piel del paciente. Luego de verificar esto regresa al modo 1 para continuar con
la captura normal de la señal.
127
Diagrama de flujo implementado en programa principal.
START
Inicializaciones
POWER-UP
modo == 1
01
Lead-Off
Almacenamiento
SI
NO
contador == n
01
Impedancias
Almacenamiento
SI
NO
modo = 0
modo = 2
modo == 2
01
modo = 0
NO
SI
128
Diagrama de flujo implementado en la interrupción.
En el presente proyecto se configuran los registros necesarios para lograr la
captura de cuatro canales, usando la ganancia máxima (24), uso del BIAS externo
y 1Ksps de frecuencia de muestreo proporcionados por el ADS1299. Estos
registros son consignados en la tabla 1.
INTERRUPCIÓN
spi.writebytes([RDATA])
datos[cont] = spi.readbytes(27)
cont += 1
cont == 1000
01
cont = 0
copia = datos
modo = 1
Return
SI
NO
129
Tabla 1: Configuración de registros para la captura de señal EEG
REGISTRO DIRECCIÓN
(HEX) PRIMER
OPCODE (HEX) SEGUNDO
OPCODE (HEX) VALOR (HEX)
CONFIG1 01 41 00 94
CONFIG2 02 42 00 C0
CONFIG3 03 43 00 EE
CH1SET 05 45 00 60
CH2SET 06 46 00 60
CH3SET 07 47 00 60
CH4SET 08 48 00 60
CH5SET 09 49 00 E0
CH6SET 0A 4A 00 E0
CH7SET 0B 4B 00 E0
CH8SET 0C 4C 00 E0
BIAS_SENSP 0D 4D 00 0F
BIAS_SENSN 0E 4E 00 0F
3.3. LEAD-OFF
El LEAD-OFF es detectar la desconexión de algún electrodo en el paciente al que
se le realiza el procedimiento de captura de EEG. La importancia de detectar estas
desconexiones se ve ligada directamente a la correcta captura de la señal puesto
que si no se tiene una buena conexión o se está completamente desconectado, se
van a capturar señales que no corresponden a las deseadas o en el peor de los
casos, no se realizara la captura de ninguna señal.
Los registros LOFF_SENSP y LOFF_SENSN configuran la entrada positiva y
negativa respectivamente de los canales en que se desea detectar la desconexión
del electrodo. Con los registros FLEAD_OFF, ILEAD_OFF y LOFF_FLIP se
determina la frecuencia, la magnitud y la dirección de la corriente que se utiliza
para medir la desconexión de los electrodos, respectivamente. La señal de
excitación puede ser de tipo DC o AC para esto hay que tener en cuenta que si se
130
elige la detección de desconexión a través de señal AC se debe especificar la
frecuencia de esta señal en el mismo registro.
En el presente proyecto para la detección de LEAD-OFF se utiliza la señal de
excitación en DC para no modificar la forma de onda de la señal capturada, lo
único que se agrega a la señal es un nivel de DC de 1.5 voltios y no se afecta su
componente frecuencial. La conexión de los electrodos debe ser continuamente
monitoreada para verificar que sea la correcta. Estos se monitorean a través del
registro STATUS cuyo formato de 24 bits se compone de la siguiente manera
(1100 + LOFF_STATP + LOFF_STATN + bits [4:7] del registro GPIO). Es
importante del registro STATUS rescatar la información de los registros
LOFF_STATP y LOFF_STATN debido a que en ellos se almacena el estado de
conexión o desconexión del electrodo positivo y negativo de cada canal.
Teniendo en cuenta el diagrama de bloques presentado, se realiza un circuito que
modela de manera general para todos los canales habilitados, un electrodo
conectado a la piel del paciente, con el objetivo de realizar las respectivas pruebas
para verificar la conexión y desconexión de los mismos (ver figura 5). Se debe
tener en cuenta que el BIAS es común para todas las entradas diferenciales.
Figura 5: Modelo circuital de electrodo conectado a la piel del paciente. (Los Autores, 2016)
131
Las pruebas realizadas para identificar la desconexión de un electrodo se
muestran en pantalla al usuario de la siguiente manera.
Figura 6: Detección de LEAD-OFF para canales habilitados
Posterior a las pruebas realizadas se comprueba el óptimo funcionamiento de la
identificación de conexión o desconexión de los electrodos para cada uno de los
canales habilitados.
Se comprueba para todos los casos posibles en un entorno de prueba real como
se mostró en la figura 6.
3.4. MEDICIÓN DE IMPEDANCIAS
La medición de impedancias es el método mediante el cual se comprueba la
óptima conexión de un electrodo a la piel del paciente. Mediante la detección de
LEAD-OFF comprobamos que estén o no conectados los electrodos al paciente,
sin embargo la conexión debe cumplir ciertas características para la correcta
captura de la señal. En algunos casos el LEAD-OFF puede indicar que si hay
conexión, pero no detecta que no es la adecuada para obtener una buena captura.
132
Es de suma importancia realizar el proceso que se denomina medición de
impedancias en la conexión Electrodo-paciente para identificar que la conexión de
sensor sea la correcta. Se configuran los registros FLEAD_OFF, ILEAD_OFF y
LOFF_FLIP para inyectar una señal AC a las entradas diferenciales de cada canal
y medir indirectamente la impedancia que existe entre electrodo y paciente. La
señal AC que se utiliza en este proyecto es una señal de 24 µA y 7.8Hz.
Siguiendo el modelo circuital del electrodo conectado a la piel del paciente (figura
5) se varían las resistencias R1 y R3 en un rango de 1kΩ a 15kΩ con el objetivo
de medir el voltaje pico a la entrada del canal.
Los resultados de estas mediciones se consignan en la tabla 2.
Tabla 2: Valor de voltaje pico medido a la entrada del canal 1 positivo
Resistencia de
Prueba (KΩ)
Valor medido
multímetro (KΩ)
Voltaje pico aplicación
desarrollada (V)
1 0,992 0,141186
1,2 1,206 0,145920
1,5 1,503 0,152433
2,2 2,16 0,166849
3,3 3,262 0,191011
3,9 3,846 0,203767
4,7 4,659 0,221827
5,6 5,492 0,239865
6,8 6,89 0,270537
8,2 8,12 0,297572
10 9,98 0,340138
12 12,19 0,386381
15 14,81 0,444367
133
Se procede a graficar los datos de la tabla anterior para buscar una ecuación que
los relacione. Se toma para la gráfica el voltaje pico para el eje X y los valores
medidos de resistencia para el eje Y.
Figura 7: Grafica del voltaje pico de acuerdo a resistencia de prueba. (Los Autores, 2016)
De la gráfica anterior, se haya la ecuación de la recta a través de su respectiva
pendiente, donde:
𝒚 = 𝒎𝒙 + 𝒃
𝒎 = 𝒚𝟐 − 𝒚𝟏
𝒙𝟐 − 𝒙𝟏
Dónde:
𝒚𝟐 = 𝟏𝟒𝟖𝟏𝟎
𝒚𝟏 = 𝟗𝟗𝟐
𝒙𝟐 = 𝟎. 𝟒𝟒𝟒𝟑𝟔𝟕
𝒙𝟏 = 𝟎. 𝟏𝟒𝟏𝟏𝟖𝟔
0
2
4
6
8
10
12
14
16
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5
RES
ISTE
NC
IA D
E P
RU
EBA
(KΩ
)
VOLTAJE PICO (V)
Medición de Voltaje Pico
134
Entonces:
𝒎 = 𝟏𝟒𝟖𝟏𝟎 − 𝟗𝟗𝟐
𝟎. 𝟒𝟒𝟒𝟑𝟔𝟕 − 𝟎. 𝟏𝟒𝟏𝟏𝟖𝟔
𝒎 = 𝟒𝟓𝟓𝟕𝟔. 𝟕𝟑
Ahora:
𝒃 = 𝒚 − 𝒎𝒙
𝒃 = 𝟏𝟒𝟖𝟏𝟎 − (𝟒𝟓𝟓𝟕𝟔. 𝟕𝟑 ∗ 𝟎. 𝟒𝟒𝟒𝟑𝟔𝟕)
𝒃 = −𝟓𝟒𝟒𝟐. 𝟕𝟗
Finalmente la ecuación de la recta es la siguiente:
𝒚 = 𝟒𝟓𝟓𝟕𝟔. 𝟕𝟑 𝒙 − 𝟓𝟒𝟒𝟐. 𝟕𝟗
Con esta ecuación se puede conocer de manera indirecta cada uno de los valores
de impedancia en las entradas diferenciales de los canales habilitados en el
ADS1299. Donde “Y” es el valor de impedancia en la entrada y depende de “X”
que es el voltaje pico medido en la entrada del canal.
Cabe aclarar que en cada una de las entradas diferenciales de los canales del
ADS1299 existe una resistencia de 5KΩ la cual no se debe tener en cuenta para el
valor de impedancia de entrada. Esto se puede relacionar con el valor de “b” que
se resta en “Y” para obtener el valor deseado.
Teniendo en cuenta lo descrito se procede a realizar una prueba de medición de
impedancias para las entradas diferenciales habilitadas en el ADS1299 haciendo
uso de una serie de resistencia cuyos valores son conocidos con anterioridad.
Los resultados se muestran en la tabla 3 junto con su porcentaje de error respecto
al valor real.
135
Tabla 3: Medición de impedancia en entradas diferenciales.
Resistencia de
Prueba (KΩ)
Valor medido
multímetro (KΩ)
Valor de impedancia
medido (KΩ)
Porcentaje
de error
1 0,992 1,02 3%
1,2 1,206 1,23 2%
1,5 1,503 1,56 4%
2,2 2,16 2,178 1%
3,3 3,262 3,283 1%
3,9 3,846 3,924 2%
4,7 4,659 4,739 2%
5,5 5,492 5,536 1%
6,8 6,89 6,99 1%
8,2 8,12 8,161 1%
10 9,98 10,003 0%
12 12,19 12,204 0%
15 14,81 14,813 0%
Los valores obtenidos se mostraron en pantalla de la siguiente manera:
Figura 8: Medición de impedancias para canales habilitados (Los Autores, 2016)
136
De acuerdo con pruebas realizadas se comprueba el óptimo funcionamiento de la
medición de impedancias para cada uno de los canales habilitados. El porcentaje
de error obtenido es inferior al 4% lo cual se considera aceptable para la medición.
3.5. ADQUISICIÓN DE SEÑALES
Para validar el correcto funcionamiento del equipo se procede a realizar la captura
de señales de prueba internas y externas, para posteriormente realizar la captura
de señal en un paciente real.
Figura 9: Etapas de adquisición de señales. (Los Autores 2016)
Señal de prueba interna:
Se procedió con la captura de la señal cuadra de prueba que se genera dentro del
circuito integrado ADS1299 para verificar su correcto funcionamiento. Teniendo en
cuenta que se espera una señal de amplitud pico de 1.875mV y de frecuencia
aproximada de 1Hz, se configuran los respectivos registros para adquirir cuatro
canales, realizar la captura a una frecuencia de muestreo de 1000 SPS y utilizar el
modo de lectura continuo (Ver figura 10).
Figura 10: Prueba de señal interna para cuatro canales. (Los Autores, 2016)
Señal interna Señal externa Señal QM Señal del paciente
137
Señal de prueba externa:
Una vez capturada la señal de prueba interna que se genera dentro del circuito
integrado, se realizan pruebas con una señal externa. Esta nueva señal se obtiene
de un generador de señales sinusoidales y verificando su amplitud y frecuencia
utilizando un osciloscopio.
La señal externa se conecta a cada uno de los canales haciendo uso de su
entrada diferencial y conectando el BIAS (Pin 62 - BIASN IN) el cual es una señal
de entrada que sirve como referencia al integrado. El circuito esquemático para la
conexión de la señal externa muestra en la figura 11.
Figura 11: Circuito esquemático para conexión de señal de prueba externa. (Los Autores, 2016)
Se configuran los respectivos registros para adquirir inicialmente un canal, realizar
la captura de la señal a una frecuencia de muestreo de 1000 SPS y utilizar el
modo de lectura RDATA (ver figura 12).
138
Figura 12: Prueba de señal externa para un canal. (Los Autores, 2016)
Se realiza un periodo de prueba con valores aleatorios y de igual manera los datos
son los esperados, verificando su frecuencia y amplitud de acuerdo a la ganancia
aplicada.
Generador de Señales:
Utilizando en generador de señales QM, se realiza la corrección del nivel de DC
implementada por software para realizar las capturas y verificar el funcionamiento
del programa. Se pudo observar que se corrige el nivel de DC, sin embargo la
señal se estabiliza en cero aproximadamente en un tiempo de un segundo (ver
figura 13).
Para cada uno de los canales habilitados en la tarjeta ADS1299 se realizan
capturas obteniendo resultados de manera correcta. Se puede concluir que el
desarrollo implementado hasta el momento funciona de manera correcta y
responde a señales de tipo EEG estándar.
139
Figura 13: Captura de Señal generador QM sin nivel de DC. (Los Autores, 2016)
Adquisición de señal en paciente:
Para finalizar las pruebas del prototipo electrónico desarrollado se realiza una
captura de señal EEG en un paciente. Lo que se busca es implementar el
desarrollo en un entorno real utilizando los insumos comunes para este tipo de
procedimientos.
La captura se realiza a través de electrodos los cuales se posicionan en la parte
frontal en búsqueda de una impedancia adecuada para la captura de la señal. Se
habilita un canal del prototipo desarrollado y se posicionan los electrodos.
Posterior a la conexión de la entrada positiva, negativa y BIAS se procede a
verificar la conexión adecuada de los electrodos mediante la detección de LEAD-
OFF. El paso a seguir es la medición de impedancias donde se obtienen valores
superiores a 10KΩ.
Se debe tener en cuenta que para la captura de la señal EEG es importante lograr
un buen contacto de los electrodos. Medir la impedancia como se mencionó con
140
anterioridad, ayuda a la verificación de que este contacto sea el adecuado. Otro
punto para tener en cuenta es la calidad de los electrodos que se utilizan durante
la captura, debido a que pueden inducirse tensiones no deseadas y ruidos que
pueden reducir la calidad de la señal EEG de manera drástica.
Los ruidos que pueden aparecer dentro de la captura están relacionados de
manera directa con la impedancia medida entre el electrodo y el paciente. De
manera general se puede decir que entre menor sea la impedancia se dará una
conexión más adecuada y por tanto se reducirá el ruido dentro de la captura.
Un método para mejorar esta impedancia requiere una limpieza exhaustiva de la
piel donde se posiciona el electrodo. Adicionalmente existen geles conductores
que mejoran la conexión garantizando baja impedancia y estabilidad en la señal.
Otro factor que se debe tener en cuenta en la captura de las señales EEG son
señales que se denominan “Artefactos”. Los artefactos son señales que se
encuentran en el registro EEG, pero no se originan propiamente en el cerebro. Los
artefactos pueden dividirse en dos categorías dependiendo de su origen:
artefactos fisiológicos y artefactos no fisiológicos (Lozada & David, 2015).
Los artefactos fisiológicos surgen de una variedad de actividades corporales, que
pueden ser debidas a movimientos de la cabeza, el cuerpo o el cuero cabelludo o
potenciales bioeléctricos generados por los músculos en el cuero cabelludo,
corazón o glándulas sudoríparas (Lozada & David, 2015). Los artefactos no
fisiológicos surgen de dos fuentes principales: interferencia eléctrica externa de
fuentes de poder tales como líneas eléctricas y equipos eléctricos conectados con
el dispositivo de captura y mal funcionamiento de los electrodos, cables,
amplificadores, entre otros. (Lozada & David, 2015).
141
Debido al posicionamiento de los electrodos para la prueba se debe tener en
cuenta la posible la aparición de artefactos oculares los cuales son producidos por
el parpadeo y otros movimientos del ojo. Estos movimientos causan una diferencia
de potencial que es captada principalmente por los electrodos posicionados en la
parte frontal y central del cráneo. Estos artefactos se caracterizan por inducir una
señal de baja frecuencia con una alta amplitud.
Teniendo en cuenta lo mencionado con anterioridad se procede a realizar la
captura de la señal EEG en el paciente donde se inicia la captura con el paciente
en reposo y pasados los primeros segundos se generan una serie de parpadeos
intensos con la finalidad de observar si se obtiene el registro de los artefactos
oculares.
Adicionalmente al iniciar la captura se desconecta el monitor de la tarjeta de
desarrollo con el objetivo de reducir los posibles ruidos que podrían inducirse.
Figura 14: Registro EEG Con artefactos oculares y paciente en reposo. (Los Autores, 2016).
Se logra apreciar claramente la diferencia de la señal capturada cuando el
paciente parpadea y cuando deja de hacerlo, sin embargo la señal aun presenta
142
ruidos inducidos por las conexiones externas del sistema. Además se debe tener
en cuenta que la impedancia electrodo-paciente fue mayor a 10KΩ y esto implica
que la conexión no se de en las condiciones ideales.
Se procede al uso de la herramienta Matlab para realizar el filtrado del ruido
inducido por frecuencias de 60Hz, la figura 15 muestra la gráfica con el filtro
aplicado.
Figura 15: Registro EEG Con artefactos oculares y paciente en reposo con filtro de 60Hz. (Los
Autores, 2016).
Se logra apreciar que se redujo el ruido de 60 Hz aunque la señal no está libre de
ruidos en su totalidad. Se verifica que el sistema realiza la captura de las señales
pero se deben aplicar otra serie de filtros y procesamientos a la señal para poder
visualizar únicamente la actividad cerebral.
Se recomienda hacer uso de un sistema embebido destinado a la detección y
eliminación de artefactos internos y externos en señales EEG para graficar de
mejor manera la señal capturada.
143
4. DISCUSIÓN Y CONCLUSIONES
La tarjeta de desarrollo Raspberry Pi es un dispositivo eficiente para hacer uso
del protocolo de comunicación SPI con el circuito integrado ADS1299 debido a
su amplio rango de velocidades, lo cual permite trabajar de manera adecuada
con las diferentes frecuencias de muestreo que proporciona el ASIC. De igual
manera Raspberry Pi realiza una correcta lectura y escritura de los registros
del ADS1299 lo que conlleva a una configuración eficiente para la captura de
las señales de EEG.
Utilizando el circuito integrado de aplicación específica ADS1299 se permite la
captura simultánea de ocho canales diferenciales reduciendo los niveles de
ruido y permitiendo programar su ganancia.
Para la correcta captura de datos se debe utilizar el modo RDATA del
ADS1299 debido a que es el más adecuado para los sistemas de tipo EEG,
donde los valores de los registros deben ser leídos o reconfigurados a menudo
durante la captura de los datos como se realiza durante el proceso de
detección de LEAD-OFF y medición de impedancias.
Es evidente que la tarjeta de desarrollo Raspberry Pi es demasiado susceptible
a los ruidos que se inducen a través de periféricos externos, lo que perturba
directamente a la señal capturada. Para reducir estos niveles de ruido no
deseado, se recomienda utilizar supresor de polo en todos los dispositivos
conectados al sistema tales como monitor y adaptador de alimentación,
además de realizar mejoras en las conexiones desde Raspberry Pi hacia la
tarjeta del ASIC.
Se sugiere el uso de electrodos de alta calidad para reducir considerablemente
los niveles de impedancia en la conexión electrodo-paciente o en su defecto el
uso de geles conductores que mejoren la calidad de la conexión.
144
AGRADECIMIENTOS
Agradecemos al Grupo de investigación LEA “Laboratorio de electrónica aplicada”
de la Universidad de San Buenaventura de Cali debido a la importancia que tuvo
para la implementación de la aplicación desarrollada.
Este proyecto es cofinanciado por COLCIENCIAS según contrato 297-2015.
REFERENCIAS
BALALAIKA. (2016). Balalaika Project. Recuperado el Septiembre de 2016,
de www.balalaikaproject.ru
Guerrero, F. N. (2011). Dispositivo modular para adquisición de
biopotenciales con conexión USB. XVIII Congreso Argentino de
Bioingenieria SABI 2011.
Guerrero, F., Haberman, M., & Spinelli, E. (2014). Sistema multicanal para
la adquisición de biopotenciales. Revista Ingeniería Biomédica, 18-26.
Lozada, C. A., & David, B. D. (2015). Sistema embebido destinado a la
detección y eliminación de artefactos en señales EEG para aplicaciones
médicas. Santiago de Cali.
mennen medical. (2016). MedicalExpo. Recuperado el Agosto de 2016, de
www.medicalexpo.es/prod/mennen-medical/product-112973-756581.html
natus MedicalExpo. (2016). MedicalExpo. Recuperado el Agosto de 2016,
de www.medicalexpo.es/prod/natus-medical-incorporated/product-76900-
708553.html
natus Sistemas Latinos. (2016). Sistemas Latinos. Recuperado el Agosto de
2016, de www.sistemaslatinos.com/natus-quantum-amplifier/
145
NXP Semiconductors. (09 de Febrero de 2009). PESD5V0S2BT Low
capacitance bidirectional double ESD protection diode.
Open BCI. (2016). OpenBCI. Recuperado el Septiembre de 2016, de
www.openbci.com
Open Electronics Lab. (2014). Open Harware ExG. Recuperado el
Septiembre de 2016, de
www.openelectronicslab.github.io/OpenHardwareExG/
Raspberry PI Foundation. (s.f.). www.raspberrypi.org. Recuperado el Marzo
de 2016, de
https://www.raspberrypi.org/documentation/hardware/raspberrypi/spi/READ
ME.md
Recorders & Medicare Systems Pvt Ltd. (2016). MedicalExpo. Recuperado
el Agosto de 2016, de www.medicalexpo.es/prod/recorders-medicare-
systems-pvt-ltd/product-96227-757995.html
Texas Instruments®. (Agosto de 2012). ADS1299: Low-Noise, 8-Channel,
24-Bit Analog Front-End for biopotential measurements. Dalas, Texas,
Estados Unidos.
Texas Instruments®. (Octubre de 2014). EEG Front-End performance
demostration Kit. Dallas, Texas, Estados unidos.
146
ANEXO 2: CÓDIGO IMPLEMENTADO EN PYTHON 2.7
import RPi.GPIO as GPIO
import spidev
import binascii
import time
import numpy as np
from array import array
from Tkinter import *
import crc16
#Sin alertas de GPIO
GPIO.setwarnings(False)
#Variables
datos = [0]*1000
copia = []
contador = 0
bandera = 0
full = 0
a = 1000
media = 0
cont_imp = 1
contin_imp = 0
modo = 0
det = 0
cont_tk = 0
ch1p_bandera = 0
ch1n_bandera = 0
ch2p_bandera = 0
ch2n_bandera = 0
ch3p_bandera = 0
ch3n_bandera = 0
ch4p_bandera = 0
147
ch4n_bandera = 0
in1 = 0
act1 = 0
ant1 = 0
act2 = 0
ant2 = 0
act3 = 0
ant3 = 0
act4 = 0
ant4 = 0
modoON = 0
#Inicializa SPI
spi = spidev.SpiDev()
spi.open(0,0)
spi.mode = 1
spi.lsbfirst = False
spi.max_speed_hz = 5900000
#Configurcion de pines GPIO
drdy = 2
reset = 4
start = 17
pwdn = 18
#Entradas o salidas GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(drdy, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Selecciona pin 2 como interrupcion
GPIO.setup(reset, GPIO.OUT)
GPIO.setup(start, GPIO.OUT)
GPIO.setup(pwdn, GPIO.OUT)
#Startup: All signals LOW
GPIO.output(pwdn, 0)
GPIO.output(reset, 0)
GPIO.output(start, 0)
148
time.sleep(0.1)
#Hacer power-up sequenci
GPIO.output(reset, 1)
time.sleep(1/100000)
GPIO.output(reset, 0)
time.sleep(1/100000)
GPIO.output(reset, 1)
time.sleep(1/100000)
#PWDN = 1 y RESET = 1, 1segundo
GPIO.output(pwdn, 1)
GPIO.output(reset, 1)
time.sleep(1)
#Send SDATC
spi.writebytes([0x11]) # Sdatac
time.sleep(1/100000)
#Registros config1, config2, config3
spi.writebytes([0x41, 0x00, 0x94]) #CONFIG1 1000 muestras
spi.writebytes([0x42, 0x00, 0xC0]) #CONFIG2 D0
spi.writebytes([0x43, 0x00, 0xEE]) #CONFIG3
#Para usar el BIAS
spi.writebytes([0x4D, 0x00, 0x0F]) #BIAS_SENSP 0X01 para utilizar el bias POSITIVO
spi.writebytes([0x4E, 0x00, 0x0F]) #BIAS_SENSN 0X01 para utilizar el bias NEGATIVO
#Canales del ADS1299
spi.writebytes([0x45, 0x00, 0x60])
spi.writebytes([0x46, 0x00, 0x60])
spi.writebytes([0x47, 0x00, 0x60])
spi.writebytes([0x48, 0x00, 0x60])
spi.writebytes([0x49, 0x00, 0xE0])
spi.writebytes([0x4A, 0x00, 0xE0])
spi.writebytes([0x4B, 0x00, 0xE0])
spi.writebytes([0x4C, 0x00, 0xE0])
spi.writebytes([0x54, 0x00, 0x00]) #GPIO DE SALIDA
149
#Para la deteccion de Lead-Off
spi.writebytes([0x44, 0x00, 0x04]) #Lead-Off Control Register
spi.writebytes([0x4F, 0x00, 0x0F]) #Loff_Sensp: Lead Off Positive Sense Selection
spi.writebytes([0x50, 0x00, 0x0F]) #Loff_Sensn: Lead Off Negative Sense Selection
spi.writebytes([0x57, 0x00, 0x02]) #CONFIG4
#Start = 1
GPIO.output(start, 1)
time.sleep(1/100000)
#Funcion para LeadOff
def v_leadoff(status):
global ch1p_bandera, ch1n_bandera, ch2p_bandera, ch2n_bandera, ch3p_bandera, ch3n_bandera, ch4p_bandera, ch4n_bandera
global in1
global ant1, act1, ant2, act2, ant3, act3, ant4, act4
global modoON
status_c1p = status & 0b000000000001000000000000
status_c1n = status & 0b000000000000000000010000
status_c2p = status & 0b000000000010000000000000
status_c2n = status & 0b000000000000000000100000
status_c3p = status & 0b000000000100000000000000
status_c3n = status & 0b000000000000000001000000
status_c4p = status & 0b000000001000000000000000
status_c4n = status & 0b000000000000000010000000
#Canal 1
if status_c1p == 0b000000000001000000000000:
etiqueta5.config(text="OFF")
ch1p_bandera = 0
else:
etiqueta5.config(text="ON")
ch1p_bandera = 100
if status_c1n == 0b000000000000000000010000:
etiqueta6.config(text="OFF")
150
ch1n_bandera = 0
else:
etiqueta6.config(text="ON")
ch1n_bandera = 100
if ch1p_bandera == 100 and ch1n_bandera == 100:
act1 = 100
else:
act1 = 0
if act1 == 100 and ant1 == 0:
modoON = 100
ant1 = act1
if act1 == 0 and ant1 == 100:
modoON = 0
ant1 = act1
#Canal 2
if status_c2p == 0b000000000010000000000000:
etiqueta10.config(text="OFF")
ch2p_bandera = 0
else:
etiqueta10.config(text="ON")
ch2p_bandera = 100
if status_c2n == 0b000000000000000000100000:
etiqueta11.config(text="OFF")
ch2n_bandera = 0
else:
etiqueta11.config(text="ON")
ch2n_bandera = 100
if ch2p_bandera == 100 and ch2n_bandera == 100:
act2 = 100
else:
act2 = 0
if act2 == 100 and ant2 == 0:
151
modoON = 100
ant2 = act2
if act2 == 0 and ant2 == 100:
modoON = 0
ant2 = act2
#Canal 3
if status_c3p == 0b000000000100000000000000:
etiqueta15.config(text="OFF")
ch3p_bandera = 0
else:
etiqueta15.config(text="ON")
ch3p_bandera = 100
if status_c3n == 0b000000000000000001000000:
etiqueta16.config(text="OFF")
ch3n_bandera = 0
else:
etiqueta16.config(text="ON")
ch3n_bandera = 100
if ch3p_bandera == 100 and ch3n_bandera == 100:
act3 = 100
else:
act3 = 0
if act3 == 100 and ant3 == 0:
modoON = 100
ant3 = act3
if act3 == 0 and ant3 == 100:
modoON = 0
ant3 = act3
#Canal 4
if status_c4p == 0b000000001000000000000000:
etiqueta20.config(text="OFF")
ch4p_bandera = 0
152
else:
etiqueta20.config(text="ON")
ch4p_bandera = 100
if status_c4n == 0b000000000000000010000000:
etiqueta21.config(text="OFF")
ch4n_bandera = 0
else:
etiqueta21.config(text="ON")
ch4n_bandera = 100
if ch4p_bandera == 100 and ch4n_bandera == 100:
act4 = 100
else:
act4 = 0
if act4 == 100 and ant4 == 0:
modoON = 100
ant4 = act4
if act4 == 0 and ant4 == 100:
modoON = 0
ant4 = act4
return
#Funciones Para las impedancias
#Escribe registros
def r_impedancia(loff_sensp, loff_sensn, chnset):
#Seleccionar canal a medir
spi.writebytes([0x4F, 0x00, loff_sensp]) #Loff_Sensp: Lead Off Positive Sense Selection
spi.writebytes([0x50, 0x00, loff_sensn]) #Loff_Sensn: Lead Off Negative Sense Selection
#Modificar el registro CHnSET para dejar la ganancia en 1 del canal
spi.writebytes([chnset, 0x00, 0x00]) #Canal 1 positivo
#Modificar LOOF: Lead-Off Control Register (7.8Hz y 24uA)
spi.writebytes([0x44, 0x00, 0x0D]) #Lead-Off Control Register
return
#Valor impedancia
153
def v_impedancia(canalX):
a = 1000
absoluto = [0]*a
suma = 0
for v in range(a):
absoluto[v] = abs(canalX[v])
suma += absoluto[v]
resultado = suma/a
y = 0
y = ((45576.73*resultado)-5442.79)/1000
y = round(y,3)
return y
#Interrupcion: Captura de datos de la interrupcion
def captura(channel):
global contador
global datos
global copia
global full
global bandera
spi.writebytes([0x12])
resp = spi.readbytes(27) #Guarda status + 8 canales
datos[contador] = resp
contador += 1
resp = 0
if contador == 1000:
contador = 0
copia = datos
datos = [0]*1000
full += 1
bandera = 100
f = open("cristian_3.bin","ab")
#Boton Iniciar
154
def Principal():
global cont_tk
global bandera
global modo, modoON
global cont_imp
global contin_imp
global ch1p_bandera, ch1n_bandera, ch2p_bandera, ch2n_bandera, ch3p_bandera, ch3n_bandera, ch4p_bandera, ch4n_bandera
global in1
global full
#Entrada 1, si hay un canal activo inmediatamente medir impedancias
if ((in1 == 0) and (ch1p_bandera == 100) and (ch1n_bandera == 100)) or ((in1 == 0) and (ch2p_bandera == 100) and (ch2n_bandera == 100)) or ((in1 == 0) and (ch3p_bandera == 100) and (ch3n_bandera == 100)) or ((in1 == 0) and (ch4p_bandera == 100) and (ch4n_bandera == 100)):
modo = 1
in1 = 100
#Para activar modo 1, medir impedancias
if (full >=900 and full <=902 and in1 == 100) or (modoON == 100):
modo = 1
modoON = 0
if (full >=900 and full <=902):
full = 0
if (full >=900 and full <=902 and in1 == 0):
full = 0
if cont_tk == 0:
GPIO.add_event_detect(drdy, GPIO.FALLING, callback=captura)
cont_tk = 100
iniciar.config(state='disabled')
if (bandera == 100) and (det == 0) and (modo == 0):
bandera = 0
print full
copia2 = []
155
for d in range(a):
copia2 += copia[d] #Se pasa de matriz a vector
n = [0]*a*9
tres = 0
for z in range(a*9):
n[z] = (copia2[tres] * (2**16)) + (copia2[tres + 1] * (2**8)) + (copia2[tres + 2] * (2**0))
tres += 3
#Guarda los datos 8 canales y status
s = array('l', n)
f.write(s)
#lectura del lead-off
v_leadoff(n[((a*9)-9)])
#Protocolo de comunicacion: 0x3E01
#Header, al inicio de la lista
n.insert(0, 0x3E0108)
#Protocolo y crc
hexn = [0]*a*9
for d in range(a*9):
hexn[d] = hex(n[d]).split('x')[1]
protocolo = ''.join(map(str, hexn))
crc = crc16.crc16xmodem(protocolo)
#Agrega crc al final de la lista
n.append(crc)
if (bandera == 100 and det == 0 and modo == 1):
print "in"
bandera = 0
copia2 = []
for d in range(a):
copia2 += copia[d] #Se pasa de matriz a vector
n = [0]*a*9
tres = 0
for z in range(a*9):
156
n[z] = (copia2[tres] * (2**16)) + (copia2[tres + 1] * (2**8)) + (copia2[tres + 2] * (2**0))
tres += 3
#Guarda los datos 8 canales y status
s = array('l', n)
f.write(s)
#Se separan solamente los datos de los canales, se quita el status
datsep = [0]*a*8
canales = 1
cnt = 0
for s in range(a*8):
datsep[s] = n[canales]
canales+=1
cnt+=1
if cnt == 8:
canales+=1
cnt=0
#Se hace el comlemento A2 de los numero mayores de 7FFFFF
for p in range(a*8):
if datsep[p] >= 8388608:
coma2 = (2**24) - datsep[p]
out = ((-4.5)/((2**23)-1)) * coma2
datsep[p] = out
else:
out2 = ((4.5)/((2**23)-1)) * datsep[p]
datsep[p] = out2
#Separo canal 1 al 8 para graficar y verificar muestras
canal1 = [0]*a
canal2 = [0]*a
canal3 = [0]*a
canal4 = [0]*a
canal5 = [0]*a
157
canal6 = [0]*a
canal7 = [0]*a
canal8 = [0]*a
canal1c = 0
canal2c = 1
canal3c = 2
canal4c = 3
canal5c = 4
canal6c = 5
canal7c = 6
canal8c = 7
for p in range(a):
canal1[p] = datsep[canal1c]
canal2[p] = datsep[canal2c]
canal3[p] = datsep[canal3c]
canal4[p] = datsep[canal4c]
canal5[p] = datsep[canal5c]
canal6[p] = datsep[canal6c]
canal7[p] = datsep[canal7c]
canal8[p] = datsep[canal8c]
canal1c+=8
canal2c+=8
canal3c+=8
canal4c+=8
canal5c+=8
canal6c+=8
canal7c+=8
canal8c+=8
#Valor absoluto y promedio de la senal para medir impedancias
#Canal 1: Positivo ******************************************************
if (cont_imp == 1) and (ch1p_bandera == 100) and (ch1n_bandera == 100):
158
contin_imp +=1
if contin_imp == 1:
ch1_loffp = 0x01
ch1_loffn = 0x00
chnset_canal1 = 0x45
r_impedancia(ch1_loffp, ch1_loffn, chnset_canal1)
elif contin_imp == 4:
imp_1p = v_impedancia(canal1)
etiqueta46.config(text=imp_1p)
contin_imp = 0
cont_imp += 1
if (cont_imp == 1 and ch1p_bandera == 0) or (cont_imp == 1 and ch1n_bandera == 0):
contin_imp = 0
cont_imp += 2
etiqueta46.config(text="--")
etiqueta47.config(text="--")
#Canal 1: Negativo
if cont_imp == 2 and (ch1p_bandera == 100) and (ch1n_bandera == 100):
contin_imp += 1
if contin_imp == 1:
ch1_loffp = 0x00
ch1_loffn = 0x01
chnset_canal1 = 0x45
r_impedancia(ch1_loffp, ch1_loffn, chnset_canal1)
elif contin_imp == 4:
imp_1n = v_impedancia(canal1)
etiqueta47.config(text=imp_1n)
contin_imp =0
cont_imp += 1
#Canal 2: Positivo ************************************************************
if (cont_imp == 3) and (ch2p_bandera == 100) and (ch2n_bandera == 100):
contin_imp +=1
159
if contin_imp == 1:
ch2_loffp = 0x02
ch2_loffn = 0x00
chnset_canal2 = 0x46
r_impedancia(ch2_loffp, ch2_loffn, chnset_canal2)
elif contin_imp == 4:
imp_2p = v_impedancia(canal2)
etiqueta52.config(text=imp_2p)
contin_imp = 0
cont_imp += 1
if (cont_imp == 3 and ch2p_bandera == 0) or (cont_imp == 3 and ch2n_bandera == 0):
contin_imp = 0
cont_imp += 2
etiqueta52.config(text="--")
etiqueta53.config(text="--")
#Canal 2: Negativo
if (cont_imp == 4) and (ch2p_bandera == 100) and (ch2n_bandera == 100):
contin_imp +=1
if contin_imp == 1:
ch2_loffp = 0x00
ch2_loffn = 0x02
chnset_canal2 = 0x46
r_impedancia(ch2_loffp, ch2_loffn, chnset_canal2)
elif contin_imp == 4:
imp_2n = v_impedancia(canal2)
etiqueta53.config(text=imp_2n)
contin_imp = 0
cont_imp += 1
#Canal 3: Positivo *********************************************************
if (cont_imp == 5) and (ch3p_bandera == 100) and (ch3n_bandera == 100):
contin_imp +=1
160
if contin_imp == 1:
ch3_loffp = 0x04
ch3_loffn = 0x00
chnset_canal3 = 0x47
r_impedancia(ch3_loffp, ch3_loffn, chnset_canal3)
elif contin_imp == 4:
imp_3p = v_impedancia(canal3)
etiqueta59.config(text=imp_3p)
contin_imp = 0
cont_imp += 1
if (cont_imp == 5 and ch3p_bandera == 0) or (cont_imp == 5 and ch3n_bandera == 0):
contin_imp = 0
cont_imp += 2
etiqueta59.config(text="--")
etiqueta60.config(text="--")
#Canal 3: Negativo
if (cont_imp == 6) and (ch3p_bandera == 100) and (ch3n_bandera == 100):
contin_imp +=1
if contin_imp == 1:
ch3_loffp = 0x00
ch3_loffn = 0x04
chnset_canal3 = 0x47
r_impedancia(ch3_loffp, ch3_loffn, chnset_canal3)
elif contin_imp == 4:
imp_3n = v_impedancia(canal3)
etiqueta60.config(text=imp_3n)
contin_imp = 0
cont_imp += 1
#Canal 4: Positivo *******************************************************
if (cont_imp == 7) and (ch4p_bandera == 100) and (ch4n_bandera == 100):
contin_imp +=1
if contin_imp == 1:
161
ch4_loffp = 0x08
ch4_loffn = 0x00
chnset_canal4 = 0x48
r_impedancia(ch4_loffp, ch4_loffn, chnset_canal4)
elif contin_imp == 4:
imp_4p = v_impedancia(canal4)
etiqueta67.config(text=imp_4p)
contin_imp = 0
cont_imp += 1
if (cont_imp == 7 and ch4p_bandera == 0) or (cont_imp == 7 and ch4n_bandera == 0):
etiqueta67.config(text="--")
etiqueta68.config(text="--")
contin_imp = 0
cont_imp = 1
modo = 0
#Para la deteccion de Lead-Off
spi.writebytes([0x44, 0x00, 0x04]) #Lead-Off Control Register
spi.writebytes([0x4F, 0x00, 0x0F]) #Loff_Sensp: Lead Off Positive Sense Selection
spi.writebytes([0x50, 0x00, 0x0F]) #Loff_Sensn: Lead Off Negative Sense Selection
spi.writebytes([0x57, 0x00, 0x02]) #CONFIG4
spi.writebytes([0x45, 0x00, 0x60])
spi.writebytes([0x46, 0x00, 0x60])
spi.writebytes([0x47, 0x00, 0x60])
spi.writebytes([0x48, 0x00, 0x60])
#Canal 4: Negativo
if (cont_imp == 8) and (ch4p_bandera == 100) and (ch4n_bandera == 100):
contin_imp +=1
if contin_imp == 1:
ch4_loffp = 0x00
ch4_loffn = 0x08
chnset_canal4 = 0x48
r_impedancia(ch4_loffp, ch4_loffn, chnset_canal4)
162
elif contin_imp == 4:
imp_4n = v_impedancia(canal4)
etiqueta68.config(text=imp_4n)
contin_imp = 0
cont_imp = 1
modo = 0
#Para la deteccion de Lead-Off
spi.writebytes([0x44, 0x00, 0x04]) #Lead-Off Control Register
spi.writebytes([0x4F, 0x00, 0x0F]) #Loff_Sensp: Lead Off Positive Sense Selection
spi.writebytes([0x50, 0x00, 0x0F]) #Loff_Sensn: Lead Off Negative Sense Selection
spi.writebytes([0x57, 0x00, 0x02]) #CONFIG4
spi.writebytes([0x45, 0x00, 0x60])
spi.writebytes([0x46, 0x00, 0x60])
spi.writebytes([0x47, 0x00, 0x60])
spi.writebytes([0x48, 0x00, 0x60])
if det == 1:
f.close
time.sleep(1)
v0.after_idle(Principal)
def Detener():
global det
det = 1
terminar.config(state='disabled')
GPIO.remove_event_detect(2)
#*******Interfaz EEG*****************
v0 = Tk() #Ventana principal
v0.title("EEG") #Titulo
v0.config(bg="white") #Color de fondo
v0.geometry("700x700") #Cambia el tamano de la ventana
#Titulo del proyecto
163
texto = Message(v0, text="ELECTRONIC DESIGN PROTOTYPE MULTICHANNEL ELECTROENCEPHALOGRAM SIGNAL ACQUISITION", bd=20, font=("Arial",15, 'bold'), justify = CENTER, width=450, bg = "white")
texto.place(x = 700, y = 0, anchor = "ne")
#Imagen USB
usb = PhotoImage(file = "usb.png")
usb2 = usb.subsample(2,2) #Redimencionar la imagen usb
imagen = Label(v0, image=usb2, bg = "white")
imagen.place(x=0, y=0)
#Boton Iniciar
iniciar = Button(v0, text = "START", command=Principal, font=("Arial",12, 'bold'))
iniciar.place(x = 280, y = 180)
#Boton Terminar
terminar = Button(v0, text="STOP", command=Detener, font=("Arial", 12, 'bold'))
terminar.place(x=400, y=180)
#Label para Lead-off***********************************************
etiqueta1 = Label(v0, text = "Lead-Off", font=("Arial", 12, 'bold'))
etiqueta1.place(x = 80, y = 250)
#Label para canal 1:
etiqueta2 = Label(v0, text = "Channel 1:", font=("Arial", 12, 'bold'))
etiqueta2.place(x = 25, y = 280)
etiqueta3 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta3.place(x = 120, y = 280)
etiqueta4 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta4.place(x = 120, y = 300)
etiqueta5 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta5.place(x = 205, y = 280)
etiqueta6 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta6.place(x= 205, y = 300)
#Label para canal 2:
etiqueta7 = Label(v0, text = "Channel 2:", font=("Arial", 12, 'bold'))
etiqueta7.place(x = 25, y = 330)
164
etiqueta8 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta8.place(x = 120, y = 330)
etiqueta9 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta9.place(x = 120, y = 350)
etiqueta10 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta10.place(x = 205, y = 330)
etiqueta11 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta11.place(x= 205, y = 350)
#Label para canal 3:
etiqueta12 = Label(v0, text = "Channel 3:", font=("Arial", 12, 'bold'))
etiqueta12.place(x = 25, y = 380)
etiqueta13 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta13.place(x = 120, y = 380)
etiqueta14 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta14.place(x = 120, y = 400)
etiqueta15 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta15.place(x = 205, y = 380)
etiqueta16 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta16.place(x= 205, y = 400)
#Label para canal 4:
etiqueta17 = Label(v0, text = "Channel 4:", font=("Arial", 12, 'bold'))
etiqueta17.place(x = 25, y = 430)
etiqueta18 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta18.place(x = 120, y = 430)
etiqueta19 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta19.place(x = 120, y = 450)
etiqueta20 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta20.place(x = 205, y = 430)
etiqueta21 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta21.place(x= 205, y = 450)
#Label para canal 5:
165
etiqueta22 = Label(v0, text = "Channel 5:", font=("Arial", 12, 'bold'))
etiqueta22.place(x = 25, y = 480)
etiqueta23 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta23.place(x = 120, y = 480)
etiqueta24 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta24.place(x = 120, y = 500)
etiqueta25 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta25.place(x = 205, y = 480)
etiqueta26 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta26.place(x= 205, y = 500)
#Label para canal 6:
etiqueta27 = Label(v0, text = "Channel 6:", font=("Arial", 12, 'bold'))
etiqueta27.place(x = 25, y = 530)
etiqueta28 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta28.place(x = 120, y = 530)
etiqueta29 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta29.place(x = 120, y = 550)
etiqueta30 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta30.place(x = 205, y = 530)
etiqueta31 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta31.place(x= 205, y = 550)
#Label para canal 7:
etiqueta32 = Label(v0, text = "Channel 7:", font=("Arial", 12, 'bold'))
etiqueta32.place(x = 25, y = 580)
etiqueta33 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta33.place(x = 120, y = 580)
etiqueta34 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta34.place(x = 120, y = 600)
etiqueta35 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta35.place(x = 205, y = 580)
etiqueta36 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
166
etiqueta36.place(x= 205, y = 600)
#Label para canal 8:
etiqueta37 = Label(v0, text = "Channel 8:", font=("Arial", 12, 'bold'))
etiqueta37.place(x = 25, y = 630)
etiqueta38 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta38.place(x = 120, y = 630)
etiqueta39 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta39.place(x = 120, y = 650)
etiqueta40 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta40.place(x = 205, y = 630)
etiqueta41 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta41.place(x= 205, y = 650)
#Label para la deteccion de Impedancias
etiqueta42 = Label(v0, text = "Impedance", font=("Arial", 12, 'bold'))
etiqueta42.place(x = 500, y = 250)
#Label para canal 1 Impedancias:
etiqueta43 = Label(v0, text = "Channel 1:", font=("Arial", 12, 'bold'))
etiqueta43.place(x = 390, y = 280)
etiqueta44 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta44.place(x = 485, y = 280)
etiqueta45 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta45.place(x = 485, y = 300)
etiqueta46 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta46.place(x = 570, y = 280)
etiqueta47 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta47.place(x= 570, y = 300)
etiqueta48 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta48.place(x = 620, y = 280)
etiqueta48 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta48.place(x = 620, y = 300)
#Label para canal 2 Impedancias:
etiqueta49 = Label(v0, text = "Channel 2:", font=("Arial", 12, 'bold'))
167
etiqueta49.place(x = 390, y = 330)
etiqueta50 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta50.place(x = 485, y = 330)
etiqueta51 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta51.place(x = 485, y = 350)
etiqueta52 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta52.place(x = 570, y = 330)
etiqueta53 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta53.place(x= 570, y = 350)
etiqueta54 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta54.place(x = 620, y = 330)
etiqueta55 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta55.place(x = 620, y = 350)
#Label para canal 3 Impedancias:
etiqueta56 = Label(v0, text = "Channel 3:", font=("Arial", 12, 'bold'))
etiqueta56.place(x = 390, y = 380)
etiqueta57 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta57.place(x = 485, y = 380)
etiqueta58 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta58.place(x = 485, y = 400)
etiqueta59 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta59.place(x = 570, y = 380)
etiqueta60 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta60.place(x= 570, y = 400)
etiqueta61 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta61.place(x = 620, y = 380)
etiqueta62 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta62.place(x = 620, y = 400)
#Label para canal 4 Impedancias:
etiqueta64 = Label(v0, text = "Channel 4:", font=("Arial", 12, 'bold'))
etiqueta64.place(x = 390, y = 430)
168
etiqueta65 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta65.place(x = 485, y = 430)
etiqueta66 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta66.place(x = 485, y = 450)
etiqueta67 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta67.place(x = 570, y = 430)
etiqueta68 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta68.place(x= 570, y = 450)
etiqueta69 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta69.place(x = 620, y = 430)
etiqueta70 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta70.place(x = 620, y = 450)
#Label para canal 5 Impedancias:
etiqueta71 = Label(v0, text = "Channel 5:", font=("Arial", 12, 'bold'))
etiqueta71.place(x = 390, y = 480)
etiqueta72 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta72.place(x = 485, y = 480)
etiqueta73 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta73.place(x = 485, y = 500)
etiqueta74 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta74.place(x = 570, y = 480)
etiqueta75 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta75.place(x= 570, y = 500)
etiqueta76 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta76.place(x = 620, y = 480)
etiqueta77 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta77.place(x = 620, y = 500)
#Label para canal 6 Impedancias:
etiqueta78 = Label(v0, text = "Channel 6:", font=("Arial", 12, 'bold'))
etiqueta78.place(x = 390, y = 530)
etiqueta79 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta79.place(x = 485, y = 530)
169
etiqueta80 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta80.place(x = 485, y = 550)
etiqueta81 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta81.place(x = 570, y = 530)
etiqueta82 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta82.place(x= 570, y = 550)
etiqueta83 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta83.place(x = 620, y = 530)
etiqueta84 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta84.place(x = 620, y = 550)
#Label para canal 7 Impedancias:
etiqueta85 = Label(v0, text = "Channel 7:", font=("Arial", 12, 'bold'))
etiqueta85.place(x = 390, y = 580)
etiqueta86 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta86.place(x = 485, y = 580)
etiqueta87 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta87.place(x = 485, y = 600)
etiqueta88 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta88.place(x = 570, y = 580)
etiqueta89 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta89.place(x= 570, y = 600)
etiqueta90 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta90.place(x = 620, y = 580)
etiqueta91 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta91.place(x = 620, y = 600)
#Label para canal 8 Impedancias:
etiqueta92 = Label(v0, text = "Channel 8:", font=("Arial", 12, 'bold'))
etiqueta92.place(x = 390, y = 630)
etiqueta93 = Label(v0, text= "Positive", font=("Arial", 12,'bold'), bg="white")
etiqueta93.place(x = 485, y = 630)
etiqueta94 = Label(v0, text = "Negative", font=("Arial", 12, 'bold'), bg = "white")
etiqueta94.place(x = 485, y = 650)
170
etiqueta95 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta95.place(x = 570, y = 630)
etiqueta96 = Label(v0, text = "--", font=("Arial", 12, 'bold'))
etiqueta96.place(x= 570, y = 650)
etiqueta97 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta97.place(x = 620, y = 630)
etiqueta98 = Label(v0, text = "KOhm", font=("Arial", 12, 'bold'))
etiqueta98.place(x = 620, y = 650)
v0.mainloop()