OXÍMETRO DIGITAL

From Qi-Hardware
Jump to: navigation, search

UNIVERSIDAD NACIONAL DE COLOMBIA.

ELECTRÓNICA DIGITAL II. 
SERGIO JULIÁN JIMÉNEZ.  1
CAMILO ANDRÉS RUIZ.     1
WISTON ANDRÉS ÑUSTES    1

Contents

[edit] Calificación

Porcentaje Presentación 20% Informe 30% Funcionamiento 50%
1 Entrega 10% 0.5 0.5 0.5
2 Entrega 30% 1.7 1.7 1.7
3 Entrega 20% 3 3.5 4
4 Entrega 40% 5 5 5


[edit] OXÍMETRO DIGITAL

El dispositivo consiste en un medidor del nivel de saturación de oxígeno en la sangre. cuenta con una interfaz gráfica que muestra el valor en una pantalla LCD, 2 botones: uno para encender y apagar el sistema y otro para visualizar el menor dato que haya registrado el dispositivo y resetear la memoria(luego de tenerlo presionado por 3 segundos).

OXÍMETRO DIGITAL

[edit] Teoría de Oximetría

Se busca calcular el nivel de saturación de oxígeno en la sangre SaO2 por medio de periféricos y visualizar el dato cada 5 segundos. La técnica para la toma de datos se basa en la absorbancia y transmitancia de luz que tiene el dedo en su extremo. Para esto, se hace incidir luz monocromática con ciertas longitudes de onda (660 nm y 940 nm) y frecuencias en el extremo del dedo de mano, donde la intensidad de luz que incide es diferente de la que sale por el otro lado del dedo, por lo que se habla de la transmitancia como la relación que existe entre la Intensidad de Luz Incidente (Io) y la intensidad de luz que sale del dedo (I): T=I/Io La transmitancia y la absorbancia son inversos, por lo que la absorbancia (A) se define en dB como: A=-log(I/Io) Para la medición se toman en cuenta la absorción de la hemoglobina oxigenada (O2Hb), que absorbe muy bien la luz infrarroja de 940 nm y la hemoglobina desoxigenada (RHb), que absorbe muy bien la luz roja de 660 nm. Es necesario relacionar los valores obtenidos para cada uno de los leds mediante el nivel de saturación funcional: SaO2func=O2 Hb*100%/( O2 Hb+RHb). Es de esperarse, que a medida que la luz viaja por el dedo haya una mayor atenuación de intensidad. En realidad esta disminución se modela mediante una relación exponencial de la siguiente manera: I=Io℮^(-ԑ(λ)*c*d) Donde ԑ(λ) es el coeficiente de extinción del dedo a la longitud de onda correspondiente, c es la concentración de la sangre (constante) y d es un patrón óptico.

[edit] Funcionamiento

Para la toma de datos se utilizará un sensor Nellcor, el cual cuenta con dos leds emisores (que haremos trabajar con las longitudes de ondas especificadas anteriormente) y un fotodiodo receptor. Para hacer una correcta medición, se hace necesario que los 2 diodos no trabajen a la vez, por lo que mediante la FPGA, generaremos señales cuadradas de operación para ambos diodos. El ciclo útil de las señales será muy reducido, con el fin de que en el intervalo inactivo de un Led, el otro se active y además de eso, se permita tener un tiempo en que ninguno de los dos encienda (para que no exista interferencia en las señales). En la figura se puede observar la disposición de los diodos, donde L1 es el led infrarrojo y L2 es el diodo rojo. Como vemos el dispositivo encierra al dedo en su totalidad, con el fin de que no se filtren señales externas que puedan alterar la medición.

Oximeter.jpg

Dado que es más sencillo trabajar con tensiones que con corrientes, implementamos un convertidor de corriente a voltaje, posteriormente hacemos un filtrado de la señal entre los 0.5 Hz y los 5 Hz mediante un filtro pasabandas y finalmente amplificamos la señal entre 0 y 5 V para introducirla a la tarjeta madre.

[edit] Especificaciones del Diseño

[edit] Físicas

Se espera que nuestro dispositivo tendra un tamaño de 15 cm * 10 cm * 5cm

[edit] Temporales

Después de encendido, el dispositivo arrojará el primer resultado en aproximadamente cinco(5) segundos, luego de esto se actualizara la medicion en ese mismo intervalo de tiempo.

