Post on 07-Jul-2022
SISTEMA PORTABLE PARA LA ADQUISICION Y PROCESAMIENTO DE
SEÑALES ECG, CON APLICABILIDAD EN DISPOSITIVOS MOVILES
SANTIAGO VILLAFUERTE ECHEVERRI - 1125634
HARBY TORRES AVILA - 1135083
UNIVERSIDAD DE SAN BUENAVENTURA CALI
FACULTAD DE INGENIERÍAS
PROGRAMA DE INGENIERÍA ELECTRÓNICA
SANTIAGO DE CALI
2017
SISTEMA PORTABLE PARA LA ADQUISICION Y PROCESAMIENTO DE
SEÑALES ECG, CON APLICABILIDAD EN DISPOSITIVOS MOVILES
SANTIAGO VILLAFUERTE ECHEVERRI - 1125634
HARBY TORRES AVILA - 1135083
Trabajo de Grado
Director
Ing. José Fernando Valencia Murillo, Ph.D.
UNIVERSIDAD DE SAN BUENAVENTURA CALI
FACULTAD DE INGENIERÍAS
INGENIERÍA ELECTRÓNICA
SANTIAGO DE CALI
2017
DEDICATORIA
A nuestros padres, eje fundamental para iniciar la carrera de ingeniería electrónica, no sólo
limitándose a lo académico sino también como apoyo moral y psicológico, además de ser un
soporte incondicional en todas las etapas de la vida.
A nuestras familias, por apoyarnos en éste camino y siempre creer que era posible, además
de darnos aliento en los momentos más difíciles.
A nuestros profesores, que representan todo lo que hemos aprendido y de quienes hemos
tomado ejemplo en el ámbito profesional, siempre con la mira en el objetivo principal de
nuestro camino en la carrera.
AGRADECIMIENTOS
Agradecemos a todos los que de alguna manera nos apoyaron aportando conocimientos,
materiales o simplemente con palabras de aliento para seguir adelante con el proyecto que
desde un principio se caracterizó por ser un reto a nivel personal y académico bastante grande.
Finalmente a Dios gracias, por darnos vida y oportunidades para llegar a este punto de nuestra
existencia, próximos a recibir un título que representa todos nuestros logros académicos.
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. VLADIMIR TRUJILLO OLAYA, PhD
__________________________________________________
ING. MARIO ANDRES GONZALEZ GUTIERREZ
Santiago de Cali, 20 de Noviembre del 2017
TABLA DE CONTENIDO
RESUMEN ........................................................................................................................... 17
CAPITULO 1. INTRODUCCIÓN ....................................................................................... 20
1.1. Introducción .............................................................................................................. 20
1.2. Definición del problema ........................................................................................... 20
1.3. Justificación .............................................................................................................. 22
1.4. Objetivos ................................................................................................................... 24
1.4.1. General .............................................................................................................. 24
1.1.1. Específicos ........................................................................................................ 24
1.2. Metodología .............................................................................................................. 24
1.2.1. Etapa de investigación y fundamentación ......................................................... 25
1.2.2. Etapa de desarrollo ............................................................................................ 26
1.2.3. Etapa de ejecución............................................................................................. 26
1.2.4. Etapa de implementación .................................................................................. 27
1.2.5. Etapa de resultados ............................................................................................ 27
CAPITULO 2. MARCO REFERENCIAL ........................................................................... 28
2.1. Marco teórico ............................................................................................................ 29
2.1.1. Señales Biomédicas ........................................................................................... 29
2.1.2. Señales Bioeléctricas ......................................................................................... 29
2.1.3. Electrocardiograma (ECG)................................................................................ 30
2.1.4. Derivaciones ...................................................................................................... 32
2.1.4.1. Derivaciones de plano frontal ........................................................................ 33
2.1.4.1.1. Derivaciones bipolares clásicas del electrocardiograma ............................. 33
2.1.4.1.2. Derivaciones monopolares aumentadas ...................................................... 34
2.1.4.2. Derivaciones del plano horizontal .................................................................. 35
2.1.4.2.1. Derivaciones precordiales ........................................................................... 36
2.1.5. Dispositivos de aplicación específica (ASIC’s) ................................................ 37
2.1.5.1. Tipos de ASIC’s: ............................................................................................ 37
2.1.5.2. ASIC’s utilizados para mediciones ECG: ...................................................... 38
2.1.6. Filtro Antialiasing ............................................................................................. 39
2.1.6.1. Efecto Aliasing ............................................................................................... 40
2.1.6.2. Descripción Filtro........................................................................................... 41
2.1.7. Interferencias de las señales electrocardiográficas ........................................... 41
2.1.7.1. Filtros digitales ............................................................................................... 42
2.1.7.2. Tipos de filtros ............................................................................................... 42
2.1.8. Funcionamiento principal de un filtro digital.................................................... 45
2.1.9. Filtros digitales básicos para señales electrocardiográficas .............................. 46
2.1.10. Sistemas de adquisición de señales biomédicas .............................................. 47
2.1.11. Amplificadores de biopotenciales ................................................................... 48
2.1.12. Norma internacional para equipos electromédicos ......................................... 49
2.2. Marco histórico ......................................................................................................... 49
2.2.1. Historia del ECG ............................................................................................... 49
2.2.2. Origen de los ASIC’s ........................................................................................ 51
CAPITULO 3. CAPTURA Y PROCESAMIENTO DE LA SEÑAL ECG ......................... 53
3.1. Consideraciones para el diseño ................................................................................. 53
3.1.1. Matriz de necesidades ....................................................................................... 53
3.1.2. Diagrama de Pareto ........................................................................................... 54
3.2. Elección de materiales (electrodos y ASIC) ............................................................. 55
3.2.1. Integrado ADS1298 .......................................................................................... 57
3.3. Elección del medio de transmisión ........................................................................... 59
3.3.1. PIC32MX795F512H ......................................................................................... 61
3.4. Elección cable de paciente ........................................................................................ 63
3.5. Protección del paciente ............................................................................................. 65
3.6. Aislamiento del circuito ............................................................................................ 68
3.7. Alimentación del ADS1298 ...................................................................................... 72
3.8. Puertos de comunicación .......................................................................................... 73
3.8.1. Bus de comunicación SPI ................................................................................. 74
3.8.2. UART ................................................................................................................ 75
3.8.3. USB ................................................................................................................... 76
3.9. Listado de componentes ........................................................................................... 78
CAPITULO 4. DISEÑO DEL CIRCUITO DEL SISTEMA PORTABLE. ........................ 80
4.1. Diagrama de bloques del esquema del circuito ........................................................ 80
4.1.1. Primera etapa: Diseño de circuito de protección de pacientes y filtros antialiasing
..................................................................................................................................... 80
4.1.2. Segunda etapa: Circuito del ADS1298 ............................................................. 83
4.1.3. Tercera etapa: Fuentes de alimentación análogas para el ADS1298 ................ 85
4.1.4. Cuarta etapa: Circuito del PIC32MX795F512H ............................................... 87
4.1.5. Quinta etapa: Circuito de alimentación ............................................................. 89
4.2. Diseño del circuito físico .......................................................................................... 90
CAPITULO 5. PRUEBAS PRELIMINARES ..................................................................... 94
5.1. Conversión del dato binario a voltaje ....................................................................... 94
5.2. Visualización de resultados con diferentes pruebas en MATLAB® ........................ 97
5.2.1. Señal cuadrada .................................................................................................. 97
5.2.2. Señal sinusoidal ................................................................................................. 99
5.3. Pruebas con ADS1298 ............................................................................................ 101
5.3.1. Frecuencia de muestreo ideal .......................................................................... 101
5.3.2. Pruebas con señales externas .......................................................................... 102
5.3.3. Ganancia ideal ................................................................................................. 104
5.4. Filtros digitales desarrollados en MATLAB® ....................................................... 108
CAPITULO 6. PROGRAMACIÓN ................................................................................... 111
6.1. Inicializaciones ....................................................................................................... 111
6.1.1. Definiciones .................................................................................................... 111
6.1.2. Variables ......................................................................................................... 113
6.1.3. Entradas y salidas ............................................................................................ 115
6.1.4. UART .............................................................................................................. 115
6.1.5. Serial Peripheral Interface (SPI) ..................................................................... 116
6.1.6. Interrupciones .................................................................................................. 120
6.1.7. Funciones para trabajar con el puerto SPI....................................................... 122
6.1.8. Registros del ADS1298 ................................................................................... 124
6.2. Diagrama de flujo ................................................................................................... 131
6.2.1. Función Complete_trama ................................................................................ 132
6.2.1.1. Función crc16 ............................................................................................... 134
6.2.2. Función SendDataBuffer ................................................................................. 135
6.2.3. Función interrupción ....................................................................................... 136
6.2.3.1. Función ADS_updateDataCH8 .................................................................... 137
6.2.3.2. Función ADS_updateDataCHx .................................................................... 139
6.2.3.3. Función de complemento a 2 (C2DATA) .................................................... 140
6.3. Programación interfaz de usuario en MATLAB® ................................................. 141
CAPITULO 7. RESULTADOS ......................................................................................... 144
7.1. Conexión de electrodos ........................................................................................... 144
7.2. Puesta en funcionamiento del programa ................................................................. 146
7.3. Gráficas de funcionamiento en tiempo real ............................................................ 148
7.3.1. Todas las derivaciones trazándose de manera óptima..................................... 148
7.3.2. Electrodo RA desconectado ............................................................................ 149
7.3.3. Electrodo LA desconectado ............................................................................ 150
7.3.4. Electrodo RL desconectado............................................................................. 150
7.3.5. Electrodo LL desconectado ............................................................................. 151
7.3.6. Electrodo V1 desconectado ............................................................................. 152
7.3.7. Electrodo V2 desconectado ............................................................................. 152
7.3.8. Electrodo V3 desconectado ............................................................................. 153
7.3.9. Electrodo V4 desconectado ............................................................................. 153
7.3.10. Electrodo V5 desconectado ........................................................................... 154
7.3.11. Electrodo V6 desconectado ........................................................................... 154
7.3.12. Detección de error por CRC16 ...................................................................... 155
7.4. Comparación con graficas estándar del ECG ......................................................... 155
7.5. Costos ..................................................................................................................... 159
CAPITULO 8. CONCLUSIONES E IMPACTO DEL PROYECTO ................................ 160
8.1. Conclusiones ........................................................................................................... 160
8.2. Impacto del proyecto (salud, social, económico) ................................................... 163
8.2.1. Impacto en salud ............................................................................................. 163
8.2.2. Impacto social ................................................................................................. 163
8.2.3. Impacto económico ......................................................................................... 164
BIBLIOGRAFIA ................................................................................................................ 165
ANEXOS ............................................................................................................................ 169
LISTA DE TABLAS
Tabla 1. Guía para matriz de necesidades ............................................................................ 53
Tabla 2. Evaluación de necesidades ..................................................................................... 54
Tabla 3. Matriz de necesidades ............................................................................................ 54
Tabla 4. ASIC para la captura de señales biomédicas. ......................................................... 56
Tabla 5. TABLA COMPARATIVA PIC ............................................................................. 60
Tabla 6. Características PIC32MX795F512H ...................................................................... 62
Tabla 7. Características integrado PESD5V0S2BT. ............................................................ 66
Tabla 8. Características integrado OPA376AIDCKT .......................................................... 68
Tabla 9. Características integrado ADUM3160BRWZ ........................................................ 69
Tabla 10. Corrientes integrados principales. ........................................................................ 70
Tabla 11. características integrado NCM6S0505EC ............................................................ 71
Tabla 12. Características fuentes de alimentación................................................................ 72
Tabla 13. Características integradoADM7154ARDZ. ......................................................... 73
Tabla 14. Tabla de componentes completa .......................................................................... 78
Tabla 15. Valores ideales del código de salida. ................................................................... 94
Tabla 16. Comparación de los valores de entrada vs el código de salida............................. 95
Tabla 17. Comparación de los valores de entrada vs el código de salida aplicando a
complemento a 2. .................................................................................................................. 96
Tabla 18. Cantidad de bits en comunicación SPI. .............................................................. 119
Tabla 19. Valor Registro CONFIG3................................................................................... 125
Tabla 20. Valor Registro CONFIG1................................................................................... 125
Tabla 21. Valor Registro CONFIG2................................................................................... 126
Tabla 22.Valor Registro CONFIG4.................................................................................... 126
Tabla 23. Valor Registro LOFF .......................................................................................... 127
Tabla 24. Valor Registro LOFF_SENS(P/N) ..................................................................... 127
Tabla 25. Valor Registro RLD_SENS(P/N) ....................................................................... 128
Tabla 26. Valor Registro CHxSET ..................................................................................... 129
Tabla 27. Valor Registro WCT1......................................................................................... 131
Tabla 28. Valor Registro WCT2......................................................................................... 131
Tabla 29. Paquetes de datos de lectura ADS1298 .............................................................. 139
Tabla 30. Costo total de fabricación. .................................................................................. 159
LISTA DE FIGURAS
Figura 1. Diseño metodológico general ................................................................................ 25
Figura 2. Esquema general para el desarrollo del proyecto .................................................. 28
Figura 3. Ondas de la señal ECG .......................................................................................... 31
Figura 4. Triángulo de Einthoven ......................................................................................... 31
Figura 5. Electrodos médicos. .............................................................................................. 32
Figura 6. Esquema de las derivaciones monopolares. .......................................................... 35
Figura 7. Esquema de las derivaciones precordiales. ........................................................... 36
Figura 8. Tipos de filtros ...................................................................................................... 44
Figura 9. Diagrama de bloques de un filtro digital tipo FIR ................................................ 45
Figura 10. Diagrama de bloques de un filtro digital tipo IIR ............................................... 46
Figura 11. Diagrama de sistema generalizado para la adquisición de biopotenciales .......... 48
Figura 12. Diagrama de Pareto: Necesidades ....................................................................... 55
Figura 13. Integrado ADS1298 ............................................................................................ 58
Figura 14. PIC32MX795F512H ........................................................................................... 62
Figura 15. Conductor de 10 derivaciones tipo pinza fija. ..................................................... 64
Figura 16. Tipos de conectores para enlace cable - equipo. ................................................. 64
Figura 17. Tipos de conectores para derivaciones. ............................................................... 64
Figura 18. Cable de 10 conductores de derivación tipo presión. .......................................... 65
Figura 19. Encapsulado SOT32 integrado PESD5V0S2BT. ................................................ 67
Figura 20. Símbolo integrado PESD5V0S2BT. ................................................................... 67
Figura 21. Integrado ADUM3160BRWZ ............................................................................. 69
Figura 22. Integrado NCM6S0505EC. ................................................................................. 71
Figura 23. Integrado ADM7154ARDZ. ............................................................................... 73
Figura 24. Configuración de un bus SPI con un dispositivo maestro y 3 esclavos. ............. 75
Figura 25. Diagrama de bloques UART. .............................................................................. 76
Figura 26. Pines y conector estándar USB. .......................................................................... 77
Figura 27. Circuito protección de pacientes. ........................................................................ 82
Figura 28. Circuito ADS1298. .............................................................................................. 84
Figura 29. Fuentes de alimentación ADS1298. .................................................................... 86
Figura 30. Circuito PIC32MX795F512H. ............................................................................ 87
Figura 31. Circuito externo para programar PIC32MX ....................................................... 88
Figura 32. Pines cableados externamente para la configuración del ADS1298 ................... 89
Figura 33. Circuito alimentación .......................................................................................... 90
Figura 34. PCB capa TOP y BOTTOM. .............................................................................. 91
Figura 35. Placa entregada por Microcircuitos. .................................................................... 92
Figura 36. Placa terminada. .................................................................................................. 93
Figura 37. Valores análogos vs binarios. .............................................................................. 95
Figura 38. Valores análogos vs datos binarios con complemento a 2. ................................. 96
Figura 39. Código para graficar la señal generada en MATLAB®. .................................... 97
Figura 40. Gráficas generadas. ............................................................................................. 98
Figura 41. Gráficas de los 4 canales en MATLAB®. .......................................................... 99
Figura 42. Señal de entrada al ADS1299 en osciloscopio. ................................................. 100
Figura 43. Señal de medida con el ADS1299 y graficada en MATLAB®. ....................... 100
Figura 44. Circuito para la adquisición de datos. ............................................................... 101
Figura 45. Pruebas a diferentes frecuencias de muestreo. .................................................. 102
Figura 46. Señal triangular de 1Hz muestreada .................................................................. 103
Figura 47. Señal triangular de 2Hz muestreada .................................................................. 103
Figura 48. Señal triangular de 5Hz muestreada .................................................................. 104
Figura 49. Señal ECG, G=1 ................................................................................................ 105
Figura 50. Señal ECG, G=2 ................................................................................................ 105
Figura 51. Señal ECG, G=3 ................................................................................................ 106
Figura 52. Señal ECG, G=4 ................................................................................................ 106
Figura 53. Señal ECG, G=6 ................................................................................................ 107
Figura 54. Señal ECG, G=8 ................................................................................................ 107
Figura 55. Señal ECG, G=12 .............................................................................................. 108
Figura 56. Filtro pasa bajas para eliminar ruidos por respiración en MATLAB® ............ 109
Figura 57. Filtro Notch en MATLAB® ............................................................................. 109
Figura 58. Filtro pasa altas para eliminar nivel DC en MATLAB® .................................. 110
Figura 59. Registro SPIxCON ............................................................................................ 118
Figura 60. Gráfico de configuración SPI ............................................................................ 120
Figura 61. Envío de registro de lectura al ADS1298 .......................................................... 123
Figura 62. Envío de escritura de datos al ADS1298........................................................... 123
Figura 63. Funcionamiento del terminal central de Wilson (WCT) ................................... 130
Figura 64. Diagrama de flujo principal para PIC32MX795F512H .................................... 132
Figura 65. Función Complete_trama .................................................................................. 133
Figura 66. Función crc16 .................................................................................................... 135
Figura 67. Función interrupción ......................................................................................... 137
Figura 68. Función ADS_updateDataCH8 ......................................................................... 138
Figura 69. Función de actualizar datos para canales pares ................................................. 140
Figura 70. Función de actualizar datos para canales impares ............................................. 140
Figura 71. Función de complemento a 2 ............................................................................ 141
Figura 72. Interfaz gráfica de usuario ................................................................................. 142
Figura 73. Diagrama de flujo del funcionamiento de la interfaz de usuario. ..................... 143
Figura 74. Electrodos pegados en las extremidades ........................................................... 144
Figura 75. Electrodos pegados al tórax .............................................................................. 145
Figura 76. Cable ECG conectado al paciente ..................................................................... 145
Figura 78. Puesta en funcionamiento de la tarjeta "ECG Device". .................................... 146
Figura 79. Interfaz ECG en MATLAB® ............................................................................ 147
Figura 80. Interfaz lista para iniciar a graficar ................................................................... 147
Figura 81. Error por comunicación por el cable serial ....................................................... 148
Figura 82. Gráfica de 12 derivaciones tomada con “ECG device”. ................................... 149
Figura 83. Prueba electrodo RA desconectado. .................................................................. 149
Figura 84. Prueba electrodo LA desconectado. .................................................................. 150
Figura 85. Prueba electrodo RL desconectado. .................................................................. 151
Figura 86. Prueba electrodo LL desconectado. .................................................................. 151
Figura 87. Prueba electrodo V1 desconectado. .................................................................. 152
Figura 88. Prueba electrodo V2 desconectado. .................................................................. 152
Figura 89. Prueba electrodo V3 desconectado. .................................................................. 153
Figura 90. Prueba electrodo V4 desconectado. .................................................................. 153
Figura 91.Prueba electrodo V5 desconectado. ................................................................... 154
Figura 92. Prueba electrodo V6 desconectado. .................................................................. 154
Figura 93. Detección de error por CRC16. ......................................................................... 155
Figura 93. ECG de 12 derivaciones tomado con prototipo diseñado por los autores. ....... 156
Figura 95. Electrocardiograma paciente en estado normal tomado con ECG clínico. ....... 157
Figura 96. Electrocardiograma paciente en estado normal tomado con ECG clínico. ....... 157
Figura 97. EGG graficado con sistema portable................................................................. 158
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…17
RESUMEN
La toma de un electrocardiograma es de vital importancia a la hora de realizar diagnósticos
de enfermedades cardiovasculares, ya que puede revelar el estado y las condiciones actuales
del corazón del paciente al cual se le realice dicho procedimiento. En la actualidad, las
diferentes competencias de la ingeniería, en este caso de la ingeniería electrónica, ha
incentivado al desarrollo de aplicaciones en el campo de la biomedicina implementando
dispositivos que nos permiten la adquisición y el procesamiento de señales bioeléctricas, lo
que permite un control más específico y puntual de diferentes órganos en el cuerpo humano,
facilitando y agilizando los procedimientos médicos y mejorando las condiciones del
paciente en intervenciones. En este proyecto se plantea el diseño de un sistema portable para
la adquisición y procesamiento de señales ECG, con aplicabilidad en dispositivos móviles,
el cual se caracteriza principalmente por ser un dispositivo portable y de fácil implementación
tanto para pacientes en lugares como su residencia, y para personal médico en centros
asistenciales de salud.
El primer paso para el desarrollo del prototipo es realizar el diseño de la tarjeta electrónica
basado en el circuito integrado de aplicación específica ADS1298 de la compañía Texas
Instruments, diseñado principalmente para trabajar con señales ECG, el cual cuenta con 8
canales para capturar señales y puerto de comunicación SPI. La tarjeta trabaja con el
PIC32MX795F512H de la empresa Microchip como procesador general del sistema que
también cuenta con puerto de comunicación SPI para la trasferencia de datos con el
ADS1298. La programación del dispositivo se realiza directamente desde el IDE de
microchip usando librerías específicamente diseñadas para configurar las funciones
primarias del dispositivo. Finalmente, se utiliza una interfaz gráfica de usuario realizada en
MATLAB® para la visualización de las señales obtenidas.
Las pruebas que se realizaron para la validación del correcto funcionamiento demuestran que
se cumple con lo planteado en el desarrollo del sistema tanto en la parte de hardware como
en software y se implementan los requerimientos necesarios de acuerdo con las normas
internacionales para equipos biomédicos. Finalmente, se obtuvo un dispositivo que registra
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…18
12 derivaciones del ECG (Lead I, Lead II, Lead III, aVF, aVR, aVL, V1, V2, V3, V4, V5 y
V6) con una frecuencia de muestreo de 250 muestras por segundo, las cuales se pueden
visualizar y registrar en MATLAB®.
Palabras claves: señales bioeléctricas, circuito integrado de aplicación específica,
electrocardiograma, enfermedades cardiovasculares, interfaz gráfica de usuario.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…19
ABSTRACT
The acquisition of electrocardiogram (ECG) signals is vital for diagnosing cardiovascular
diseases, as it can reveal the actual state and conditions of the heart in patients under study.
Currently, the fast advance of the electronic engineering had allowed the development of
applications on the biomedicine field, implementing devices that allow bioelectrical signal
acquisition and processing, leading to a specific and punctual monitorization of several
organs of the human body. This makes easier, faster and better the medical procedures,
improving the patients’ conditions during the medical interventions. In this project, a design
of a portable system for ECG signal acquisition and processing, with applicability in mobile
devices, is proposed, which is characterized principally for being a portable device that is
easy to implement, both in the patient’s residences, as well as health care centers.
The first step to develop the prototype is to build the electronic board based on the ADS1298
application-specific integrated circuit, by Texas Instruments Company, designed principally
for ECG signals that counts with eight channels for data acquisition and a SPI communication
port. The board works with the PIC32MX795F512H by the Microchip Company as the main
processor of the system, which also has a SPI port for data transference between the
ADS1298 and the PIC. The device programming is done through the MPLAB interface
programming environment (MPLAB IPE), using libraries that were especially designed for
the main code of the proposed device. Finally, a graphical user interface made in MATLAB®
was implemented to display the recorded signals.
The performed tests to validate the correct functionality of the ECG device shows that the
planned development system has been accomplished, both in hardware and software. The
needed requirements have been implemented in accordance with international rules of
biomedical equipment. Finally, a device that registers twelve leads of ECG (Lead I, Lead II,
Lead III, aVF, aVR, aVL, V1, V2, V3, V4, V5 y V6) has been obtained with a sample
frequency of 250SPS, which can be visualized and registered in MATLAB®.
Key words: Biomedical signals, application-specific integrated circuit, ECG, cardiovascular
diseases, graphical user interface
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…20
CAPITULO 1. INTRODUCCIÓN
1.1. Introducción
Hoy en día principalmente se busca realizar diagnósticos más óptimos en el área de la
biomedicina, por lo tanto, se hace primordial el estudio de las señales bioeléctricas que genera
el cuerpo humano. Estas señales entregan diferentes tipos de información que pueden llegar
a facilitar a un médico a establecer diferentes enfermedades y en casos muy puntuales
enfermedades cardiovasculares que son las generadas por deficiencias en el corazón.
Concretamente en la medicina existe un campo de amplio interés que es la
electrocardiografía, existiendo diferentes tecnologías asociadas a este tipo de enfoque
médico, que por medio de sistemas de capturas y procesamientos de señales ECG permiten
obtener resultados que son de vital importancia para la investigación de enfermedades
cardiovasculares.
En este proyecto se pretende el desarrollo de un sistema de adquisición, procesamiento y
visualización de señales ECG, usando a la ingeniería electrónica como una herramienta
tecnológica que permita el desarrollo investigativo en el área de las aplicaciones biomédicas.
1.2. Definición del problema
En el mundo actual, las enfermedades cardiovasculares (ECV) han tomado fuerza atacando
a gran parte de la población en todo el mundo, desde jóvenes hasta adultos mayores. Sus
causas se deben a muchos factores como lo son la degeneración del corazón, mala
alimentación, estrés de la vida diaria, etc. Se pueden caracterizar las ECV en 3 grandes grupos
según su naturaleza: eléctricas (fibrilación auricular y ventricular, función anormal del
nódulo sinusal, sincope, etc.), circulatorias (infarto del miocardio, angina de pecho, etc.) y
problemas estructurales (insuficiencia cardíaca, problemas en las válvulas del corazón) [1].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…21
Para controlar una ECV se debe hacer un debido reconocimiento, diagnóstico y tratamiento
de la patología. Paradójicamente muchas de los decesos causados por enfermedades de esta
índole, podrían ser evitadas si se reconocen a tiempo.
En cuanto a los métodos de diagnóstico, se pueden hacer diferentes estudios en base a los
resultados de pruebas de la química sanguínea, de presión arterial, electrocardiograma
(ECG), radiografías del tórax, Eco cardiograma Doppler a color y pruebas de esfuerzo físico,
siendo el ECG una de las pruebas más rutinarias por ser de tipo no invasivo y de relativamente
fácil adquisición. Estás técnicas (Salvo las pruebas de presión arterial), requieren de
máquinas costosas y tiempos de respuesta bastante amplios para ser realizadas y evaluadas,
lo que puede alargar el tiempo de espera que puede ser vital para un paciente que está
padeciendo una enfermedad [1].
El ECG es la representación gráfica en dos dimensiones de la señal eléctrica producida por
los impulsos de los latidos del corazón (eje vertical) en función del tiempo (eje horizontal).
Comúnmente la señal se obtiene a través de unos electrodos conectados a un instrumento que
encuentra la diferencia de potencial entre ellos. Este voltaje es guardado y procesado con
ciertas especificaciones para graficar finalmente una señal ECG [2].
Una situación problemática se presenta en el caso de aquellas personas que sufren de algún
tipo de ECV y que por alguna razón se les dificulta estar en constante evaluación de su
condición cardíaca, ya sea porque viven en zonas remotas lejos de los centros asistenciales
de salud, por congestión en los centros de salud, demoras en la asignación de citas, o porque
simplemente no tienen acceso a un centro de salud. Por lo tanto, es pertinente contar con
algún medio que permita hacer una lectura del ECG de estos pacientes para que luego pueda
ser analizada por un especialista.
Partiendo del hecho que hoy en día los dispositivos móviles son asequibles para la mayoría
de la población, y el mercado global ha llevado a que sean un requisito para muchas personas,
resulta bastante conveniente utilizarlo para este proyecto. Con un dispositivo móvil se
posibilita la adquisición y el procesamiento de las señales ECG (ya digitalizadas) debido a
que tienen unas características de procesamiento bastante altas, una capacidad de
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…22
almacenamiento de datos expandible que permite guardar mucha información, además de
fácil comunicación por internet por medio de redes WIFI o plan de datos.
Se espera que el proyecto que se propone en este documento deje la base para capturar y
procesar señales ECG de manera portátil, que faciliten graficarlas y compartirlas
remotamente, para que posteriormente puedan ser estudiadas por un especialista que se
encargue de su debido control. Para ello se plantea la siguiente pregunta ¿cómo se puede
implementar un sistema portable para la adquisición y procesamiento de señales ECG, con
aplicabilidad en dispositivos móviles?
1.3. Justificación
En 2011 murieron más de 50.000 personas por ECVs en Colombia, cifra que aumentó en
comparación a años anteriores (En 1998 fallecieron alrededor de 38000 personas) [3]. En
países como Estados unidos, 1 de cada 6 personas mueren anualmente por causas cardiacas.
[4]. Esta situación coloca a las ECV como uno de los temas prioritarios en salud que deben
ser abordados a nivel mundial.
Con el estudio de las señales ECG se pueden detectar diferentes ECV (Aproximadamente 30
enfermedades diferentes relacionadas con el corazón) como lo son: anomalías en el sistema
de conducción, cardiopatía isquémica, insuficiencia cardiaca, infarto del miocardio,
hipertensión, arritmia, entre otras [5]. Ahora bien, si los pacientes que padecen estas
enfermedades son tratados con las respuestas obtenidas por un ECG a tiempo, se podría poner
en alerta al médico encargado y así evitar problemas más graves. En este trabajo se propone
llegar a ser el puente entre el médico y el paciente, pues precisamente la idea no es realizar
la regulación de medicamentos para un afectado, si no llevar la información lo más rápido
posible al especialista para que él se encargue de su debido proceso.
En Colombia, la cobertura del sistema de salud para el 2012 ya era del 90,8%, sin embargo,
a pesar de que la cifra había mejorado en referencia a 1997 cuando era del 56,9%, el acceso
de los pacientes a las redes de salud había decaído del 79,1% al 75,5% en los mismos años
[6]. Se debe resaltar la diferencia entre cobertura y acceso, la cual radica en que cobertura es
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…23
la cantidad de personas que están aseguradas por algún sistema de salud, mientras acceso es
lo que indica la población que tiene la posibilidad de ser atendido por alguna entidad de salud.
Algunas de las barreras que impiden el acceso de las personas a un sistema de salud, es la
falta de centros de atención, falta de dinero o mala calidad de servicio, en esta última trata de
referirse al hecho de que los tiempos de atención o la congestión por una gran cantidad de
pacientes impiden que todas las personas sean atendidos de manera óptima, lo que genera
caos y puede ser fatal en el momento de requerir exámenes que son de alta prioridad, como
el caso de las personas que sufren alguna ECV. Con el dispositivo propuesto se podría llegar
a mejorar el acceso y la calidad de servicio de los centros médicos.
Por otra parte, a 2014, tan solo en Colombia habían más de 14.4 millones de usuarios de
celulares inteligentes [7], también se estima que para ese año el 40% de las búsquedas en
Google se hicieron desde un dispositivo móvil. El gerente de Mercado Libre, Martin Gallone
dijo “Solo la aplicación de Mercado Libre Colombia genera el 35% de sus ventas por medio
de Smartphones” [8]. Como se puede notar, el alcance al trabajar con este medio tecnológico
es bastante amplio y está en continua evolución.
Los dispositivos móviles traen consigo procesadores que han hecho que sean un computador
portátil con capacidad telefónica integrada. Se encuentran en el mercado procesadores desde
2 hasta 8 núcleos integrados (dual-core y octa-core respectivamente), además de tener
memorias RAM de hasta 4 y 8 GB, con almacenamientos expandibles hasta 128GB, y todas
estas características juntas posibilitan hacer una gran cantidad de funciones en un solo
instante de tiempo [9].
Lo anterior justifica la presente propuesta de trabajo de grado, la cual pretende aprovechar
las potencialidades de los dispositivos móviles para crear un sistema de captura y
procesamiento de señales ECG, el cual reúna condiciones técnicas que permitan su aplicación
real en pacientes con ECV. Sin embargo, debido a la complejidad del proyecto, se plantea
dejar el desarrollo de la aplicación móvil para un futuro desarrollo, y en el trabajo actual se
pretende realizar una interfaz de usuario en un software de programación conocido como lo
es MATLAB®.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…24
Adicionalmente, esta propuesta se relaciona con un proyecto de investigación liderado por el
profesor José Fernando Valencia, el cual está dedicado a la adquisición, procesamiento y
análisis de señales biomédicas con sistemas electrónicos embebidos.
1.4. Objetivos
1.4.1. General
Implementar un sistema portable para la adquisición y procesamiento de señales ECG, con
aplicabilidad en dispositivos móviles.
1.1.1. Específicos
Caracterizar los sistemas de adquisición de señales ECG en cuanto a tipo y número
de derivaciones.
Detallar diferentes dispositivos de aplicación específica (ASIC’s) para la adquisición
de señales ECG.
Diseñar el sistema electrónico para la adquisición y comunicación de las señales
ECG.
Diseñar una aplicación para controlar la adquisición, el procesamiento y la
visualización de la señal ECG.
Validar el funcionamiento global del sistema diseñado.
Publicar los resultados del proyecto por medio de un artículo o con la participación
en eventos de divulgación.
1.2. Metodología
El proyecto que se va a desarrollar es de tipo investigación aplicada, en el cual se plantea
como objetivo principal implementar un sistema portable para la adquisición y procesamiento
de señales ECG, con aplicabilidad en dispositivos móviles. Para ello se llevará a cabo una
metodología compuesta por varias etapas las cuales serán parte del orden a seguir para la
construcción de la investigación e implementación del proyecto. En la figura 1 se observa un
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…25
diagrama general de la metodología y a continuación, se explica en detalle cada una de estas
etapas.
1.2.1. Etapa de investigación y fundamentación
En esta etapa, que es la primera de la metodología, se realizará una búsqueda de información
referente al proyecto, en la cual se consultarán artículos, publicaciones, tesis, investigaciones,
páginas web y estudios anteriores, a nivel mundial, con el fin de clasificar y obtener una
documentación y base de datos precisa y extensa, que sea de vital importancia como
Figura 1. Diseño metodológico general
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…26
referencia para el desarrollo del proyecto. Posteriormente se realizará una investigación más
profunda de los documentos encontrados enfatizando de manera puntual en los temas
específicos del proyecto, la cual asentará una base para tomar como punto de partida en la
etapa de desarrollo. Los avances obtenidos se almacenarán en el documento.
1.2.2. Etapa de desarrollo
Con la documentación y fundamentación recopilada en la etapa anterior, se procederá a
identificar los procedimientos, aplicaciones, equipos y circuitos que serán útiles para la
construcción del proyecto, tales como la caracterización del sistema de adquisición de señales
ECG, las diferentes etapas que requiere el sistema del hardware de nuestro sistema portable
para la adquisición, procesamiento y visualización de estas señales.
Se escogerán y definirán los procedimientos, aplicaciones y equipos a trabajar, los cuales
deben ser los adecuados y que permitan desarrollar de una manera más fácil el dispositivo,
realizando un análisis de funcionalidad específica, eficiencia y costos, ya que se pretende
realizar el modelo del circuito base y el diseño de la aplicación para la investigación en curso.
Para esta etapa también se realizará la publicación de los resultados obtenidos en un
documento.
1.2.3. Etapa de ejecución
Con el modelo del circuito y el diseño de la aplicación finalizado en la etapa anterior, se
procederá a implementar de manera física el sistema para realizar las diferentes pruebas de
laboratorio, verificando la funcionalidad de los elementos escogidos para el desarrollo del
dispositivo. Al llevar a cabo estas pruebas se obtendrán datos e información que será útil para
identificar los errores de la unidad piloto y el desarrollo de la aplicación del proyecto, con el
fin de que sean corregidos y lograr la funcionalidad óptima que se espera del dispositivo en
los plazos de tiempo deseados. Finalmente, cuando se compruebe el funcionamiento de cada
uno de los elementos y se integren en un dispositivo que trabaje de la mejor manera, se
realizarán más pruebas simulando las condiciones reales en las que se verá requerido el
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…27
sistema, recopilando siempre los datos para adecuar el sistema y así definir un prototipo final.
En esta etapa se compilarán los resultados obtenidos en un documento.
1.2.4. Etapa de implementación
Con la información obtenida en la etapa anterior, partiendo de que se realizaron las
correcciones y pruebas tanto en el circuito del sistema como en el desarrollo de la aplicación,
se procederá a la implementación del prototipo final del dispositivo en el lugar de trabajo real
y se llevaran a cabo pruebas finales para detectar problemas que en esta fase del proyecto
deben ser mínimas. Posteriormente se reunirá la información y todos los datos que entregue
el dispositivo funcional de manera real en un documento.
1.2.5. Etapa de resultados
Como se detallaba anteriormente en cada etapa y en el diagrama metodológico de la fig. 1,
los resultados parciales se transcribían en un documento cada que se terminaba una fase del
proyecto. Ya con el prototipo terminado y los objetivos de la investigación cumplidos, se
finaliza con un escrito final que integre todos los resultados previos, demostrando así que se
ha cumplido con todos los requisitos propuestos en el proyecto de grado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…28
CAPITULO 2. MARCO REFERENCIAL
En esta sección se presentan los conceptos generales que se relacionan para el desarrollo del
proyecto, con la intención de facilitar la comprensión de los temas específicos que se
involucran en la investigación, tales como señales biomédicas, señales bioeléctricas, señales
electrocardiográficas (ECG), derivaciones del ECG, dispositivos de aplicación específica
(ASIC’s), filtro antialising y sistemas de adquisición de señales.
La forma en que se piensa diseñar el sistema está detallada en la fig. 2, donde se muestran
los bloques generales del desarrollo del trabajo propuesto, compuesto por la parte de
adquisición del ECG, posteriormente por un conversor A/D (Análogo a digital) que se
conectará a un módulo de transmisión, que se encargará de hacer llegar la información digital
al dispositivo, que finalmente graficará la señal ECG y tendrá la posibilidad de manipular la
señal obtenida
Figura 2. Esquema general para el desarrollo del proyecto
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…29
2.1. Marco teórico
2.1.1. Señales Biomédicas
El cuerpo humano presenta diferentes etapas de funcionamiento en las cuales se ven
reflejadas varios tipos de señales, como, por ejemplo: eléctricas, químicas o acústicas. Estas
señales en su interior son portadoras de información bastante útil para el desarrollo de la
medicina, pero en muchas ocasiones esta información no puede ser identificada de forma
inmediata, por tanto, necesitan ser decodificadas para así de alguna manera poder extraer de
forma segura los datos que entregan e interpretarlos fácilmente. [10]
2.1.2. Señales Bioeléctricas
Las señales que describen la actividad del corazón, los músculos y el cerebro se denominan
como bioeléctricas y se catalogan como las más importantes provenientes del cuerpo
humano. Específicamente las señales cardiacas y cerebrales registran una actividad constante
y espontánea mientras que las señales musculares aparecen cuando se le aplica un estímulo
externo a una zona designada. Las señales bioeléctricas, por las amplias características y
propiedades que presentan, requieren para su procesamiento varias técnicas específicas, ya
que por los diferentes tipos de onda que manejan, se pueden diagnosticar patologías distintas
por cada análisis.
Los tipos de señales bioeléctricas más conocidas son:
El electroencefalograma (EEG): refleja la actividad eléctrica del cerebro registrada
colocando varios electrodos sobre el cuero cabelludo.
El electrocardiograma (ECG): refleja la actividad eléctrica del corazón y se obtiene
colocando electrodos sobre el pecho, manos y pies.
El electromiograma (EMG): registra la actividad eléctrica de los músculos
esqueléticos, los cuales producen una corriente eléctrica.
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.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…30
El electroneurograma (ENG): resulta de la estimulación de un nervio periférico con
impulso eléctrico.
El electroretinograma (ERG): se usa para estudiar los potenciales eléctricos
generados por la retina del ojo durante una estimulación luminosa [10].
2.1.3. Electrocardiograma (ECG)
Al hablar del electrocardiograma (ECG) se está aduciendo a una representación gráfica de
los latidos del corazón, donde se puede apreciar la magnitud y dirección de la actividad
eléctrica emitida. Con el estudio del ECG se han podido llegar a establecer ciertos
parámetros, dando lugar a las mediciones de ritmo y regularidad cardiaca. Para graficar la
señal, la amplitud de la onda se toma en mili voltios (mV) y normalmente se le asigna un
rango de los 0.5 a 2 mV. Para el estudio del ECG se pueden definir las siguientes ondas que
componen la señal [11]:
La onda “P”: Es la onda de menor elevación, indica que las aurículas son estimuladas
de forma eléctrica para enviar la sangre hacia los ventrículos. Duración: 0.11
segundos. Ancho de banda: 9Hz.
Complejo “QRS”: Es un conjunto de las elevaciones mayores, lo que indica es que
los ventrículos son estimulados eléctricamente para bombear sangre hacia afuera.
Duración: 0.09 segundos. Ancho de banda: 11Hz.
Segmento “ST”: Conformado por una pequeña cantidad de armónicos, indica la
cantidad de tiempo que ocurre desde el final de una contracción de los ventrículos
hasta el comienzo del periodo de reposo.
Onda “T”: Es una onda ascendente. Muestra el periodo de recuperación de los
ventrículos. Duración: 0.15 segundos. Ancho de banda: 6.6Hz.
En la figura 3 se pueden observar las diferentes ondas que componen la señal ECG.
El procedimiento para realizar un ECG de manera convencional se define en 2 etapas: captura
y trazado. Para la captura se ubican pequeños transductores llamados electrodos sobre la piel
de los brazos, de las piernas y del tórax, tratando de formar el triángulo de Einthoven,
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…31
esquematizado en la fig. 4. Posteriormente, estos electrodos están conectados a una maquina
a la que envían las señales en mili voltios y ésta se encarga de trazar el registro que se obtiene
de cada señal. Cada trazado representa el registro de la actividad cardíaca en una parte
específica del corazón, lo que se define como derivaciones [11].
Figura 3. Ondas de la señal ECG
Tomado de: https://goo.gl/BV8A6X. Portal web y revista impresa con publicaciones dirigidas
a profesionales del sector de la salud en américa latina, para influenciar en la compra de
tecnologías y equipos médicos. Estos medios hacen parte del grupo empresarial Carvajal.
Figura 4. Triángulo de Einthoven
Tomado de: G. F. Salazar, Manual de electrocardiografía y electroencefalografía, Manual
Moderno, 2007.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…32
Una forma para capturar las señales iónicas que emiten los latidos del corazón y poder
convertirlas en ondas eléctricas para obtener el comportamiento cardiaco, es utilizando unos
dispositivos transductores llamados electrodos (Fig. 5), los cuales están hechos con una cinta
especial que actúa como pegante, aduciendo a un esparadrapo, que tiene una superficie para
contacto cutáneo con el pecho del paciente [12].
En los electrocardiogramas, los electrodos serán utilizados para capturar y medir los impulsos
eléctricos provenientes del corazón en diferentes estados del cuerpo humano. Estos
electrodos se ubican en la zona pectoral del paciente típicamente, dependiendo de la
distribución de las derivaciones que se vayan a utilizar. A continuación, se describirán los
tipos de derivaciones existentes para las señales ECG.
2.1.4. Derivaciones
La información sobre derivaciones se tomó de: [11].
Figura 5. Electrodos médicos.
Tomado de: https://goo.gl/LgjehL. Portal web de CARDIOMED empresa dedicada a la importación y
comercialización de equipos médico – quirúrgicos y la asesoría en temas específicos del sector de la salud
en Colombia.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…33
En el electrocardiograma (EKG o ECG), cuando se obtienen el registro de la diferencia de
potencial entre dos puntos eléctricos se le da el nombre de derivaciones cardiacas. Estas
derivaciones se pueden dar entre dos electrodos conectados en el cuerpo del paciente y se
denomina derivación bipolar o también entre un punto virtual y un electrodo conectado las
cuales se denominan derivaciones monopolares.
Se debe tener muy en cuenta que cuando se vaya a realizar un análisis de cualquier tipo de
derivaciones cardiacas se debe hacer en conjunto con todos los datos que me entregue el
electrocardiograma, puesto que cada derivación es un punto de vista diferente en cuanto el
mismo estimulo eléctrico.
Dependiendo de la zona del plano eléctrico del corazón que se registre en el
electrocardiograma, encontramos diferentes tipos de derivaciones que son:
Derivaciones de las extremidades (plano frontal).
Derivaciones precordiales (plano horizontal).
2.1.4.1. Derivaciones de plano frontal
Se les denomina así, a los tipos de derivaciones del electrocardiograma que se adquieren de
los electrodos ubicados en las extremidades del paciente, las cuales aportan solamente datos
electrocardiográficos del plano frontal.
Estas derivaciones de plano frontal se dividen en dos:
Derivaciones bipolares, las cuales también reciben el nombre de derivaciones clásicas
o derivaciones de Einthoven.
Derivaciones monopolares aumentadas.
2.1.4.1.1. Derivaciones bipolares clásicas del electrocardiograma
Las derivaciones bipolares clásicas o estándares del electrocardiograma son las derivaciones
primarias las cuales fueron representadas en un principio por Einthoven y que básicamente
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…34
registran la diferencia de potencial entre dos electrodos colocados en extremidades
diferentes.
“Se tienen tres derivaciones bipolares que son:
D1 ó I: Diferencia de potencial entre brazo derecho y brazo izquierdo. Su vector está
en dirección a 0º.
D2 ó II: Diferencia de potencial entre brazo derecho y pierna izquierda. Su vector
está en dirección a 60º.
D3 ó III: Diferencia de potencial entre brazo izquierdo y pierna izquierda. Su vector
está en dirección a 120º.” [11].
Triangulo y ley de Einthoven:
El triángulo de Einthoven (se denomina así en honor a su inventor) es el conjunto de las tres
derivaciones bipolares mencionadas anteriormente, las cuales generan una ecuación
matemática que se obtienen de la ley de Einthoven: D2=D1+D3.
Para la interpretación de un electrocardiograma, ésta ley obtenida por Einthoven fue de gran
utilidad ya con ella se puede determinar si los electrodos de las extremidades están bien
ubicados, como se esquematiza en la fig. 5, puesto que si se llegara al caso de que uno de los
electrodos variara de posición no se estaría cumpliendo esta ley llegando a la conclusión de
que el electrocardiograma está arrojando datos erróneos.
2.1.4.1.2. Derivaciones monopolares aumentadas
Las derivaciones monopolares de las extremidades registran en el ECG la diferencia de
potencial entre un punto teórico en el centro del triángulo de Einthoven, con valor de 0 y el
electrodo de cada extremidad, permitiendo conocer el potencial absoluto en dicho electrodo.
Inicialmente a estas derivaciones se los dio el nombre de VR, VL y VF.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…35
La V tiene como significado vector, y las letras R, L, F significa derecha, izquierda y pie (por
su significado inglés), luego se le incorporo la letra minúscula a que significa amplificada
(Fig. 6).
“Las derivaciones monopolares aumentadas son:
aVR: Potencial absoluto del brazo derecho. Su vector está en dirección a -150º.
aVL: Potencial absoluto del brazo izquierdo. Su vector está en dirección a -30º.
aVF: Potencial absoluto de la pierna izquierda. Su vector está en dirección a 90º.”
[11].
2.1.4.2. Derivaciones del plano horizontal
Las derivaciones precordiales del electrocardiograma son seis (Fig. 7). Se denominan con
una V mayúscula y se numeran del 1 al 6.
Son las mejores derivaciones del electrocardiograma para precisar alteraciones del ventrículo
izquierdo, sobre todo de las paredes anterior y posterior.
Figura 6. Esquema de las derivaciones monopolares.
Tomado de: G. F. Salazar, Manual de electrocardiografía y
electroencefalografía, Manual Moderno, 2007.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…36
“En el electrocardiograma normal, en las derivaciones precordiales, los complejos QRS son
predominantemente negativos en las derivaciones V1 y V2 (tipo rS) y predominantemente
positivos en V4 a V6 (tipo Rs).” [11].
2.1.4.2.1. Derivaciones precordiales
“V1: Esta derivación del electrocardiograma registra potenciales de las aurículas, de parte
del tabique y pared anterior del ventrículo derecho. El QRS presenta una onda R pequeña
seguida de una onda S profunda.
V2: El electrodo de esta derivación precordial, está encima de la pared ventricular derecha,
por tanto, la onda R es ligeramente mayor que en V1, seguida de una onda S profunda.
V3: Derivación transicional entre potenciales izquierdos y derechos del ECG, por estar el
electrodo sobre el septo interventricular. La onda R y la onda S suelen ser casi iguales.
V4: El electrodo de esta derivación está sobre el ápex del ventrículo izquierdo, donde es
mayor el grosor. Presenta una onda R alta seguida de una onda S pequeña.
V5 y V6: Estas derivaciones del electrocardiograma están situadas sobre el miocardio del
Ventrículo Izquierdo, cuyo grosor es menor al de V4. Por ello la onda R es menor que en V4,
aunque sigue siendo alta. La onda R está precedida de una onda Q pequeña.” [13]
Figura 7. Esquema de las derivaciones precordiales.
Tomado de: G. F. Salazar, Manual de electrocardiografía y electroencefalografía, Manual Moderno, 2007.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…37
2.1.5. Dispositivos de aplicación específica (ASIC’s)
Definido como un integrado de aplicación específica (Por sus siglas en inglés Aplication
Specific Integrate Circuit), es un dispositivo que, como su nombre lo indica, tiene un
propósito o una aplicación específica para un fin determinado.
Existe en el mercado una amplia gama de ASIC’s de diferentes fabricantes, referencias y
especificaciones. Se pueden encontrar dispositivos con 5000 compuertas lógicas, llegando a
alcanzar también los 100 millones, con diferentes herramientas integradas como
procesadores, memorias RAM y flash, con capacidad de almacenamiento por medio de ROM
y EEPROM, convertidores análogos a digital y digital a análogos, DSP, amplificadores, y
muchos otros módulos que mejoran su rendimiento y funcionalidad [14].
Según el fabricante, para realizar la configuración y poner a funcionar un ASIC, se pueden
utilizar diferentes lenguajes de descripción de hardware como VHDL o verilog. De la misma
manera, con estos dispositivos, se pueden realizar configuraciones cambiando el hardware
de una aplicación o tan solo por el software (por ejemplo, aunque se pueden tener
procesadores físicos integrados a un ASIC, se puede configurar un procesador por software,
tal como se hace cuando se trabaja con una FPGA en un dispositivo de Altera, configurando
un procesador virtual Nyos).
2.1.5.1. Tipos de ASIC’s:
Según la construcción del circuito, el ASIC puede tomar cierto nivel de capacidad, de esta
manera se clasifican en diferentes grupos. Los integrados están construidos físicamente por
varias capas en una misma pastilla, logrando hasta 10 y 15 capas conformadas por cableado
y transistores, que son los que definen las compuertas.
Completamente configurables: Como se define en su mismo nombre, estos
dispositivos están diseñados para que todos los elementos que lo componen sean
programables.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…38
Semi-Configurables: Para este tipo de dispositivos, se han predeterminado ciertos
parámetros de las celdas lógicas que ya no se podrán cambiar, sin embargo, las
interconexiones si se pueden configurar. Difieren en base a celdas estándar o en
arreglos de compuertas.
Dispositivos lógicos programables (PLD por sus siglas en inglés): Los PLDs son
programables para crear partes configurables para una aplicación específica. Se
caracterizan porque no poseen máscaras o capas y tienen un solo gran bloque de
interconexiones programables.
Arreglo de compuertas programables de campo (FPGA por sus siglas en inglés Field
Programmable Gate Array): Es un tipo de PLD que tiene una gran cantidad de
compuertas programables en comparación con otros, y por esto recibe su nombre. Sus
máscaras no se pueden programar, y solo está disponible para el usuario configurar
las interconexiones y celdas lógicas bajas.
2.1.5.2. ASIC’s utilizados para mediciones ECG:
Al ver la gran cantidad de dispositivos que se implementan para diferentes campos de la
electrónica, resulta algo complejo para el desarrollo del proyecto la elección de uno en
especial, por eso también se realizaron consultas de diferentes trabajos realizados en los
cuales hacían mediciones de ECG, basados en dispositivos ASIC’s.
Sistema para la adquisición de señales electrocadiográficas usando MATLAB®
[15]: En este trabajo, utilizaron una tarjeta de National Instruments de referencia NI
USB-6215 [16], un ASIC que tiene diferentes características como un bus de
conexión USB, 16 entradas análogas con resolución de 16 bits, entre otros. Con este
dispositivo lograron captar y digitalizar las entradas de señales obtenidas con
electrodos y posteriormente amplificadas.
Sistema para transmisión inalámbrica de señales ECG y de temperatura para
ambientes hospitalarios [17]: En este trabajo de grado, no se preocuparon por
digitalizar la información en ningún momento, ellos querían transmitir la información
para que posteriormente alguien más la utilizara para sus propios fines. Para esto
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…39
consultaron diferentes ASIC para transmisión de datos, finalmente eligiendo un
PIC18F2550, para hacer una programación basada en codificación BER. Vale aclarar
que las entradas de los transductores fueron amplificadas para poder ser leídas como
entradas análogas en el procesador.
Monitor de señales de electrocardiografía y frecuencia cardiaca mediante un
teléfono móvil con el protocolo de comunicación Bluetooth [18]: En este trabajo,
también utilizaron el procesador de referencia PIC18F2550 para hacer la
digitalización y codificación de la señal.
A portable Real-time ECG Recognition System Based on Smartphone [19]: En
este trabajo realizaron una conversión análoga a digital de las señales ampliadas
obtenidas por medio del microprocesador MSP430FG4618 de Texas Instruments.
Algunas de sus características es su convertidor A/D de 12 bits, diseñado para
alimentarse con baterías portables. Vale aclarar que antes de entrar al controlador, las
señales fueron enviadas a un amplificador operacional LM358-OP de Texas
Instruments.
2.1.6. Filtro Antialiasing
En la actualidad es muy común la implementación de conversores análogos-digitales y
digitales-análogos ya que su implementación no conlleva a un costo muy elevado y permite
realizar de forma concreta un análisis del mundo analógico en interfaces digitales
garantizando una alta precisión. Sin embargo, para alcanzar un nivel alto de confiabilidad en
estos procesos de digitalización de señales es necesario primero que todo realizar un
acondicionamiento de las señales analógicas presentes para así cumplir con los
requerimientos establecidos que permitan obtener resultados productivos. Esta fase analógica
presenta requerimientos de precisión, rechazo a ruido y velocidad que corresponden a las
características que se deben cumplir desde un punto de vista orientado al desarrollo del
circuito.
Un conversor análogo-digital es un elemento que me permite convertir una señal análoga a
una palabra o señal digital, es decir, pasar una señal que es continua en el tiempo en una señal
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…40
discreta o muestreada. La señal análoga se introduce al conversor y se muestrea a una tasa
determinada adquiriendo medidas de la amplitud de la señal aproximándolas a valores
enteros de cuantificación establecidos por el número de bits y el voltaje de referencia del
conversor.
Cuando se convierten señales análogas se pueden obtener diferencias en aspectos como la
amplitud, el rango de frecuencias, offset entre muchas otras. Debido a esto y de manera
indispensable se debe realizar el acondicionamiento de la señal para que esta parte en
cualquier dispositivo que utilice etapa de conversión mantenga las características propias de
las señales originales del proceso [20].
2.1.6.1. Efecto Aliasing
Como se menciona en [20], la frecuencia propia de la señal (Fa) y la frecuencia de muestro
(Fs) son dos de las características más importantes en un proceso de digitalización. Si Fs es
menor o igual al doble de Fa cuando se requiera reconstruir la señal principal las componentes
de frecuencia de muestreo intervienen en el proceso y producen una pérdida de datos, a tal
efecto se le conoce como aliasing.
Para lograr evitar estos efectos que se producen por el uso de una frecuencia de muestreo
incorrecta es necesario cumplir con el criterio de muestreo de Nyquist el cual me indica que
la frecuencia para la adquisición y digitalización de datos debe ser al menos el doble de la
frecuencia de corte de la señal a muestrear:
Fs > 2 Fa
En un amplio número de casos, la determinación de una frecuencia que cumpla con los
criterios de Nyquist no es suficiente para evitar que se distorsione la señal y que se pierdan
los datos debido al efecto aliasing, por lo que es necesario adaptar antes de la digitalización
filtros pasabajas o antialising que me permitan atenuar los componentes en frecuencias fuera
del rango de interés y reduzcan el ruido.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…41
2.1.6.2. Descripción Filtro
El filtro antialising es un filtro pasabajas cuya respuesta debe ser en su máxima expresión
plana, tanto en la banda de atenuación, como en la frecuencia de esquina relacionada con la
banda de paso, es decir el rizado en este tipo de señales debe ser el mínimo. Tal como se
menciona en [20] estos filtros son de tipo activo y su finalidad es atenuar o remover los
componentes de alta frecuencia de la señal reduciendo las señales reflejadas o sobrepuestas
a la señal fundamental obteniendo una resolución y un muestreo apropiado en la banda de
interés.
2.1.7. Interferencias de las señales electrocardiográficas
La interferencia que comúnmente se presenta en cualquier tipo de señal bioeléctrica que se
desea adquirir y procesar está definida como una perturbación, la cual es una señal
inadecuada que se adhiere a la señal fundamental y generar que los resultados esperados no
sean los deseados.
Como se menciona en [21] las señales electrocardiográficas presentan diferentes tipos de
perturbaciones, a continuación, describiremos las más comunes:
Interferencia eléctrica (línea de potencia)
Es una señal de 60 Hz y sus armónicos, los cuales se modelan como sinusoides y
combinaciones de sinusoides, es producida debido a la red eléctrica a la cual se conecta la
línea de alimentación del dispositivo, esta puede contener interferencia electromagnética de
aparatos conectados a esta misma red como electrodomésticos, sistemas computacionales,
radares o entre otras fuentes que me pueden afectar la señal ECG que se está adquiriendo.
Interferencia por contacto de electrodos o movimientos inesperados
Se denomina como una perturbación transitoria debido a la desconexión que causa la perdida
de contacto entre algún electrodo y la piel del paciente, esta desconexión puede llegar a ser
permanente o intermitente y es causada generalmente por el movimiento o la vibración de la
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…42
persona en intervención o por un mal estado en el sistema de adherencia del electrodo, posee
una frecuencia que oscila entre los 60 Hz y se evita principalmente usando siempre electrodos
nuevos cuando se efectúa una toma de datos y logrando que el paciente esté en condiciones
de alto reposo.
Ruido del ECG debido a la respiración
Se produce una modulación de la señal debido a la variación de la amplitud del ECG por la
componente de la respiración que es agregada a la línea base de la señal. Esta señal
contaminante es de especial cuidado y tratamiento ya que se encuentra localizada en la zona
de componentes importantes del ECG y su filtrado puede generar la eliminación de datos de
la señal base.
2.1.7.1. Filtros digitales
Un filtro digital como su nombre lo indica es un filtro que trabaja sobre señales especialmente
digitalizadas, se genera mediante un proceso computacional o un algoritmo en el cual una
señal digital de entrada (secuencia de muestras) se modifica obteniendo otra secuencia de
muestras digitalizadas como señal de salida cuyo objetivo puede ser aumentar, atenuar o
rechazar características de la señal principal de entrada.
Este tipo de filtros digitales pueden ser implementados en software de procesamiento digital
de señales con un loop dentro del programa principal tanto como en un circuito integrado
dentro de un sistema digital [22].
2.1.7.2. Tipos de filtros
Los filtros más comunes son:
Filtro paso bajo (low pass, LP): Deja pasar las frecuencias las cuales sus valores
estén por debajo de un rango determinado de frecuencia.
Filtro paso alto (high pass, HP): Deja pasar las frecuencias las cuales sus valores
estén por encima de un rango determinado de frecuencia.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…43
Filtro paso de banda (band pass, BP): Deja pasar las frecuencias las cuales sus
valores estén situados entre dos determinados rangos de frecuencias.
Filtro rechazo de banda (band reject, band stop o notch): Deja pasar las
frecuencias excepto las cuales sus valores estén situados entre dos determinados
rangos de frecuencias [22].
En la figura 8 se puede observar los cuatro tipos de filtros más comunes mediante su respuesta
en frecuencia.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…44
Figura 8. Tipos de filtros
Tomado de: Acoustics and Psychoacoustics: Introduction to sound. [44].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…45
2.1.8. Funcionamiento principal de un filtro digital
Como se menciona en [22] el funcionamiento base de un filtro digital es prácticamente
sencillo, existen dos principios fundamentales los cuales se mencionarán a continuación:
Filtros FIR (Finite Impulse Response): Esquematizado en la figura 9, en éste caso
se retarda ligeramente una muestra de la señal de entrada (de uno o varios periodos
de muestreo) y se combina la señal de entrada en atraso con la nueva señal de entrada,
también se puede decir que se realiza una convolución de la señal de entrada y
respuesta al impulso del filtro. A este tipo de filtro se le conoce como filtro digital
FIR.
Filtros IIR (Infinite Impulse Response): Esquematizado en la figura 10, para éste
caso se retarda una muestra de la señal de salida y se combina con la nueva señal de
entrada, este filtro se realiza mediante la ecuación en recurrencia y se define por los
coeficientes de recursión. A este tipo de filtros se le conoce como filtro digital IIR.
Figura 9. Diagrama de bloques de un filtro digital tipo FIR
Tomado de: Introducción al filtrado digital, Departamento de sonologia, Escuela superior
de música de Cataluña.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…46
2.1.9. Filtros digitales básicos para señales electrocardiográficas
Las señales electrocardiográficas están contenidas en un espectro frecuencial que oscila entre
los 0.05 Hz a los 100 Hz, con una amplitud que va desde 0,02 mV hasta 5 mV y un ancho de
banda de 125 Hz lo cual indica que este tipo de señal está dentro del rango de una señal
bioeléctrica típica.
Debido a estos valores de frecuencia en los cuales se encuentran esta señal ECG es muy
fácilmente que se adhiera ruido a esta y que en su procesamiento y visualización no se pueda
identificar de manera clara los datos que se quieren obtener en el resultado esperado por esta
razón y teniendo claro los factores principales que hacen que este tipo de interferencias
aparezcan, se destacan tres clases de filtros básicos para tratar los problemas de
perturbaciones más comunes en un ECG.
Filtro para eliminar ruido de respiración y movimientos musculares: Es un filtro
de tipo pasa baja, el cual contiene una frecuencia de corte de 100 Hz y se encarga de
descartar perturbaciones ocasionadas principalmente por la respiración.
Filtro de red (Filtro notch): Es un filtro rechaza banda el cual es el encargado de
filtrar el ruido ocasionado por la línea de potencia (alimentación) a la cual está
conectado un dispositivo. Su rango de frecuencia esta entre los 55 Hz a los 65 Hz.
Figura 10. Diagrama de bloques de un filtro digital tipo IIR
Tomado de: Introducción al filtrado digital, Departamento de sonologia, Escuela
superior de música de Cataluña.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…47
Filtro para eliminar nivel de DC: Es un filtro pasa altas y se encarga de eliminar el
nivel de DC y dejar la señal alrededor de un punto de referencia 0. Su frecuencia de
corte oscila entre 0.05 Hz y 1Hz.
2.1.10. Sistemas de adquisición de señales biomédicas
Generalmente en la instrumentación médica existen varios sistemas de adquisición de señales
que cuentan con alguna de estas características de funcionalidad: propiedad y cantidad física,
sensor o transductor, acondicionamiento de la señal y sistema de visualización. De acuerdo
con [23], para el caso de la adquisición de señales biomédicas la cantidad física es el
biopotencial medido, es decir, la corriente iónica que circula por la membrana debido al
intercambio de iones a través de las células excitables y los sensores o transductores son los
electrodos conectados al cuerpo del paciente. El acondicionamiento de la señal se puede
dividir en dos grupos principales, tal como se muestra en la figura 11: la amplificación de la
señal y el procesamiento de la señal (conversión análoga a digital). Finalmente, la etapa de
acondicionamiento se lleva a la visualización donde el usuario puede observar por medio de
una interfaz los resultados obtenidos en el procesamiento de estas señales.
Los sistemas de adquisición de señales cuentan con ventajas que los hacen de mucha utilidad
y las cuales son: precisión, repetibilidad, confiabilidad, inmunidad al ruido, costo y
usualmente no requieren calibración. Un claro ejemplo de un dispositivo con las
características mencionadas son los ASIC’s de la familia ADS129x de Texas Instruments,
los cuales son dispositivos especialmente diseñados para el trabajo de la biomedicina. Estos
elementos comparados con sistema básicos de capturas de ECG como monitores holter,
ayudan a reducir en un 92% el tamaño requerido en el circuito impreso reduce en un 94% el
consumo de energía y reduce en un 92% los componentes necesarios para la captura de
señales biomédicas. Actualmente la adquisición de señales se realiza con dispositivos de bajo
costo los cuales han sido implementados en diferentes tipos de aplicaciones y protocolos a
nivel hospitalario en el mundo.
Usualmente es suficiente usar de 12 a 14 bits para el proceso de digitalización de la señal, lo
cual cubre un rango dinámico en la cuantificación. La amplitud de onda varía entre 0.1
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…48
milivoltios después de haber sido sometidas a procesos de reducción de ruidos hasta los 5
milivoltios en señales ECG.
2.1.11. Amplificadores de biopotenciales
Los amplificadores se reconocen como una de las partes más importantes en el proceso de
digitalización de señales biomédicas. Su función principal es, como su nombre lo indica,
amplificar y filtrar señales biológicas las cuales son de muy bajo potencial para luego así
poder procesarlas de una manera más óptima. Para que su funcionalidad sea aceptable se
deben cumplir con unos mínimos requerimientos los cuales son: su impedancia en la entrada
debe ser alta con un valor mínimo de 10Mohm para que de esta manera no haya una carga
representativa en la señal que se está capturando. Debe tener unos ciertos niveles de
protección para evitar en ambientes clínicos corrientes eléctricas que produzcan
microchoques o macrochoques en el paciente. Otras características de vital importancia son:
poseer un alto CMRR para atenuar la interferencia ocasionada por las señales de frecuencia
de 50 o 60 HZ, filtrar el offset DC diferencial entre electrodos, aumentar el SNR y finalmente
contar con ganancias y filtros configurables.
Figura 11. Diagrama de sistema generalizado para la adquisición de biopotenciales
Tomado de: https://goo.gl/nWe7iP. Portal web de TEXAS INSTRUMENTS empresa dedicada al diseño,
fabricación y distribución de elementos semiconductores y circuitos integrados a nivel mundial.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…49
2.1.12. Norma internacional para equipos electromédicos
Los equipos para medir señales biomédicas que estén conectados directamente al cuerpo
humano están sujetos a cumplir con diferentes tipos de normas y reglamentos exigidos a nivel
internacional con los cuales se garantiza principalmente la seguridad física del paciente. La
normatividad está orientada a evaluar los diseños de los sistemas de aislamiento y protección
del dispositivo final como a su vez a validar los datos obtenidos en los registros de las
personas que utilicen este tipo de equipos de manera continua.
De acuerdo con [24], la norma internacional IEC 60601-1, establece los requisitos generales
que se deben cumplir para la construcción de equipos biomédicos para efectos de la seguridad
del paciente y la norma internacional IEC 60601- 25 hace referencia a equipos biomédicos
para trabajo de electrocardiografía.
Estas dos normas son adoptadas a nivel nacional por el instituto nacional de normas técnicas
ICONTEC y se estandarizan en el país con las siguientes siglas NTC IEC 60601 y NTC IEC
60601-25 sirviendo como referencia a fabricantes y diseñadores en la verificación de sus
equipos electromédicos.
En el dispositivo final a desarrollar en este proyecto, se llevará a cabo la implementación del
diseño buscando cumplir con los estándares generales y normativas específicas que se
establece en ICONTEC para la fabricación de equipos electromédicos y de
electrocardiografía, con el objetivo principal de lograr un resultado final integral que sea
optimo desde el punto de vista de la ingeniera para el sector de la salud.
2.2. Marco histórico
2.2.1. Historia del ECG
La información es tomada de: [25]
Dese hace más de tres siglos se han llevado a cabo estudios sobre la electricidad en los tejidos
humanos y animales. Estos estudios se realizaban con diferentes tipos de animales los cuales
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…50
fueron arrojando unos resultados que fueron de gran aporte para la implementación de estos
procesos en los seres humanos y que contribuyo a un gran avance en esta rama de la medicina,
logrando así implementar sistemas para la detección de diferentes enfermedades como lo es
hoy en día el electrocardiograma.
A continuación, se hará mención a algunos acontecimientos importantes que ocurrieron entre
el año 1840 y el actual que fueron de vital importancia para la creación del electrocardiógrafo.
Uno de los primeros en aportar un avance en este tema fue el físico italiano Carlo Matteucci,
profesor en la Universidad de Pisa, que en el año 1842 demostró cómo la corriente eléctrica
acompaña a cada latido cardíaco. Para comprobar los resultados de su estudio, usó una rana
la cual de su anca extrajo un nervio el cual utilizo con sensor de electricidad. Cuando se
aplicaba electricidad el nervio del anca de la rana se contraía, con lo cual este científico lo
asocio como signo visual de la actividad eléctrica.
“Los anatomistas Rudolph von Koelliker y Heinrich Muller, confirmaron en 1856 que una
corriente eléctrica acompaña a cada latido, al aplicar un galvanómetro en la base y ápice
de un ventrículo expuesto, haciendo una prueba semejante a la de Matteucci pudieron
observar una pequeña convulsión del músculo justo antes de la sístole ventricular y una
mucho más pequeña después de la sístole. Esas sacudidas son causadas por las corrientes
eléctricas, que en el electrocardiograma figuran como complejo QRS y ondas T.” [25].
Hacia finales del siglo XIX, Auguste Waller, fisiólogo británico, fue el primero en llevar a
cabo un estudio más referente al corazón humano tratando de verlo desde el punto de vista
eléctrico con lo cual pudo crear lo que en ese entonces fue llamado el primer
electrocardiograma humano, el cual fue registrado como un galvanómetro capilar.
“William Bayliss y Edward Starling, fisiólogos británicos, del University College de Lóndres
mejoran el galvanómetro capilar. Al conectarlo a la mano derecha muestran una “variación
trifásica” que acompaña a cada latido (P, QRS y T). Además, señalaron un retraso de 0.13
segundos entre la estimulación atrial y la despolarización de los ventriculos (intervalo PR)”.
[25].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…51
Willem Einthoven, por medio de un estudio en 1895 pudo diferenciar cinco ondas, las cuales
el denomino P, Q, R, S y T, utilizando un voltímetro mejorado.
“En 1901, Einthoven inventa un galvanómetro a cuerda utilizando un filamento fino de
cuarzo revestido en plata para producir electrocardiogramas. Publica su primer artículo
científico para comunicar la experiencia con el nuevo galvanómetro y su utilidad para
registrar los potenciales cardíacos.” [25].
“Einthoven en 1912 describe un triángulo equilátero formado por sus derivaciones estándar
I, II, III que más adelante sería llamado el "Triángulo de Einthoven"”. [25].
“En el año 1928, la compañía Frank Sanborn produce el primer electrocardiógrafo portátil.
Pesaba unos 25 Kg. y funcionaba con una batería de automóvil de 6 V.” [25].
El medico Norman Holter implementa, en 1949, una especie de maletín, que pesaba unos 37
Kg, con el cual se puede registrar un electrocardiograma de la persona que lo lleva y a su vez
transmitir una señal. Esta especie de electrocardiograma fue conocido posteriormente como
monitor Holter, que en la actualidad ha ido reduciendo su tamaño a la vez que se aumenta la
capacidad tecnológica del mismo. Este monitor es utilizado para el registro ambulatorio de
electrocardiogramas.
2.2.2. Origen de los ASIC’s
Desde la década del 70, se ha trabajado en el desarrollo de la microelectrónica aplicando
conocimientos para crear nuevas tecnologías que sean de gran aporte en la evolución de esta
rama de la electrónica. En el año 1980 la compañía Ferranti, comenzó a investigar sobre las
ventajas del diseño de un microcontrolador configurable o adaptable para un sistema o
aplicación en particular más allá de usar circuitos integrados estándar.
La tecnología VLSI (Very Low Scale Integration) permite realizar la construcción de un
sistema con muchos componentes más pequeños donde se pueden combinar IC's estándares
en gran cantidad dentro de un IC configurable.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…52
“Ferranti, una empresa de Ucrania fue la primera en producir los primeros arreglos de
compuertas. La adaptación del arreglo se produce cuando es cambiada la máscara de
interconexión metálica. Las ULA (Uncommitted Logic Array) consideradas como uno de los
primeros ICs semi-configurables desarrolladas, en principio tenían unos cientos de
compuertas para luego extender la gamma y hacer otros modelos que incluyen elementos de
memoria RAM.” [14]
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…53
CAPITULO 3. CAPTURA Y PROCESAMIENTO DE LA SEÑAL ECG
3.1. Consideraciones para el diseño
Antes de iniciar la investigación para llegar a definir todas las consideraciones respecto al
proyecto en curso, se debe dejar claro cuáles son las necesidades que debemos suplir para
tener en cuenta las prioridades al momento de diseñar el circuito y seleccionar los mejores
componentes para llegar a cumplir los objetivos del sistema.
Por ende, se decide trabajar con la matriz de necesidades que se va a explicar a continuación
3.1.1. Matriz de necesidades
Para entender la matriz de necesidades, primero se debe ver la tabla 1, la cual muestra las
características que debe tener el sistema y se le asigna una guía según las letras del abecedario
para luego ser ingresadas en la matriz. Se define que el sistema portable para la adquisición
y procesamiento de señales ECG, con aplicabilidad en dispositivos móviles debe ser:
Portable, preciso, rápido (Ya que grafica en tiempo real señales del corazón), económico,
fácil de usar por el usuario, fácil de programar (así como también de cambiar su código), con
alta funcionalidad (que trabaje con muchas funciones al mismo tiempo) y finalmente que
tenga compatibilidad con otras tecnologías para tener aplicabilidad en dispositivos móviles.
Tabla 1. Guía para matriz de necesidades
Guía
A: Portable
B: Preciso
C: Rápido
D: Económico
E: Fácil de usar
F: Fácil de programar
G: Funcionalidad
H: Compatibilidad con otras tecnologías
I: Seguridad del paciente
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…54
En la tabla 2 se muestra la evaluación que se deberá ingresar en la matriz, se trata de una
puntuación según el nivel de prioridad de la característica a evaluar.
Tabla 2. Evaluación de necesidades
Valor de necesidad Puntaje
Iguales 1
Más necesario 5
Mucho más necesario 10
Menos necesario 1/5
Mucho menos necesario 1/10
La matriz de necesidades se muestra en la tabla 3, la cual indica las prioridades de cada una
de las características del sistema, y esta puntuación se debe sumar y sacar en un porcentaje.
Como se puede notar las necesidades que más porcentaje tiene son que sea preciso (23.40%),
portable (19.08%) y económico (18.36%), seguidas por las que menos tienen las cuales son:
funcional y compatible (ambas con 11.16%), fácil de usar (9.54%), rápido (6.66%) y por
último fácil de programar (0.63%).
Tabla 3. Matriz de necesidades
A B C D E F G H I Suma Porcentaje
A 1/5 1 5 5 10 5 5 1/5 21,2 11,71%
B 5 1 5 5 10 5 5 1/5 26 14,36%
C 1 1 1/5 1/5 5 1 1 1/10 7,4 4,09%
D 1/5 1/5 5 5 10 1 1 1/10 20,4 11,26%
E 1/5 1/5 5 1/5 5 1/5 1/5 1/10 10,6 5,85%
F 1/10 1/10 1/5 1/10 1/5 1/5 1/5 1/10 0,7 0,39%
G 1/5 1/5 1 1 5 5 1 1/10 12,4 6,85%
H 1/5 1/5 1 1 5 5 1 1/10 12,4 6,85%
I 5 5 10 10 10 10 10 10 70 38,65%
181,1 100%
3.1.2. Diagrama de Pareto
Ahora se realiza el diagrama de Pareto (Figura 12) para visualizar de una manera más
intuitiva lo que se muestra en la matriz de necesidades. Sintetizando, el diagrama quiere decir
que se debe tener como prioridad trabajar sobre los aspectos de seguridad del paciente, la
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…55
precisión, la portabilidad, y la economía del dispositivo para graficar ECG. Otros dos
aspectos a tener en cuenta son la multifuncionalidad y compatibilidad con otros dispositivos.
3.2. Elección de materiales (electrodos y ASIC)
Con el objetivo de cumplir con los requisitos principales en el diseño del dispositivo se debe
tener en cuenta la señal que se quiere adquirir, pues será de vital importancia a la hora de
considerar, escoger y determinar los elementos electrónicos que serán utilizados en el
desarrollo de este proyecto. La señal y los circuitos electrónicos deben enlazarse de una
manera óptima para así garantizar que el dispositivo final trabaje eficazmente.
Una breve explicación electrónica para el proceso de adquisición de señales biomédicas es
la siguiente: se toma la señal que entregan los electrodos, la cual es generada por el cuerpo
humano, luego se amplifica y se filtra, se lleva a un conversor análogo digital para
digitalizarla y la entrega a un procesador que se encarga de procesarla para así poder
visualizarla o decidir el uso específico que se le dará a la señal.
Figura 12. Diagrama de Pareto: Necesidades
38,65%
14,36% 11,71% 11,26%6,85% 6,85% 5,85% 4,09%
0,39%
38,65%
53,01%
64,72%
75,98%82,83%
89,67%95,53%
99,61%100,00%
0,00%
20,00%
40,00%
60,00%
80,00%
100,00%
120,00%
I B A D G H E C F
Diagrama de Pareto: Necesidades
Porcentaje Acomulado
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…56
Anteriormente, los circuitos electrónicos utilizados para realizar este proceso de captura de
señales biomédicas eran diseñados de manera discreta, con circuitos integrados elaborados
por diferentes fabricantes los cuales se acoplan para lograr un sistema de adquisición
eficiente. En la actualidad los avances tecnológicos en el área de la electrónica han crecido
de una manera muy alta, logrando acoplar la parte médica y tecnológica. Una gran mayoría
de fabricantes de circuitos electrónicos han puesto en el mercado diferentes clases de
dispositivos de aplicación específica, conocidos comúnmente como ASIC’s, para trabajar la
parte de captura de señales biomédicas. Los ASIC presentan unas características especiales
y su función principal es acondicionar la señal tomada para realizar una conversión análoga
a digital segura.
Tomando en consideración lo dicho anteriormente, se escogerá y se implementará un ASIC
adecuado para el diseño del dispositivo que se plantea en el proyecto. Se llevó a cabo un
estudio específico de las características de algunos procesadores para tomar una decisión de
cuál se va a utilizar y los resultados se ven reflejados en la siguiente tabla:
Tabla 4. ASIC para la captura de señales biomédicas.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…57
Como se ve en la Tabla 4, estos ASIC presentan unas características sobresalientes para la
adquisición de señales ECG. Para la elección del ASIC se debe tener en cuenta el módulo de
comunicación con otros dispositivos que se puede realizar por medio de diferentes
protocolos, debido a que así se determina cómo debe ser programado por un procesador
externo (el cual se debe elegir conforme al módulo de comunicación) que permitirá la
configuración del ASIC, su activación en el proceso de adquisición de señales y la lectura de
los datos de conversión que se obtienen.
El fabricante Texas Instruments ha desarrollado y puesto en el mercado actual una familia de
dispositivos de aplicación específica diseñados para el trabajo de adquisición de señales
biomédicas que presentan diferentes características y funciones. Se pueden encontrar
integrados para trabajar con señales del corazón, señales del cerebro, señales musculares,
entre otras. En la Tabla 4 se observan ASIC con diferentes características de resolución,
número de canales, comunicación y precios en el mercado comercial.
Al hacer el estudio de los diferentes tipos de ASIC de la familia ADS129X que trabajan con
señales biomédicas, se seleccionó el ADS1298 como conversor análogo digital, ya que
cumple con todos los requerimientos mencionados anteriormente y tiene la característica
especial de trabajar con señales ECG que es la principal en el desarrollo del dispositivo.
Además, permite la captura simultanea de 8 canales con los cuales se realiza las 12
derivaciones del ECG, acopla y reduce el ruido en la captura de señal, tiene ganancia
ajustable, usa comunicación SPI para su comunicación y programación y el precio en el
mercado es accesible.
Se describirá un poco más a fondo el ADS1298.
3.2.1. Integrado ADS1298
Texas Instruments [26] describe el ADS1298 (Figura 13) como un conversor análogo digital
(ADC) con resolución de 24 bits de tipo delta-sigma (ΔΣ), el cual realiza muestreo simultáneo
con bloques de programadores integrados, señal de referencia interna y un oscilador
integrado. El ADS1298 integra las características que se necesitan principalmente en
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…58
electrocardiografía (ECG) y aplicaciones del EEG con altos niveles de inclusión y
rendimiento eficaz. El ADS1298 permite el desarrollo de sistemas de ECG en cuanto a
tamaño, potencia y costo totales.
El ADS1298 posee un multiplexor de entrada flexible (MUX) en cada canal que puede
conectarse de manera independientemente a las señales generadas internamente para la
detección y derivación del ECG. El ADS1298 funciona con una tasa de muestreo desde 250
muestras por segundo (SPS por sus siglas en inglés “samples per second”) hasta 32 kSPS.
Tres amplificadores integrados generan el terminal central de Wilson (WCT) y los terminales
centrales de Goldberger (GCT) requeridos para un ECG estándar de 12 derivaciones. El
ADS1298 puede conectarse en cascada con otros ADS1298 para realizar una configuración
en cadena. El empaquetado del integrado elegido es de tipo TQFP-64 y se especifican en el
rango de temperatura industrial de -40 ° C a + 85 ° C.
Características:
ADC de 8 canales de alta resolución
Baja potencia: 0,75 mW / canal
Ruido de entrada: 4 μVPP (150 Hz BW, G = 6)
Figura 13. Integrado ADS1298
Tomado de: https://goo.gl/nWe7iP. Portal web de TEXAS INSTRUMENTS empresa dedicada al diseño,
fabricación y distribución de elementos semiconductores y circuitos integrados a nivel mundial.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…59
Corriente de polarización de entrada: 200 pA
Velocidad de muestreo: 250 SPS a 32 kSPS
CMRR: -115 dB
Ganancia programable: 1, 2, 3, 4, 6, 8 o 12
Soporta sistemas que cumplen con los estándares AAMI EC11, EC13, IEC60601-1,
IEC60601-2-27 e IEC60601-2-51
Fuente Unipolar o Bipolar
AVDD = 2,7 V a 5,25 V
DVDD = 1,65 V a 3,6 V
Amplificador de la pierna derecha incorporado, detección del plomo, terminal del
centro de Wilson, detección del paso, señales de prueba
Oscilador incorporado y referencia
SPI ™ Interfaz de serie compatible
3.3. Elección del medio de transmisión
Un dispositivo de captura y lectura de señales electrocardiográficas digital está compuesto
por tres etapas fundamentales que son: captura, digitalización y procesamiento de la señal
ECG. Para la parte de captura se tienen los electrodos, para el acoplamiento y la
digitalización, el ADS1298. Ahora se realizará un estudio para determinar y elegir el
elemento electrónico adecuado que se encargue del procesamiento de la señal obtenida y la
configuración de todos los elementos electrónicos utilizados en el dispositivo que se plantea
desarrollar en este trabajo de grado.
Se tienen varias soluciones para determinar el elemento que se encargue de la parte del
procesamiento. En el mercado existen diferentes fabricantes de microcontroladores que
pueden manejar puertos de entrada y salida, amplia capacidad de memoria de datos, módulos
de comunicación, entornos de programación conocidos, una buena resolución y que pueden
lograr el acople perfecto para el procesamiento de la señal y la configuración de la placa a
diseñar.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…60
El procesador, como cerebro principal del dispositivo debe primero que todo realizar las
configuraciones iniciales del ADS1298 y luego guardar los datos del muestreo para
posteriormente procesarlos y como función final mostrar la gráfica de la señal capturada.
A continuación, en la tabla 5 se describen las características principales de algunos
procesadores que se encuentran en el mercado actual y del cual se escogerá uno para el
desarrollo del dispositivo.
Tabla 5. TABLA COMPARATIVA PIC
Después de analizar los datos que se obtuvieron en la tabla comparativa de los diferentes
procesadores existentes en el mercado, se decidió que para el proyecto a realizar se va a
utilizar el PIC32MX795F512H, el cual se integrará en el diseño del dispositivo con el
ADS1298 para así poder construir la plataforma de desarrollo propuesta.
La elección del procesador se debe a sus características, ya que nos ofrece una capacidad
óptima de procesamiento de información con una memoria RAM de 128 KB y una memoria
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…61
de programa de 512 KB, con una velocidad de alta reacción de 80 MHZ y diferentes puertos
de comunicación hacia otros dispositivos. Al contar con un puerto de comunicación SPI se
logra la posibilidad de enlazamiento con el ADS1298 que es parte fundamental en el proceso
y el puerto USB que también maneja el PIC32MX nos permite trasmitir los datos obtenidos
al dispositivo móvil final, así como también servirá de fuente de voltaje para alimentar la
plataforma de desarrollo a construir. No limitado a un puerto USB para la comunicación con
el computador o el dispositivo móvil, también se tiene la capacidad para manejar otros buses
de comunicación como es una UART.
Los procesadores constan de dos partes principales para su uso: la parte del software que es
el entorno de programación dónde se desarrolla, se compila y se carga el código fuente para
configurarlo y la parte del hardware que es el procesador físico como tal. La interfaz de
programación es importante a la hora de elegir este procesador. Se puede observar que en la
tabla 5 hay otros dispositivos con más capacidad de memoria y más velocidad de
procesamiento, sin embargo, no se escogieron porque en la investigación se pudo observar
que para estos procesadores no existen librerías necesarias para que el software pudiera
trabajar de una manera adecuada. Por ende, se decidió utilizar el PIC32MX795F12H que
tiene las librerías y se pueden instalar en el software de programación con el que se va a
trabajar. Concluyendo se puede decir que el software de programación es una de las
consideraciones importantes a la hora de elegir un procesador.
3.3.1. PIC32MX795F512H
En MICROCHIP [27] describen al PIC32MX795F512H como un procesador de 32 bits con
una configuración de memoria grande, un amplio conjunto de periféricos de comunicación
integrados de bajo costo y desde el cual se pueden abordar aplicaciones de uso tanto general
como avanzado, cuenta con una aceptación amplia en el mercado y es totalmente compatible
con el software de programación MPLAB. Cuenta con la facilidad de programar en lenguaje
C.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…62
Sus principales características se pueden observar en la tabla 6. En la figura 14 se muestra el
hardware del procesador seleccionado.
Tabla 6. Características PIC32MX795F512H
PARAMETER NAME VALUE
Family PIC32MX7XX
Max speed MHZ 80
Program memory size (KB) 512
Ram (KB) 128
Auxiliary flash (KB) 12
Operating voltage range (V) 2.3 to 3.6
SPI 3
I2C 4
USB FS Device/Host/OTG
USB Interface 1, FS Device/Host/OTG
CAN 12
A/D Channels 16
Max A/D Resolution 10
Max A/D Sample rate (KSPS) 1000
Internal oscillator 8 MHZ, 32 KHZ
I/O Pins 53
Pin count 64
Parallel port PMP
Tomado de: https://goo.gl/diFrH9. Portal web de MICROCHIP proveedor líder de microcontroladores y
semiconductores analógicos [27].
Figura 14. PIC32MX795F512H
Tomado de: https://goo.gl/b2ksIj. Portal web de MICROCHIP proveedor líder de microcontroladores y
semiconductores analógicos.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…63
Se propone el PIC32MX795F512H como una solución óptima para el trabajo a desarrollar
buscando, con su capacidad de procesamiento y especialmente con su puerto de
comunicación SPI, se logrará desarrollar el sistema para transmitir y recibir datos del ECG
de un cuerpo humano.
3.4. Elección cable de paciente
Como parte fundamental en la etapa de captura de la señal ECG se encuentra el cable
denominado “cable de paciente” el cual actúa como un mecanismo conductor de señales entre
el dispositivo final y los electrodos conectados en las diferentes partes del cuerpo del paciente
y que también me permite instaurar una conexión segura entre electrodos y equipo.
Está compuesto por dos partes principales que son: la primera un conector que permite
establecer la conexión con el dispositivo y la segunda una base que se ubica en el paciente y
se encarga de recibir el número de conductores de derivación con el que se esté trabajando el
cual puede ser de tres, seis o diez conductores. Estos conductores de derivación son fijos o
desconectables y se encuentran de tipo banana, de presión o pinzas dependiendo de los
electrodos utilizados.
Este tipo de cables se controlan durante y al final de su proceso de fabricación con la norma
internacional IEC 60601-1 y pueden ser utilizados en la adquisición larga, corta y media del
ECG, en pruebas de esfuerzo tipo ambulatorio, en sala de operaciones quirúrgicas o en
cualquier campo donde se esté monitorizando la señal electrocardiográfica [28].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…64
Figura 15. Conductor de 10 derivaciones tipo pinza fija.
Tomado de: Manual de instrucciones cables ECG para pacientes, INTEGRAL PROCESS empresa francesa
especializada en el diseño, fabricación y distribución de accesorios médicos.
Figura 16. Tipos de conectores para enlace cable - equipo.
Tomado de: Manual de instrucciones cables ECG para pacientes, INTEGRAL PROCESS empresa francesa
especializada en el diseño, fabricación y distribución de accesorios médicos.
Figura 17. Tipos de conectores para derivaciones.
Tomado de: Manual de instrucciones cables ECG para pacientes, INTEGRAL PROCESS empresa francesa
especializada en el diseño, fabricación y distribución de accesorios médicos.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…65
Para el proyecto a realizar se decidió trabajar con un cable de 10 conductores (figura 15),
debido a que para tomar un ECG de 12 derivaciones se requieren electrodos en las 4
extremidades del cuerpo, así como 6 electrodos en el tórax de la persona a evaluar. El cable
contiene un conector DB15 (figura 16, imagen del centro) para el enlace con el dispositivo y
con el cual se busca dar una mayor precisión en la señal a medir. Para la conexión al cuerpo
se utiliza un electrodo de presión (figura 17, imagen del centro). A continuación, en la figura
18, se puede observar el cable que se adquirió para el desarrollo del prototipo.
3.5. Protección del paciente
Es de vital importancia que cada una de las derivaciones que estén conectadas de manera
directa al paciente contenga una protección de sobrecargas óptima y que en caso de alguna
eventualidad garanticen un correcto aislamiento sobre los electrodos conectados.
Figura 18. Cable de 10 conductores de derivación tipo presión.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…66
Para esto el dispositivo cuenta conectada en cada uno de sus canales una protección
bidireccional de descarga electrostática (EDS) de baja capacitancia, la cual se encuentra en
el circuito integrado PESD5V0S2BT (El esquema del integrado en la figura 20) de la empresa
Nexperia USA Inc., Los datos de fabricante de ésta referencia se muestran en la tabla 7. Posee
diodos de protección diseñados para proteger dos líneas de datos contra descargas
electrostáticas de hasta 30KV, picos de potencia de hasta 130 W y viene fabricado en un
encapsulado SOT23 (Figura 19) [29].
Tabla 7. Características integrado PESD5V0S2BT.
Integrado PESD5V0S2BT
Canales bidireccionales 2
Voltaje Interruptor inverso 5V
Corriente pico de pulso (10 / 1000μs) 12A (8/20µs)
Potencia pico de pulso 130W
Temperatura de operación -65°C ~ 150°C
EDS 30KV
Package SOT23
Tomado de: datasheet Integrado PESD5V0S2BT, Nexperia USA Inc. Empresa líder global dedicada a dispositivos
Discretos, Lógicos y MOSFETs.
Como punto importante a la hora de escoger y utilizar esta referencia es que esté integrado
cumple en su funcionamiento y fabricación con las normas internacionales para descargas
electrostáticas para dispositivos electromédicos IEC 61000-4-2 nivel 4 e IEC 61000-4-5 lo
cual garantiza una buena protección al paciente.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…67
Para el electrodo que está conectado en la pierna derecha que actúa como la referencia
principal (neutro) de las derivaciones utilizada y que por ende es una de las líneas de señal
más importantes en el correcto funcionamiento del circuito se encuentra un amplificador
operacional el cual me permite obtener una señal más limpia y de mejor ganancia para así
garantizar un ECG estable y consecuente. El amplificador operacional que se utilizó para esta
función es el OPA376AIDCKT de la empresa Texas Instruments el cual pertenece a una
Figura 19. Encapsulado SOT32 integrado PESD5V0S2BT.
Tomado de: datasheet Integrado PESD5V0S2BT, Nexperia USA Inc. Empresa líder
global dedicada a dispositivos Discretos, Lógicos y MOSFETs.
Figura 20. Símbolo integrado PESD5V0S2BT.
Tomado de: datasheet Integrado PESD5V0S2BT, Nexperia USA Inc. Empresa líder
global dedicada a dispositivos Discretos, Lógicos y MOSFET.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…68
nueva generación de amplificadores operacional de bajo ruido para el trabajo de aplicaciones
de precisión y portátiles [30].
Este integrado se describe un poco más en la tabla 8:
Tabla 8. Características integrado OPA376AIDCKT
Integrado OPA376AIDCKT
Numero de amplificadores 1
Ancho de banda 5.5 MHZ
Voltaje Max 7 V
Corriente Max 10 mA
Temperatura de operación -40°C ~ 105°C
Package SOT23
Tomado de: Datasheet integrado OPA376AIDCKT, Texas Instruments empresa dedicada al diseño, fabricación
y distribución de elementos semiconductores y circuitos integrados a nivel mundial.
3.6. Aislamiento del circuito
El aislamiento que debe contener el dispositivo también es importante a la hora de determinar
la protección con la que debe contar el paciente, ya que el dispositivo cuenta con conexiones
de baja impedancia y es fundamental impedir el paso de corrientes y tensiones peligrosas al
cuerpo. Como se hace énfasis en la norma para equipos de electrocardiografía mencionada
anteriormente, el paciente debe permanecer aislado contra cualquier circuito externo que
brinde alimentación eléctrica al dispositivo.
En este proyecto se plantea alimentar el dispositivo por medio de un conector de toma USB
por lo cual se escoge el integrado de referencia ADUM3160BRWZ (Datos en la tabla 9) de
la empresa Analog Devices el cual es un aislador de puerto USB y cuenta con la capacidad
de aislar y entregar en su salida de 4.5V a 5.5V [31].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…69
Tabla 9. Características integrado ADUM3160BRWZ
Integrado ADUM3160BRWZ
Número de canales bidireccionales 2
Aislamiento de voltaje 2500Vrms
Velocidad de datos 12Mbps
Voltaje de operación 4.5V – 5.5V
Temperatura de operación -40°C ~ 105°C
Corriente Max 2.3mA
Package 16-SOIC
Tomado de: Datasheet integrado ADUM3160BRWZ, Analog Devices empresa dedicada al diseño, fabricación
y comercialización de circuitos integrados a nivel mundial.
Para desarrollos futuros el dispositivo cuenta con una interfaz de comunicación de datos USB
por el cual con este mismo integrado se realiza el aislamiento necesario para la etapa de
trasferencia ya que el ADUM3160BRWZ (Figura 21) proporciona mecanismos para detectar
la dirección del flujo de datos y control sobre el estado de su salida.
Las corrientes que consumen los integrados principales del circuito también son importantes
a la hora de obtener un aislamiento completo de todas las etapas que componen el dispositivo
Figura 21. Integrado ADUM3160BRWZ
Tomado de: Datasheet integrado ADUM3160BRWZ, Analog Devices empresa dedicada
al diseño, fabricación y comercialización de circuitos integrados a nivel mundial.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…70
a diseñar y cumplir con las especificaciones a las que hace referencia la norma internacional
para equipos de electrocardiografía. A continuación, en la tabla 10 se detallan los integrados
principales con su consumo máximo de corriente:
Tabla 10. Corrientes integrados principales.
INTEGRADOS PRINCIPALES CORRIENTE (mA)
ADS1298 100
PIC32MX795F512H 300
TPS60403DBVR 60
TPS73201DBVT 250
TPS72301DBVT 200
ADM7154ARDZ 600
TOTAL 1510
Como se puede observar en la tabla 10 la suma de las corrientes máximas de los integrados
principales es de 1510 mA. Estos valores con los cuales se hace este cálculo son los máximos
obtenidos de las hojas de datos técnicos de cada uno, pero en realidad estos elementos cuando
se encuentran en etapa de operación no llegan a su pico de consumo de corriente, por lo que
se puede dar un manejo adecuado en este punto a la hora de escoger el aislador principal del
circuito. Se escoge un aislador que entregue un máximo de 1.2 Amp, teniendo en cuenta que
los componentes no serán utilizados en su máxima capacidad, por lo que el valor calculado
nunca llegará al límite.
Para obtener un asilamiento completo del sistema se escoge el integrado NCM6S0505EC
(Figura 22) de la empresa Murata Power Solutions Inc. Este es un módulo de aislamiento de
propósito específico que contiene un convertidor DC / DC de 5V con una potencia de 6W,
que cuenta con una entrada de voltaje doble y una tensión de salida simple y con el cual se
logra aislar de manera óptima todas las etapas de potencia del circuito general que me puedan
inducir corrientes peligrosas al paciente [32].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…71
Esta referencia de módulo de aislamiento es muy utilizada en el diseño y construcción de
dispositivos médicos y en la tabla 11 se pueden observar algunas de las especificaciones
principales de este integrado:
Tabla 11. características integrado NCM6S0505EC
Integrado NCM6S0505EC
Tipo Modulo aislado
Número de salidas 1
Voltaje entrada Min 4.5V
Voltaje entrada Max 9V
Voltaje salida 5V
Corriente salida Max 1.2A
Voltaje de aislamiento 5.2kv
Temperatura de operación -40°C ~ 85°C
Tomado de: Datasheet integrado NCM6S0505EC, Murata Power Solutions Inc. Líder mundial en el diseño, fabricación y
suministro de materiales electrónicos avanzados, componentes electrónicos de vanguardia y módulos multifuncionales de
alta densidad.
Figura 22. Integrado NCM6S0505EC.
Tomado de: Datasheet integrado NCM6S0505EC, Murata Power Solutions Inc. Líder mundial en el
diseño, fabricación y suministro de materiales electrónicos avanzados, componentes electrónicos de
vanguardia y módulos multifuncionales de alta densidad.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…72
3.7. Alimentación del ADS1298
Para la alimentación y el correcto funcionamiento del ASIC ADS1298 se deben generar unos
niveles de voltaje análogos específicos, aparte de la alimentación de todo el sistema, por el
cual se utilizan diferentes fuentes de alimentación que adecuen los 5V de entrada en dos
niveles de tensión positivo y negativo llamados AVDD y AVSS que entregan +2.5V y -2.5V.
Estos tipos de fuentes encargadas de adecuar los voltajes para el ADS1298 vienen en distintas
referencias de circuitos integrados de la empresa Texas Instruments de las cuales se eligen
tres y se describen sus características en la tabla 12.
Tabla 12. Características fuentes de alimentación.
Integrado Package Vin Vout Iout Aplicaciones Descripción
TPS60403DBVR SOT-23
(5)
1,6V a
5,5V
-1.6V a
-5.5V 60mA
Instrumentación
médica, fuente
portable
Inversor de
Voltaje de 1,6V
a 5,5V
TPS73201DBVT SOT-23
(5)
1,7V a
5,5V 2,5V 250mA
Regulador para
DSPs, ASIC’s y
Microprocesadore
s
Regulador de
voltaje de 5V a
2.5V
TPS72301DBVT SOT-23
(5)
-1.2 V
a - 10V -2.5V 200mA
Optical
networking,
Optical Drivers
Regulador de
voltaje de -5V
a -2.5V
Tomado de: Datasheet integrados TPS60403DBVR, TPS73201DBVT, TPS72301DBVT, Texas Instruments
empresa dedicada al diseño, fabricación y distribución de elementos semiconductores y circuitos integrados a
nivel mundial.
Para la alimentación del PIC32MX795F512H y el ADS1298 se requiere una fuente de voltaje
digital a 3.3V, para ello se utiliza un integrado regulador el cual se encarga de reducir el
voltaje digital de alimentación de entrada del dispositivo que es 5V a 3.3V, lo requerido para
el buen funcionamiento de estos elementos.
El regulador utilizado para acondicionar esta señal de voltaje es el integrado
ADM7154ARDZ (Figura 23) de la empresa Analog Devices, que como su nombre lo indica
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…73
es un regulador de voltaje lineal que posee un rango de trabajo de entrada de 2.3V hasta 5.5V
con una salida estándar de 3.3V y proporciona hasta 600mA de corriente de carga. Para más
información de datos de fábrica revisar tabla 13 [33].
Tabla 13. Características integradoADM7154ARDZ.
Integrado ADM7154ARDZ
Número de reguladores 1
Voltaje entrada Min 2.3V
Voltaje entrada Max 5.5V
Voltaje salida 3.3V
Corriente salida 600mA
Package 8-SOIC
Temperatura de operación -40°C ~ 125°C
Tomado de: Datasheet integrado ADM7154ARDZ, Analog Devices empresa dedicada al diseño, fabricación y
comercialización de circuitos integrados a nivel mundial.
3.8. Puertos de comunicación
Los puertos de comunicación son aquellas herramientas que me permiten realizar un
intercambio y un manejo del flujo de datos entre dos o más dispositivos electrónicos. El
avance tecnológico que existe hoy en día ha permitido que el enviar y recibir datos de un
dispositivo a otro sea cada vez más eficiente en cuanto a sus capacidades de trasmisión y de
Figura 23. Integrado ADM7154ARDZ.
Tomado de: Datasheet integrado ADM7154ARDZ, Analog Devices empresa
dedicada al diseño, fabricación y comercialización de circuitos integrados a nivel
mundial.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…74
manera más sencilla en cuanto a su configuración y conexión. Entre los dispositivos más
comunes en los cuales se puede establecer una comunicación con otro elemento está el
computador el cual maneja diferentes puertos de comunicación y me permite realizar un
mejor manejo de los datos debido a su gran capacidad de procesamiento.
Para el desarrollo de este proyecto se manejan diferentes puertos de comunicación con los
cuales se pretende realizar el intercambio de los datos obtenidos en la señal
electrocardiográfica digitalizada, para así llegar a realizar un grafica en tiempo real de esta
señal. Estos puertos de comunicación también se utilizan en el proyecto para realizar la
configuración del integrado de aplicación específica. A continuación, mencionaremos
brevemente los puertos de comunicación utilizados y el por qué se escogieron para el
desarrollo.
3.8.1. Bus de comunicación SPI
SPI (Serial Peripherical Interface) es un estándar de comunicación síncrona de 4 hilos en el
cual se trasmiten paquetes de información en serie de longitud de 2 a 16 bits y es
principalmente utilizado entre integrados electrónicos. Cada dispositivo o integrado
conectado por medio del bus SPI puede trabajar tanto como maestro como esclavo ya que
este tipo de comunicación serial es full dúplex y se puede realizar configuraciones en cascada
entre 2 o más dispositivos.
Tal como se ve en la figura 24 las 4 líneas de señales de configuración que maneja el bus SPI
son:
SCLK (Reloj)
MOSI (Maestro es salida, esclavo es entrada) por sus siglas en inglés: Master Out
Slave In
MISO (Maestro es entrada, esclavo es salida) por sus siglas en inglés: Master In Slave
Out
SS (Slave select)
La línea SCLK es la línea de reloj, se genera por el maestro y es la encargada de sincronizar
la trasmisión de los datos; la línea MOSI es la que trasmite los datos del maestro al esclavo;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…75
la línea MISO transmite los datos del esclavo al maestro y; la línea SS es la que selecciona
el dispositivo al cual se va a trasmitir.
Las aplicaciones más comunes de este bus integran interfaces a E/S externas o expansión
periférica a través de dispositivos tales como registros de desplazamiento, controladores de
pantalla, SPI EPROMS y convertidores análogo - digital [34].
Se escoge trabajar con una comunicación SPI (Figura 24) ya que uno de los integrados
principales del proyecto para la captura de señales ECG, que es el ADS1298, utiliza solo este
medio de comunicación para la trasmisión de los datos obtenidos y también lo requiere para
realizar su configuración inicial.
3.8.2. UART
Uart (Universal Asynchronous Reciver/Trasmitter) es uno de los elementos más importantes
en los sistemas de comunicaciones en serie y para el proyecto se utilizará como canal de
comunicación entre el dispositivo periférico y el ordenador, es full dúplex y en su ejecución,
para recibir información convierte los datos de serie a paralelo y para la trasmisión convierte
de paralelo a serie. En la figura 25 se detalla que la UART está compuesta de varios bloques
donde se distinguen de manera principal los registros de datos de trasmisión y recepción, los
Figura 24. Configuración de un bus SPI con un dispositivo maestro y 3 esclavos.
Tomado de: Protocolo SPI, Ingeniería de microcontroladores, institución mexicana enfocada en el campo
de la investigación, capacitación y enseñanza de electrónica.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…76
registros de desplazamientos, los registros de control y señales de sincronización para el
comienzo de la trasmisión. Este tipo de comunicación es de trasmisión síncrona, aunque por
tradición se le ha conocido como asíncrona ya que hace referencia a la flexibilidad en la
trasmisión de la siguiente palabra de datos. En la siguiente figura se puede observar el
diagrama general de una UART [35].
Las aplicaciones básicas de la UART son principalmente las comunicaciones con el PC o las
PDA’s, las trasmisiones de audio, las trasmisiones de video, las comunicaciones vía
Bluetooth y maneja protocolos como RS-232, RS-485, LIN 1.2 e IrDA®.
3.8.3. USB
Por sus siglas en inglés (Universal Serial Bus) el USB es un bus estándar de comunicación
de los más usados a nivel mundial en el sector industrial y de las telecomunicaciones. Su
principal función es la de comunicar computadoras, periféricos y dispositivos electrónicos
trasmitiendo solo una unidad de información a la vez como además brindar energía eléctrica
Figura 25. Diagrama de bloques UART.
Tomado de: Datasheet PIC32MX795F512H, Microchip, proveedor líder de microcontroladores y
semiconductores analógicos.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…77
a los diferentes equipos conectados por este medio. Fue diseñado en 1996 y en 2004 se
popularizo y se convirtió en uno de los principales canales a la hora de realizar intercambio
de datos.
El bus USB maneja dos tipos de operación:
Baja velocidad: 1,5 Mbps, para dispositivos como teclados, ratones, que no manejan
grandes cantidades de información
Alta velocidad: 12 Mbps, para dispositivos como unidades de CDROM, altavoces,
módems RTC (Red Telefónica Conmutada), etc.
En cuanto a su construcción, el bus USB se compone de cuatro hilos (Figura 23), dos para
datos y dos para alimentación y su simplicidad es una de sus principales características.
Cualquier evento de trasmisión o intercambio de datos que emplee este bus involucra por lo
menos tres paquetes de datos. La operación inicia cuando el controlador del host decide que
dispositivo conectado a la red va a utilizar para la comunicación para ello envía un mensaje
con un código de identificación a todos los equipos de la red para que el equipo que logre
reconocerlo establezca un canal de comunicación entre los dos [36].
El conector y los pines estándares se detallan en la figura 26.
Figura 26. Pines y conector estándar USB.
Tomado de: Puertos USB - Bus Serie Universal y descripción de la norma IEEE 1394, Intef, Instituto
nacional de tecnologías educativas y de formación del profesorado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…78
3.9. Listado de componentes
Los principales integrados necesarios para la construcción del dispositivo se seleccionan de
acuerdo con la hoja de datos del kit de desarrollo del ASIC, llamada ADS1298ECG-FE
(ADS1298 Front-End Performance Demonstration Kit) y de la hoja de datos del procesador
PIC32MX795F512H. Los demás componentes como resistencias, condensadores,
inductores, diodos y cristales también se obtienen de los circuitos esquemáticos encontrados
en estas hojas de datos. La tabla 14 muestra los dispositivos comprados.
Tabla 14. Tabla de componentes completa
CANTIDAD DESCRIPCIÓN N. PIEZA DEL FABRICANTE N. PIEZA DIGIKEY FABRICANTE
20 Condensador 1 uF GRM188R61E105KA12D 490-3897-1-ND
Murata Electronics
North America
20 Condensador 0.1 Uf GRM188R71E104JA01J 490-9691-1-ND
Murata Electronics
North America
20 Condensador 10 uF GRM188R61C106KAALD 490-10728-1-ND
Murata Electronics
North America
10 Condensador 22 uF GRM188R61A226ME15D 490-10476-1-ND
Murata Electronics
North America
10 Condensador 2.2 uF GRM188R61E225KA12D 490-10731-1-ND
Murata Electronics
North America
10 Condensador 0.01 uF GRM1857U1A103JA44D 490-8269-1-ND
Murata Electronics
North America
30 Condensador 47 pF GRM1885C1H470FA01J 490-9687-1-ND
Murata Electronics
North America
10 Condensador 15 pF GRM1885C1H150FA01D 490-9715-1-ND
Murata Electronics
North America
10 Condensador 22 pF GRM1885C1H220FA01J 490-9685-1-ND
Murata Electronics
North America
10 Condensador 12 pF GRM1885C1H120FA01D 490-10704-1-ND
Murata Electronics
North America
10 Condensador 100 pF GRM1885C1H101JA01D 490-1427-1-ND
Murata Electronics
North America
20 Resistencia 10 Kohm MCR03ERTF1002 RHM10.0KCFCT-ND Rohm Semiconductor
20 Resistencia 22.1 Kohm MCR03ERTF2212 RHM22.1KCFCT-ND Rohm Semiconductor
10 Resistencia 24 ohm MCR03ERTJ240 RHM24CGCT-ND Rohm Semiconductor
10 Resistencia 392 Kohm MCR03ERTF3923 RHM392KCFCT-ND Rohm Semiconductor
10 Resistencia 48.7 Kohm MCR03ERTF4872 RHM48.7KCFCT-ND Rohm Semiconductor
10 Resistencia 100 Kohm MCR03ERTF1003 RHM100KCFCT-ND Rohm Semiconductor
10 Resistencia 49.9 Kohm MCR03ERTF4992 RHM49.9KCFCT-ND Rohm Semiconductor
10 Resistencia 46.4 Kohm MCR03ERTF4642 RHM46.4KCFCT-ND Rohm Semiconductor
10 Resistencia 47.5 Kohm MCR03ERTF4752 RHM47.5KCFCT-ND Rohm Semiconductor
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…79
10 Resistencia 43.2 Kohm MCR03ERTF4322 RHM43.2KCFCT-ND Rohm Semiconductor
10Bobina 3.3 uH LQM31PN3R3M00L 490-6705-1-ND
Murata Electronics
North America
4Diodo rectificador CR
S08 CRS08(TE85L,Q,M) CRS08QMCT-ND
Toshiba Semiconductor
and Storage
2Conector USB Hembra
orificios pasantes 61400416021 732-2106-ND Wurth Electronics Inc
1integrado aislador
NCM6S0505C NCM6S0505EC 811-2987-5-ND
Murata Power Solutions
Inc.
1Integrado aislador USB
ADUM3160BRWZ ADUM3160BRWZ ADUM3160BRWZ-ND Analog Devices Inc.
1Integrador regulador
lineal ADM7154 ADM7154ARDZ-3.3-R7
ADM7154ARDZ-3.3-
R7CT-ND Analog Devices Inc.
1Integrado procesador
PIC32MX795F512H PIC32MX795F512H-80I/PT
PIC32MX795F512H-
80I/PT-ND Microchip Technology
1Integrado fuente
TPS60403 TPS60403DBVR 296-27005-1-ND Texas Instruments
1Integrado fuente
TPS73201DBVT TPS73201DBVT 296-15807-1-ND Texas Instruments
1Integrado fuente
TPS72301DBVT TPS72301DBVT 296-15798-1-ND Texas Instruments
1Integrado oscilador
2.048 MHZ SG-615P 2.0480MC0:ROHS SER2218CT-ND EPSON
1Integrado amplificador
OPA376AIDCKT OPA376AIDCKT 296-22191-1-ND Texas Instruments
1Integrado conversor
A/D ADS1298IPAG ADS1298IPAG 296-27734-ND Texas Instruments
6
Integrado diodo de
protección ESD doble
bidireccional
PESD5V0S2BT PESD5V0S2BT,215 568-4056-1-ND NXP USA Inc.
1Conector DB-15 hembra 5747845-4 A32121-ND
TE Connectivity AMP
Connectors
2 Cristal 8 MHZ ECS-80-20-5PXDU-TR XC1526CT-ND ECS Inc.
2 Cristal 32 MHZ 9C-32.000MAAJ-T 887-1494-1-ND TXC CORPORATION
1Pulsador N.O montaje
superficial 1.141.005.030.000 1715-1676-1-ND RAFI USA
1
Conector 10 POS 2H
montaje superficial
JTAG SFM210-LPSE-D05-SP-BK S9268-ND
Sullins Connector
Solutions
1Conector 6 POS 1H patas
pasantes UART PPTC061LFBN-RC S7004-ND
Sullins Connector
Solutions
Todos los elementos mencionados en esta lista fueron adquiridos en la página web de la
empresa Digi-key electronics company (www.digikey.com) la cual es la quinta empresa más
grande del mundo en la comercialización y distribución de componentes electrónicos. Para
los elementos que se necesitaron en más de 5 unidades se pidieron en cantidades grandes ya
que de esa manera sale con un costo menor
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…80
CAPITULO 4. DISEÑO DEL CIRCUITO DEL SISTEMA PORTABLE.
4.1. Diagrama de bloques del esquema del circuito
Para organizar el trabajo, se decidió dividir el diseño en 5 etapas principales, en las cuales se
tuvieron en cuenta todas las consideraciones para lograr los objetivos descritos del proyecto.
Se tiene una etapa de protección al paciente, la cuál es la encargada que no se genere un sobre
voltaje y de esta manera protegerlo de cualquier problema que se pueda generar. Paso
seguido, la señal entra a un conversor A/D (Análogo a digital), que se encarga de enviar la
información binaria al procesador utilizado. La tercera etapa es la encargada de generar los
voltajes para las fuentes de poder análogas del procesador ADS1298. Hasta esta parte del
diseño, se utilizó la hoja de datos del kit de desarrollo del procesador, llamada
ADS1298ECG-FE (ADS1298 Front-End Performance Demonstration Kit), el cuál indicaba
como conectar los electrodos, que integrados requería para las fuentes y el circuito para la
puesta en marcha y comunicación SPI.
La siguiente etapa contiene el circuito para el correcto funcionamiento del
PIC32MX795F512H, teniendo en cuenta las interfaces de comunicación que se han de
conectar. La quinta y última etapa, contiene las interfaces externas del circuito embebido
(tanto de comunicación como de alimentación).
4.1.1. Primera etapa: Diseño de circuito de protección de pacientes y filtros antialiasing
Se parte de la base de que el conector del cable ECG es un DB15, por eso se realiza la
conexión de manera que funcione con éste cable (Figura 27a).
En el punto 2.1.6 del marco teórico se definió el fenómeno de aliasing y de qué manera
evitarlo, y por ello se agregaron al proyecto filtros pasivos para minimizar la entrada de
señales de ruido en el sistema conversor análogo a digital. Tal como se muestra en la figura
27b cada una de las derivaciones se lleva a un filtro conformado por 2 resistencias y 2
condensadores.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…81
Por otro lado, como se ha mencionado en el marco teórico, en la sección 2.1.9 “Norma
internacional para equipos electromédicos”, la tarjeta para el proyecto debe seguir cierta
normatividad para funcionar de manera óptima protegiendo a los pacientes que se les solicitó
hacer las pruebas y desarrollo del equipo. Se decidió agregar diodos, como se ve en la figura
27c para prevenir sobre voltajes que podrían afectar al paciente.
Gran parte del diseño del circuito de protección y filtros antialiasing se tomó de la hoja de
datos de la tarjeta de desarrollo del ADS1298, llamada “ADS1298ECG-FE/ADS1198ECG-
FE ECG Front-End Performance Demonstration Kit”.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…82
a. Conector DB15 de cable ECG
a. Filtro pasivo de entrada de electrodo
b. Circuito de protección paciente con diodos
Figura 27. Circuito protección de pacientes.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…83
4.1.2. Segunda etapa: Circuito del ADS1298
El circuito de puesta en marcha del ADS1298 consta de un cristal de 2.048MHz (Figura 28a)
para su correcto funcionamiento. La salida de los filtros del circuito de protección de paciente
(Sección 4.1.1) llega a la entrada de los canales del integrado ADS1298 (Figura 28b). Por
otro lado, se dejan indicado el bus SPI que se conecta al bus de entrada del integrado
programador PIC32MX (Sección 4.1.3). Se conecta la alimentación del integrado con unos
filtros pasivos para disminuir el ruido de entrada de la fuente de 60Hz.
Por otro lado, se utiliza un amplificador OPA376 para dar salida al cable blindado y así
disminuir el valor de voltaje DC que se obtiene a causa de diferentes factores. La pierna
derecha (que se utiliza como voltaje de referencia del sistema) se conecta a la entrada del
amplificador y también a la salida del ADS1298 (RLDOUT), para mejorar la respuesta del
sistema.
El circuito de puesta en marcha del ADS1298 se tomó de la hoja de datos de la tarjeta de
desarrollo del ADS1298, llamada “ADS1298ECG-FE/ADS1198ECG-FE ECG Front-End
Performance Demonstration Kit”.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…84
a. Circuito del cristal de 2.048MHz
b. Circuito de puesta en marcha ADS1298
Figura 28. Circuito ADS1298.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…85
4.1.3. Tercera etapa: Fuentes de alimentación análogas para el ADS1298
El ADS1298 requiere para su funcionamiento una fuente de voltaje análogo que entregue -
2.5V y 2.5V, además de una fuente digital de 3V. Por esto se decide trabajar con los
integrados que entreguen esos valores de tensión. Primero, la señal de 5 voltios de la fuente
principal de alimentación del circuito, detallada en la quinta etapa, es invertida para obtener
-5V (Figura 29a) por medio del integrado TPS60403, luego la salida va al acondicionador de
voltaje TPS72301DBVT que se encarga de entregar -2.5V (Figura 29c), o lo que se llamará
AVSS. Los 5V también van al integrado acondicionador TPS73201DBVT, que tiene como
salida 2.5V (Figura 29b) o lo que se llamará AVDD.
El circuito de las fuentes de alimentación del ADS1298 se tomó de la hoja de datos de la
tarjeta de desarrollo del ADS1298, llamada “ADS1298ECG-FE/ADS1198ECG-FE ECG
Front-End Performance Demonstration Kit”.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…86
a. Fuente inversora (De 5V a -5V)
b. Acoplamiento de señal (5V a 2.5V)
c. Acoplamiento de señal (-5V a -2.5V)
Figura 29. Fuentes de alimentación ADS1298.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…87
4.1.4. Cuarta etapa: Circuito del PIC32MX795F512H
Para ésta etapa se diseñó el circuito de puesta en marcha del procesador que actúa como
programador del ADS1298 y también como el interfaz de comunicación. Importante resaltar
que utiliza un cristal para trabajar a 8MHz, qué será importante a la hora del desarrollo del
código con el que se programará el PIC. También se instala un pulsador de RESET para
facilitar la interacción con el usuario.
Adicionalmente, como se ve en la figura 30, se dejan indicados los buses de comunicación,
como lo son el bus SPI, que se conecta directamente con el del ADS1298, el bus USB
(diseñado para futuros desarrollos), se cablea también una UART (Inicialmente diseñado
para tener comunicación con un módulo de bluetooth o con un puerto COM de un
computador) y finalmente, un bus JTAG, el cual se diseñó con el propósito de programar el
PIC.
Figura 30. Circuito PIC32MX795F512H.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…88
Cuando se decidió inicialmente que se programaría por medio de JTAG, no se tuvo en cuenta
que el material que se tenía para utilizar este medio (H-JTAG), no tiene las librerías para
trabajar con el procesador seleccionado, por ende, cuando se tiene la tarjeta finalizada se debe
hacer un circuito aparte para lograr programar el procesador de otra manera. Como solución
se propuso el circuito se muestra en la figura 31, que requiere de un programador PICkit3 y
trabaja con un bus ICSP. Los pines del PIC utilizados para este fin son el 17 y 18, además de
trabajar con el pin /MCLR (pin 7). De esta manera se monta el circuito externo.
Otro de los errores cometidos en el diseño del circuito, fue que se olvidó conectar los pines
de RESET y PWDN al procesador PIC, por ende, se cableó externamente a los pines 13 y 16
de la manera como se muestra en la figura 32.
Figura 31. Circuito externo para programar PIC32MX
Tomado de: MICROCHIP [27]
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…89
4.1.5. Quinta etapa: Circuito de alimentación
El circuito de alimentación principal se muestra en la figura 33. Consta de dos integrados de
aislamiento, uno para el bus USB, llamado ADUM3160 y otro como fuente de todo el
sistema, el cual es el NCM6S0505C que entrega 5V a la salida. El integrado ADM7154
funciona para acondicionar la señal de 5V a 3.3V, requerido para alimentar las fuentes
digitales tanto del PIC32MX795F512H como del ADS1298.
Figura 32. Pines cableados externamente para la configuración del ADS1298
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…90
4.2. Diseño del circuito físico
Después de tener todo el circuito lógico realizado, se procede a cablear cada parte del mismo.
Se decide que se va a montar sobre una plaqueta con dos caras, las cuales son nombradas
TOP y BOTTOM (Superior e inferior en español).
Un dato importante para resaltar es la malla contra ruido que se le adiciona para prevenir
corrientes intrusas en el circuito, y como se puede ver en la figura 34 se conecta a la tierra
análoga definida en la sección de fuentes de alimentación del ADS1298, todo para asegurar
que la entrada del conversor análogo a digital sea lo más libre de ruido posible.
Figura 33. Circuito alimentación
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…91
Después de tener el diseño del cableado de la plaqueta finalizado, se procede a realizar la
placa sobre la cual se montarán los materiales. Para esto se generan los “gerber” (Utilizados
para la manufactura de las plaquetas) y se envían a Microcircuitos, empresa encargada de
realizar ésta parte del trabajo. En la figura 35 se puede ver el resultado final. Se elige un color
azul para la plaqueta por gusto de los desarrolladores.
a. Parte TOP
b. Parte BOTTOM
Figura 34. PCB capa TOP y BOTTOM.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…92
Finalizada la placa y con los materiales listos, se procedió a soldar cada uno de los integrados,
resistencias, condensadores y diodos (Figura 36). Para esta parte sólo se requirió la unidad
de soldadura que tiene la universidad en el laboratorio LEA.
a. Placa parte TOP
b. Placa parte BOTTOM
Figura 35. Placa entregada por Microcircuitos.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…93
a. Placa finalizada parte TOP
b. Placa finalizada parte BOTTOM
Figura 36. Placa terminada.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…94
CAPITULO 5. PRUEBAS PRELIMINARES
Antes de realizar la tarjeta propuesta en el proyecto, se hicieron pruebas para aprender a
manejar de manera correcta el circuito integrado de aplicación específica (ASIC)
seleccionado. En el laboratorio se tenía disponible una tarjeta de desarrollo con el ADS1299,
por lo cual se realizaron las pruebas preliminares con esta tarjeta.
Cuando se terminó el diseño de la tarjeta “ECG Device”, se empezaron a realizar pruebas de
las gráficas del ECG, con diferentes filtros, funciones y empezando primero almacenando
datos para obtener una respuesta ideal, para después aplicar el código desarrollado en tiempo
real.
5.1. Conversión del dato binario a voltaje
Se realiza un programa en MATLAB® que grafica una señal caudrada simulada por el
ADS1299. Hay que resaltar que las mismas operaciones encontradas para hallar el dato, son
las que se usan para el ADS1298.
Primero se aplicaron las ecuaciones correspondientes para convertir los datos de las muestras
obtenidas en los voltajes de la señal real. Para esto se graficaron las rectas en excel con los
valores que el datasheet mostraba los cuales se resumen en la tabla 15.
Tabla 15. Valores ideales del código de salida.
Fuente: ADS1299 Datasheet. Pg.39.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…95
Con los valores de la tabla mostrados en la tabla 16 se obtiene la figura 37, la cual muestra
el comportamiento de la recta de la conversión analoga a digital:
Tabla 16. Comparación de los valores de entrada vs el código de salida.
Señal análoga de
entrada (V)
Codigo binario
(Convertido a
decimal) de salida
4,5 8388607
5,72205E-07 1
0 0
-5,72205E-07 16777215
-4,500000536 8388608
La figura 37 denota el comportamiento de los datos binarios obtenidos (eje y) vs el voltaje al
que corresponde (eje x). Como se puede ver inicialmente lo que se obtiene es que los valores
después de 8388607 son los valores de voltaje negativo, y los que están antes son positivos.
Figura 37. Valores análogos vs binarios.
0
2000000
4000000
6000000
8000000
10000000
12000000
14000000
16000000
18000000
-6 -4 -2 0 2 4 6
Valores análogos vs binarios
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…96
Ahora se realiza complemento a 2 para facilitar los cálculos de conversión de datos cuando
se reciban en la interfaz, y se muestra en la tabla 17, para obtener los valores negativos de la
gráfica, y así trazar una línea recta.
Tabla 17. Comparación de los valores de entrada vs el código de salida aplicando a complemento a 2.
Señal análoga de
entrada (V)
Codigo binario
(Convertido a
decimal) de salida
4,5 16777215
5,722E-07 8388609
0 8388608
-5,722E-07 8388607
-4,5 0
Con los valores de la tabla 6 se realiza la gráfica 38, que muestra la recta de la cual se requiere
la ecuación para convertir los datos binarios en los valores equivalente a los voltages de
entrada.
Figura 38. Valores análogos vs datos binarios con complemento a 2.
0
2000000
4000000
6000000
8000000
10000000
12000000
14000000
16000000
18000000
-6 -4 -2 0 2 4 6
Voltaje vs complemento a 2
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…97
5.2. Visualización de resultados con diferentes pruebas en MATLAB®
Como resultado de realizar complemento a 2 en el programa inicial, se desarrolló el codigo
de la figura 39 en MATLAB® para adecuar el dato obtenido (con complemento a 2 aplicado)
al valor de voltaje que es lo que se debe graficar.
5.2.1. Señal cuadrada
Antes de graficar la señal cuadrada en MATLAB®, se configuraron los registros para que el
ADS1299 generará una señal cuadrada con una frecuencia 0.97Hz, por medio de CONFIG2
con el valor hexadecimal 0xD0. El canal 1 se le da una ganancia de 1 con una señal de prueba
generada internamente asignando el valor 0x05 a CH1SET.
Al ejecutar el programa se obtiene la figura 40, que es una señal cuadrada de prueba generada
internamente en el ADS1299. Como se puede notar hay una diferencia de 1024 muestras
cada ciclo por lo que es acorde teniendo en cuenta que en los registros se parametrizó para
trabajar con ésta frecuencia de muestreo. Para mayor información sobre los registros
Figura 39. Código para graficar la señal generada en MATLAB®.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…98
configurados se debe revisar la sección 6.1.8 “Registros del ADS1298” que también aplican
en la mayoría de casos para el ADS1299.
Posteriormente se realiza la configuración de la lectura de 4 canales en el ADS1299,
parametrizando las señales de prueba generadas internamente en el software LPCXpresso,
con una ganancia de 24 (Figura 41).
Como resultado se obtiene el correcto funcionamiento de los 3 primeros canales (El cuarto
canal está dañado en la tarjeta que se tenía a disposición), y se gráfican ingresando los datos
en el programa realizado en MATLAB®. Las gráficas se muestran en la figura 41.
Figura 40. Gráficas generadas.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…99
5.2.2. Señal sinusoidal
La siguiente prueba se trata de conectar una señal externa producida por un generador de
señales a un canal del ADS1299, y graficar la señal obtenida de la conversión análoga a
digital por MATLAB®. Para éste caso los registros CONFIG2 y CH1SET se les asignará
0xC0 (Señal de muestreo externa) y 0x00 (Señal de electrodo con ganancia 1)
respectivamente.
Se logra simular con el generador una señal sinusoidal de 200mV pico a pico a una frecuencia
de 2,1575Hz (Figura 42), de modo que se adquieren los datos y se grafican en el programa
desarrollado en MATLAB®.
Figura 41. Gráficas de los 4 canales en MATLAB®.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…100
Como resultado se observa una señal muy similar en la gráfica de MATLAB®, a la medida
en el osciloscopio. Difieren un poco debido a que al hacer el muestreo se agrega un valor de
voltaje DC que en éste punto no se ha erradicado. Posteriormente se verá que se aplican los
filtros digitales para superar éste obstáculo. Como resultado se grafican las muestras en
MATLAB® y se obtiene la figura 43.
Figura 42. Señal de entrada al ADS1299 en osciloscopio.
Figura 43. Señal de medida con el ADS1299 y graficada en MATLAB®.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…101
Para hacer la simulación se realizó el circuito de la figura 44.
5.3. Pruebas con ADS1298
Al haber realizado las pruebas con un procesador diferente al seleccionado, cuando se
finalizó la construcción de la tarjeta, se vio la necesidad de iniciar las pruebas
correspondientes que ya se habían realizado anteriormente. La idea era buscar: La frecuencia
de muestreo ideal para trabajar con la señal ECG, la amplitud que mejor responda a una
excitación por electrodo y finalmente las frecuencias de los filtros.
5.3.1. Frecuencia de muestreo ideal
Antes que nada, se debía asegurar que el circuito funcionará correctamente, por ende, lo
principal era generar las señales de prueba internas cuadradas para cada uno de los ocho
canales que tiene el ASIC. Se hicieron pruebas de funcionamiento en tiempo real de manera
que se graficara la señal cuadrada generada internamente con 250, 500 y 1000 muestras
(Figura 45), funcionando correctamente con las primeras 2, sin embargo, al hacer la prueba
con 1000 muestras, debido a la velocidad que requería el sistema, se perdieron muestras por
lo que se decidió, que, para aplicar la interfaz gráfica, filtros y demás operaciones, lo ideal
era trabajar con 250 muestras por segundo. Para aclarar, solo se ha aplicado complemento a
Figura 44. Circuito para la adquisición de datos.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…102
dos en la prueba de 250 SPS, en las de 500 y 1000 muestras no se aplicó, sin embargo, sirve
para explicar el por qué se eligió la frecuencia de muestreo seleccionada.
Para seleccionar la frecuencia de muestreo primero se debe tener en cuenta que el rango de
frecuencias típicas de una señal ECG es de 0.5Hz a 100Hz, por ende, si se tiene una
frecuencia de 250 muestras por segundo se cumple el teorema de Nyquist para evitar el efecto
Aliasing descrito en la sección 2.2.6, que dice principalmente que la frecuencia de las
muestras debe ser más de 2 veces mayor que la frecuencia de la señal. Del mismo modo las
muestras de 500 y 1000 cada segundo también funcionarían para tomar la señal del
electrocardiograma.
5.3.2. Pruebas con señales externas
Se probó el muestreo una señal triangular dada por un generador de señales a diferentes
frecuencias, las respuestas que se obtuvieron se pueden ver a continuación.
Figura 45. Pruebas a diferentes frecuencias de muestreo.
-0,002
-0,001
0
0,001
0 100 200 300
Am
plit
ud
(V
)
Muestras
Señal de prueba 250 SPS
-2
-1
0
1
2
0 200 400 600
Am
plit
ud
(V
)
Muestras
Señal de prueba 500 SPS
-2
0
2
0 500 1000 1500
Am
plit
ud
(V
)
Muestras
Señal de prueba 1000 SPS
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…103
Primero se generó una señal de 1 Hz se frecuencia tal como se muestra en la figura 46,
aclarando que se sigue trabajando con 250 muestras por segundo.
Ahora se prueba una señal de 2Hz de frecuencia (Figura 47), igualmente con un muestro de
250 muestras por segundo.
Figura 46. Señal triangular de 1Hz muestreada
-0,228125361
0,23391643
-0,3
-0,2
-0,1
0
0,1
0,2
0,3
0 100 200 300 400 500
Am
plit
ud
(V
)
Muestras
Señal triangular de 1Hz
Figura 47. Señal triangular de 2Hz muestreada
0,23306456
-0,229910759
-0,3
-0,2
-0,1
0
0,1
0,2
0,3
0 50 100 150 200 250 300 350
Am
plit
ud
(V
)
Muestras
Señal triangular de 2Hz
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…104
Para finalizar ésta etapa de pruebas, se generó un muestreó una señal de 5Hz de frecuencia
(Figura 48).
5.3.3. Ganancia ideal
Ahora, se prueba el ECG, con diferentes ganancias para ver cuál es mejor y por qué se elige
la ganancia con la que finalmente se trabajó.
Figura 48. Señal triangular de 5Hz muestreada
-0,221055057
0,231171993
-0,25
-0,2
-0,15
-0,1
-0,05
0
0,05
0,1
0,15
0,2
0,25
0,3
0 50 100 150 200 250 300 350Am
plit
ud
(V
)
Muestras
Señal triangular 5Hz
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…105
La figura 49 es la señal ECG sin ganancia muestreada a 250 SPS.
La figura 50 es la señal ECG con ganancia de 2 muestreada a 250 SPS.
Figura 49. Señal ECG, G=1
Ganancia (G)=1
Figura 50. Señal ECG, G=2
Ganancia (G)=2
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…106
La figura 51 es la señal ECG con ganancia de 3 muestreada a 250 SPS.
La figura 52 es la señal ECG con ganancia de 4 muestreada a 250 SPS.
Figura 51. Señal ECG, G=3
Ganancia (G)=3
Ganancia (G)=1
Figura 52. Señal ECG, G=4
Ganancia (G)= 4
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…107
La figura 53 es la señal ECG con ganancia de 4 muestreada a 250 SPS.
La figura 54 es la señal ECG con ganancia de 8 muestreada a 250 SPS.
Figura 53. Señal ECG, G=6
Ganancia (G)= 6
Figura 54. Señal ECG, G=8
Ganancia (G)= 8
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…108
La figura 55 es la señal ECG con ganancia de 12 muestreada a 250 SPS.
Como se puede apreciar en las diferentes imágenes, la respuesta que se acopla mejor a lo que
se quiere llegar en el proyecto, disminuyendo al máximo el ruido que se pueda percibir, es la
de la figura 55, la cual tiene una ganancia de 12. Los filtros que se aplicaron se explicarán a
continuación.
5.4. Filtros digitales desarrollados en MATLAB®
Se desarrollan los 3 filtros mencionados en el apartado 2.2.7.2 “Tipos de filtros” (Filtro pasa
bajo, pasa alto y notch) para que el sistema de visualización de ECG funcione correctamente.
En la figura 56 se evidencia el funcionamiento del filtro butter de MATLAB®. La forma en
que se aplica es guardando los valores del filtro en b1 y a1.
%FILTRO PASO BAJO
[b,a] = cheby2(10,60,100/(Fs/2)); %%//Filtro paso bajo de orden 10, con
corte en 60Hz para eliminar ruido de alimentación. La frecuencia de muestreo
Fs=250SPS.
Figura 55. Señal ECG, G=12
Ganancia (G)= 12
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…109
Luego se guardan los valores del siguiente filtro butter (en éste caso rechaza banda tipo notch)
en 2 variables c1 y d1. El filtro rechaza banda se muestra en la figura 57.
%FILTRO RECHAZA BANDA
[c1,d1] = butter(10,[58 62]/(Fs/2),'stop'); %% Filtro rechaza banda, de
orden 10, con frecuencia de corte inferior de 49 Hz y superior de 51Hz
(Elimina componente de 60Hz)
La figura 58 muestra el filtro que deja pasar las frecuencias altas para eliminar el voltaje DC
y dejar la señal lista para ser graficada.
%FILTRO PASO ALTO
Figura 56. Filtro pasa bajas para eliminar ruidos por respiración en MATLAB®
Figura 57. Filtro Notch en MATLAB®
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…110
[b1,a1] = butter(2,1/(Fs/2),'high'); %%Filtro de orden 2.
Finalmente se aplican los filtros por medio de la función “filtfilt()” de MATLAB®. Primero
se aplica el pasa altas, luego el pasa bajas y finalmente el rechaza banda para todos los
canales.
X_FILax=filtfilt(b1,a1,CHx); X_FILbx=filtfilt(b,a,X_FILax); X_FILrx=filtfilt(c1,d1,X_FILbx);
Figura 58. Filtro pasa altas para eliminar nivel DC en MATLAB®
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…111
CAPITULO 6. PROGRAMACIÓN
La interfaz de programación para el PIC32MX con la que se trabajó fue el entorno de
desarrollo integrado MPLAB X IDE (integrated development environment) v3.51.
Posteriormente se descarga el instalador del compilador para aplicaciones de MICROCHIP.
Una vez con el software MPLAB instalado con el compilador, se descarga la librería para
procesadores de 32 bits llamada XC32 y se instala en la carpeta del compilador.
Para programar el PIC, al instalar el software MPLAB, automáticamente se instala el
ambiente de programación integrado MPLAB X IPE, que se encarga de comunicarse con el
PICkit 3 y transferir el archivo “.hex” generado por el compilador al procesador.
Por otro lado, para el desarrollo de la interfaz de usuario se utilizó la versión R2016a de
MATLAB®, aspecto importante debido a que en ésta existen ciertas funciones que en
versiones anteriores no existen.
6.1. Inicializaciones
Al trabajar con el procesador PIC32MX795F512H, se debe tener en cuenta realizar bien las
inicializaciones de las interfaces de comunicación, interrupciones y de entradas y salidas con
las que se va a trabajar.
6.1.1. Definiciones
Antes de hacer las inicializaciones se definen ciertas constantes para facilitar el código:
El reloj de los periféricos tiene 10 veces la frecuencia del cristal seleccionado, por lo que se
escribe la siguiente línea:
#define GetPeripheralClock() (80000000L)
Las salidas se deben escribir como LAT, debido a requerimientos del sistema, por ende, se
definen los pines y se les asigna el mismo nombre al que se conectará en el ADS1298:
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…112
#define CS LATGbits.LATG9
#define nPWDN LATBbits.LATB0
#define nRESET LATBbits.LATB3
#define nSTART LATDbits.LATD10
La lectura de las entradas se debe hacer con PORT. A continuación, se muestra la entrada
para detectar la señal de dato listo (En el ADS1298, el pin DRDY se conecta al pin RD11 del
PIC32MX):
#define nDRDY PORTDbits.RD11
Las direcciones de los registros del ADS1298 se toma de la hoja de datos del mismo, y se
definen en el programa como se muestra a continuación:
#define _WAKEUP 0x02
#define _STANDBY 0x04
#define _RESET 0x06
#define _START 0x08
#define _STOP 0x0A
#define _RDATAC 0x10
#define _SDATAC 0x11
#define _RDATA 0x12
#define _RREG 0x20
#define _WREG 0x40
#define ID 0x00
#define CONFIG1 0x01
#define CONFIG2 0x02
#define CONFIG3 0x03
#define LOFF 0x04
#define CH1SET 0x05
#define CH2SET 0x06
#define CH3SET 0x07
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…113
#define CH4SET 0x08
#define CH5SET 0x09
#define CH6SET 0x0A
#define CH7SET 0x0B
#define CH8SET 0x0C
#define RLD_SENSP 0x0D
#define RLD_SENSN 0x0E
#define LOFF_SENSP 0x0F
#define LOFF_SENSN 0x10
#define LOFF_FLIP 0x11
#define LOFF_STATP 0x12
#define LOFF_STATN 0x13
#define GPIO 0x14
#define PACE 0x15
#define RESP 0x16
#define CONFIG4 0x17
#define WCT1 0x18
#define WCT2 0x19
El tiempo de espera se define según la frecuencia del reloj del SPI, para éste caso se considera
ideal el valor asignado a continuación, ya que es 10 veces el tiempo de ciclo del cristal de
2.048MHz seleccionado en el circuito:
#define tCLK 0.00000486
6.1.2. Variables
Las variables son fundamentales pues indicarán el tamaño de cada uno de los datos con los
que se trabajarán y así mismo serán importantes a la hora de entender el diagrama de flujo
del programa.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…114
“leadoff” sólo contará con 2 bytes que son los necesarios para obtener la detección de todos
los electrodos desconectados.
unsigned short leadoff=0;
Las variables en las cuales se guardarán temporalmente los datos de los canales, luego de ser
organizados, serán de tipo entero puesto que se requieren 3 bytes para almacenarlas. Se debe
aclarar que son 8 variables iguales (x=1…8 canales).
int adqCHx_Temp24bit = 0;
Los vectores en los cuales se guardarán los datos temporalmente se llamarán
incomming_samples_CHNx definidos de tipo entero largo (long) de 4 bytes. De igual manera
x=1…8.
long int incomming_samples_CHNx[250];
Se tienen los vectores para trabajar con los datos de las muestras llamada
“incomming_samples24bit_CHNx”, en los cuales se guardarán los datos de los canales
anteriormente obtenidos, pero ahora para realizar el entramado y enviar los datos, mientras
en las variables anteriores se guardan los datos que van llegando. Se llama 24bit debido a que
el dato tiene sólo 3 bytes a pesar que se define como un entero largo con 4 bytes. De igual
manera se crean 8 vectores (x=1…8).
long int incomming_samples24bit_CHNx[250]
La variable que cuenta las muestras “indexBuffer” será de tipo entero sin signo.
unsigned int indexBuffer = 0;
La bandera “Band_RDY” indica cuando se ha completado 1 segundo de muestras.
unsigned char Band_RDY = 0;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…115
El vector para guardar las muestras en forma de trama, incluyendo encabezado y leadoff, se
llamará “send_samples” y requiere un tamaño de 8005 bytes (3 bytes de encabezado, 8000
de los datos de los canales y 2 de detección de leadoff), mientras que el vector
“crc16_samples” tendrá 2 bytes más que son para guardar el dato de CRC16.
char send_samples[8005], crc16_samples[8007];
6.1.3. Entradas y salidas
Se debe definir si son entradas y salidas cada uno de los puertos nombrados anteriormente,
por ésta razón se incluye al inicio del programa las siguientes líneas:
TRISGbits.TRISG9 = 0; (configura CS como salida)
TRISBbits.TRISB3 = 0; (configura nRESET como salida)
TRISBbits.TRISB0 = 0; (configura nPWDN como salida)
TRISDbits.TRISD10 = 0; (configura START como salida)
TRISDbits.TRISD11 = 1; (configura nDRDY como entrada)
Se debe tener en cuenta que si se define cualquier TRIS en valor lógico “1” será una entrada
y si es “0” será una salida.
6.1.4. UART
Para inicializar la UART se utiliza la librería <plib.h> que tiene macros que facilitan la
configuración, se explican a continuación:
UARTconfigure indica sobre cuál puerto de UART se va a configurar y cuales pines se
utilizarán. Por ejemplo, en el programa del proyecto solo se necesitan los pines de
transmisión y recepción de la UART1.
UARTConfigure(UART1, UART_ENABLE_PINS_TX_RX_ONLY);
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…116
UARTSetFifoMode define que la comunicación será tipo FIFO (Primero en entrar, primero
en salir) siempre que haya una interrupción por UART habilitada, por ejemplo, en el
programa siempre que se envié o reciba algo, el buffer no se utilizará hasta que se hayan leído
o enviado los datos.
UARTSetFifoMode(UART1,UART_INTERRUPT_ON_TX_NOT_FULL|UART_I
NTERRUPT_ON_RX_NOT_EMPTY);
UARTSetLineControl permite seleccionar el tamaño deseado de los datos UART, la
generación de parámetros de paridad y tramas de datos.
UARTSetLineControl(UART1,UART_DATA_SIZE_8_BITS|UART_PARITY_N
ONE | UART_STOP_BITS_1);
UARTSetDataRate define fácilmente la rata de datos de la comunicación. Utiliza el reloj de
periféricos definido anteriormente.
UARTSetDataRate(UART1, GetPeripheralClock(), 460800);
Finalmente, UARTEnable habilita o inhabilita el bus de comunicación por UART.
UARTEnable(UART1,UART_ENABLE_FLAGS(UART_PERIPHERAL|UART_R
X | UART_TX));
6.1.5. Serial Peripheral Interface (SPI)
Para configurar la interfaz serial por periférico, se debe primero que todo crear una variable
para limpiar el buffer como se muestra a continuación
int rData;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…117
Ahora se deben inhabilitar todas las interrupciones que tengan que ver con el puerto SPI a
trabajar (En éste caso el SPI2). La función CLR, pone en cero lógico el registro al que se le
aplique, de ésta manera se facilita la programación. SPI2CON, es la configuración del puerto
SPI2, se explicará a continuación.
IEC0CLR=0x03800000; (Inhabilita interrupciones)
SPI2CON = 0; (Para la comunicación por el SPI2)
Se debe limpiar el buffer leyéndolo.
rData=SPI2BUF; (Vacía el Buffer de la comunicación)
Ahora se limpian los registros IFS0 e IPC5. Por otro lado, la función SET, se encarga de
poner en uno lógico al registro al que se le aplique.
IFS0CLR=0x03800000; (Se encarga de cualquier evento que esté ocurriendo)
IPC5CLR=0x1f000000; (IPC5 se encarga de las prioridades)
IPC5SET=0x0d000000; (Configura la prioridad IPL=3, con sub-prioridad 1)
IEC0SET=0x03800000; (Habilita RX, TX e interrupciones de error)
La constante SPI2BRG se obtiene de la siguiente formula:
𝐵𝐴𝑈𝐷 =𝐹𝑝𝑏
2(𝑆𝑃𝐼2𝐵𝑅𝐺 + 1)
La velocidad deseada para la comunicación es de 1MHz (BAUD), y la frecuencia del
periférico Fpb=80MHz, como se definió inicialmente, por lo que al despejar la constante
SPI2BRG:
𝑆𝑃𝐼2𝐵𝑅𝐺 =𝐹𝑝𝑏
2(𝐵𝐴𝑈𝐷)− 1 =
80𝑀𝐻𝑧
2(1𝑀𝐻𝑧)− 1 = 39
Al pasar a un valor hexadecimal se obtiene que el registro debe ser:
SPI2BRG=0x0027; (Frecuencia de comunicación = 1Mhz)
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…118
Ahora se limpia el sobre flujo para posteriormente realizar la configuración:
SPI2STATCLR=0x40; (Limpia el sobre flujo)
La configuración del SPI2 se realiza teniendo en cuenta la figura 59.
SPI2CON=0x8220; // SPI ON, 8 bits transfer, SMP=1, Master mode
Los bits del registro que se habilitan son el 15 (ON: SPI Peripheral On bit), que se encarga
de encender la comunicación y el puerto SPI2, el 9 (SMP: SPI Data Input Sample Phase bit),
que si está en “1” realiza el muestreo de datos al final del tiempo del dato, en “0” lo hace
justo en la mitad del tiempo de dato. Y el bit 5 (MSTEN: Master Mode Enable bit) indica
que está en modo maestro. Los bits 10 y 11 indican el tamaño de dato que se utilizará, que
en el caso del proyecto son 8 bits, como se muestra en la tabla 18.
Figura 59. Registro SPIxCON
Tomado de: Datasheet PIC32MX795F512H Pg. 191, MICROCHIP [27]
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…119
Tabla 18. Cantidad de bits en comunicación SPI.
MODE<32,16>: 32/16-Bit Communication Select bits
MODE32 MODE16 Communication x 32-bit
1 x 32-bit
0 1 16-bit
0 0 8-bit
Los bits 6 (CKP: Clock Polarity Select bit) y 8 (CKE: SPI Clock Edge Select bit), se
seleccionan según cómo funciona el ADS1298, que debe tener el selector de polaridad de
reloj CKP en “0”, pues cuando no esté funcionando la comunicación, el reloj del SPI debe
estar en bajo. El selector de flanco de reloj CKE también debe ser “0” pues sólo leerá el dato
cuando el reloj pase de estado común (si CKP=0, el estado común será bajo, de lo contrario
será alto) al estado activo. En la figura 60 se muestra la manera cómo funciona la
comunicación según la configuración establecida.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…120
6.1.6. Interrupciones
Para la inicialización de la interrupción se utiliza la librería de interrupciones del compilador
XC32 <int.h>. Vale aclarar que la salida del ADS1298 llamada DRDY (Data Ready) y a la
Figura 60. Gráfico de configuración SPI
Tomado de: PIC32 Family Reference Manual, Section 23. Serial Peripheral Interface (SPI) Pg. 20,
MICROCHIP [27]
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…121
cual se le ha llamado nDRDY en el programa, se conecta al PIC32MX por medio del pin 45
(RD11), que también es la interrupción 4, y se puede ver en el datasheet del procesador.
La función INTSetVectorPriority define la prioridad del vector de interrupción, en éste caso
se define con 7, más adelante se indica para que se utiliza. INTSetVectorSubPriority define
a su vez la sub-prioridad como 0.
INTSetVectorPriority(INT_EXTERNAL_4_VECTOR,INT_PRIORITY_LEVEL_7);
INTSetVectorSubPriority(INT_EXTERNAL_4_VECTOR,INT_SUB_PRIORITY_LEVEL
_0);
INTClearFlag limpia la bandera de interrupción (en éste caso la INT4) que se activa cada que
entra un dato.
INTClearFlag(INT_INT4);
La función INTEnable habilita la interrupción 4.
INTEnable(INT_INT4, INT_ENABLED); // configure for multi-vectored mode
La rutina INTConfigureSystem configura el núcleo para recibir peticiones de interrupción en
el modo Multi-vectored o Single Vectored. En éste caso se configura para tener varias
interrupciones, es decir, con múltiples vectores.
INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
Con la siguiente función se inhabilitan las interrupciones para inicializar el ADS1298, que se
explicará en la sección 5.2.1, para posteriormente habilitarlas con la función
INTEnableInterrupts().
INTDisableInterrupts();
El bucle de interrupción se debe definir de la siguiente manera:
void __ISR(_EXTERNAL_4_VECTOR, IPL7AUTO) DRDY_interrupt(void){ }
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…122
Indicando primeramente que será una interrupción (ISR), luego el vector de interrupción con
el que se trabajará (INT4), y la prioridad definida anteriormente (Prioridad “7”, subprioridad
“0”). Ahora se define el nombre definido por el programador, el cual es DRDY_interrupt, y
finalmente se han configurado todas las inicializaciones que tienen que ver con el
PIC32MX795F512H.
6.1.7. Funciones para trabajar con el puerto SPI
- ADSsetup: Realiza la configuración inicial y puesta en marcha del ADS1298. Es el
primer paso de las inicializaciones que se verán en el siguiente punto.
Las siguientes funciones están diseñadas para enviar registros y tienen un pequeño retardo
de 20 veces el reloj de la comunicación tCLK definido en el encabezado de definiciones.
Antes de enviar cualquier registro, el pin de “chip select” CS, se debe poner en nivel lógico
bajo, y al terminar de enviar el registro en nivel lógico alto.
- ADS1298_RESET: Se encarga de enviar el registro _RESET definido anteriormente,
al bus SPI2.
- AD1298_START: Envía el registro _START, definido anteriormente.
- ADS1298_WAKEUP: Envía el registro _WAKEUP. No se utiliza.
- S_DATAC: Envía el registro para detener el modo de lectura de datos continuo.
- ADS_RDATA: Envía el registro de _RDATA cuando se requiera leer el dato listo,
ya que previamente se ha detenido la comunicación continua con la función
S_DATAC.
Las siguientes funciones están diseñadas para configurar un registro específicamente con
valores definidos por el programador.
- ADS_RREG: Para leer un registro se debe tener en cuenta enviar 2 bytes llamados
“opcode”, tal como se muestra en la figura 61. La función de leer registro solo posee
1 entrada, que indica la dirección del registro a leer, y una salida que es el valor actual
del mismo.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…123
o Opcode1: 001r rrrr, donde r rrrr es la dirección inicial del registro.
o Opcode2: 000n nnnn, donde n nnnn es el número de registros a leer – 1.
- ADS_WREG: Para escribir en un registro cierto parámetro deseado, se deben enviar
previamente 2 bytes que indican qué se hará una escritura y la dirección del registro
deseado, además de la cantidad de registros que se modificarán, para luego enviar el
valor del registro, tal como se muestra en la figura 62. En la función de escribir
registro se tienen 2 entradas, una que es la dirección o registro a modificar y otra el
cual es el valor que se desea en éste.
o Primer opcode: 010r rrrr, donde r rrrr es la dirección inicial del registro.
o Segundo opcode: 000n nnnn, donde n nnnn es el número de registros a leer – 1.
Figura 61. Envío de registro de lectura al ADS1298
Tomado de: TEXAS INSTRUMENTS, DATASHEET ADS1298, Pg. 64.
Figura 62. Envío de escritura de datos al ADS1298
Tomado de: TEXAS INSTRUMENTS, DATASHEET ADS1298, Pg. 64.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…124
- SPI2_transfer_REG: Para las funciones de leer o escribir registros al ADS1298, se
crea ésta función. En ella se ingresan los 2 “opcodes” a enviar, paso seguido se
mandan al buffer SPI2, y se leen 2 datos previos. Para éste punto se debe aclarar que
por cada vez que se manda un danto al buffer SPI2, se debe leer, si no se crea un
sobreflujo y el programa de detiene. Luego se mandan 2 caracteres de 8 bits, en el
caso de lectura serán “ceros” simplemente para realizar la lectura de lo que envíe el
ADS1298. Para el caso de la escritura se deben ingresar los valores que se desean
modificar en el registro.
- SPI2_transfer_DATA: La función para leer datos se utiliza en la rutina que se verá
más adelante ADS_updateDataCH8. Se utiliza para enviar por el SPI2 2 caracteres
de 8 bits con ceros, para poder leer 2 bytes de la misma manera, recordando que cada
vez que se envía un dato se recibe otro. De ésta manera se asegura la lectura de los
canales cada vez que éste lista una muestra.
6.1.8. Registros del ADS1298
Una vez definidas las funciones para configurar el ADS1298, se asignan los valores de cada
registro para que funcione el programa de manera idónea. A continuación, se explica el
porqué de los valores establecidos.
El registro CONFIG 3 (tabla 19), se encarga de las operaciones de la función integrada del
ADS, llamada RLD (right leg drive, controlador de pierna derecha en español), para reducir
la interferencia de modo común de en un sistema ECG, que aparece como resultado de las
líneas de potencia y otras fuentes ruido. También se encarga de configurar las diferentes
fuentes conectadas.
Se activa el buffer de referencia interna, por medio del bit /PD_REFBUF en “1” lógico. El
voltaje de referencia positivo, VREFP, se configura en 2.4V, debido a qué de ése valor es la
fuente conectada. Ahora se activan la medición de RLD, RLD_MEAS, la referencia de RLD
interna, RLDREF_INT, RLD se habilita, /PD_RLD, así como la función de sensor RLD,
RLS_LOFF_SENS y el estado de RLD, RLD_STAT.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…125
Tabla 19. Valor Registro CONFIG3
7 6 5 4 3 2 1 0
/PD_REFBUF 1 VREF_4V RLD_MEAS RLDREF_INT /PD_RLD RLD_LOFF_SENS RLD_STAT
1 1 0 1 1 1 1 0
ADS_WREG(CONFIG3, 0xDE);
Los valores del registro de configuración 1 se muestran en la tabla 20. El bit HR (high
resolution, alta resolución en español) en “cero lógico” indica que se trabajará en baja
resolución. Con /DAISY_EN inhabilitado significa que no se conectarán más integrados en
cascada. El bit CLK_EN, indica que se tiene un reloj externo por lo que no se activa la salida
de reloj del integrado. Los pines 2, 1 y 0, son los pines DR (Data Rate) para establecer la tasa
de muestreo de datos, y como se está trabajando en baja resolución se establece que se tendrá
una frecuencia de 250 muestras por segundo.
Tabla 20. Valor Registro CONFIG1
7 6 5 4 3 2 1 0
HR /DAISY_EN CLK_EN 0 0 DR[2:0]
0 0 0 0 0 1 1 0
ADS_WREG(CONFIG1, 0x06);
El registro CONFIG2 (Tabla 21) configura las señales de prueba generadas. El bit
WCT_CHOP determina que la frecuencia del terminal central de Wilson WCT varíe según
la tasa de muestreo configurada en el registro CONFIG3. INT_TEST en “0” determina si la
señal de prueba dada es externa. La amplitud de la señal de prueba se calibra según la
siguiente ecuación para cuando se selecciona en bajo el bit TEST_AMP:
−(𝑉𝑅𝐸𝐹𝑃 − 𝑉𝑅𝐸𝐹𝑁)
2400𝑉
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…126
Finalmente la frecuencia de la señal está dada según la combinación de los primeros bits del
registro, que para éste caso sería 𝑓𝐶𝐿𝐾
221, siendo fCLK, la frecuencia del reloj del integrado
(2.048MHz).
Tabla 21. Valor Registro CONFIG2
7 6 5 4 3 2 1 0
0 0 WCT_CHOP INT_TEST 0 TEST_AMP TEST_FREQ[1:0]
0 0 0 0 0 0 0 0
ADS_WREG(CONFIG2, 0x00);
El parámetro de configuración 4 (tabla 22), tiene integradas varías funciones. Por un lado, se
encarga de determinar la frecuencia de modulación de la respiración con los bits 7 a 5
(RESP_FREQ). Se encarga de establecer el modo de conversión continua con el bit
SINGLE_SHOT en “0”. Con el bit WCT_TO_RLD desconecta el terminal central de Wilson
del controlador de pierna derecha, para efectos que se verán en los registros de WCT qué se
verán más adelante. Por último, habilita por medio de /PD_LOFF_COMP, el comparador de
derivaciones para posteriormente determinar conexión o desconexión de los mismos.
Tabla 22.Valor Registro CONFIG4
7 6 5 4 3 2 1 0
RESP_FREQ[2:0] 0 SINGLE_SHOT WCT_TO_RLD /PD_LOFF_COMP 0
0 0 0 0 0 1 1 0
ADS_WREG(CONFIG4, 0x02);
Por consideraciones del programa se decide no trabajar con los puertos GPIO que ofrece el
integrado, por ende, el registro de GPIO se pone todo en “0”.
ADS_WREG(GPIO, 0x00); //GPIO de salida
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…127
El registro LOFF (tabla 23) es el registro de control para detectar desconexión de terminales.
El umbral de comparación de desconexión de terminales (COMP_TH) se configura en el
máximo nivel para el lado positivo (95%) y en el lado negativo un 5%. Se habilita la fuente
de corriente a modo de detección de lead-off (desconexión de terminal) por medio del bit 4
(VLEAD_OFF_EN) en “cero”. La magnitud de la corriente ILEAD_OFF será de 12nA (01),
para la fuente anterior. Por último, la frecuencia de detección de lead-off se enciende por
medio del registro FLEAD_OFF, que en “11” indica que la detección DC está encendida.
Tabla 23. Valor Registro LOFF
7 6 5 4 3 2 1 0
COMP_TH[2:0] VLEAD_OFF_EN ILEAD_OFF[1:0] FLEAD_OFF[1:0]
0 0 0 0 0 1 1 1
ADS_WREG(LOFF, 0x07);
El registro LOFF_FLIP controla la dirección de la corriente usada para la detección de
desconexión de terminales. En el caso actual, simplemente los canales positivos se conectan
a la fuente positiva de voltaje y los canales negativos a la fuente negativa de voltaje.
ADS_WREG(LOFF_FLIP, 0x00);
Los registros LOFF_SENSP y LOFF_SENSN (Tabla 24), habilitan la detección de
desconexión de electrodos conectados a la entrada de los canales, en los terminales positivo
y negativo, respectivamente. Para el programa realizado se decidió habilitar la detección por
todos los terminales de entrada.
Tabla 24. Valor Registro LOFF_SENS(P/N)
7 6 5 4 3 2 1 0
LOFF8P/N LOFF87P/N LOFF6P/N LOFF5P/N LOFF4P/N LOFF3P/N LOFF2P/N LOFF1P/N
1 1 1 1 1 1 1 1
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…128
ADS_WREG(LOFF_SENSP, 0xFF);
ADS_WREG(LOFF_SENSN, 0xFF);
Los registros que controlan la selección de los canales, por cada uno de sus terminales
positivo y negativo (RLD_SENSP y RLD_SENSN, respectivamente) de la tabla 25, sirven
para, como se menciona en la hoja de datos del ADS1298, “contrarrestar la interferencia de
modo común en un sistema de ECG como resultado de líneas eléctricas y otras fuentes,
incluyendo luces fluorescentes”. Para el programa se aplica éste modo común por el
controlador de pierna derecha (RLD) para todos los terminales conectados.
Tabla 25. Valor Registro RLD_SENS(P/N)
7 6 5 4 3 2 1 0
RLD8P/N RLD7P/N RLD6P/N RLD5P/N RLD4P/N RLD3P/N RLD2P/N RLD1P/N
1 1 1 1 1 1 1 1
ADS_WREG(RLD_SENSP, 0xFF);
ADS_WREG(RLD_SENSN, 0xFF);
El registro PACE, encargado de proporcionar los controles de ritmo que configuran la señal
de canal utilizada para alimentar el circuito de detección de ritmo externo y el registro RESP,
encargado de proveer el control del circuito de respiración (utilizado solamente en
ADS1298R), no se utilizan en el programa, por eso se dejan en nivel lógico bajo.
ADS_WREG(PACE, 0x00);
ADS_WREG(RESP, 0x00);
Para cada uno de los canales se realiza la misma configuración para tener cierta igualdad. En
la tabla 26 se muestra las funciones de cada uno de los bits de los registros de “CHxSET”. El
bit más significativo PDn, se encarga de encender el canal en nivel lógico bajo (“0”). La
ganancia del canal se acomoda con los bits 6 a 4, para éste caso se da la máxima ganancia, la
cual es de 12 para tener un resultado y una visualización más acertada, pues en las pruebas
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…129
que se realizaron se decidió que el mejor resultado se obtenía con la máxima ganancia. Ahora
bien, el multiplexor en los bits menos significativos (0 a 3) se encarga de establecer que la
señal de entrada del canal es un electrodo conectado externamente, para esto se pone “000”.
Tabla 26. Valor Registro CHxSET
7 6 5 4 3 2 1 0
PDn GAINn[2:0] 0 MUXn[2:0]
0 1 1 0 0 0 0 0
ADS_WREG(CH1SET, 0x60);
ADS_WREG(CH2SET, 0x60);
ADS_WREG(CH3SET, 0x60);
ADS_WREG(CH4SET, 0x60);
ADS_WREG(CH5SET, 0x60);
ADS_WREG(CH6SET, 0x60);
ADS_WREG(CH7SET, 0x60);
ADS_WREG(CH8SET, 0x60);
Por último, uno de los pasos más importantes para obtener las derivaciones V1 a V6,
establecidas en el marco teórico, y una de las razones por las cuales se seleccionó el
ADS1298, es que tiene integrado el terminal central de Wilson (Wilson central terminal)
WCT, definido como el promedio del voltaje del brazo derecho (RA), brazo izquierdo (LA),
y pierna izquierda (LL) y los registros para configurar su puesta en marcha son los WCT1
(tabla 27) y WCT2 (Tabla 28). La forma en que trabaja es con multiplexores que conducen a
cada una de las entradas de los canales, y se conectan a constantes llamadas WCTA, WCTB
y WCTC. Por el registro se debe seleccionar cual será la derivación LA, LL y RA que se
conectará a las constantes mencionadas. En la figura 63 se puede apreciar lo descrito
anteriormente.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…130
Ahora bien, el WCT1 de la tabla 27, tiene integradas ciertas funciones que permiten trabajar
con otras derivaciones (aVL, aVF, aVR) por medio del WCT, sin embargo, no se utilizarán
estas funciones (bits 4 a 7 de WCT1). Por otro lado, se habilita PD_WCTA, y se selecciona
que WCTA se conectará a la entrada negativa del canal 2, con el valor “011”. Si se revisa el
circuito, se puede notar que éste es el electrodo del brazo derecho.
Figura 63. Funcionamiento del terminal central de Wilson (WCT)
Tomado de: TEXAS INSTRUMENTS, DATASHEET ADS1298, Pg. 36.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…131
Tabla 27. Valor Registro WCT1
7 6 5 4 3 2 1 0
aVF_CH6 aVL_CH5 aVR_CH7 aVR_CH4 /PD_WCTA WCTA[2:0]
0 0 0 0 1 0 1 1
ADS_WREG(WCT1, 0x0B); // WCTA Powered on; CHN2N (RA) TO WCTA
WCT2 (tabla 28) se encarga de las constantes WCTB y WCTC, que los habilitan los bits
PD_WCTB y PD_WCTB respectivamente. WCTB será “010”, que indica que se conectará
a la entrada positiva del canal 2, que es el electrodo del brazo izquierdo LA. WCT (“100”),
indica que se conecta a la entrada positiva del canal 3, la cual es la pierna izquierda (LL).
Tabla 28. Valor Registro WCT2
7 6 5 4 3 2 1 0
/PD_WCTC /PD_WCTB WCTB[2:0] WCTC[2:0]
1 1 0 1 0 1 0 0
ADS_WREG(WCT2, 0xD4);
Ahora bien, el promedio será: WCT =RA+LA+LL
3
6.2. Diagrama de flujo
Para realizar la programación principal, se consideró un bucle infinito (figura 64) que envía
los datos por el bus de UART, por medio de la función SendDataBuffer, cada que se active
la bandera llamada “Band_Rdy” en un segundo de muestras (que son 1000 muestras para el
programa), dicha bandera se activa por medio de la interrupción cuando se completen las 250
muestras en 1 segundo. Previo al bucle, se realizan las inicializaciones vistas anteriormente
en la sección 6.1.1. La función S_DATAC() para detener la lectura de datos de manera
continua se explica también en la misma sección.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…132
Como se puede observar, las funciones que utiliza el programa principal son Complete_trama
y SendDataBuffer, que son explicadas a continuación. Otra de las funciones que es externa
al bucle madre, es el de la interrupción.
6.2.1. Función Complete_trama
A la función “Complete_trama” (Diagrama de flujo figura 65) se le otorga su nombre debido
a que se encarga de tomar los datos de todos los canales que se tienen en 1 segundo de
muestras, es decir, 250 muestras por canal, y como en total son 8, serían 2000 datos. Las
variables para almacenar dichos datos son definidas como enteros largos (long int),
Figura 64. Diagrama de flujo principal para PIC32MX795F512H
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…133
compuestas por 4 bytes, por lo que serían en total 8000 bytes. Se agregan después 3 bytes de
encabezado (variable “header”). Los 8003 bytes son guardados en la variable
“send_samples” definida de tipo carácter (char). Los últimos 2 bytes que se agregan son los
de detección de desconexión de electrodos (variable “SEND_LEADOFF”).
Después de enlazar el encabezado a la trama de 8002 datos, se utiliza la función crc16 para
obtener 2 bytes adicionales para detección de errores en la comunicación. Se selecciona de
la misma manera el protocolo CRC16, y se desarrolla la función con su mismo nombre
“crc16” para obtener de la manera más eficiente el valor de la variable “a”. Después de
obtener “a”, se organizan los 2 bytes obtenidos y se enlazan a la trama. Finalmente, el vector
de enviar llamado Muestras_crc16 guarda 8007 bytes en total.
Figura 65. Función Complete_trama
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…134
6.2.1.1. Función crc16
La función crc16 funciona de manera convencional cómo funciona el protocolo. Se tiene
como entrada el puntero hacia el vector al cual se le quiere aplicar el código (send_samples).
Posteriormente se realiza la definición de ciertas variables locales (contadores y variables
temporales).
La variable “crctmp” inicia con el valor “0” se le aplica la operación “or exclusiva” (xor) con
el dato actual del vector send_samples (definido por “i1”) que es realmente el valor del
puntero data_p. Se compara el calor obtenido con el dato 0x8000 para aplicar simplemente
una rotación hacia la izquierda de 1, si son iguales, o si se hace la operación xor con el
polinomio de CRC16 (POLY) definido en las inicializaciones. El valor de POLY es estándar
para el protocolo CRC16. Se hacen las mismas operaciones hasta que finaliza el tamaño del
vector y finalmente se obtienen los datos. El diagrama de flujo para aplicar el protocolo
CRC16 (Figura 66), es el mismo que se utiliza para el código de MATLAB® que se utilizará
para detectar errores.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…135
6.2.2. Función SendDataBuffer
La función SendDataBuffer está diseñada para enviar una cadena de cualquier tamaño,
siempre que no sea infinito, pues envía byte por byte de una cadena, por ende, la entrada del
Figura 66. Función crc16
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…136
arreglo a enviar es de tipo carácter (char), y tiene una entrada del tamaño de la cadena a
enviar.
Su funcionamiento es básico, con la función defenida por la librería de UART, llamada
“UARTTransmitterIsReady”, espera hasta que el buffer éste listo para enviar un nuevo dato.
Se envía cada carácter con la macro “UARTSendDataByte”. Finalmente, cuando ha
terminado de enviar todo el arreglo, espera hasta que la comunicación se haya completado
por medio de “UARTTransmissionHasCompleted”.
6.2.3. Función interrupción
Se le asignó como nombre DRDY_interrupt (Fig. 67), debido a que está ligada al pin DRDY,
salida del ADS1298, que se activa cada que un dato se lee y se envía por el SPI. Una vez
dentro de la interrupción, lo primero es limpiar la bandera de interrupción para que no se
quede estancado el código.
En las variables adqCHx_Temp24bit se toman los datos de cada canal, provenientes de las
funciones para adquisición de los datos ADS_updateDataCH8 y ADS_updateDataCHx.
Al obtener el dato, se debe guardar en el vector de cada canal, los cuales han sido nombrados:
“incomming_samples_CHNx[]”. El contador de datos se llama indexDataBuffer, que suma
un digito cada que llega un dato. Al llegar a las 250 muestras, los vectores de cada canal se
copian mediante la función “memcpy” de la librería <string.h>, a otros vectores nombrados:
“incomming_samples24bit_CHNx”. Esto se hace con el fin de facilitar el manejo de los datos
mientras en la interrupción se leen nuevas muestras. Finalmente se guarda el valor de la
detección de desconexión de electrodos en la variable “LEADOFF”.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…137
6.2.3.1. Función ADS_updateDataCH8
La función de actualización del canal 8 (Figura 68) es la única en el que se leen todos los
datos de los canales, que entrarán posteriormente en las otras funciones para actualizar los
demás datos. El primer paso para leer un dato del SPI que envía el ADS1298, es dejar el pin
CS en nivel bajo, y luego enviar el carácter de lectura de dato por medio de la función
Figura 67. Función interrupción
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…138
ADS_RDATA(). Los paquetes de datos se guardan en variables tipo short (2 bytes), llamadas
paqueteDatox.
Ahora bien, la manera como se deben manejar estos paquetes una vez se obtienen se muestra
en la tabla 29, que indica cómo se debe descomprimir el paquete para obtener el dato de un
canal en específico.
Figura 68. Función ADS_updateDataCH8
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…139
Tabla 29. Paquetes de datos de lectura ADS1298
Canal # Paquete
Status B1 B2 paqueteDato1
Status/CH1 B3 B4 paqueteDato2
CH1 B5 B6 paqueteDato3
CH2 B7 B8 paqueteDato4
CH2/CH3 B9 B10 paqueteDato5
CH3 B11 B12 paqueteDato6
CH4 B13 B14 paqueteDato7
CH4/CH5 B15 B16 paqueteDato8
CH5 B17 B18 paqueteDato9
CH6 B19 B20 paqueteDato10
CH6/CH7 B21 B22 paqueteDato11
CH7 B23 B24 paqueteDato12
CH8 B25 B26 paqueteDato13
CH8 B27 paqueteDato14
Byte
6.2.3.2. Función ADS_updateDataCHx
Las funciones de actualización de datos de los demás canales realizan lo mismo que la
función anteriormente vista (ADS_updateDataCH8), solo que ahora ya se tienen los paquetes
de datos y sólo es organizarlos para que se obtengan en cada canal. Por eso se nota que existe
una constante entre los canales pares y entre los impares. Por esta razón se realiza la misma
programación dependiendo si es par o impar.
- Canal par
Para los canales pares se realiza el siguiente flujo (Fig. 70), en el cuál se organizan los 3 bits
de cada canal.
Para el canal 2, el paqueteDato(X), será con X=4. Canal 4, X=7; Canal 6, X=10.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…140
- Canal impar
Con los canales impares sucede lo mismo (Fig. 71), para el canal 1, X=2; Canal 3, X=5;
Canal 5, X=8; Canal 7, X=11.
6.2.3.3. Función de complemento a 2 (C2DATA)
En el siguiente capítulo se encontrará la necesidad de tener una función que realiza el
complemento a 2. Se requiere para crear una recta y así obtener fácilmente los valores
Figura 69. Función de actualizar datos para canales pares
Figura 70. Función de actualizar datos para canales
impares
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…141
negativos y positivos muestreados. En la figura 71 se detalla el diagrama de flujo del
complemento a 2, utilizada en la función de interrupción.
6.3. Programación interfaz de usuario en MATLAB®
Para desarrollar la aplicación con la que el usuario debe interactuar para evidenciar el
funcionamiento del proyecto en cuestión, se empieza con la interfaz de usuario desarrollada
en un archivo “Guide” de MATLAB® R2016a. En la figura 72 se muestran las partes de la
aplicación con su respectiva función.
Figura 71. Función de complemento a 2
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…142
Por otro lado, en la figura 73 se muestra el diagrama de flujo del funcionamiento de la
aplicación. Para iniciar primero se chequea que haya puertos seriales disponibles, si no los
hay, el programa muestra un programa de error y se debe iniciar de nuevo la comunicación.
Una vez lista la comunicación, el programa pregunta si se quiere conectar y se puede ajustar
la tasa de datos de la comunicación. Cuando éste el sistema conectado, se espera a que el
usuario presione el botón “start” para empezar a graficar. Una vez lo presione, el programa
abre la ventana “Figure1” en dónde se graficarán los datos que ingresen y adicionalmente
empieza a recibir la comunicación serial. Luego entra a la subrutina CRC16 (Que en esencia
es el mismo flujo mostrado en la sección 5.2.1.1.) y si se detecta error en la comunicación, el
programa se detiene y espera a que el usuario presione click sobre la pantalla “Figure1”. Si
no se detectan errores, se sigue el curso y se empieza a graficar y también a mostrar si los
electrodos están conectados o desconectados. En este punto es importante resaltar que es aquí
donde se aplican los filtros para obtener una señal clara y limpia del ECG, que se explicarán
a continuación. El programa sigue graficando hasta que se presione “STOP”, momento en el
que se habilitarán de nuevo todos los botones para que el usuario elija cuál será su siguiente
movimiento.
Figura 72. Interfaz gráfica de usuario
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…143
Figura 73. Diagrama de flujo del funcionamiento de la interfaz de usuario.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…144
CAPITULO 7. RESULTADOS
7.1. Conexión de electrodos
Son 10 los electrodos que van conectados al cuerpo del paciente al que se le va a realizar una
prueba de gráfica de ECG con 12 derivaciones. En cada una de las extremidades (fig. 74) se
debe pegar un electrodo, de esta manera se obtienen las derivaciones frontales, que son 6 y
se mostrarán en la sección 7.3 del funcionamiento en tiempo real. Las derivaciones
precordiales también son 6, sin embargo, para obtenerlas los electrodos que deben estar
pegados al cuerpo se deben acomodar en el pecho como se muestra en la figura 75.
Figura 74. Electrodos pegados en las extremidades
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…145
Ahora se conecta el paciente al cable ECG de 10 terminales (Fig. 76), paso previo para poner
en funcionamiento el sistema de procesamiento y trazado de las derivaciones del ECG.
Figura 75. Electrodos pegados al tórax
Figura 76. Cable ECG conectado al paciente
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…146
7.2. Puesta en funcionamiento del programa
Lo primero es alimentar el circuito por medio del cargador USB, luego conectar el terminal
DB15 del cable ECG a la tarjeta y finalmente conectar el cable serial en el terminal UART
de la tarjeta y al puerto USB del computador (Fig. 78).
Figura 77. Puesta en funcionamiento de la tarjeta "ECG Device".
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…147
En el computador desde MATLAB® se abre la interfaz del “ECG device” (Fig. 79) para
comenzar a interactuar con el programa.
Una vez se conecta el sistema a la tarjeta, se habilitan los botones “start” y “stop” del
programa tal como se muestra en la figura 80. Ahora bien, “connect” cambia su función a
“disconnect” para desconectar el sistema.
Figura 78. Interfaz ECG en MATLAB®
Figura 79. Interfaz lista para iniciar a graficar
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…148
Una vez se presiona “START” se abre la ventana “Figure 1” con las gráficas del ECG y se
empiezan a recibir los datos de los diferentes canales, en éste punto el sistema se habrá puesto
en marcha.
En caso de que no se haya conectado el cable serial, el programa no arrancará y mostrará el
error de la figura 81:
7.3. Gráficas de funcionamiento en tiempo real
A continuación, se muestra la prueba de funcionamiento de todas las derivaciones, también
se mostrará cuando se desconecta cada uno se los electrodos:
7.3.1. Todas las derivaciones trazándose de manera óptima
Cuando todos los electrodos están bien conectados, el resultado obtenido será el que se
muestra en la figura 82. Más adelante se verá la comparación de las gráficas obtenidas con
las que comúnmente son graficadas por un electrocardiograma habitual.
Figura 80. Error por comunicación por el cable serial
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…149
7.3.2. Electrodo RA desconectado
Se desconecta el electrodo RA (right arm) y se toman las muestras del electrocardiograma,
como se puede notar en la figura 83, todas las derivaciones dependen del brazo derecho por
ende cuando éste se desconecta ninguna de las gráficas muestra un resultado.
Figura 81. Gráfica de 12 derivaciones tomada con “ECG device”.
Figura 82. Prueba electrodo RA desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…150
7.3.3. Electrodo LA desconectado
El electrodo LA (left arm) está involucrado en todas las derivaciones excepto en la derivación
2, y como se puede notar en la figura 84, se indica que el electrodo está desconectado y sólo
se grafíca “LEAD II”.
7.3.4. Electrodo RL desconectado
RL (Right Leg) funciona como referencia del sistema, por ende, todos los electrodos aparecen
desconectados menos el del brazo derecho, además que se puede notar en la figura 85 un
aumento en el ruido de las gráficas, a pesar de que todas las derivaciones muestran una forma
coherente.
Figura 83. Prueba electrodo LA desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…151
7.3.5. Electrodo LL desconectado
El electrodo de la pierna izquierda (LL) también se ve involucrado en todas las derivaciones
excepto en “LEAD I” (figura 86). Se logra ver que las derivaciones frontales “LEAD III”,
“aVR”, “aVL” y “aVF”, como dependen del resultado de “LEAD I” y “LEAD II”, no son
válidas y por ende no se deben tener en cuenta en caso de detección de desconexión del
electrodo LL.
Figura 84. Prueba electrodo RL desconectado.
Figura 85. Prueba electrodo LL desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…152
7.3.6. Electrodo V1 desconectado
A la desconexión del electrodo V1 sólo reacciona la gráfica del mismo pues no interviene en
ninguna otra. (Fig 87).
7.3.7. Electrodo V2 desconectado
A la desconexión del electrodo V2 sólo reacciona la gráfica del mismo pues no interviene en
ninguna otra. (Fig 88).
Figura 86. Prueba electrodo V1 desconectado.
Figura 87. Prueba electrodo V2 desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…153
7.3.8. Electrodo V3 desconectado
A la desconexión del electrodo V3 sólo reacciona la gráfica del mismo pues no interviene en
ninguna otra. (Fig 89).
7.3.9. Electrodo V4 desconectado
A la desconexión del electrodo V4 sólo reacciona la gráfica del mismo pues no interviene en
ninguna otra. (Fig 90).
Figura 88. Prueba electrodo V3 desconectado.
Figura 89. Prueba electrodo V4 desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…154
7.3.10. Electrodo V5 desconectado
A la desconexión del electrodo V5 sólo reacciona la gráfica del mismo pues no interviene en
ninguna otra. (Fig. 91).
7.3.11. Electrodo V6 desconectado
A la desconexión del electrodo V6 sólo reacciona la gráfica del mismo pues no interviene en
ninguna otra. (Fig. 92).
Figura 90.Prueba electrodo V5 desconectado.
Figura 91. Prueba electrodo V6 desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…155
7.3.12. Detección de error por CRC16
Al detectar un error por medio del algoritmo diseñado CRC16, se muestra el mensaje de error
en la parte de abajo del programa principal y adicionalmente las gráficas pasan de ser azules
a rojas en el mismo instante que se detecta (Fig. 93).
La forma de solucionarlo es presionar click sobre cualquiera de las dos pantallas del
programa, así se reinicia la comunicación y se toman de nuevo los datos. Comúnmente al
iniciar recientemente el programa toma cierto tiempo en empezar a graficar de manera
continua.
7.4. Comparación con graficas estándar del ECG
Después de realizar la captura de la señal con el dispositivo diseñado, se generan varias
graficas de resultados donde se obtienen las derivaciones principales utilizadas en la toma
del ECG, con la finalidad de realizar un análisis básico de resultados se realiza una
comparación entre las gráficas obtenidas de un paciente con el prototipo desarrollado y las
gráficas típicas de un electrocardiograma en estado normal de un paciente adulto, generadas
con un dispositivo ECG clínico estándar.
Figura 92. Detección de error por CRC16.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…156
A continuación, en las gráficas 94, 95, 96 y 97 se muestran las gráficas obtenidas con el
prototipo desarrollado en este proyecto y los resultados de un ECG típico estándar con un
dispositivo clínico.
Figura 93. ECG de 12 derivaciones tomado con prototipo diseñado por los autores.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…157
Figura 94. Electrocardiograma paciente en estado normal tomado con ECG clínico.
Tomado de: https://goo.gl/ocRwMT, Foto de archivo, Inna Yazykova Ogando, 123RF blog.
Figura 95. Electrocardiograma paciente en estado normal tomado con ECG clínico.
Tomado de: https://goo.gl/nGa6Lf, Electrocardiograma – clase teórica y práctica, Departamento de
Fisiología, Facultad de Medicina, Universidad de Murcia. 1º de Enfermería – Curso 2013/14.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…158
Cabe resaltar que para este tipo de análisis se debe tener en cuenta que los resultados de un
electrocardiograma en estado normal pueden tener algún tipo de variación dependiendo de la
persona a la cual se le va a tomar el examen y de las condiciones tanto médicas como físicas
en las cuales se encuentre el paciente.
En las figuras anteriores se logra apreciar que las amplitudes y las formas de onda en la
mayoría de las derivaciones son similares a las señales estándar de un ECG normal, sin
embargo, algunas derivaciones difieren un poco debido al estado del paciente al que se le
realizan las pruebas, porque como se mencionó anteriormente la condición médica y física
son muy relevantes, sumando otros factores como la calidad y precisión de los diferentes
dispositivos utilizados para obtener una imagen limpia del ECG. También, para la toma de
un electrocardiograma, puede afectar que no se realice de forma óptima el procedimiento
para llevar a cabo la adquisición de muestras, es decir, que no se ubiquen los electrodos en
la zona correcta, que estén en mal estado o que el paciente no se encuentre en completo
reposo.
Figura 96. EGG graficado con sistema portable
Tomado de: Sistema para la adquisición de señales electrocardiográficas usando MATLAB®, Pablo
Andrés Carmona, Vladimir Mayoral, Pablo Andrés Muñoz, Universidad tecnológica de Pereira.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…159
7.5. Costos
Como complemento a los resultados mostrados, se debe mencionar el costo total en la
fabricación del dispositivo ya que es un punto importante para trabajos futuros en cuanto a
la posibilidad de la comercialización de este prototipo, que, aunque en esta ocasión su
desarrollo fue de un interés 100 % investigativo no se puede perder la visión de poder
convertir este diseño en uno de los sistemas de captura y visualización de señales ECG
presentes en el mercado medico a nivel nacional e internacional.
A continuación, se verá reflejado en la tabla 30 los costos de cada uno de los procesos
involucrados en la fabricación y su inversión total en la finalización del dispositivo.
Tabla 30. Costo total de fabricación.
CONCEPTO COSTO
Fabricación de plaqueta en la empresa
Microcircuitos S.A.
$ 193.000
Pedido de componentes electrónicos en
www.digikey.com
$ 500.000
Cable de paciente $ 100.000
Programador PicKit 3 $ 80.000
Cargador USB $ 10.000
Caja contenedora plaqueta $ 65.000
TOTAL $ 948.000
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…160
CAPITULO 8. CONCLUSIONES E IMPACTO DEL PROYECTO
8.1. Conclusiones
Con base a diferentes libros relacionados con la medicina y el electrocardiograma, se
consultó qué cambios importantes se pueden apreciar al trabajar con las diferentes
derivaciones, observando que se caracterizan en 2 grupos: las derivaciones de plano frontal,
entre las cuales están las bipolares clásicas y las monopolares aumentadas; y de plano
horizontal, que también son conocidas como precordiales. Una vez con las derivaciones
definidas, se realiza un análisis de los materiales que se requieren para determinar con cuántas
derivaciones trabajar. Finalmente se piensa que el proyecto debe lograr el mayor alcance que
sea posible dentro de los límites establecidos, y al trabajar con una mayor cantidad de
derivaciones, en próximos desarrollos de éste proyecto se podría llegar a determinar gran
cantidad de enfermedades cardiovasculares (Aproximadamente 30 disfunciones del
corazón). Por las anteriores razones se decide graficar 12 derivaciones, sustentado en que se
logra una mayor capacidad de detección de anomalías, siendo así el sistema más útil para los
especialistas.
Consultando en las páginas oficiales de los diferentes fabricantes de dispositivos
electrónicos (Como lo son Microchip, Texas Instruments, National Instruments, entre otros)
se han consultado una gran cantidad de dispositivos de aplicación específica (ASIC por sus
siglas en inglés) y se ha creado una base de datos detallando diferentes dispositivos
electrónicos para aplicaciones biomédicas. Con ellos se ha hecho una comparación en cuánto
a buses de comunicación, velocidad de transmisión, capacidad de memoria, precio, tipo de
soldadura del integrado (Esto se relaciona con el hardware) y todas las especificaciones
técnicas que tengan que ver con disminuir el circuito externo y tener una puesta en marcha
rápida. Se ha seleccionado el que mejor de ellos funcione para el proyecto planteado,
encontrando el ADS1298, circuito integrado de aplicación específica de Texas Instruments
desarrollado para trabajar con señales ECG, con 8 canales de toma de datos, y frecuencias de
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…161
muestreo de hasta 32000 muestras por segundo, además de contar con un bus de
comunicaciones SPI ideal para desarrollar el proyecto planteado.
Para diseñar el sistema electrónico para la adquisición y comunicación de señales
ECG se utilizó el software EAGLE®. Se debió realizar todo el cableado tal y como quedó al
finalizar la tarjeta, dibujando todas las pistas de la misma. Previo al desarrollo del hardware
se seleccionaron todos los componentes con los que se iba a trabajar. Para el sistema de
comunicación de la tarjeta hacia el exterior se hizo una base de datos con diferentes
procesadores con gran capacidad y se comparó el precio y los beneficios que ofrecía cada
uno. Se seleccionó para llevar a cabo ésta tarea el PIC32MX795F512H, microcontrolador de
MICROCHIP® que cuenta con el bus SPI (para comunicarse con el ASIC seleccionado),
USB, UART, ETHERNET (Aunque no se utiliza ésta función), ICSP, JTAG, entre otros.
Como resultado del proyecto se diseña el sistema embebido, y se realiza una caja protectora,
obteniendo un dispositivo para obtener y transmitir en tiempo real señales ECG, el cual se ha
llamado “ECG DEVICE”, que permite la integración de tecnologías de comunicación
compatibles con dispositivos móviles, como lo es Bluetooth o USB, para en un futuro
utilizarlos y llegar a desarrollar un programa para graficar desde un celular o tableta.
Aprovechando la capacidad de comunicación por medio de bus serial UART de la
tarjeta desarrollada, se utiliza un cable serial-USB para comunicar la tarjeta con un
computador de escritorio o laptop y así enviar los datos capturados de una señal ECG de un
paciente a un software con capacidad de procesamiento y visualización. De ésta manera se
aprovecha MATLAB® que tiene la ventaja de leer el puerto serial del computador y recibir
los datos enviados por la tarjeta “ECG DEVICE”, de manera que se pueden hacer diferentes
operaciones como detección de errores por medio de CRC16, detección de desconexión de
electrodos y finalmente visualización de las señales ECG en una interfaz de usuario a la que
se ha nombrado “ECG INTERFACE”, la cual es fácil de utilizar, y se puede interactuar con
los pacientes de manera intuitiva y así obtener las gráficas de las 12 derivaciones, mostrando
errores en caso de que los haya e indicando al paciente si un electrodo se ha desconectado.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…162
Por medio de pruebas realizadas en diferentes pacientes voluntarios de la toma del
ECG, se ha validado el funcionamiento del sistema portable para la adquisición y
procesamiento de éste tipo de señales. Se ha llevado a cabo una serie de pruebas en diferentes
computadores para verificar el correcto funcionamiento de los softwares, así como se ha
comparado cada una de las 12 derivaciones con señales comúnmente obtenidas del ECG,
llegando a demostrar que se ha completado el proyecto planteado. Con ayuda del doctor
Edgar H. Dominguez se ha llegado a concluir que las gráficas del electrocardiograma
tomadas son útiles en las zonas de difícil acceso médico, recibiendo también sugerencias para
mejorar el dispositivo y que sea de más utilidad. Las opiniones se han agregado a los anexos
del documento.
El proyecto “Sistema portable para la adquisición y procesamiento de señales ECG,
con aplicabilidad en dispositivos móviles” se ha presentado en el semillero interno de
investigación de la universidad San Buenaventura seccional Cali, siendo evaluado con una
calificación de 91 por los jurados, de manera que se ha clasificado al XIV encuentro
departamental de semilleros de investigación, organizado por RedCOLSI, Nodo Valle del
Cauca, realizado los días 18 y 19 de Mayo de 2017 en el colegio Freinet de Cali. Ha entrado
en competencia con diferentes proyectos y se ha obtenido una calificación también de 91,
demostrando una gran aceptación por parte de los jurados. Así se ha clasificado también al
XX Encuentro Nacional y XIV Internacional de Semilleros de Investigación –
BARRANQUILLA 2017.
En el presente trabajo de grado se logró diseñar y construir una tarjeta de adquisición
de muestras de un electrocardiograma, para procesar los datos obtenidos y visualizarlos en
un dispositivo con capacidad de interactividad con un usuario. Se implementó el sistema
portable para la adquisición y procesamiento de señales ECG, graficando las señales
obtenidas en un computador por medio del software MATLAB®. Resaltando que el
dispositivo tiene la compatibilidad con protocolos de transferencia de datos como USB o
Bluetooth, de modo que en un futuro tenga aplicabilidad en dispositivos móviles.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…163
8.2. Impacto del proyecto (salud, social, económico)
Al realizar este prototipo para la adquisición de señales ECG se logró comprobar el gran
avance tecnológico que se vive en la época actual a nivel mundial y en el cual los objetivos
fundamentales hacia el futuro son poder brindar a las personas dispositivos prácticos y de
gran funcionalidad que logren tener un alto impacto en la sociedad y que permitan llevar y
hacer más fácil posible el entorno personal y laboral.
En el proyecto realizado se logra cumplir con 3 importantes características de impacto, las
cuales se mencionan a continuación:
8.2.1. Impacto en salud
En el sector de la salud se logra tener un gran impacto con el proyecto desarrollado ya que se
obtiene un dispositivo que es práctico y de gran facilidad de usar a la hora de realizar un
procedimiento para la toma de un electrocardiograma, esto conlleva a un importante
beneficio e impacto ya que el prototipo diseñado contiene una alta precisión la cual permite
tener un buen diagnóstico ante enfermedades de tipo cardiovascular y así poder evitar
muertes por este tipo de eventos.
8.2.2. Impacto social
Crear un sistema portable fue uno de los objetivos fundamentales planteados en la
elaboración del dispositivo, con esto se busca tener la facilidad de que las personas que vivan
en lugares lejanos a centros médicos, personas que no tenga un buen acceso a los sistemas de
salud puedan realizarse un ECG, esto involucra un impacto en lo social ya que permite
brindar un beneficio importante para las personas de cualquier comunidad o y de los
diferentes niveles socioeconómicos.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…164
8.2.3. Impacto económico
Al realizar la documentación y análisis de las diferentes formas de poder adquirir señales
biomédicas también se tiene en cuenta los costos de los materiales que se van a utilizar en la
construcción del prototipo esto con el fin de poder tener en completo funcionamiento un
dispositivo de bajo consto. El interés de este proyecto es de nivel investigativo, pero en un
futuro se puede convertir en un sistema comercial dependiendo de las necesidades del
mercado por este motivo se realiza un análisis de costos los cuales permitan un beneficio
económico tanto para los desarrolladores como para los clientes.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…165
BIBLIOGRAFIA
[1] M. E. Moura, «Salud Y Medicina,» Salud Y Medicina, 19 05 2011. [En línea].
Available: https://goo.gl/UzuBhj. [Último acceso: 11 03 2016].
[2] M. M. F. Jordan M Prutkin, «UpToDate,» 29 10 2015. [En línea]. Available:
https://goo.gl/LbPMCn. [Último acceso: 07 03 2016].
[3] Instituto Nacional de Salud, «Enfermedad Cardiovascular: principal causa de muerte
en Colombia,» Observatorio Nacional de Salud, Bogotá D.C., 2013.
[4] X. Boscha, F. Alfonsoa y J. Bermejoa, «Revista española de cardiología,» Revista
española de cardiología, [En línea]. Available: https://goo.gl/N1pl9f. [Último acceso:
11 03 2016].
[5] Fundación Del Corazón, «Fundación Del Corazón,» 02 2015. [En línea]. Available:
https://goo.gl/GJc7wW. [Último acceso: 07 03 2016].
[6] J. A. García, «Documentos de Trabajo sobre Economía Regional,» Banco de La
República, Cartagena, 2014.
[7] El Tiempo, «El Tiempo,» 2014. [En línea]. Available: https://goo.gl/FRUcVT. [Último
acceso: 24 02 2016].
[8] Redacción Tecnosfera, «El Tiempo,» Redacción Tecnosfera, 11 03 2015. [En línea].
Available: https://goo.gl/Hvbmn1. [Último acceso: 11 03 2016].
[9] D. N. Dillwyn, «Verizon,» Verizon, [En línea]. Available: https://goo.gl/HVgTzh.
[Último acceso: 11 03 2016].
[10] P. A. Carrión Pérez , J. Ródenas García y J. J. Rieta Ibañez, Procesador de señales
biomédicas, Castilla: Ediciones de la Universidad La Castilla - La Mancha, 2007.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…166
[11] H. Velez, W. Rojas, J. Borrero y J. Restrepo, Endocrinologia (Fundamentos de
Medicina), Corporacion Para Investigaciones Biologicas, 2006.
[12] Cardiomed, «Cardiomed,» [En línea]. Available: https://goo.gl/LgjehL. [Último
acceso: 20 05 2016].
[13] G. F. Salazar, Manual de electrocardiografía y electroencefalografía, Manual Moderno,
2007.
[14] E. MARLINDA, . J. GUEVARA y L. J. LÓPEZ, «Circuitos Integrados configurables
ASIC,» 2007. [En línea]. Available: https://goo.gl/sRAvwg. [Último acceso: 25 05
2016].
[15] P. A. Cardona, V. Mayoral y P. A. Muñoz, «SISTEMA PARA LA ADQUISICIÓN DE
SEÑALES ELECTROCADIOGRÁFICAS USANDO MATLAB®,» Scientia et
Technica, Pereira, 2010.
[16] National Instruments, «NI USB-621x User Manual,» National Instruments, 2009.
[17] H. E. Melo León y A. J. Maya Quintero, «Dispositivo para telemetría de señales
biológicas que permitela utilización de diferentes tecnologías,» Universidad Militar
Nueva Granada, Bogotá, 2009.
[18] B. Becerra Luna, R. Dávila García, P. Salgado Rodriguez, R. Martínez Memije y Ó.
Infante Vázquez, «- Monitor de señales de electrocardiografía y frecuencia cardiaca
mediante un teléfono móvil con el protocolo de comunicación Bluetooth,» Instituto
Tecnológico y de Estudios Superiores de Monterrey Campus Ciudad de México,
México D.F., 2012.
[19] Y. Tzu-Hao, C. Chung-Yu y Y. Sung-Nien, «A Portable Real-time ECG Recognition
System Based on,» IEEE, Osaka, Japan, 2013.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…167
[20] F. Jímenez López y P. F. Cárdenas, «Diseño e implementación de filtros antialiasing
para la adquisición de armónicos de corriente y tensión en un FAP,» Revista
Colombiana de Tecnologías de Avanzada, vol. Volumen 2, nº Número 18, pp. 12-13,
2011.
[21] L. L. Alvarez, R. Henao y E. Duque, «ANÁLISIS DE ESQUEMAS DE FILTRADO
ANALOGO PARA SEÑALES ECG,» Scientia et Technica Año XIII, nº 37, p. 6, 2007.
[22] E. G. Gutiérrez, «Universitat Pompeu Fabra Barcelona,» 2 11 2009. [En línea].
Available: https://goo.gl/vHMnaF. [Último acceso: 12 7 2017].
[23] J. C. Montoya Cardona, Sistema de adquisición de biopotenciales para entronos
académicos, Envigado: Universidad CES, 2013.
[24] NORMA TÉCNICA COLOMBIANA, «Equipos electromédicos. Parte 2: Requisitos
particulares para la seguridad de electrocardiógrafos,» Instituro Colombiano de Normas
Técnicas y Certificación (ICONTEC), Bogotá, 2002.
[25] Centro Medico Escuela, «Técnico en Electrocardiograma,» Centro Medico Escuela,
[En línea]. Available: https://goo.gl/CWIBMU. [Último acceso: 01 06 2016].
[26] TEXAS INSTRUMENTS, «TEXAS INSTRUMENTS,» TEXAS INSTRUMENTS,
2016. [En línea]. Available: https://goo.gl/oDGUJ5. [Último acceso: 15 06 2017].
[27] MICROCHIP, «MICROCHIP,» MICROCHIP, 2017. [En línea]. Available:
https://goo.gl/BdDhuQ. [Último acceso: 15 06 2017].
[28] INTEGRAL PROCESS, «INTEGRAL PROCESS,» [En línea]. Available:
https://goo.gl/JXVksh. [Último acceso: 12 7 2017].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…168
[29] Nexperia USA Inc., «Nexperia USA Inc.,» 9 2 2009. [En línea]. Available:
https://goo.gl/NuAGb3. [Último acceso: 12 7 2017].
[30] Texas Instruments , «Texas Instruments,» 6 2007. [En línea]. Available:
https://goo.gl/p6YYde. [Último acceso: 12 7 2017].
[31] Analog Devices , «Analog Devices,» [En línea]. Available: https://goo.gl/U3fWxC.
[Último acceso: 12 7 2017].
[32] Murata Power Solutions Inc., «Murata Power Solutions Inc.,» [En línea]. Available:
https://goo.gl/nty3KJ. [Último acceso: 12 7 2017].
[33] Analog Device, «Analog Device,» [En línea]. Available: https://goo.gl/4hX34L.
[Último acceso: 12 7 2017].
[34] Ingenieria en microcontroladores , «Ingenieria en microcontroladores,» [En línea].
Available: https://goo.gl/fMnvSr. [Último acceso: 12 7 2017].
[35] Microchip, «Microchip,» [En línea]. Available: https://goo.gl/w97xNx. [Último
acceso: 12 7 2017].
[36] Intef, «Intef,» [En línea]. Available: https://goo.gl/avbxvs. [Último acceso: 12 7 2017].
[37] O. E. VERA, E. DUQUE CARDONA y J. RIVERA PIEDRAHITA, «EXTRACCIÓN
DE CARACTERÍSTICAS DE LA SEÑAL ELECTROCARDIOGRÁFICA
MEDIANTE SOFTWARE DE ANÁLISIS MATEMÁTICO,» Scientia Et Technica,
2006.
[38] P. P. J., «COOPEANDE,» COOPEANDE, [En línea]. Available:
https://goo.gl/80KlyE. [Último acceso: 11 03 2016].
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…169
[39] MINSALUD, «MINSALUD,» MINSALUD, 21 03 2014. [En línea]. Available:
https://goo.gl/fmGXDD. [Último acceso: 11 03 2016].
[40] ECRI Institute, «El Hospital,» ECRI Institute, Octubre 2011. [En línea]. Available:
https://goo.gl/BV8A6X. [Último acceso: 06 01 2016].
[41] Universidad De Murcia, «Universidad De Murcia,» 2013. [En línea]. Available:
https://goo.gl/nGa6Lf. [Último acceso: 15 7 2017].
[42] V. M. P. A. M. Pablo Andrés Carmona, «SISTEMA PARA LA ADQUISICIÓN DE
SEÑALES ELECTROCADIOGRÁFICAS USANDO MATLAB®,» Scientia et
Technica Año XVI, nº 44, p. 6, 2010.
[43] H. David y A. Jamie, «embedded,» embedded, 06 Abril 2008. [En línea]. Available:
https://goo.gl/P2mg5P. [Último acceso: 17 11 2017].
ANEXOS
ANEXO 1: Código principal implementado en MPLAB
1 /*
2 * File: ADS1298_MAIN.c
3 * Author: Santiago Villafuerte
4 *
5 * Created on 4 de abril de 2017, 09:45 AM
6 */
7
8 // Configuration Bit settings
9 // SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
10 // PBCLK = 80 MHz
11 // Primary Osc w/PLL (XT+,HS+,EC+PLL)
12 // WDT OFF
13 // Other options don't care
14 //
15 #pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1
16 #pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1, FWDTEN = OFF
17
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <plib.h>
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…170
21 #include <string.h>
22 //#include <int.h>
23 #include "definitions.h"
24 #include "functions.h"
25 /*
26 *
27 */
28 unsigned short leadoff=0;
29 int adqCH1_Temp24bit = 0;
30 int adqCH2_Temp24bit = 0;
31 int adqCH3_Temp24bit = 0;
32 int adqCH4_Temp24bit = 0;
33 int adqCH5_Temp24bit = 0;
34 int adqCH6_Temp24bit = 0;
35 int adqCH7_Temp24bit = 0;
36 int adqCH8_Temp24bit = 0;
37 int CH1_DATA = 0;
38 int CH2_DATA = 0;
39 int CH3_DATA = 0;
40 int CH4_DATA = 0;
41 int CH5_DATA = 0;
42 int CH6_DATA = 0;
43 int CH7_DATA = 0;
44 int CH8_DATA = 0;
45 int adqCH_Temp16bit = 0;
46 char adqCH_Temp8bit = 0;
47
48 unsigned int indexBuffer = 0;
49 unsigned char Band_RDY = 0;
50 unsigned short IDgot=0;
51
52
53 unsigned int Dato1=0,Dato2=0,Dato3=0, Dato4=0, Dato5=0, Dato6=0;
54 unsigned int DATAstatus=0, DataCHN=0;
55 //SpiChannel chn = SPI_CHANNEL2;
56 UINT8 buf[1024];
57 void main(void) {
58
59 CS=0;
60
61
62 //UART settings
63 UARTConfigure(UART1, UART_ENABLE_PINS_TX_RX_ONLY);
64 UARTSetFifoMode(UART1, UART_INTERRUPT_ON_TX_NOT_FULL |
65 UART_INTERRUPT_ON_RX_NOT_EMPTY);
66 UARTSetLineControl(UART1, UART_DATA_SIZE_8_BITS |
67 UART_PARITY_NONE | UART_STOP_BITS_1);
68 UARTSetDataRate(UART1, GetPeripheralClock(), 460800);
69 UARTEnable(UART1, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));
70
71 //Ports settings
72 TRISGbits.TRISG9 = 0; // make CS an output
73 // TRISGbits.TRISG6 = 0; // make SCK an output
74 // TRISGbits.TRISG8 = 0; // make SDO an output
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…171
75 TRISGbits.TRISG7 = 1; // make SDI an input
76
77 TRISBbits.TRISB3 = 0; // make nRESET an output
78 TRISBbits.TRISB0 = 0; // make nPWDN an output
79
80 TRISDbits.TRISD10 = 0; // make START an output
81 TRISDbits.TRISD11 = 1; // make nDRDY an input
82
83 // CKP (clock polarity control) = 0
84 // CKE (clock edge control) = 1
85 // 16-bit, Master Mode
86 // Baud = 1MHz = Fpb/( 2*( SPI1BRG+1)) = 80MHz/( 2*( 39+1))
87 // SPI2CON = 0;
88 // waitSEC(0.1);
89 // SPI2CON = 0x8420;
90 // SPI2BRG = 0x0027;
91 int rData;
92 IEC0CLR=0x03800000; // disable all interrupts
93 SPI2CON = 0; // Stops and resets the SPI1.
94 rData=SPI2BUF; // clears the receive buffer
95 IFS0CLR=0x03800000; // clear any existing event
96 IPC5CLR=0x1f000000; // clear the priority
97 IPC5SET=0x0d000000; // Set IPL=3, Subpriority 1
98 IEC0SET=0x03800000; // Enable RX, TX and Error interrupts
99 // SPI2BRG=0x000A; // Max frec: 3.63MHz
100 SPI2BRG=0x0027; // use FPB/4 clock frequency
101 SPI2STATCLR=0x40; // clear the Overflow
102 SPI2CON=0x8220; // SPI ON, 8 bits transfer, SMP=1, Master mode
103
104 /*
105 The following code example will set INT4 to trigger on a high-to-low
106 transition edge. The CPU must be set up for either multi or single vector
107 interrupts to handle external interrupts
108 */
109 // ConfigINT4(EXT_INT_PRI_7 | FALLING_EDGE_INT | EXT_INT_ENABLE);
110 INTSetVectorPriority(INT_EXTERNAL_4_VECTOR, INT_PRIORITY_LEVEL_7);
111 INTSetVectorSubPriority(INT_EXTERNAL_4_VECTOR, INT_SUB_PRIORITY_LEVEL_0);
112 INTClearFlag(INT_INT4);
113 INTEnable(INT_INT4, INT_ENABLED);
114 // configure for multi-vectored mode
115 INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
116
117 INTDisableInterrupts();
118
119 //Inicialización ADS1298
120 ADSsetup();
121 waitSEC(20*tCLK);
122 ADS1298_RESET();
123 waitSEC(1);
124
125 ADS_WREG(CONFIG3, 0xDE);
126 ADS_WREG(CONFIG1, 0x06); //250 SPS
127 ADS_WREG(CONFIG2, 0x00); //14 para generar una señal de prueba interna.
128 //00 para externa.--
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…172
129
130 ADS_WREG(CONFIG4, 0x02); //0x02 Lead-off comparators enabled. 0x00
131 //Lead-off comparators disabled.
132
133 ADS_WREG(GPIO, 0x00); //GPIO de salida
134
135 ADS1298_START();
136
137 ADS_WREG(LOFF, 0x07); ////0xE4 24 nA, 70% pos 30% neg;
138 ADS_WREG(LOFF_FLIP, 0x00);
139 ADS_WREG(LOFF_SENSP, 0xFF);
140 ADS_WREG(LOFF_SENSN, 0xFF);
141 ADS_WREG(RLD_SENSP, 0xFF);
142 ADS_WREG(RLD_SENSN, 0xFF);
143 ADS_WREG(PACE, 0x00);
144 ADS_WREG(RESP, 0x00);
145
146 ADS_WREG(CH1SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
147 ADS_WREG(CH2SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
148 ADS_WREG(CH3SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
149 ADS_WREG(CH4SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
150 ADS_WREG(CH5SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
151 ADS_WREG(CH6SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
152 ADS_WREG(CH7SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
153 ADS_WREG(CH8SET, 0x60); // PGA = 12; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
154
155 // ADS_WREG(CH1SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
156 // ADS_WREG(CH2SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
157 // ADS_WREG(CH3SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
158 // ADS_WREG(CH4SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
159 // ADS_WREG(CH5SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
160 // ADS_WREG(CH6SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
161 // ADS_WREG(CH7SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
162 // ADS_WREG(CH8SET, 0x65); // PGA = 1; 5 FOR TEST SIGNAL; 0 FOR ELECTRODE
163
164 ADS_WREG(WCT1, 0x0B); // WCTA Powered on; CHN2N (RA) TO WCTA
165 ADS_WREG(WCT2, 0xD4); // WCTC Powered on; WCTB Powered on; CHN2P (LA) TO
166 //WCTB; CHN3P (LL) TO WCTC
167 //With this configuration WCT=(RA+LA+LL)/3
168
169 S_DATAC();
170 // enable interrupts
171 INTEnableInterrupts();
172
173 // const uint8_t example[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
174 // const uint8_t send_example[13], send_example_crc16[15];
175 int i;
176 // int tam=8005;
177 // char cadena_prueba[tam];
178 // for(i=0;i<tam;i++){
179 // cadena_prueba[i]=i;
180 // }
181 while(1){
182
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…173
183 if(Band_RDY>=1)
184 {
185 Band_RDY=0;
186
187 complete_trama(1);
188 SendDataBuffer(crc16_samples, sizeof(crc16_samples));
189
190
191 }
192 }
193
194 }
195
196 void __ISR(_EXTERNAL_4_VECTOR, IPL7AUTO) DRDY_interrupt(void){
197
198 // Clears the interrupt flag so we don't immediately enter the interrupt again.
199 INTClearFlag(INT_INT4); // clear the interrupt flag
200
201 adqCH8_Temp24bit = ADS_updateDataCH8();
202 adqCH7_Temp24bit = ADS_updateDataCH7();
203 adqCH6_Temp24bit = ADS_updateDataCH6();
204 adqCH5_Temp24bit = ADS_updateDataCH5();
205 adqCH4_Temp24bit = ADS_updateDataCH4();
206 adqCH3_Temp24bit = ADS_updateDataCH3();
207 adqCH2_Temp24bit = ADS_updateDataCH2();
208 adqCH1_Temp24bit = ADS_updateDataCH1();
209
210
211 incomming_samples24bit_CHN1[ indexBuffer ] = C2_DATA(adqCH1_Temp24bit);
212 incomming_samples24bit_CHN2[ indexBuffer ] = C2_DATA(adqCH2_Temp24bit);
213 incomming_samples24bit_CHN3[ indexBuffer ] = C2_DATA(adqCH3_Temp24bit);
214 incomming_samples24bit_CHN4[ indexBuffer ] = C2_DATA(adqCH4_Temp24bit);
215 incomming_samples24bit_CHN5[ indexBuffer ] = C2_DATA(adqCH5_Temp24bit);
216 incomming_samples24bit_CHN6[ indexBuffer ] = C2_DATA(adqCH6_Temp24bit);
217 incomming_samples24bit_CHN7[ indexBuffer ] = C2_DATA(adqCH7_Temp24bit);
218 incomming_samples24bit_CHN8[ indexBuffer ] = C2_DATA(adqCH8_Temp24bit);
219 indexBuffer++;
220
221 if( indexBuffer >= 250){
222 indexBuffer = 0;
223 Band_RDY = 1;
224 memcpy((void*) (&(incomming_samples_CHN1[0])),(const void*)
225 (&(incomming_samples24bit_CHN1[0])),
226 sizeof(incomming_samples24bit_CHN1));
227 memcpy((void*) (&(incomming_samples_CHN2[0])),(const void*)
228 (&(incomming_samples24bit_CHN2[0])),
229 sizeof(incomming_samples24bit_CHN2));
230 memcpy((void*) (&(incomming_samples_CHN3[0])),(const void*)
231 (&(incomming_samples24bit_CHN3[0])),
232 sizeof(incomming_samples24bit_CHN3));
233 memcpy((void*) (&(incomming_samples_CHN4[0])),(const void*)
234 (&(incomming_samples24bit_CHN4[0])),
235 sizeof(incomming_samples24bit_CHN4));
236 memcpy((void*) (&(incomming_samples_CHN5[0])),(const void*)
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…174
237 (&(incomming_samples24bit_CHN5[0])),
238 sizeof(incomming_samples24bit_CHN5));
239 memcpy((void*) (&(incomming_samples_CHN6[0])),(const void*)
240 (&(incomming_samples24bit_CHN6[0])),
241 sizeof(incomming_samples24bit_CHN6));
242 memcpy((void*) (&(incomming_samples_CHN7[0])),(const void*)
243 (&(incomming_samples24bit_CHN7[0])),
244 sizeof(incomming_samples24bit_CHN7));
245 memcpy((void*) (&(incomming_samples_CHN8[0])),(const void*)
246 (&(incomming_samples24bit_CHN8[0])),
247 sizeof(incomming_samples24bit_CHN8));
248
249 //the 24 status bits is: (1100 + LOFF_STATP + LOFF_STATN
250 //+ bits[4:7] of the GPIO register).
251 leadoff = ((paqueteDato1 <<4) & 0xFFF0)|
252 ((paqueteDato2 >> 12) & 0x000F);
253 memcpy((void*) (&(SEND_LEADOFF)),(const void*)
254 (&(leadoff)), sizeof(leadoff));
255
256 }
257
258
259 } // END INT4 ISR
Anexo 2: Definiciones del ANEXO 1.
1 #define GetPeripheralClock() (80000000L)
2 #define GetSystemClock() (80000000L)
3 #define POLY 0x1021
4
5 //Asignación de byte a los comandos definidos SPI (Datasheet, pg. 35)
6 #define _WAKEUP 0x02 //Wake-up desde el modo Standby
7 #define _STANDBY 0x04 //Entra en modo Standby
8 #define _RESET 0x06 //Reset TI_ADS1299
9 #define _START 0x08 //Start and restart
10 //(Sincronización) ADC
11 #define _STOP 0x0A //Stop ADC
12 #define _RDATAC 0x10 //Habilita el modo de lectura
13 //continuo (modo default Encendido)
14 #define _SDATAC 0x11 //DesStop el modo de lectura
15 //continuo
16 #define _RDATA 0x12 //Lee el dato pormedio del comando;
17 //soporta miltiple relectura
18
19 #define _RREG 0x20 //(tambien = 0010 0000) es el
20 //primer opcode(direccion) que debe
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…175
21 //ser agregada para a RREG
22 #define _WREG 0x40 //b01000000 (Datasheet, pg. 35)
23 //Register Addresses
24 #define ID 0x00
25 #define CONFIG1 0x01
26 #define CONFIG2 0x02
27 #define CONFIG3 0x03
28 #define LOFF 0x04
29 #define CH1SET 0x05
30 #define CH2SET 0x06
31 #define CH3SET 0x07
32 #define CH4SET 0x08
33 #define CH5SET 0x09
34 #define CH6SET 0x0A
35 #define CH7SET 0x0B
36 #define CH8SET 0x0C
37 #define RLD_SENSP 0x0D
38 #define RLD_SENSN 0x0E
39 #define LOFF_SENSP 0x0F
40 #define LOFF_SENSN 0x10
41 #define LOFF_FLIP 0x11
42 #define LOFF_STATP 0x12
43 #define LOFF_STATN 0x13
44 #define GPIO 0x14
45 #define PACE 0x15
46 #define RESP 0x16
47 #define CONFIG4 0x17
48 #define WCT1 0x18
49 #define WCT2 0x19
50 #define tCLK 0.00000486
51
52 #define CS LATGbits.LATG9
53 #define nPWDN LATBbits.LATB0
54 #define nRESET LATBbits.LATB3
55 #define nSTART LATDbits.LATD10
56 #define nDRDY PORTDbits.RD11
57 int ayuda;
Anexo 3: Funciones de ANEXO 1.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <plib.h>
4 #include <string.h>
5 #include "definitions.h"
6
7 // *****************************************************************************
8 // *****************************************************************************
9 // Section: Function Prototypes
10 // *****************************************************************************
11 // *****************************************************************************
12 char send_samples[8005], crc16_samples[8007];
13 long int incomming_samples_CHN1[250],incomming_samples_CHN2[250],
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…176
14 incomming_samples_CHN3[250],incomming_samples_CHN4[250];
15 long int incomming_samples_CHN5[250],incomming_samples_CHN6[250],
16 incomming_samples_CHN7[250],incomming_samples_CHN8[250];
17 unsigned short SEND_LEADOFF;
18
19 long int incomming_samples24bit_CHN1[250],incomming_samples24bit_CHN2[250],
20 incomming_samples24bit_CHN3[250],incomming_samples24bit_CHN4[250];
21 long int incomming_samples24bit_CHN5[250],incomming_samples24bit_CHN6[250],
22 incomming_samples24bit_CHN7[250],incomming_samples24bit_CHN8[250];
23
24
25 void SendDataBuffer(const char *buffer, UINT32 size);
26 UINT32 GetDataBuffer(char *buffer, UINT32 max_size);
27 void waitSEC(WORD delay);
28 void ADSsetup(void);
29 void ADS1298_RESET();
30 void ADS1298_WAKEUP();
31 unsigned int ADS1298_getDeviceID();
32 void ADS1298_START();
33 void ADS_WREG(char _address, char _value);
34 void ADS_RDATA();
35 unsigned int ADS_updateDataCH1();
36 unsigned int ADS_updateDataCH4();
37 unsigned int ADS_updateDataCH3();
38 unsigned int ADS_updateDataCH2();
39 unsigned int ADS_updateDataCH5();
40 unsigned int ADS_updateDataCH6();
41 unsigned int ADS_updateDataCH7();
42 unsigned int ADS_updateDataCH8();
43 unsigned short SPI2_transfer_REG(char a, char b, char c, char d);
44 unsigned short SPI2_transfer_Data(char a, char b);
45 int C2_DATA(int adqCH_Temp24bit);
46
47 unsigned int paqueteDato1 =0,paqueteDato2 =0, paqueteDato3 =0, paqueteDato4 =0,
48 paqueteDato5 =0, paqueteDato6 =0 , paqueteDato7 =0;
49 unsigned int paqueteDato8 =0,paqueteDato9 =0,paqueteDato10 =0,paqueteDato11=0,
50 paqueteDato12 =0, paqueteDato13 =0, paqueteDato14 =0;
51 unsigned int nsalidaDeDato = 0;
52
53
54
55 SpiChannel chn = SPI_CHANNEL2;
56 // *****************************************************************************
57 // void UARTTxBuffer(char *buffer, UINT32 size)
58 // *****************************************************************************
59 void SendDataBuffer(const char *buffer, UINT32 size)
60 {
61 while(size)
62 {
63 while(!UARTTransmitterIsReady(UART1));
64
65 UARTSendDataByte(UART1, *buffer);
66
67 buffer++;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…177
68 size--;
69 }
70
71 while(!UARTTransmissionHasCompleted(UART1));
72 }
73 // *****************************************************************************
74 // void send_array(int max, long int array[])
75 // *****************************************************************************
76 void send_array(int max, long int array[]){
77 int i;
78 UINT8 buf1[1024];
79 for(i=0; i<max; i++){
80 sprintf(buf1,"%i", array[i]);
81 SendDataBuffer(buf1, strlen(buf1));
82 }
83 }
84
85 // *****************************************************************************
86 // UINT32 GetDataBuffer(char *buffer, UINT32 max_size)
87 // *****************************************************************************
88 UINT32 GetDataBuffer(char *buffer, UINT32 max_size)
89 {
90 UINT32 num_char;
91
92 num_char = 0;
93
94 while(num_char < max_size)
95 {
96 UINT8 character;
97
98 while(!UARTReceivedDataIsAvailable(UART1));
99
100 character = UARTGetDataByte(UART1);
101
102 if(character == '\r')
103 break;
104
105 *buffer = character;
106
107 buffer++;
108 num_char++;
109 }
110
111 return num_char;
112 }
113
114 unsigned short SPI2_transfer_REG(char a, char b, char c, char d)
115 {
116 // SPI2BUF = b; // write to shift register to begin
117 //transmission
118 // while(!SPI2STATbits.SPIRBF); // wait for transfer to complete
119 // return SPI2BUF; // read the shift register value
120
121 unsigned short rxData;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…178
122
123 SpiChnPutC(chn, a);
124 SpiChnPutC(chn, b); // send data
125 SpiChnGetC(chn);
126 SpiChnGetC(chn);
127
128
129 SpiChnPutC(chn, c);
130 SpiChnPutC(chn, d);
131 rxData = SpiChnGetC(chn);
132 SpiChnGetC(chn);
133
134 return rxData;
135 }
136
137 unsigned short SPI2_transfer_Data(char a, char b)
138 {
139 unsigned short rxData;
140
141 SpiChnPutC(chn, a);
142 SpiChnPutC(chn, b); // send data
143 rxData=SpiChnGetC(chn);
144 rxData=((rxData<<8)&0xFF00)|(SpiChnGetC(chn)&0x00FF);
145
146 return rxData;
147 }
148
149 void ADSsetup(void){
150 nSTART = 0;
151 nRESET = 1;
152 waitSEC(20*tCLK);
153 nRESET = 0;
154 waitSEC(20*tCLK);
155 nRESET = 1;
156 waitSEC(20*tCLK);
157 nPWDN = 1;
158 waitSEC(20*tCLK);
159 CS=0;
160 }
161
162
163 void ADS1298_RESET()
164 {
165 CS = 0;
166 SpiChnPutC(chn, _RESET);
167 SpiChnPutC(chn, 0x00);
168 SpiChnGetC(chn);
169 SpiChnGetC(chn);
170 waitSEC(20*tCLK);
171 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
172 //poner en 1 CS.
173 CS = 1;
174 }
175
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…179
176 void ADS1298_WAKEUP()
177 {
178 CS = 0;
179 SpiChnPutC(chn, _WAKEUP);
180 SpiChnPutC(chn, 0x00);
181 SpiChnGetC(chn);
182 SpiChnGetC(chn);
183 waitSEC(20*tCLK);
184 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
185 //poner en 1 CS.
186 CS = 1;
187 }
188
189 void ADS1298_START(){
190 CS = 0;
191 SpiChnPutC(chn, _START);
192 SpiChnPutC(chn, 0x00);
193 SpiChnGetC(chn);
194 SpiChnGetC(chn);
195 waitSEC(32777*tCLK);
196 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
197 //poner en 1 CS.
198 CS = 1;
199 }
200
201 unsigned int ADS1298_getDeviceID(){
202
203 CS = 0;
204 SpiChnPutC(chn, _RREG + 0x00);
205 SpiChnPutC(chn, 0x00);
206 unsigned short ID_ADS =SpiChnGetC(chn);
207 ID_ADS = (ID_ADS<<8)& 0xFF00;
208 ID_ADS = ID_ADS | (SpiChnGetC(chn)& 0x00FF);
209 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
210 //poner en 1 CS.
211 CS=1;
212 return ID_ADS;
213 }
214
215 void ADS_RDATA()
216 {
217 SpiChnPutC(chn, _RDATA);
218 SpiChnGetC(chn);
219 }
220
221 void S_DATAC(){
222 CS=0; //Para leer registros se necesita parar el data continuous
223 SpiChnPutC(chn, _SDATAC);
224 SpiChnPutC(chn, 0x00);
225 SpiChnGetC(chn);
226 SpiChnGetC(chn);
227 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
228 //poner en 1 CS.
229 CS=1;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…180
230 }
231 void ADS_WREG(char _address, char _value)
232 { CS=0;
233 char opcode1 = _WREG + _address;
234 SPI2_transfer_REG(opcode1, 0x00, _value, 0x00);
235 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
236 //poner en 1 CS.
237 CS=1;
238 }
239 unsigned short ADS_RREG(char _address)
240 {
241 CS=0;
242 char opcode1 = _RREG + _address;
243 unsigned short response = SPI2_transfer_REG(opcode1, 0x00, 0x00, 0x00);
244 //waitSEC(4*tCLK); //Se debe esperar 4 o más ciclos de reloj para poder
245 //poner en 1 CS.
246 CS=1;
247 return response;
248 }
249 unsigned int ADS_updateDataCH1()
250 {
251 nsalidaDeDato = 0;
252 nsalidaDeDato = paqueteDato2 & 0x000000FF;
253 nsalidaDeDato = nsalidaDeDato & 0x000000FF;
254 nsalidaDeDato = nsalidaDeDato << 16;
255 nsalidaDeDato = nsalidaDeDato | (paqueteDato3 & 0x0000FFFF);
256
257 return nsalidaDeDato;
258 }
259
260 unsigned int ADS_updateDataCH2()
261 {
262 nsalidaDeDato = 0;
263 nsalidaDeDato = paqueteDato4 & 0x0000FFFF;
264 nsalidaDeDato = nsalidaDeDato & 0x0000FFFF;
265 nsalidaDeDato = nsalidaDeDato << 8;
266 nsalidaDeDato = nsalidaDeDato |
267 (((paqueteDato5 & 0x0000FF00)>>8) & 0x000000FF);
268 return nsalidaDeDato;
269 }
270
271
272 unsigned int ADS_updateDataCH3()
273 {
274 nsalidaDeDato = 0;
275 nsalidaDeDato = paqueteDato5 & 0x000000FF;
276 nsalidaDeDato = nsalidaDeDato & 0x000000FF;
277 nsalidaDeDato = nsalidaDeDato << 16;
278 nsalidaDeDato = nsalidaDeDato | (paqueteDato6 & 0x0000FFFF);
279 return nsalidaDeDato;
280 }
281 unsigned int ADS_updateDataCH4()
282 {
283 nsalidaDeDato = 0;
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…181
284 nsalidaDeDato = paqueteDato7 & 0x0000FFFF;
285 nsalidaDeDato = nsalidaDeDato & 0x0000FFFF;
286 nsalidaDeDato = nsalidaDeDato << 8;
287 nsalidaDeDato = nsalidaDeDato | (((paqueteDato8 & 0x0000FF00)>>8) & 0x000000FF);
288 return nsalidaDeDato;
289 }
290
291 unsigned int ADS_updateDataCH5()
292 {
293 nsalidaDeDato = 0;
294 nsalidaDeDato = paqueteDato8 & 0x000000FF;
295 nsalidaDeDato = nsalidaDeDato & 0x000000FF;
296 nsalidaDeDato = nsalidaDeDato << 16;
297 nsalidaDeDato = nsalidaDeDato | (paqueteDato9 & 0x0000FFFF);
298 return nsalidaDeDato;
299 }
300
301 unsigned int ADS_updateDataCH6()
302 {
303 nsalidaDeDato = 0;
304 nsalidaDeDato = paqueteDato10 & 0x0000FFFF;
305 nsalidaDeDato = nsalidaDeDato & 0x0000FFFF;
306 nsalidaDeDato = nsalidaDeDato << 8;
307 nsalidaDeDato = nsalidaDeDato | (((paqueteDato11 & 0x0000FF00)>>8) & 0x000000FF);
308 return nsalidaDeDato;
309 }
310
311 unsigned int ADS_updateDataCH7(){
312
313 nsalidaDeDato = 0;
314 nsalidaDeDato = paqueteDato11 & 0x000000FF;
315 nsalidaDeDato = nsalidaDeDato & 0x000000FF;
316 nsalidaDeDato = nsalidaDeDato << 16;
317 nsalidaDeDato = nsalidaDeDato | (paqueteDato12 & 0x0000FFFF);
318 return nsalidaDeDato;
319 }
320
321 unsigned int ADS_updateDataCH8()
322 {
323
324 paqueteDato1 =0, paqueteDato2 =0, paqueteDato3 =0, paqueteDato4 =0,
325 paqueteDato5 =0, paqueteDato6 =0, paqueteDato7 =0;
326 paqueteDato8 =0, paqueteDato9 =0, paqueteDato10 =0, paqueteDato11 =0,
327 paqueteDato12 =0, paqueteDato13 =0, paqueteDato14 =0;
328
329 CS=0;
330 ADS_RDATA();
331 paqueteDato1 = SPI2_transfer_Data(0x00,0x00);
332 paqueteDato2 = SPI2_transfer_Data(0x00,0x00);
333 paqueteDato3 = SPI2_transfer_Data(0x00,0x00);
334 paqueteDato4 = SPI2_transfer_Data(0x00,0x00);
335 paqueteDato5 = SPI2_transfer_Data(0x00,0x00);
336 paqueteDato6 = SPI2_transfer_Data(0x00,0x00);
337 paqueteDato7 = SPI2_transfer_Data(0x00,0x00);
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…182
338 paqueteDato8 = SPI2_transfer_Data(0x00,0x00);
339 paqueteDato9 = SPI2_transfer_Data(0x00,0x00);
340 paqueteDato10 = SPI2_transfer_Data(0x00,0x00);
341 paqueteDato11= SPI2_transfer_Data(0x00,0x00);
342 paqueteDato12 = SPI2_transfer_Data(0x00,0x00);
343 paqueteDato13 = SPI2_transfer_Data(0x00,0x00);
344 paqueteDato14 = SPI2_transfer_Data(0x00,0x00);
345 CS=1;
346
347 nsalidaDeDato = 0;
348 nsalidaDeDato = paqueteDato13 & 0x0000FFFF;
349 nsalidaDeDato = nsalidaDeDato & 0x0000FFFF;
350 nsalidaDeDato = nsalidaDeDato << 8;
351 nsalidaDeDato = nsalidaDeDato | (((paqueteDato14 & 0x0000FF00)>>8)
352 & 0x000000FF);
353 return nsalidaDeDato;
354 }
355 // *****************************************************************************
356 // Delay 1 sec
357 // *****************************************************************************
358
359 int C2_DATA(int adqCH_Temp24bit){
360 int result;
361 adqCH_Temp24bit = adqCH_Temp24bit & 0x00FFFFFF; // a partir de aquí se
362 //traza en una línea recta,
363 //haciendo complemento a 2.
364 if(adqCH_Temp24bit > 8388607){ // 8388608 (decimal) = 0x800000 (HEX)
365 adqCH_Temp24bit = ~adqCH_Temp24bit;
366 adqCH_Temp24bit = adqCH_Temp24bit + 1;
367 adqCH_Temp24bit = adqCH_Temp24bit & 0x00FFFFFF;
368 adqCH_Temp24bit = 8388608 - adqCH_Temp24bit ;
369 }else{
370 adqCH_Temp24bit = 8388608 + adqCH_Temp24bit ;
371 }
372
373 result=adqCH_Temp24bit;
374
375 return result;
376
377
378 }
379
380 void waitSEC(WORD delay){
381 unsigned int int_status;
382 delay=delay*1000; //Esto es porque es diseñado para milisegundos
383 while( delay-- )
384 {
385 int_status = INTDisableInterrupts();
386 OpenCoreTimer(GetSystemClock() / 2000);
387 INTRestoreInterrupts(int_status);
388 mCTClearIntFlag();
389 while( !mCTGetIntFlag() );
390 }
391 mCTClearIntFlag();
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…183
392 }
393
394
395
396 /*
397 // 16 12 5
398 // this is the CCITT CRC 16 polynomial X + X + X + 1.
399 // This works out to be 0x1021, but the way the algorithm works
400 // lets us use 0x8408 (the reverse of the bit pattern). The high
401 // bit is always assumed to be set, thus we only use 16 bits to
402 // represent the 17 bit value.
403 */
404
405 unsigned short crc16(const char *data_p, unsigned short length)
406 {
407 unsigned int i1,i2;
408 unsigned short data;
409 unsigned short crctmp = 0x0000;
410
411 // if (length == 0) return (crctmp);
412
413 for(i1=0; i1 < length; i1++){
414 data = data_p[i1];
415 crctmp = crctmp ^ (data<<8);
416 for (i2=0; i2 < 8; i2++){
417 if (crctmp & 0x8000) crctmp = (crctmp << 1) ^ POLY;
418 else crctmp <<= 1;
419
420 crctmp= crctmp & 0xFFFF;
421 }
422 }
423
424 return (crctmp);
425 }
426
427
428 void complete_trama(int sel){
429
430
431 char v1, v2;
432
433 char header[3]={0,0,1};
434
435 unsigned short a=0;
436
437 memcpy((void*) (&(send_samples[0])),(const void*)
438 (&(header[0])), sizeof(header));
439 memcpy((void*) (&(send_samples[3])),(const void*)
440 (&(incomming_samples_CHN1[0])), sizeof(incomming_samples_CHN1));
441 memcpy((void*) (&(send_samples[1003])),(const void*)
442 (&(incomming_samples_CHN2[0])), sizeof(incomming_samples_CHN1));
443 memcpy((void*) (&(send_samples[2003])),(const void*)
444 (&(incomming_samples_CHN3[0])), sizeof(incomming_samples_CHN1));
445 memcpy((void*) (&(send_samples[3003])),(const void*)
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…184
446 (&(incomming_samples_CHN4[0])), sizeof(incomming_samples_CHN1));
447 memcpy((void*) (&(send_samples[4003])),(const void*)
448 (&(incomming_samples_CHN5[0])), sizeof(incomming_samples_CHN1));
449 memcpy((void*) (&(send_samples[5003])),(const void*)
450 (&(incomming_samples_CHN6[0])), sizeof(incomming_samples_CHN1));
451 memcpy((void*) (&(send_samples[6003])),(const void*)
452 (&(incomming_samples_CHN7[0])), sizeof(incomming_samples_CHN1));
453 memcpy((void*) (&(send_samples[7003])),(const void*)
454 (&(incomming_samples_CHN8[0])), sizeof(incomming_samples_CHN1));
455 memcpy((void*) (&(send_samples[8003])),(const void*)
456 (&(SEND_LEADOFF)), sizeof(SEND_LEADOFF));
457
458 a=crc16(send_samples,sizeof(send_samples));
459 v1=(a>>8) & 0xff;
460 v2= a & 255;
461
462 memcpy((void*) (&(crc16_samples[0])),(const void*)
463 (&(send_samples[0])), sizeof(send_samples));
464 memcpy((void*) (&(crc16_samples[8005])),(const void*) (&(v1)), sizeof(v1));
465 memcpy((void*) (&(crc16_samples[8006])),(const void*) (&(v2)), sizeof(v2));
466
467 }
Anexo 4: Código principal implementado en MATLAB®
function varargout = ECG_INTERFACE(varargin) % ECG_INTERFACE MATLAB code for ECG_INTERFACE.fig % ECG_INTERFACE, by itself, creates a new ECG_INTERFACE or raises
the existing % singleton*. % % H = ECG_INTERFACE returns the handle to a new ECG_INTERFACE or the
handle to % the existing singleton*. % % ECG_INTERFACE('CALLBACK',hObject,eventData,handles,...) calls the
local % function named CALLBACK in ECG_INTERFACE.M with the given input
arguments. % % ECG_INTERFACE('Property','Value',...) creates a new ECG_INTERFACE
or raises the % existing singleton*. Starting from the left, property value pairs
are % applied to the GUI before ECG_INTERFACE_OpeningFcn gets called.
An
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…185
% unrecognized property name or invalid value makes property
application % stop. All inputs are passed to ECG_INTERFACE_OpeningFcn via
varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help ECG_INTERFACE
% Last Modified by GUIDE v2.5 22-Jun-2017 11:25:38
% Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @ECG_INTERFACE_OpeningFcn, ... 'gui_OutputFcn', @ECG_INTERFACE_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT
% --- Executes just before ECG_INTERFACE is made visible. function ECG_INTERFACE_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to ECG_INTERFACE (see VARARGIN)
serialPorts = instrhwinfo('serial'); if (isempty(serialPorts.SerialPorts)) error('Check the connection of the UART->USB Port.'); end nPorts = length(serialPorts.SerialPorts); set(handles.portList, 'String', ... [{'Select a port'} ; serialPorts.SerialPorts ]); set(handles.portList, 'Value', 2);
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…186
set(handles.start, 'Enable', 'Off'); set(handles.stop, 'Enable', 'Off');
% Choose default command line output for ECG_INTERFACE handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% UIWAIT makes ECG_INTERFACE wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function varargout = ECG_INTERFACE_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output;
% --- Executes on button press in start. function start_Callback(~, ~, handles) % hObject handle to start (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
set(handles.connectButton, 'Enable', 'Off'); set(handles.start, 'Enable', 'Off');
global myVariable1;
rep=1; fclose(handles.serConn); bandr=0; contador=1;
%Ciclo para ir realizando la grafica paso a paso Fs=250; %FILTRO PASO ALTO [b1,a1] = butter(2,1/(Fs/2),'high'); %%//Filtro paso alto de orden 10,
corte en 30Hz, Fs=256Hz %FILTRO RECHAZA BANDA [c1,d1] = butter(10,[58 62]/(Fs/2),'stop'); %% Filtro rechaza banda, de
orden 1, con freceuncia de corte inferior de 49 Hz y superior de 51Hz
(Elimina componente de 50Hz) %FILTRO PASO BAJO
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…187
[b,a] = cheby2(10,60,100/(Fs/2)); %%//Filtro paso bajo de orden 10, con
60db de rizado y corte en 110Hz, Fs=256Hz
myVariable1 = 0;
while myVariable1 ~= 1; if (rep==1) if(bandr==1) %cierra el puerto utilizado fclose(handles.serConn); waitforbuttonpress string1 = sprintf(''); set(handles.comm_status, 'String', string1); end fopen(handles.serConn); figure(1) rep=0; end
valorADC1 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC2 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC3 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC4 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC5 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC6 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC7 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC8 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC9 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC10 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC11 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC12 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC13 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC14 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC15 = fread(handles.serConn,512); % or just myData =
fread(s,16); valorADC16 = fread(handles.serConn,327); % or just myData =
fread(s,16);
trama=vertcat(valorADC1,valorADC2,valorADC3,valorADC4,valorADC5,valorADC6
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…188
,valorADC7,valorADC8,valorADC9,valorADC10,valorADC11,valorADC12,valorADC1
3,valorADC14,valorADC15,valorADC16);
crc=Compute_CRC(trama); leadoff=trama(8004:8005); header= trama(1:3); rh=[0;0;1];
v1=bitshift(bitand(leadoff(2),128),-7); v2=bitshift(bitand(leadoff(2),8),-3); v3=bitshift(bitand(leadoff(2),16),-4); v4=bitshift(bitand(leadoff(2),32),-5); v5=bitshift(bitand(leadoff(2),64),-6); v6=bitand(leadoff(2),1); ll=bitshift(bitand(leadoff(2),4),-2); ra=bitshift(bitand(leadoff(1),2),-1); la=bitshift(bitand(leadoff(2),2),-1);
if v1==1 set(handles.v1,'BackgroundColor','r') else set(handles.v1,'BackgroundColor','g') end
if v2==1 set(handles.v2,'BackgroundColor','r') else set(handles.v2,'BackgroundColor','g') end
if v3==1 set(handles.v3,'BackgroundColor','r') else set(handles.v3,'BackgroundColor','g') end
if v4==1 set(handles.v4,'BackgroundColor','r') else set(handles.v4,'BackgroundColor','g') end
if v5==1 set(handles.v5,'BackgroundColor','r') else set(handles.v5,'BackgroundColor','g') end
if v6==1 set(handles.v6,'BackgroundColor','r') else set(handles.v6,'BackgroundColor','g') end
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…189
if ll==1 set(handles.ll,'BackgroundColor','r') else set(handles.ll,'BackgroundColor','g') end
if ra==1 set(handles.ra,'BackgroundColor','r') else set(handles.ra,'BackgroundColor','g') end
if la==1 set(handles.la,'BackgroundColor','r') else set(handles.la,'BackgroundColor','g') end
if (header~=rh) string1 = sprintf('Bad HEADER. Press click!'); set(handles.comm_status, 'String', string1); rep=1; bandr=1; end
if (crc~=0) string1 = sprintf('Bad CRC. Press click on the "Figure 1"
screen!'); set(handles.comm_status, 'String', string1); color='r'; rep=1; bandr=1; else color='b'; end
valorADC_CH1=trama(4:1003); valorADC_CH2=trama(1004:2003); valorADC_CH3=trama(2004:3003); valorADC_CH4=trama(3004:4003); valorADC_CH5=trama(4004:5003); valorADC_CH6=trama(5004:6003); valorADC_CH7=trama(6004:7003); valorADC_CH8=trama(7004:8003);
i=1; while i <= 1000 bytepack=
bitor((bitshift(int32(valorADC_CH1(i+2)),16)),(bitshift(int32(valorADC_CH
1(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH1(i))); salida1(contador) = ((double(bytepack))-8388608)./((2^23)-1);
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…190
bytepack=
bitor((bitshift(int32(valorADC_CH2(i+2)),16)),(bitshift(int32(valorADC_CH
2(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH2(i))); salida2(contador) = ((double(bytepack))-8388608)./((2^23)-1);
bytepack=
bitor((bitshift(int32(valorADC_CH3(i+2)),16)),(bitshift(int32(valorADC_CH
3(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH3(i))); salida3(contador) = ((double(bytepack))-8388608)./((2^23)-1);
bytepack=
bitor((bitshift(int32(valorADC_CH4(i+2)),16)),(bitshift(int32(valorADC_CH
4(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH4(i))); salida4(contador) = ((double(bytepack))-8388608)./((2^23)-1);
bytepack=
bitor((bitshift(int32(valorADC_CH5(i+2)),16)),(bitshift(int32(valorADC_CH
5(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH5(i))); salida5(contador) = ((double(bytepack))-8388608)./((2^23)-1);
bytepack=
bitor((bitshift(int32(valorADC_CH6(i+2)),16)),(bitshift(int32(valorADC_CH
6(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH6(i))); salida6(contador) = ((double(bytepack))-8388608)./((2^23)-1);
bytepack=
bitor((bitshift(int32(valorADC_CH7(i+2)),16)),(bitshift(int32(valorADC_CH
7(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH7(i))); salida7(contador) = ((double(bytepack))-8388608)./((2^23)-1);
bytepack=
bitor((bitshift(int32(valorADC_CH8(i+2)),16)),(bitshift(int32(valorADC_CH
8(i+1)),8))); bytepack=bitor(bytepack,int32(valorADC_CH8(i))); salida8(contador) = ((double(bytepack))-8388608)./((2^23)-1);
i=i+4; contador=contador+1; end
X_FILa1=filtfilt(b1,a1,salida1); X_FILb1=filtfilt(b,a,X_FILa1); X_FILr1=filtfilt(c1,d1,X_FILb1);
X_FILa2=filtfilt(b1,a1,salida2);
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…191
X_FILb2=filtfilt(b,a,X_FILa2); X_FILr2=filtfilt(c1,d1,X_FILb2);
X_FILa3=filtfilt(b1,a1,salida3); X_FILb3=filtfilt(b,a,X_FILa3); X_FILr3=filtfilt(c1,d1,X_FILb3);
X_FILa4=filtfilt(b1,a1,salida4); X_FILb4=filtfilt(b,a,X_FILa4); X_FILr4=filtfilt(c1,d1,X_FILb4);
X_FILa5=filtfilt(b1,a1,salida5); X_FILb5=filtfilt(b,a,X_FILa5); X_FILr5=filtfilt(c1,d1,X_FILb5);
X_FILa6=filtfilt(b1,a1,salida6); X_FILb6=filtfilt(b,a,X_FILa6); X_FILr6=filtfilt(c1,d1,X_FILb6);
X_FILa7=filtfilt(b1,a1,salida7); X_FILb7=filtfilt(b,a,X_FILa7); X_FILr7=filtfilt(c1,d1,X_FILb7);
X_FILa8=filtfilt(b1,a1,salida8); X_FILb8=filtfilt(b,a,X_FILa8); X_FILr8=filtfilt(c1,d1,X_FILb8);
for x=1:length(X_FILr2) LEAD3(x)=X_FILr2(x)-X_FILr1(x); aVR(x)=-(X_FILr2(x)+X_FILr1(x))/2; aVL(x)=X_FILr1(x)-(X_FILr2(x)/2); aVF(x)=X_FILr2(x)-(X_FILr1(x)/2); end
t1=0:1/Fs:(length(X_FILr1)-1)/Fs; t2=0:1/Fs:(length(X_FILr2)-1)/Fs; t3=0:1/Fs:(length(X_FILr3)-1)/Fs; t4=0:1/Fs:(length(X_FILr4)-1)/Fs; t5=0:1/Fs:(length(X_FILr5)-1)/Fs; t6=0:1/Fs:(length(X_FILr6)-1)/Fs; t7=0:1/Fs:(length(X_FILr7)-1)/Fs; t8=0:1/Fs:(length(X_FILr8)-1)/Fs;
clf('reset')
figure(1) subplot(3,4,1); plot(t2,X_FILr2,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('LEAD I');
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…192
figure(1) subplot(3,4,5) plot(t3,X_FILr3,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('LEAD II');
figure(1) subplot(3,4,9) plot(t2,LEAD3,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('LEAD III');
figure(1) subplot(3,4,2) plot(t2,aVR,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('aVR');
figure(1) subplot(3,4,6) plot(t2,aVL,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('aVL');
figure(1) subplot(3,4,10) plot(t2,aVF,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('aVF');
figure(1) subplot(3,4,3) plot(t8,X_FILr8,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('V1');
figure(1) subplot(3,4,7) plot(t4,X_FILr4,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('V2');
figure(1) subplot(3,4,11) plot(t5,X_FILr5,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…193
xlim([0 6]); %Limites del eje x title('V3');
figure(1) subplot(3,4,4) plot(t6,X_FILr6,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('V4');
figure(1) subplot(3,4,8) plot(t7,X_FILr7,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('V5');
figure(1) subplot(3,4,12) plot(t1,X_FILr1,color); %Grafica el voltaje ylim([-0.007 0.007]); %Limites del eje y xlim([0 6]); %Limites del eje x title('V6');
drawnow
if(contador>=1500) contador=1; i=1; end end
% --- Executes on button press in stop. function stop_Callback(hObject, eventdata, handles) % hObject handle to stop (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) set(handles.connectButton, 'Enable', 'On'); set(handles.start, 'Enable', 'On'); global myVariable1; myVariable1 = 1;
% --- Executes on button press in reset. function reset_Callback(hObject, eventdata, handles) % hObject handle to reset (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
function comm_status_Callback(hObject, eventdata, handles) % hObject handle to comm_status (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…194
% Hints: get(hObject,'String') returns contents of comm_status as text % str2double(get(hObject,'String')) returns contents of
comm_status as a double
% --- Executes during object creation, after setting all properties. function comm_status_CreateFcn(hObject, eventdata, handles) % hObject handle to comm_status (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes on selection change in portList. function portList_Callback(hObject, eventdata, handles) % hObject handle to portList (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns portList
contents as cell array % contents{get(hObject,'Value')} returns selected item from
portList
% --- Executes during object creation, after setting all properties. function portList_CreateFcn(hObject, eventdata, handles) % hObject handle to portList (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
% Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes on button press in connectButton. function connectButton_Callback(hObject, eventdata, handles) % hObject handle to connectButton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…195
% handles structure with handles and user data (see GUIDATA) delete(instrfindall); if strcmp(get(hObject,'String'),'Connect') % currently disconnected serPortn = get(handles.portList, 'Value'); if serPortn == 1 errordlg('Select valid COM port'); else serList = get(handles.portList,'String'); serPort = serList{serPortn}; serConn = serial(serPort, 'TimeOut', 1, ... 'BaudRate', str2num(get(handles.baudRateText, 'String')));
try fopen(serConn); handles.serConn = serConn;
% enable Tx text field and Rx button set(handles.start, 'Enable', 'On'); set(handles.stop, 'Enable', 'On');
set(hObject, 'String','Disconnect') catch e errordlg(e.message); end
end else set(handles.start, 'Enable', 'Off'); set(handles.stop, 'Enable', 'Off');
set(hObject, 'String','Connect') fclose(handles.serConn); end guidata(hObject, handles);
function baudRateText_Callback(hObject, eventdata, handles) % hObject handle to baudRateText (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of baudRateText as text % str2double(get(hObject,'String')) returns contents of
baudRateText as a double
% --- Executes during object creation, after setting all properties. function baudRateText_CreateFcn(hObject, eventdata, handles) % hObject handle to baudRateText (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…196
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
% --- Executes on selection change in history_box. function history_box_Callback(hObject, eventdata, handles) % hObject handle to history_box (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns history_box
contents as cell array % contents{get(hObject,'Value')} returns selected item from
history_box
% --- Executes during object creation, after setting all properties. function history_box_CreateFcn(hObject, eventdata, handles) % hObject handle to history_box (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns
called
% Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end
Anexo 5: Función de anexo 4.
function crc_computed = Compute_CRC(vInputData)
nBytes = length(vInputData); polynomial = 4129;
crctmp=0;
for iBytes=1:nBytes crctmp=bitxor(crctmp,bitshift(vInputData(iBytes),8)); for ibits=1:8 if bitand(crctmp,32768) crctmp=bitshift(crctmp,1); crctmp=bitxor(crctmp,polynomial); else
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…197
crctmp=bitshift(crctmp,1); end crctmp=bitand(crctmp,65535); end end
crc_computed=crctmp;
ANEXO 6: Opiniones y recomendaciones del medico Edgar H. Domínguez.
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…198
SISTEMA PORTABLE PARA LA ADQUISICIÓN Y PROCESAMIENTO DE SEÑALES ECG, CON…199