[edit] Funcionales

Nuesto dispositivo contará con un sensor de oximetría que se pondrá en el dedo del paciente, este estará conectado a una unidad que se encargará de analizar y calcular el valor exacto del nivel de saturación, para luego ser mostrado en el LCD. Para hacer menos vulnerable la medición, se implementará un filtro pasabandas en la entrada del sensor, con el fin de que solamente pasen las señales deseadas.

Como se mencionó anteriormente, el oxímetro contara con 2 botones:

1. Botón 1: prende y apaga el sistema. Para encenderlo, basta oprimir el botón. Para apagarlo, debe pulsarse durante aproximadamente tres segundos.

2. Botón 2: muestra el menor dato que se haya visualizado en pantalla. Si se deja presionado por aproximadamente 5 segundos, dicho valor será reiniciado



[edit] Eléctricas

Nuestro dispositivo se alimentara por una fuente externa

[edit] Particionamiento

[edit] In/Out

diagrama de entradas y salidas del oxímetro

[edit] Tareas

[edit] Hardware

1. Conversor análogo digital

2. Conversor corriente-voltaje

3. Toma de datos del sensor

4. Implementación de botones

5. Encendido y apagado del dispositivo

6. Muestra de valores en la pantalla

7. Filtros que eliminen el nivel DC (generado por el usuario en el grosor de su dedo)

8. Muestreo de la señal mediante un sample and hold

9. Obtención de datos del sensor

10. Almacenamiento en memoria del menor dato

11. Sistema temporizador para los leds (no pueden operar los dos a la vez)

12. Apagado del dispositivo

13. Almacenar y visualizar el dato

14. PWM que controle la intensidad de luz de los leds


[edit] Software

1. Procesamiento de la señal para el cálculo del nivel de saturación

2. Máquina de control que verifique concordancia en los datos. Si no hay concordancia, la máquina devuelve error.

[edit] Diagrama de Bloques

DIAGRAMA DE BLOQUES GENERAL
DIAGRAMA DE BLOQUES-CONTROL PERIFÉRICOS


[edit] Memory Map

memory map oxímetro

[edit] Periféricos

Para el desarrollo del oxímetro, preveemos la implementación de 5 periféricos que son: Convertidor análogo-digital, GPIO, Procesamiento de señal, PWM y una LCD. A continuación, explicaremos los registros que pertenecen a cada periféricos y posteriormente mostraremos el mapa de memoria:

1. CONVERSOR ANALÓGICO-DIGITAL: se le asignará la dirección de memoria 0xF0050000. Tenemos los siguientes registros:

STATUS(RO):

--ready: indica si terminó o no terminó, es una posible fuente de interrupciones ya que es un flag

CONTROL(WO):

--canalreg: indica cual canal se está ejecutando SALIDA(RO):

datoc: dato de salida del conversor


Hacemos las siguientes asignaciones en memoria:

Dirección Tipo Nombre
0x000 STATUS ready
0x001 DO datoc
0x010 CTRL canalreg

Este periférico ocupa 3 direcciones de memoria.

DIAGRAMA DE BLOQUES DEL ADC
DIAGRAMA DE ESTADOS DEL ADC

En el siguiente link se puede encontrar un video de funcionamiento del ADC:

http://www.youtube.com/watch?v=ZMT6lo-dztE

2. PROCESAMIENTO DE LA SEÑAL:en este periférico se recibe el valor entregado por el ADC y se realizan operaciones matemáticas para obtener el valor de saturación de oxígeno(SpO2). A este periférico le asignamos la dirección de memoria 0xF0030100. Este periférico debe tomar las señales del led rojo y del led infrarrojo provenientes del ADC (datored y datoifr) y realizar la siguiente función matemática:


Funcion.png

"DATA_IN: " datos provenientes del conversor ADC

      -[9:0]datored: valor de tension generado por el led rojo
      -[9:0]datoifr: valor de tension generado por el led infrarrojo

STATUS(RO):

--ready: indica si se ha terminado de hacer el procesamiento de la señal

CONTROL(WO):

--enreg: señal de start que le dice cuando debe comenzar a procesar

SALIDA(RO):

--[31:0]quotient: dato de salida (porcentaje SpO2)

Asignando entonces estos registros en memoria:

Dirección Tipo Nombre
0x000 DI [9:0] datored
0x001 DI [9:0] datoifr
0x010 CTRL enreg
0x011 DO [31:0] quotient
0x100 STATUS ready


Este periférico ocupa 5 direcciones de memoria. A continuación vemos el diagrama de bloques, su diagrama de estados y una simulación del periférico:


DIAGRAMA DE BLOQUES DEL PROCESAMIENTO DE LA SEÑAL
DIAGRAMA DE ESTADOS DEL PROCESAMIENTO DE LA SEÑAL
SIMULACION DEL PROCESAMIENTO DE LA SEÑAL

En la simulación asumimos que los valores que envia el ADC a datored y datoifr son respectivamente 6 y 29, por lo que al implementar la función matemática presentada al inicio del procesamiento, debemos obtener un valor de 82, el cual vemos en quotient, que corresponde al valor del porcentaje de saturación.

3. PWM

STATUS(RO):

--enreg: registro de habilitación que indica cuando debe comenzar a encender los LEDs

SALIDA(RO):

--d1: señal del LED rojo --d2: señal del LED infrarrojo

Realizando la asignación de direcciones en memoria:

Dirección Nombre Formato
0x00 DO [d1 , d2]
0x01 STATUS enreg


Este periférico ocupa 2 direcciones de memoria. A continuación se encuentran el diagrama de bloques y el diagrama de estados del periférico:


DIAGRAMA DE BLOQUES DEL PWM
DIAGRAMA DE ESTADOS DEL PWM
SIMULACIÓN PWM

4. PANTALLA LCD

DI(RO):

--MENSAJE_0 a MENSAJE_7: caracteres que entran a la pantalla


Asignando los registros en memoria:

Dirección Tipo Nombre
0x0000 DO [0:31]msjlcd
0x0001 DO [32:63]msjlcd
0x0010 DO [64:95]msjlcd
0x0011 DO [96:127]msjlcd
0x0100 DO [128:159]msjlcd
0x0101 DO [160:191]msjlcd
0x0110 DO [192:223]msjlcd
0x0111 DO [224:255]msjlcd
0x01 STATUS enreg

Este periférico ocupa ocho direcciones de memoria. puesto que cada direccion solo alcanza para 4 caracteres y usamos 32 caracteres en el lcd, este modulo constantemente esta poniendo en pantalla el contenido del la entrada "mensaje", estos registros son de solo escritura.

A continuación se muestra el módulo en funcionamiento, siendo éste probado en una FPGA NEXYS 2

prueba de funcionamiento LCD

En la siguiente imagen mostramos una prueba de funcionamiento del LCD en la tarjeta hija, conectada esta a su vez a la tarjeta madre:

prueba de funcionamiento LCD en tarjeta hija

El diagrama de bloques del periférico:

Diagrama de Bloques LCD

5. GPIO

En este módulo controlaremos los 2 botones del dispositivo, que se encargan del encendido y de la visualización del dato. A continuación se encuentran el diagrama de bloques y de estado del periférico:

STATUS(RO):

--led: registro que prende y apaga el led, indica si el oxímetro se encuentra encendido o apagado

DO(WO): -- bot1|deb1: si el botón o el debouncer se encuentran en uno, se toma que el botón sigue presionado -- bot2|deb2

Dirección Tipo Nombre
0x00 DO [bot1 or deb1 ,bot2 or deb2 ]
0x01 STATUS led
Diagrama de Bloques GPIO
Diagrama de Estados GPIO

A continuación se presenta una simulación de la interrupción de la GPIO, que es el único de nuestros periféricos que realiza interrupciones. Para esto, tenemos gpio_intr[1:0], el cual es de dos bits para poder atender las interrupciones de cada uno de los botones del dispositivo. El botón 2 es para la posición 0 y el botón 1 es para la posición 1, es por esto que cuando tenemos un paso de 1 a 0 en el botón 1 se genera una interrupción. Se buscaba que al aplicar un reset al sistema, se generara una interrupción que encendiera un LED, posteriormente cuando se dejara de presionar el botón 1, el LED debería apagarse, tal como se puede ver en la simulación:

Simulación interrupciones GPIO

[edit] Diagrama de Flujo

DIAGRAMA DE FLUJO OXÍMETRO


[edit] Esquemático Y PCB

[edit] Análisis de Costos del Dispositivo

CostoOx.png


[edit] Cronograma de actividades

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export