Monografia ECG Ampop
description
Transcript of Monografia ECG Ampop
CENTRO UNIVERSITÁRIO FEEVALE
MARTIN NÄHR
AQUISIÇÃO DE ELETROCARDIOGRAMA COM PROCESSADOR DIGITAL DE SINAIS
Novo Hamburgo, dezembro de 2007.
MARTIN NÄHR
AQUISIÇÃO DE ELETROCARDIOGRAMA COM PROCESSADOR DIGITAL DE SINAIS
CENTRO UNIVERSITÁRIO FEEVALE Intituto de Ciências Exatas e Tecnológicas
Bacharelado em Engenharia Eletrônica Trabalho de Conclusão de Curso
Professor Orientador: Delfim Luis Torok
Novo Hamburgo, dezembro de 2007.
Dedico este trabalho a minha amada esposa Caroline.
5
AGRADECIMENTO
Neste momento de conclusão de curso e entrega do trabalho final, gostaria de
agradecer as pessoas que me apoiaram e foram fundamentais para a realização deste trabalho.
Ao professor Delfim Torok, meu agradecimento pelo apoio e direcionamento para a
realização deste trabalho. Pessoa que demonstrou coragem e dedicação mesmo em momentos
difíceis.
À Sonia Rezende Nähr, meu agradecimento pelo investimento e confiança sem os
quais não seria possível realizar a minha formação.
Aos meus pais, pelo carinho e dedicação destinados à minha criação.
Aos professores e colegas da Feevale, pelas trocas de vivência e conhecimentos
adquiridos durante o período de formação.
A Deus por ter conseguido chegar até aqui.
6
RESUMO
Este trabalho visa o desenvolvimento e implementação de um protótipo para
aquisição de eletrocardiograma com processador digital de sinais. Este dispositivo tem a
função de captar o sinal biomédico do tipo ECG através de eletrodos colados á pele, processar
o sinal e enviar para um computador pessoal. Os dados poderão ser visualizados em
computador pessoal utilizando softwares específicos como ferramentas de apoio abordadas no
projeto.
A aquisição do sinal representa a captação de biopotenciais provenientes da atividade
elétrica cardíaca. O sinal captado, com o uso de eletrodos, é amplificado e tratado com a
utilização de amplificador de instrumentação e filtros analógicos. Na saída do circuito de
aquisição, o sinal pré-tratado analogicamente é digitalizado com um Processador Digital de
Sinais (DSP) dsPIC30F2010 da empresa Microchip1, que sendo programado em Linguagem
C através do software de desenvolvimento MPLAB versão 7.60. O sinal digitalizado é
processado no DSP e então transmitido de forma serial para o computador.
1 Microchip Tecnologia Inc. é uma empresa, sediada em Chandler, Arizona. Fábrica de semicondutores, microcontroladores e dispositivos analógicos, para o desenvolvimento de produtos de baixo custo para diversas aplicações.
7
ABSTRACT
This project focuses the development and implementation of an electrocardiogram
acquisition prototype using a digital signals processor. This device has the task of capturing
the biomedical signal of the type ECG through electrodes glued to skin, to process and send
the signal to a personal computer. The data will be visualized and saved on a personal
computer using a tools of specific software also mentioned on this project.
The acquisition of the signal is the capture of biopotetials from cardiac electrical
activity. The signal received, with the use of electrodes, is amplified and processed with the
use of the instrumentation amplifier and analog filters. The output of the circuit of acquisition,
the signal pre-treated with analog form is digitalized with a Digital Signal Processor (DSP)
DsPIC30F2010 Company’s Microchip, which is programmed in C language through software
development MPLAB version 7.60. The digital signal is processed in the DSP and then sent
to a serial port for the computer.
8
LISTA DE FIGURAS
Figura 1.1 – Anatomia Cardíaca...............................................................................................17 Figura 1.2 – O nodo sinusal e o sistema de Purkinje................................................................18 Figura 1.3 – Ação do nodo sinusal versus fibra muscular ventricular. ....................................19 Figura 1.4 – Gráfico de um ECG Normal. ...............................................................................20 Figura 1.5 – Despolarização e repolarização do coração. ........................................................21 Figura 1.6 – Impressão padrão do ECG. ..................................................................................22 Figura 1.7 – Fluxo da corrente no tórax. ..................................................................................23 Figura 1.8 – Triangulo de Einthoven........................................................................................25 Figura 1.9 – Circuito Equivalente do AMPOP Ideal................................................................26 Figura 1.10 – Amplificador Inversor........................................................................................27 Figura 1.11 – Amplificador Operacional em uma configuração não-inversora. ......................28 Figura 1.12 – Circuito amplificador diferencial. ......................................................................29 Figura 1.13 – Amplificador de instrumentação. .......................................................................30 Figura 1.14 – Resposta em freqüência de quatro principais filtros. .........................................31 Figura 1.15 – Filtro Passa Baixo de primeira ordem na configuração inversora. ....................32 Figura 1.16 – Filtro passa-altas na configuração inversora. .....................................................33 Figura 1.17 – Diagrama de pinos do dsPic30F2010.................................................................35 Figura 1.18 – Circuito de entrada do clock para o dsPic30F2010............................................35 Figura 1.19 – Circuito de controle das portas I/O. ...................................................................40 Figura 1.20 – Diagrama de blocos do Timer tipo 1..................................................................41 Figura 1.21 – Comunicação Serial. ..........................................................................................42 Figura 1.22 – Circuito interno para transmissão dos dados pelo módulo UART.....................44 Figura 1.23 – Circuito interno para recepção dos dados pelo módulo UART. ........................45 Figura 1.24 – Circuito interno do módulo de conversão A/D. .................................................48 Figura 1.25 – Programador e Depurador MPLAB V7.6. .........................................................49 Figura 1.26 – Kit gravador e depurador in circuit ICD2BR. .....................................................51 Figura 2.1 – Diagrama em Blocos do Protótipo. ......................................................................52 Figura 2.2 – Eletrodo para ECG da 3M....................................................................................53 Figura 2.3 – Cabo usado para aquisição de ECG. ....................................................................54 Figura 2.4 – Circuito interno do INA118 .................................................................................56 Figura 2.5 – Circuito do amplificador de instrumentação. .......................................................57 Figura 2.6 – Filtro Passa-Altas. ................................................................................................58 Figura 2.7 – Diagrama de Bode da resposta do Filtro Passa-Altas. .........................................58 Figura 2.8 – Filtro Passa-Baixas...............................................................................................59 Figura 2.9 – Diagrama de Bode do Filtro Passa-Baixas...........................................................60 Figura 2.10 – Circuito de ajuste nível DC. ...............................................................................61
9
Figura 2.11 – Fluxograma da rotina principal do programa.....................................................63 Figura 3.1 – Onda ECG gerada com 5Vpp...............................................................................69 Figura 3.2 – Período de transmissão dos bits. ..........................................................................69 Figura 3.3 – Período da transmissão serial. ..............................................................................70 Figura 3.4 – Sinal de ECG real.................................................................................................70
10
LISTA DE TABELAS
Tabela 1 – Portas de entrada do dsPIC. ....................................................................................39
LISTA DE ABREVIATURAS E SIGLAS
AMPOP – Amplificador Operacional ADC – Analog-to-Digital Converter AMPOP – Amplificador Operacional BD – Braço Direito BE – Braço Esquerdo bps – Bits por segundo CC – Corrente Contínua CISC – Complex Instruction Set Computer CMR – Rejeição de Modo Comum CPU – Central Processing Unit dB – Decibel DSP – Digital Signal Processing ECG – Eletrocardiograma EMG – Eletromiografia fc – Freqüência de corte Hz – Hertz mm – milímetro mV – milivolt PE – Perna Esquerda RISC – Reduced Instruction Set Computer s – segundos sps – samples per second TAD – Período de Conversão A/D TI – Texas Instruments UART – Universal Asynchronous Receiver Transmitter V – Volt VB – Visual Basic
12
SUMÁRIO
LISTA DE FIGURAS...............................................................................................................8
INTRODUÇÃO ......................................................................................................................14
1 FUNDAMENTOS TEÓRICOS.....................................................................................16
Introdução.............................................................................................................................16 1.1 Coração.....................................................................................................................16
1.1.1 Excitação Rítmica do Coração .........................................................................18 1.1.2 Tensão Normal no Eletrocardiograma..............................................................19 1.1.3 Eletrocardiograma ............................................................................................20 1.1.4 Fluxo das correntes elétricas no coração ..........................................................22 1.1.5 Derivações eletrocardiográficas .......................................................................23
1.2 Amplificador Operacional ........................................................................................25 1.2.1 Representação de um Amplificador Operacional.............................................26 1.2.2 Configuração básica inversora..........................................................................27 1.2.3 Configuração básica não inversora...................................................................28 1.2.4 Amplificador de diferenças ..............................................................................29 1.2.5 Amplificador de Instrumentação ......................................................................29
1.3 Filtros Ativos ............................................................................................................30 1.3.1 Filtro Passa-Baixas de Primeira Ordem ...........................................................31 1.3.2 Filtro Passa-Altas de Primeira Ordem..............................................................32
1.4 Processador Digital de Sinais ...................................................................................33 1.4.1 Microcontrolador dsPIC30F2010.....................................................................34 1.4.2 Arquitetura da CPU ..........................................................................................36 1.4.3 Organização da Memória..................................................................................37 1.4.4 Interrupções ......................................................................................................38 1.4.5 Entradas e Saídas Digitais ................................................................................39 1.4.6 Timers...............................................................................................................40 1.4.7 Módulo UART..................................................................................................42 1.4.8 Módulo de Conversão A/D...............................................................................45
1.5 Ferramentas para Desenvolvimento e Depuração ....................................................48 1.5.1 Gravador e Depurador in Circuit ICD2BR.........................................................50
2 DESENVOLVIMENTO DO PROTÓTIPO.................................................................52
2.1 Eletrodos e cabos ......................................................................................................53 2.2 Etapa analógica.........................................................................................................54
2.2.1 Amplificador de instrumentação ......................................................................55 2.2.2 Desenvolvimento do Filtro Passa-Altas ...........................................................57 2.2.3 Desenvolvimento do Filtro Passa-Baixas .........................................................59 2.2.4 Ajuste de nível de tensão DC ...........................................................................60
2.3 Etapa digital..............................................................................................................61 2.3.1 Programação do dsPIC: ....................................................................................62
2.3.1.1 Rotina principal do programa .......................................................................62
13
2.3.1.2 Rotina principal e Looping Infinito ..............................................................63 2.3.1.3 Interrupção da UART ...................................................................................64 2.3.1.4 Interrupção ADC ..........................................................................................65 2.3.1.5 Interrupção do Timer 1 .................................................................................66 2.3.1.6 Interrupção do Timer 2 .................................................................................66
2.3.2 Montagem da placa do protótipo......................................................................66
3 TESTES E VALIDAÇÃO DO PROTÓTIPO..............................................................68
CONSIDERAÇÕES FINAIS.................................................................................................72
REFERÊNCIAS BIBLIOGRÁFICAS .................................................................................74
ANEXOS .................................................................................................................................77
ANEXO A - DIAGRAMA DE BLOCOS DO DSPIC30F2010...........................................78
ANEXO B – MAPA DA ORGANIZAÇÃO DAS MEMÓRIAS NO DSPIC30F2010 ......80
ANEXO C – TABELA DE INTERRUPÇÕES DO DSPIC30F2010..................................82
ANEXO D – MAPA DE REGISTRO DAS PORTS............................................................84
ANEXO E – AMPLIFICADOR OPERACIONAL INA128...............................................86
ANEXO F – AMPLIFICADOR OPERACIONAL CA3140 ..............................................92
ANEXO G – CÓDIGO FONTE DO PROGRAMA DO DSPIC ........................................97
ANEXO H – CIRCUITO DO PROTÓTIPO .....................................................................104
ANEXO I – LAYOUT DA PLACA DO PROTÓTIPO ....................................................106
14
INTRODUÇÃO
A união de dispositivos eletrônicos com a medicina proporciona novas pesquisas da
Engenharia Biomédica. Pesquisas estas, na área de sensoriamento remoto e em sistemas
biomédicos, tais com instrumentação analógica/digital e processamento de sinais elétricos
inerentes do ser humano.
O Eletrocardiograma (ECG) constitui atualmente um dos mais utilizados métodos
não invasivos para diagnóstico de cardiopatias. O ECG pode ser obtido em consultórios
médicos, durante um exame de rotina com o paciente em repouso ou em atividade. O coração
gera sinais elétricos durante seu funcionamento, os quais se projetam até a superfície corporal.
O ECG funciona como um registro das variações do potencial elétrico do meio extracelular
decorrente da atividade cardíaca.
Utilizando os conhecimentos adquiridos durante a graduação, surgiu o interesse em
desenvolver um instrumento que integrasse a captação e processamento de sinais biomédicos
em nível digital, transmissão e visualização dos resultados.
O projeto em questão tem como objetivo construir um protótipo de eletrocardiógrafo
de monitoração. Os sinais biomédicos provenientes da superfície corporal são enviados até a
15
placa de captura. Em seguida, passa por etapas de amplificação e por filtros analógicos ativos.
Na etapa final, o sinal é inserido no microcontrolador para ser tratado e enviado à porta serial
onde a informação é transmitida ao computador e visualizada por um software aplicativo, em
Linguagem Visual Basic (VB), desenvolvido somente para teste.
A estrutura deste trabalho é dividida em três partes principais. O Capítulo 1 o
envolve pesquisa e estudo sobre funcionamento cardíaco, amplificadores operacionais, filtros
e microcontrolador. No Capítulo 2 é apresentado o desenvolvimento do protótipo e
juntamente abordada a aplicação teórica. No Capítulo 3 são realizados os testes para a
validação do protótipo e apresentados os resultados obtidos. Nas Considerações Finais são
abordados os resultados obtidos no trabalho e citados os objetivos futuros para transformar o
protótipo em um produto final.
16
1 FUNDAMENTOS TEÓRICOS
Introdução
Os fundamentos teóricos estão divididos em cinco partes. Na seção 1.1 será
apresentado o estudo sobre o coração e particularidades do sinal de ECG. Na seção 1.2 serão
apresentados os fundamentos básicos sobre os amplificadores operacionais utilizados neste
projeto. Na seção 1.3 é feito uma introdução aos filtros analógicos. Na seção 1.4 é
apresentado o processador digital de sinais e algumas estruturas internas do microcontrolador.
Enfim a seção 1.5 apresenta as ferramentas para desenvolvimento e gravação do
microcontrolador.
1.1 Coração
O coração é uma bomba pulsátil de quatro câmaras composto de dois átrios2 e dois
ventrículos3. Os átrios funcionam, principalmente, como vias de acesso aos ventrículos, mas
também bombeiam fracamente para ajudar na mobilização do sangue para os ventrículos.
2 Átrios - são câmaras cardíacas, localizada na metade superior direita e esquerda do coração. 3 Ventrículos – são as câmaras cardíacas inferiores, se divide em ventrículo esquerdo e ventrículo direito.
17
Os ventrículos fornecem a principal força que impulsiona o sangue através dos
pulmões e do sistema circulatório periférico. A Figura 1.1 mostra as principais estruturas do
coração como os átrios e ventrículos (GUYTON & HALL, 2006).
Figura 1.1 – Anatomia Cardíaca. Fonte – SHIRLEY,2005.
O coração localiza-se na cavidade torácica, no mediastino. Dois terços do seu
volume estão situados à esquerda da linha sagital mediana. Esta posição, chamada de
levocárdica, é a mais freqüente. A forma do coração é aproximadamente cônica, com a base
voltada para trás e para a direita, e o ápice para a frente e para a esquerda (GUYTON &
HALL, 2006).
18
1.1.1 Excitação Rítmica do Coração
O coração é dotado de um sistema próprio de geração de impulsos. Também tem
regulação pelo Sistema Nervoso Autônomo, que não será abordado neste trabalho, pois o
eletrocardiograma norteia-se pela regulação própria do coração.
Esse sistema próprio do coração inicia a geração de impulsos elétricos pelo nodo
sinusal (nodo S-A). O impulso elétrico é conduzido pelas vias internodais até o nodo
atrioventricular, onde o impulso é retardado para os ventrículos. O feixe atrioventricular é que
conduz o impulso até os ventrículos e as fibras de Purkinje (ramos direito e esquerdo)
conduzem o impulso para todas as outras áreas dos ventrículos. A Figura 1.2 demonstra o
nodo sinusal e o sistema de Purkinje do coração, mostrando ainda o nodo A-V, as vias atriais
internodais e os ramos ventriculares (GUYTON & HALL, 2006).
Figura 1.2 – O nodo sinusal e o sistema de Purkinje. Fonte – GUYTON & HALL, 2006.
19
1.1.2 Tensão Normal no Eletrocardiograma
A tensão dos impulsos cardíacos é variável e pode-se observar dois níveis mais
importantes de tensão cardíaca: a tensão da fibra sinusal e a tensão do músculo cardíaco, no
sentido de comparar com os sinais captados na superfície corporal. Na fibra sinusal, o
potencial de repouso é de -55 a -60 milivolts e na fibra muscular este potencial é de -85 a -90
milivolts. A Figura 1.3 ilustra a descarga rítmica da fibra do nodo sinusal em relação de fibra
muscular ventricular. Essa diferença de tensão entre os tecidos cardíacos ocorre porque as
fibras sinusais são mais permeáveis aos canais de cálcio, o que torna a carga dessas fibras
menos negativas do que no músculo cardíaco.
Figura 1.3 – Ação do nodo sinusal versus fibra muscular ventricular. Fonte – GUYTON & HALL, 2006.
20
Na despolarização4 o potencial de membrana pode chegar a 110 milivolts, porém a
tensão captada na superfície corporal é, em média, de 3 a 4 milivolts, dependendo de onde o
eletrodo é posicionado em relação ao coração (GUYTON & HALL, 2006).
1.1.3 Eletrocardiograma
O ECG é o registro das correntes elétricas que atravessam o coração e se propagam
para tecidos adjacentes e atingem a superfície corporal. Um ECG normal consiste em uma
onda P, um complexo de ondas Q, R e S (QRS) e uma onda T, conforme ilustrado na Figura
1.4.
Figura 1.4 – Gráfico de um ECG Normal. Fonte – GUYTON & HALL, 2006.
4 Despolarização - Ativação elétrica da célula ocasionada pelo influxo de sódio. Antecede a contração do músculo cardíaco.
21
A onda P é gerada pela despolarização dos átrios e o complexo QRS é gerado pela
despolarização dos ventrículos. A onda T é a repolarização5 dos ventrículos, ou seja, é o
estado que ocorre após a despolarização, quando os ventrículos se recuperam do estado de
despolarização. A repolarização e despolarização podem ser visualizados na Figura 1.5. A
reposição atrial ocorre juntamente com a despolarização ventricular, portanto, o complexo
QRS se sobrepõe a esta onda (GUYTON & HALL, 2006).
Figura 1.5 – Despolarização e repolarização do coração. Fonte – SHIRLEY, 2005.
5 Repolarização - Retorno da célula ao estado de repouso, causado pela reentrada de potássio na célula. Equivale ao relaxamento do músculo cardíaco.
22
O eletrocardiograma é visualizado normalmente em uma folha quadriculada, a
impressão respeita uma velocidade padrão de 25 milímetros por segundo, como ilustra a
Figura 1.6. O quadriculado que tem dimensões padronizadas serve para referenciar o nível de
tensão e de tempo. A amplitude de 1 milímetro (mm) corresponde a 0,1 milivolt (mV) e a
largura de 1 mm corresponde a 0,04 segundos (s). Para melhor visualização são destacados
blocos maiores de 5mm2 que correspondem a 0,5mV e 0,20s.
Figura 1.6 – Impressão padrão do ECG. Fonte – SHIRLEY, 2005.
1.1.4 Fluxo das correntes elétricas no coração
O impulso cardíaco chega aos ventrículos através do septo interventricular (Figura
1.1 – Anatomia Cardíaca) e logo após atinge as regiões mais externas. Isso caracteriza
eletronegatividade no interior dos ventrículos e eletropositividade no exterior. É possível
observar também que o fluxo médio de corrente ocorre com negatividade dirigida para a base
23
cardíaca, enquanto que a positividade dirigida para o ápice. Sendo assim, a corrente flui da
base para o ápice (GUYTON & HALL, 2006).
Também dentro do tórax as correntes elétricas são conduzidas, pois os pulmões,
mesmo cheios de ar, conduzem a corrente elétrica, até os tecidos mais superficiais. Este fato
possibilita o registro dessas correntes através do ECG. A Figura 1.7 mostra o fluxo da
corrente no tórax ao redor dos ventrículos parcialmente despolarizados. (GUYTON & HALL,
2006).
Figura 1.7 – Fluxo da corrente no tórax. Fonte – GUYTON & HALL, 2006.
1.1.5 Derivações eletrocardiográficas
Para obtenção dos registros eletrocardiográficos é necessário a ligação das três
derivações bipolares dos membros. O termo “bipolar” quer dizer que o ECG é registrado por
dois eletrodos posicionados em lados diferentes do coração, ou seja, nos membros. A
derivação não só é um fio conectado no corpo, mas a combinação de dois fios e seus eletrodos
24
para formar um circuito completo entre o corpo e o eletrocardiógrafo. As três derivações
bipolares padrão são:
Derivação I - Para registrar a derivação I o terminal negativo do eletrocardiógrafo é
ligado ao braço direito e o positivo, ao esquerdo. Portanto, quando o ponto do tórax
onde o braço direito é conectado for eletronegativo em relação ao ponto ao qual se
liga o braço esquerdo, o eletrocardiógrafo registrará positividade, isto é, acima da
linha da voltagem zero do eletrocardiograma. Quando ocorre o oposto, o
eletrocardiógrafo registra abaixo da linha de base;
Derivação II - Para registrar a derivação II, o terminal negativo do eletrocardiógrafo
é ligado ao braço direito e o terminal positivo, à perna esquerda. Portanto, quando o
braço direito é negativo em relação à perna esquerda, o eletrocardiógrafo registra
positividade;
Derivação III - Para registrar a derivação III, o terminal negativo do
eletrocardiógrafo é ligado ao braço esquerdo e o terminal positivo, à perna esquerda.
Isto significa que o eletrocardiógrafo registra positividade quando o braço esquerdo é
negativo em relação à perna esquerda.
Triângulo de Einthoven, os dois braços e a perna esquerda formam os ápices de um
triângulo que circunda o coração. Os dois ápices superiores do triângulo representam os
pontos nos quais os dois braços se ligam com os líquidos que circundam o coração, e o ápice
inferior é um ponto em que a perna esquerda se liga a estes líquidos (GUYTON & HALL,
2006).
25
A Figura 1.8 mostra a disposição convencional dos eletrodos que formam o triângulo
de Einthoven sobreposto ao tórax como as derivações eletrocardiográficas padrão I II e III,
identificados com: Braço Esquerdo (BE); Braço Direito (BD) e Perna Esquerda (PE).
Figura 1.8 – Triangulo de Einthoven. Fonte – SHIRLEY, 2005.
1.2 Amplificador Operacional
O Amplificador Operacional (AMPOP) foi projetado originalmente para executar
operações matemáticas como adição, subtração, derivação, integração, multiplicação,
resolução de equações diferenciais, daí porque foi chamado OPERACIONAL.
Atualmente, os amplificadores operacionais têm outras aplicações, decorrentes da
sua versatilidade em efetuar operações com tensões elétricas: são utilizados no processamento
e na geração de sinais; em instrumentação e controle; como comparador, regulador,
integrador, diferenciador, somador, filtro ativo, oscilador, entre outras aplicações
(JUNIOR,2001).
26
1.2.1 Representação de um Amplificador Operacional
Um Ampop pode ser entendido como um circuito amplificador de alto ganho, onde a
entrada é representada por uma resistência de alto valor e a saída por uma fonte de tensão
controlada e uma resistência em série. A representação gráfica do amplificador ideal é
mostrada na Figura 1.9, onde A representa o ganho em malha aberta; i1 e i2 representam as
correntes de entrada do Ampop.
Figura 1.9 – Circuito Equivalente do AMPOP Ideal. Fonte – SEDRA, 2000.
O Ampop responde apenas à diferença de sinal (v2 – v1) e, portanto, ignora qualquer
sinal comum entre as entradas. Por exemplo, se tiver 1 Volt (V) nas duas entradas,
teoricamente a saída será nula. Esta propriedade é chamada de Rejeição de Modo Comum
(CMRR), em Ampop ideais a CMRR tende a infinito (MALVINO, 1995).
27
1.2.2 Configuração básica inversora
Nos circuitos de malha fechada, uma amostra do sinal de saída é retornada para o
circuito com intenção de controle. Quando ligado na entrada inversora, o sinal de retorno se
opõe ao sinal da entrada, ocorrendo inversão de 180 graus. A Figura 1.10 mostra a ligação
básica do amplificador inversor (GIACOMIN, 2000).
Figura 1.10 – Amplificador Inversor. Fonte – SEDRA, 2000.
O resistor R2 fornece a realimentação do circuito e R1 a impedância de entrada, o
resultado pode ser visto na Equação 1.1.
ViRRVo
RR
ViVo
⋅−=⇒−=12
12 (1.1)
28
1.2.3 Configuração básica não inversora
Nesta configuração o sinal é conectado diretamente na entrada não inversora, e o
resistor R1 está aterrado. Como a entrada inversora apresenta curto virtual, a entrada não
inversora apresenta alta impedância. O circuito não inversor está representado na Figura 1.11
e o cálculo do ganho é apresentado na Equação 1.2 (SEDRA, 2000).
Figura 1.11 – Amplificador Operacional em uma configuração não-inversora. Fonte – SEDRA, 2000.
121
RR
ViVo
+= (1.2)
29
1.2.4 Amplificador de diferenças
Utilizando as montagens inversora e não inversora permite realizar um circuito que
implemente a amplificação da diferença entre dois sinais. Este circuito está representado na
Figura 1.12 e sua simplificação na Equação 1.3 (SEDRA, 2000).
Figura 1.12 – Circuito amplificador diferencial. Fonte – SEDRA, 2000.
( )1212
II VVRRVo −⋅= (1.3)
1.2.5 Amplificador de Instrumentação
O amplificador de instrumentação é basicamente um amplificador diferencial com
dois estágios de entrada. Cada sinal de entrada é conectado diretamente ao terminal não-
inversor de um Ampop, de modo que tenha alta impedância de entrada. São utilizados
dispositivos de alta qualidade e casamento rigoroso de impedâncias, apresenta CMR muito
30
alta. Um circuito básico de amplificador de instrumentação é mostrado na Figura 1.13 e o
cálculo de Vo na Equação 1.4 (SEDRA, 2000).
Figura 1.13 – Amplificador de instrumentação. Fonte – SEDRA, 2000.
( )12321
34
II VVRR
RRVo −⋅⎟
⎠⎞
⎜⎝⎛ +⋅= (1.4)
1.3 Filtros Ativos
Um filtro é um dispositivo que permite que sinais com determinadas freqüências
passem por ele enquanto que outros sinais são atenuados. O filtro ideal tem um ganho
constante em todas as freqüências de sua faixa de passagem, ou banda passante, e ganho zero
em todas as freqüências fora da faixa de passagem. A Figura 1.14 mostra a resposta em
freqüência ideal e real dos quatro principais filtros usados em circuitos eletrônicos: passa-
baixas e passa-altas. As freqüências de corte são mostradas onde a resposta é 3 Decibels (dB)
abaixo de seu valor máximo na banda passante (BOGART, 2001).
31
Figura 1.14 – Resposta em freqüência de quatro principais filtros. Fonte – BOGART, 2001.
Os filtros são usados para isolar componentes desejáveis da freqüência de sinais
complexos e/ou removerem componentes indesejáveis, tais como ruídos e harmônicas. Os
filtros passivos são aqueles constituídos de resistores, capacitores e indutores, já os filtros
ativos são montados com componentes ativos como amplificadores operacionais e transistores
junto com capacitores e resistores (BOGART, 2001).
1.3.1 Filtro Passa-Baixas de Primeira Ordem
Os Filtros Ativos de Primeira Ordem, ou de um pólo, a resposta em freqüência
apresenta uma atenuação de 20dB/década. A Figura 1.15 mostra o circuito de um filtro passa-
32
baixas de primeira ordem, o cálculo do ganho e da Freqüência de corte (fc) estão identificados
na Equação 1.5 (MALVINO, 1995).
Figura 1.15 – Filtro Passa Baixo de primeira ordem na configuração inversora. Fonte – BOGART, 2001.
CRf
RRGanho
c ⋅⋅⋅=
−=
221
12
π
(1.5)
1.3.2 Filtro Passa-Altas de Primeira Ordem
No filtro passa-altas é removido o circuito de desvio e adicionado um circuito de
acoplamento com R1 e C. Este tipo de acoplamento faz com que as freqüências altas passem e
as freqüências baixas sejam atenuadas sendo que, abaixo da freqüência de corte, a tensão de
saída é atenuada 20dB/década. O circuito do filtro passa-altas é mostrado na Figura 1.16 e os
cálculos na Equação 1.6 (MALVINO, 1995).
33
Figura 1.16 – Filtro passa-altas na configuração inversora.
CRf
RRGanho
c ⋅⋅⋅=
−=
121
12
π
(1.6)
1.4 Processador Digital de Sinais
Vindo do termo em inglês Digital Signal Processing (DSP), ou seja, processamento
digital de sinais, trabalha com sinais analógicos que foram previamente amostrados em
intervalos de tempo e quantizados na forma digital. Possibilita um alto desempenho para
aplicações numéricas em tempo real, as quais seriam impossíveis de serem realizadas por
circuitos analógicos. É projetado para executar rapidamente diversas manipulações e
transformações matemáticas em números extraídos dos circuitos analógicos rapidamente
(OLIVEIRA, 2006).
34
Os DSPs possuem algumas características particulares projetadas para desempenhar
tarefas repetitivas de alta performance. Uma destas tarefas que se destaca é a habilidade de
realizar uma operação de multiplicação e acumulação em um único ciclo de instrução. Esta
operação é largamente usada em processos de tempo real. Outra característica dos DSPs é a
capacidade de realocar o espaço não utilizado da memória de programa para uma extensão de
memória de dados, possibilitando uma otimização das memórias do processador.
(OLIVEIRA, 2006).
1.4.1 Microcontrolador dsPIC30F2010
O dsPIC30F2010 possui barramento de dados de 16 bits e de instruções de 24 bits
em uma arquitetura Harvard com algumas modificações. A combinação das vantagens de um
microcontrolador de 16 bits com as de um DSP torna este dispositivo uma solução completa
para aplicações como controle de motores (principal aplicação da família 30F), conversão de
potência, sensores de alta velocidade, processamento de sinais de áudio e voz, conectividade,
como também aplicações automotivas e em telecomunicações (MICROCHIP, 2005, apud
FÜHR, 2006).
Na Figura 1.17 pode ser observada a disposição dos pinos do dsPIC30F2010 com as
nomenclaturas e o encapsulamento SDIP de 28 pinos utilizado no protótipo. Os pinos de VDD
e VSS são utilizados para fornecer a alimentação elétrica para o componente, sendo VSS o
pino de zero volt e VDD a alimentação positiva, neste protótipo foi utilizado 5V
(MICROCHIP, 2005, apud FÜHR, 2006).
35
Figura 1.17 – Diagrama de pinos do dsPic30F2010. Fonte – MICROCHIP, 2005.
O pino MCLR é responsável pelo reset do dsPIC sempre que recebe um sinal em
nível baixo, limpando os registradores utilizados pelo componente e reiniciando o seu
programa. Já os pinos OSC1 (9) e OSC2 (10) recebem o sinal referente ao clock6 fornecido ao
dsPIC, que é gerado pelo circuito oscilador a cristal exibido na Figura 1.18. O valor da
freqüência de oscilação do circuito a cristal utilizado no protótipo é de 20MHz (Microchip,
2005).
Figura 1.18 – Circuito de entrada do clock para o dsPic30F2010. Fonte – MICROCHIP, 2005.
6 O clock fornece a sensibilidade de tempo para o processador, é um sinal de onda quadrada e a cada nível alto uma instrução no mínimo é executada. Um ciclo de clock consiste na diferença de tempo entre dois níveis altos dessa onda do oscilador.
36
A maioria dos pinos do componente possui mais de uma função, que podem ser
configuradas conforme a necessidade através da programação do dsPIC30F2010. Estas
funções e configurações dos demais pinos são abordadas conforme a necessidade durante o
desenvolvimento do protótipo (OLIVEIRA, 2006).
O módulo Transmissor e Receptor Assíncrono Universal, do inglês Universal
Asynchronous Receiver Transmitter (UART), que o dsPIC possui internamente é configurado
para comunicar serialmente com um computador, onde está instalado o Software Supervisório
para plotar o eletrocardiograma, programado em Linguagem Visual Basic7 (VB) A
comunicação serial utilizada no projeto segue o padrão RS232 (MICROCHIP, 2005, apud
FÜHR, 2006).
1.4.2 Arquitetura da CPU
O dsPIC possui uma tecnologia de processamento RISC com algumas modificações
adaptadas para a realidade deste DSP. A tecnologia RISC possui instruções simplificadas,
com formato fixo, sendo executadas em apenas um ciclo de instrução. No dsPIC cada
instrução leva 4 ciclos de clock para ser executada, sendo que alguns comandos podem
necessitar de mais de 4 períodos de instrução. Desta forma não há o risco de um conjunto de
instruções ser tão extenso que comprometa o desempenho do dsPIC, o que não poderia ser
garantido se o mesmo utilizasse a tecnologia CISC para processamento dos dados, onde o
conjunto de instruções é mais complexo e não possui largura fixa. O diagrama em blocos da
7 O Visual Basic é uma linguagem de programação de autoria da empresa Microsoft, que é parte integrante do pacote Microsoft Visual Studio.
37
arquitetura interna do dsPIC30F2010 pode ser verificado no ANEXO A (MICROCHIP, 2005,
apud FÜHR, 2006).
1.4.3 Organização da Memória
A área da memória de programa ocupa 4M words (palavras) de instruções e é
endereçável por 24 bits ou pelo PC (Program Counter) por 23 bits. Conforme mostrado na
tabela do ANEXO B, referente ao mapa de espaço de memória de programa do
dsPIC30F2010, os endereços entre 000000h e 0000FEh pertencem à tabela de vetores de
Traps8 e Interrupções. Os endereços entre 000100h e 001FFEh são reservados para a memória
de programa Flash, onde o usuário grava o programa fonte do dsPIC. Os endereços entre
002000h e 7FFBFEh são reservados para funções internas do componente (MICROCHIP,
2005, apud FÜHR, 2006).
A memória EEPROM9 ocupa os endereços entre 7FFC00h e 7FFFFEh, podendo ser
utilizada para gravar parâmetros necessários para o correto funcionamento do programa fonte
sem que os mesmos sejam perdidos quando a alimentação elétrica do componente for
desligada. A área de endereço de programa é incrementada a cada 2 words (palavras de 16
bits) do programa, para fornecer compatibilidade com endereçamento da área de dados
(MICROCHIP, 2005, apud FÜHR, 2006).
O dispositivo tem duas áreas de memórias de dados. As áreas de dados podem ser
consideradas independentes para a maioria das instruções do DSP, ou como uma área linear
8 Traps: são interrupções não mascaráveis que indicam erro de software ou hardware relacionado a uma prioridade pré definida (MICROCHIP, 2005). 9 EEPROM – electrically erasable programmable read-only memory.
38
unificada de endereços para instruções da classe MAC. As áreas de dados são acessadas
usando duas Unidades Geradoras de Endereço (AGUs) e caminhos de dados separados
(MICROCHIP, 2005, apud FÜHR, 2006).
1.4.4 Interrupções
Uma interrupção tem como objetivo parar a execução normal do programa do dsPIC
para executar um bloco de comandos específicos a fim de atender a uma solicitação do
sistema. Esta interrupção pode ser causada por um dispositivo interno ou externo. Os módulos
internos do dsPIC30F2010 possuem uma ordem de prioridade de interrupções: caso não seja
orientada é assumida uma tabela com as prioridades padrão do dsPIC, como pode ser
visualizado no ANEXO C.
Sempre que ocorre uma interrupção devido à ocorrência de algum evento, o seu
endereço é armazenado na pilha interna do processador, fazendo com que sejam executados
os comandos referentes à rotina desta interrupção. Ao finalizar esta tarefa, o processador volta
à execução normal do programa na posição seguinte a qual havia parado. Para que as
interrupções ocorram, é necessário que sejam habilitadas e configuradas conforme a
necessidade. A configuração de cada uma delas determina o exato momento que a mesma
deve ocorrer, podendo ocorrer no início ou final de um determinado processo, dependendo da
rotina programada (MICROCHIP, 2005, apud FÜHR, 2006).
39
1.4.5 Entradas e Saídas Digitais
Os pinos utilizados como entradas e saídas digitais são selecionados via software, ou
seja, através da programação do dsPIC é possível configurar cada pino individualmente como
entrada ou saída digital. Estes pinos formam grupos chamados de PORTs, sendo que a
quantidade de pinos de cada PORT é variável, conforme demonstrado na Tabela 1. No
ANEXO D é mostrado em detalhe o mapa de registro das portas.
Tabela 1 – Portas de entrada do dsPIC.
Registrador Entrada/Saída
Registrador de
Configuração
Número de pinos de Entrada/Saída
PORTB TRISB 6 PORTC TRISC 3 PORTD TRISD 2 PORTE TRISE 7 PORTF TRISF 2
Fonte – MICROCHIP, 2005.
A configuração é possível através dos registradores TRISX, onde o “X” corresponde
à letra do PORTX (B, C, D, E , F) a ser configurado. Quando um bit do registrador TRISX é
configurado para nível alto (1), o pino do PORTX correspondente passa a atuar como entrada
de dados digital (Input Data), e quando ajustado para nível baixo (0), o pino passa a atuar
como saída de dados digital (Output Data). Todos os pinos de I/O possuem um buffer Schmitt
Trigger 10para obter imunidade a ruído. A Figura 1.19 mostra o circuito de controle das portas
de entrada e saída.
10 Schmitt Trigger - é um circuito comparador incorporado de realimentação positiva.
40
Figura 1.19 – Circuito de controle das portas I/O. Fonte – MICROCHIP, 2005.
Os registradores que configuram as saídas ou entradas dos módulos PWM, UART e
ADC sobrepõem os ajustes dos ports configurados como entradas ou saídas digitais nos
registradores TRISA, TRISB, TRISC, TRISD, TRISE e TRISF através do Módulo Periférico
(Peripheral Module) (MICROCHIP, 2005, apud FÜHR, 2006).
1.4.6 Timers
Os Timers são utilizados para fornecer uma interrupção no programa sempre que um
determinado tempo de execução for atingido, criando uma linha de tempo de alta definição
para o programa. Podem ser utilizados para determinar o período de amostragem de um
41
sistema discreto, coletando e processando os dados a cada interrupção do Timer, gerando uma
seqüência de amostragem de um determinado sinal, por exemplo, a aquisição no A/D do sinal
de ECG (OLIVEIRA, 2006).
O dsPIC30F2010 possui três Timers internos com contadores de 16 bits, fornecendo
uma contagem de até 216 ou 65535. Existe a possibilidade de juntar dois Timers, gerando um
contador de 32 bits aumentando a contagem para 232 ou 4.294.967.295. O diagrama em blocos
do módulo do Timer 1 pode ser visualizado na Figura 1.20.
Figura 1.20 – Diagrama de blocos do Timer tipo 1. Fonte – MICROCHIP, 2005.
Quando existe a necessidade de um período de contagem de tempo maior, existe
internamente no componente um sistema chamado prescaler. Ele se baseia em um contador
separado, capaz de manter a contagem a cada clock (1:1) ou aumentar a relação de contagem
42
de ciclos de clock do timer em 8 (1:8), 64 (1:64) ou 256 (1:256) vezes, aumentando o range de
tempo configurável para cada timer (MICROCHIP, 2005, apud FÜHR, 2006).
1.4.7 Módulo UART
O módulo transmissor e receptor assíncrono universal do dsPIC30F2010 é utilizado
para a transmissão bidirecional simultânea, ou seja, com dois canais de comunicação
independentes que podem operar ao mesmo tempo, com 8 ou 9 bits de comunicação de dados
seriais. A comunicação assíncrona exige que os dois pontos independentes sejam
sincronizados previamente, havendo a necessidade de possuírem a mesma taxa de
transferência e mesmo tamanho dos dados (OLIVEIRA, 2006).
A taxa de transferência dos dados é denominada Baud Rate, cuja unidade de medida
é bits por segundo (bps). O que determina o início e o fim de um dado são os bits de início
(start bit) e parada (stop bit) do byte transmitido, como podemos verificar na Figura 1.21
(OLIVEIRA, 2006).
Figura 1.21 – Comunicação Serial. Fonte – OLIVEIRA, 2006.
As configurações de comunicação do módulo UART definem as características de
comunicação serial do dsPIC30F2010. A comunicação pode ser com 8 ou 9 bits de dados, 1
43
ou 2 stop bits e controle de paridade par, ímpar ou sem controle de paridade. O Baud Rate11 é
ajustado no registrador U1BRG, que é calculado para receber o valor correto. O cálculo segue
a fórmula da Equação 1.7, onde a freqüência do ciclo obedece à fórmula da Equação 1.8.
(MICROCHIP, 2005, apud FÜHR, 2006).
( )( ) 1
_161 −
⋅=
bpsRateBaudHzFCYBRGU (1.7)
( )4
____ CristaldoFreqüênciaFCYciclodoFreqüência = (1.8)
No protótipo, é usado o pino de comunicação U1TX (17) para o envio de dados via
porta serial RS232 e o pino (18) U1RX recebe os dados. Internamente o dsPIC30F2010
possui 4 buffers12 de 16 bits para a recepção de dados via serial e outros 4 buffers para a
transmissão de dados. É possível configurar a interrupção de recepção para que ela ocorra
quando os 4 Buffers estiverem ocupados, quando 3 Buffers estiverem ocupados ou para cada
recepção de um dado novo. A interrupção de transmissão ocorre quando um dado é
armazenado no registrador de transmissão, podendo ser selecionado se a interrupção ocorrerá
somente quando os Buffers estiverem vazios ou quando eles ainda estiverem com dados
armazenados (MICROCHIP, 2005, apud FÜHR, 2006).
11 O termo Baud Rate é utilizado como medida de velocidade de transmissão de informação entre computadores através de linhas telefônicas. Baud Rate é frequentemente utilizado como sinônimo de bits por segundo (bps), apesar de não ser tecnicamente verdadeiro. O nome Baud vem de J. M. Baudot, inventor do código telegráfico Baudot. 12 Pequena quantidade de memória para armazenamento de dados temporários, auxiliando a CPU e os módulos internos na execução de suas tarefas e compensando diferentes taxas de transferência de dados.
44
O circuito interno de transmissão de dados pelo módulo UART é visualizado na
Figura 1.22. O barramento de dados da CPU é conectado diretamente aos buffers de
transmissão, onde são armazenados os dados que serão transmitidos serialmente. O byte do
buffer é armazenado no Registrador de Deslocamento (Transmit Shift Register), que, após ser
transmitido o start bit, desloca serialmente os bits do dado para a saída U1TX, procedendo
com a comunicação. Ao finalizar a transmissão de todo o byte é enviado o stop bit. O circuito
gerador de baud rate determina a velocidade de transmissão, neste caso 38400bps. Além de
controlar estes dispositivos, o Controle de Transmissão (Transmit Control) também é
responsável por gerar os bits de status e a interrupção do módulo transmissor (MICROCHIP,
2005, apud FÜHR, 2006).
Figura 1.22 – Circuito interno para transmissão dos dados pelo módulo UART. Fonte – MICROCHIP, 2005.
O circuito interno de recepção de dados pelo módulo UART é visualizado na Figura
1.23. Os dados são coletados através do pino U1RX. Ao receber o start bit, o byte é deslocado
45
serialmente para o Registrador de Deslocamento (Receive Shift Register). Ao receber o stop
bit, indicando que a recepção do byte está completa, ele é transferido para os buffers. A
velocidade que ocorre esta seqüência de ações depende do gerador de baud rate. O Controle
de Recepção (Receive Buffer Control) é responsável por controlar estes dispositivos, gerar os
sinais de status e a interrupção do módulo (MICROCHIP, 2005, apud FÜHR, 2006).
Figura 1.23 – Circuito interno para recepção dos dados pelo módulo UART. Fonte – MIROCHIP, 2006.
1.4.8 Módulo de Conversão A/D
Qualquer sinal encontrado no mundo real é analógico, mas pode ser amostrado de
forma discreta e quantizado para torná-lo digital, conseqüentemente, passível de ser
46
manipulado por sistemas de controle digitais como microcontroladores, computadores ou
processadores digitais de sinais. A conversão analógico-digital (A/D) permite que sinais
analógicos sejam quantizados em valores digitais através de curtos períodos de amostragens.
A velocidade que é feita a conversão é chamada de freqüência de amostragem ou taxa de
conversão (OLIVEIRA, 2006, apud FÜHR, 2006).
O dsPIC30F2010 possui implementado internamente um conversor A/D capaz de
converter um sinal analógico em um sinal digital de 10 bits. Estão disponíveis internamente
seis canais de conversores A/D, podendo ser multiplexados com o conversor conforme a
necessidade do programador. Neste protótipo, para aquisição do sinal ECG é usado apenas um
canal do A/D (MICROCHIP,2004 , apud FÜHR, 2006).
O conversor A/D necessita de uma tensão de alimentação de seu circuito interno
separada, pois deve ser muito bem estabilizada e sem ruídos para que a conversão seja a mais
precisa possível. Esta alimentação ocorre entre os pinos AVdd (28) e AVss (8 e 27). A tensão
de referência do conversor A/D é utilizada para determinar os valores máximos e mínimos da
entrada analógica, e pode ser configurada pelo programa do dsPIC30F2010 para assumir a
própria alimentação AVdd e AVss ou assumir os valores ajustados pelos pinos Vref+ (2) e
Vref- (3), que são valores intermediários a AVdd e AVss (MICROCHIP, 2004, apud FÜHR,
2006).
O dsPIC30F2010 utiliza o método de conversão por aproximação sucessiva na
transformação dos sinais analógicos em digitais. Este método é muito utilizado em conversões
A/D por possuir uma alta velocidade de convergência, necessitando de no máximo 10 ciclos
de clock para converter um sinal contínuo em um sinal discreto de 10 bits, chegando a
47
velocidades de até 500ksps (50.000 amostragens por segundo) no dsPIC30F2010
(MICROCHIP, 2005, apud FÜHR, 2006).
O funcionamento deste método de conversão é baseado na comparação entre o valor
de entrada analógico com um valor padrão para cada bit de conversão. O bit mais
significativo será a comparação entre a entrada e a metade da tensão de referência (AVdd / 2),
resultando em nível lógico alto se a entrada for igual ou maior a tensão de comparação, e
nível lógico baixo caso for menor (MITRA, 2001, apud FÜHR, 2006).
Caso o resultado do primeiro bit de conversão tenha ficado em nível alto, o valor de
comparação utilizado para a conversão do segundo bit mais significativo será o valor de
comparação anterior somado a um quarto do valor de referência (AVdd / 2 + AVdd / 4 =
3AVdd / 4). Se a conversão do bit anterior ficou em nível baixo, a tensão de comparação será
subtraída de um quarto do valor de referência (AVdd / 2 - AVdd / 4 = AVdd / 4). Novamente
o resultado desta comparação definirá o nível lógico do bit, sendo repetido o mesmo processo
para cada um dos demais bits (MITRA, 2001, apud FÜHR, 2006).
O módulo de conversão A/D possui 16 buffers de 16 bits para acumular os resultados
da conversão até que os mesmos sejam coletados para a utilização no programa. A leitura do
resultado é feita diretamente nos Buffers do conversor, não podendo ser feita a leitura
diretamente na saída do conversor. Outra vantagem deste módulo é que ele atua independente
da CPU estar em modo Idle (repouso) ou em modo Sleep (hibernando), podendo continuar em
funcionamento se for necessário. A interrupção do módulo A/D pode ser configurada para
ocorrer sempre que um determinado buffer esteja cheio, podendo ocorrer de 1 a 16 conversões
até que a interrupção ocorra (MICROCHIP, 2005, apud FÜHR, 2006).
48
O circuito interno do módulo de conversão de sinais analógicos para digitais (A/D) é
visualizado na Figura 1.24 onde estão representados as seis portas analógicas (MICROCHIP,
2004).
Figura 1.24 – Circuito interno do módulo de conversão A/D. Fonte – MICROCHIP, 2005.
1.5 Ferramentas para Desenvolvimento e Depuração
Para o desenvolvimento, implementação, depuração e compilação do programa em
Linguagem C e Asembly e da gravação do dsPIC30F2010 são utilizadas algumas ferramentas
fornecidas pelo fabricante do componente. O software responsável pelo desenvolvimento e
depuração do programa chama-se MPLAB. Neste trabalho foi instalada a versão 7.60
49
fornecida no site do fabricante (http://microchip.com). A Figura 1.25 mostra a tela principal
do MPLAB.
Figura 1.25 – Programador e Depurador MPLAB V7.6. Fonte – MICROCHIP, 2007.
O compilador MPLAB C30 possui a função de converter o programa implementado
em Linguagem C para a Linguagem de Máquina, permitindo a correta interpretação do
programa por parte do dsPIC30F2010. O processo de compilação do compilador avalia se há
problemas de sintaxe nos comandos do programa, gerando o arquivo com extensão "hex" se
nenhum erro for detectado, ou seja, um arquivo com dados em linguagem de máquina e
pronto para ser gravado no dsPIC. O erro de sintaxe ocorre quando um comando não está
escrito conforme determina a estrutura da linguagem de programação utilizada. Porém, o
compilador não detecta erros de semântica, ou seja, erros causados devido a uma lógica
incorreta, não executando a ação desejada pelo programador (OLIVEIRA, 2006).
50
Uma vantagem do Compilador C30 é a possibilidade de utilizar comandos em
Linguagem C e Assembly no mesmo programa, podendo haver uma mistura de comandos
diferentes caso seja necessário (OLIVEIRA, 2006).
1.5.1 Gravador e Depurador in Circuit ICD2BR
Para gravar o programa fonte no dsPIC30F2010 é utilizado um kit gravador e
depurador ICD2BR, fabricado pela Labtools13, que permite que o dsPIC seja programado in
circuit (no circuito), ou seja, não é necessário remover o chip processador do circuito de teste
para fazer a gravação do programa na sua memória flash.
Na Figura 1.26 é visualizado o Kit do Gravador e Depurador ICD2BR original. Ele é
composto da placa ICD2BR e seus respectivos cabos de conexão com o computador e com a
placa soquete para a conexão do PIC. O protótipo do eletrocardiógrafo possui junto ao
processador a ligação dos pinos necessários para gravação do dsPIC junto ao kit gravador
através do conector RJ-12 . Também acompanha um CD com o software MPLAB versão 7.21
e o manual de operação (novas versões do MPLAB podem ser baixadas do site da
MICROCHIP, HTTP://www.microchip.com).
13 Labtools Mosaico Didactic Division é uma empresa situada em São Paulo que comercializa produtos eletrônicos e ministra cursos sobre microcontroladores fabricados pela Microchip.
51
Figura 1.26 – Kit gravador e depurador in circuit ICD2BR. Fonte – Site da Labtools: http://www.labtools.com.br.
A gravação do componente ocorre através dos pinos 17 e 18, referentes às
entradas/saídas RF2 e RF3 e há a necessidade de atuar no pino MCLR.
52
2 DESENVOLVIMENTO DO PROTÓTIPO
O desenvolvimento do protótipo para aquisição de ECG é dividido em quatro etapas
principais. A Figura 2.1 ilustra o diagrama principal do projeto. Na primeira é apresentado o
sensor utilizado na captura do sinal biomédico. Na segunda etapa, denominada de etapa
analógica, é apresentado o filtro analógico e amplificação do sinal. Na terceira etapa,
denominada digital, é mostrada a aplicação do microcontrolador, o conversor analógico
digital e a interface de comunicação serial. Por fim, a última etapa mostra a ferramenta em
VB vizualizando o gráfico proveniente do microcontrolador.
Etapa Analógica
Etapa Digital
Figura 2.1 – Diagrama em Blocos do Protótipo.
53
2.1 Eletrodos e cabos
Para aquisição dos sinais de ECG foi escolhido o eletrodo para monitorização
cardíaca modelo 2223 da 3M14. Este consiste em eletrodo descartável não invasivo composto
de: espuma de polietileno, polivinilálcool coberto com adesivo acrílico, polietileno coberto
com silicone, polímero sintético hidrofílico, pino metálico e contra pino de Ag/AgCl
(prata/cloreto de prata).
No projeto são utilizados três eletrodos e estes podem ficar colados no tórax de um
ser humano por um prazo máximo de 48 horas. Após este período os eletrodos podem
oferecer irritações na pele. A Figura 2.2 mostra o eletrodo da 3M.
Figura 2.2 – Eletrodo para ECG da 3M. Fonte – 3M do Brasil.
Este tipo de eletrodo é mais usado, pois possui potencial de meia célula, ou seja,
forma um potencial de Corrente Contínua (CC) pequeno em contato com a pele, reduzindo a
variação da linha de base.
Os cabos dos eletrodos são coaxiais e a malha externa é conectada ao terra do
circuito de modo a reduzir a interferência eletromagnética existente no ambiente. O fio do
14 3M do Brasil Ltda – Produtos Médico-Hospitalares, Link: WWW.3M.com.br
54
núcleo do cabo deve ser ligado ao eletrodo através de garra do tipo jacaré ou botão de contato
específico. Existe no mercado cabos específicos desenvolvidos para conectar com eletrodos
de ECG, contudo foi utilizado no protótipo um cabo confeccionado com garra do tipo jacaré.
A Figura 2.3 mostra o cabo montado para o protótipo com conector para ligação na placa de
circuito impresso.
Figura 2.3 – Cabo usado para aquisição de ECG.
2.2 Etapa analógica
Nesta etapa o projeto do circuito eletrônico para aquisição de sinais de ECG tem os
seguintes requisitos: adquirir o sinal analógico de baixa amplitude, amplificar, filtrar e
eliminar níveis de tensão negativa, permitindo assim a ligação ao conversor A/D interno do
dsPIC.
A banda de freqüências útil de um sinal de ECG varia de acordo com a aplicação de
0,5 Hz a 50Hz para unidades de monitoramento (banda selecionada para este protótipo) e
acima de 1kHz para medidas de potencial tardio (detecção de marca-passo). Um ECG clínico
padrão tem largura de banda de 0,05Hz a 100Hz (TOMPKINS, 2000).
55
O sinal de ECG pode ser perturbado por diversos tipos de fontes de ruidos. Os
principais são:
Interferência da rede elétrica: 60Hz e harmônicas de ordem superior.
Contato dos eletrodos: a variação do contato do eletrodo com a pele causa um
deslocamento da linha de base do sinal, que é uma variação de tensão proveniente do
contato do eletrodo-pele.
Contração muscular: os sinais típicos de Eletromiografia (EMG) são gerados e
misturados aos sinais de ECG.
Respiração: a respiração causa o deslocamento da linha de base do sinal.
Interferência eletromagnética: outros dispositivos elétricos e eletrônicos podem
causar interferência com os fios ligados aos eletrodos atuando como antenas.
2.2.1 Amplificador de instrumentação
O sinal do ECG captado pelo eletrodo varia entre 0 a 5mV. O amplificador de
instrumentação será responsável por amplificar cerca de 10 vezes este sinal, removendo parte
dos ruídos durante a captura, pois este tipo de amplificador só amplifica as diferenças de
sinais.
56
O amplificador operacional escolhido para esta etapa foi o INA128 da Texas
Instruments15 (TI) por possuir algumas características: ganho ajustável através de resistor
externo, rejeição de modo comum superior a 120dB e alimentação entre +/-2,25V a +/-18V,
conforme Anexo E. A Figura 2.4 mostra o diagrama interno do INA128 e a equação de ganho.
Figura 2.4 – Circuito interno do INA118 Fonte – INA118 Datasheet, 2005
O cálculo do ganho projetado para esta etapa do circuito é mostrado na Equação 2.1.
O circuito montado com o amplificador de instrumentação é mostrado na Figura 2.5.
15 Texas Instruments - A Texas Instruments é uma empresa americana atuante na área de semicondutores, especialmente no mercado de DSPs, microcontroladores e conversores (ADCs e DACs) e amplificadores operacionais. A TI está sediada em Dallas, no estado do Texas. Link: http://www.ti.com/sc/brasil/index.htm
57
Figura 2.5 – Circuito do amplificador de instrumentação.
92,96.5
501501 =ΩΩ
+→Ω
+=kk
RkGG
(2.1)
2.2.2 Desenvolvimento do Filtro Passa-Altas
O filtro passa-altas foi calculado para a freqüência de corte de 0,5 Hz e permite
passar somente sinais com freqüência superior a fc , barrando inclusive os sinais contínuos
que são provenientes da atividade dos músculos.
Foi selecionado um filtro ativo RC de primeira ordem montado em um amplificador
inversor. O amplificador operacional utilizado é o CA3140, este sendo de tecnologia BiMos
operando com alimentação simétrica de +/- 9V. O circuito do filtro é ilustrado na Figura 2.6 e
o cálculo do filtro é demonstrado na Equação 2.2 onde R1 é arbritado em 2,2MΩ.
Esta equação resulta em uma capacitância de 144nF. Foi utilizado o capacitor de
poliéster com valor comercial de 150nF. O ganho para esta etapa foi de 10V/V e a Equação
2.3 mostra o cálculo do ganho.
58
Figura 2.6 – Filtro Passa-Altas.
nFCCMCR
fc 144112.22
15,0112
1=→
⋅Ω⋅⋅=→
⋅⋅⋅=
ππ (2.2)
Ω=→Ω
=→−= kRRM
RRG 2202
22.210
21 (2.3)
O diagrama de Bode do filtro é mostrado na Figura 2.7: o eixo vertical (magnitude)
está em dB, enquanto o eixo horizontal (freqüência) está em Hz.
Figura 2.7 – Diagrama de Bode da resposta do Filtro Passa-Altas.
59
2.2.3 Desenvolvimento do Filtro Passa-Baixas
O filtro foi calculado para a freqüência de corte de 50 Hz. Permite passar somente
sinais com freqüência inferior a fc e com isso remove parte do ruído de 60Hz proveniente da
rede elétrica.
Foi selecionado um filtro ativo RC de primeira ordem montado em um amplificador
inversor. O circuito do filtro é ilustrado na Figura 2.8 e o cálculo do filtro é demonstrado na
Equação 2.4, onde R1 é arbritado em 100kΩ.
Esta equação resulta em uma capacitância de 31,8nF. Foi utilizado um capacitor
cerâmico com valor comercial de 33nF. O ganho para esta etapa foi de 10 e a Equação 2.5
mostra o cálculo do ganho.
Figura 2.8 – Filtro Passa-Baixas.
60
nFCCkCR
fc 33111002
150112
1=→
⋅Ω⋅⋅=→
⋅⋅⋅=
ππ (2.4)
Ω=→Ω
=→−= kRR
kRRG 102
210010
21 (2.5)
O diagrama de Bode do filtro passa-baixas é mostrado na Figura 2.9 onde mostra a fc
em 50Hz (correspondendo a -3dB/dec).
Figura 2.9 – Diagrama de Bode do Filtro Passa-Baixas.
2.2.4 Ajuste de nível de tensão DC
A entrada do conversor analógico/digital do dsPIC está programada para receber
níveis de tensão positivas de 0 a 5V. Como o sinal que é amplificado do ECG possui parcela
negativa foi necessário implementar um ajuste de nível DC. A Figura 2.10 mostra o circuito
implementado.
61
O circuito compõe um amplificador não inversor de ganho unitário. A entrada
inversora possui realimentação de ganho unitário que está ligada ao pino central do
potenciômetro de 100kΩ. Este potenciômetro esta com suas extremidades ligadas a -9V e 9V
e o seu ajuste desloca a referência do amplificador, eliminando os níveis de tensão negativa
do sinal de ECG.
Figura 2.10 – Circuito de ajuste nível DC.
2.3 Etapa digital
A etapa digital do projeto constitui a interligação da etapa analógica ao
microcontrolador. Esta etapa é feita com a elaboração de uma placa de circuito impresso onde
são montadas as duas etapas, possibilitando a programação in circuit do protótipo. Após,
segue a programação do dsPIC que inclui inicialização de portas, conversor A/D, porta de
comunicação serial e desenvolvimento da rotina principal do programa.
62
2.3.1 Programação do dsPIC:
A programação do controlador digital de sinais dsPIC30F2010 foi implementada
utilizando-se a Linguagem C através do software de desenvolvimento e depuração MPLAB.
O programa completo e comentado do protótipo pode ser visualizado no ANEXO G. Foram
utilizadas as interrupções internas do dsPIC para interromper o programa principal e executar
rotinas específicas sempre que alguma ocorrência necessitasse de um tratamento adequado
por parte do programa. A interrupção dos circuitos de transmissão de dados via UART, leitura
da conversão A/D e estouro dos tempos dos timers 1 e 2 são utilizadas no programa de
aquisição de ECG com microcontrolador (MICROCHIP, 2004).
Na programação do dsPIC30F2010 foram incluídas algumas bibliotecas fornecidas
de forma gratuita pela empresa Microchip com a intenção de facilitar a programação. Elas
possuem sub-rotinas desenvolvidas especialmente para a execução de determinadas tarefas e
definições para valores dos registradores responsáveis pela configuração das funções dos
dispositivos internos do dsPIC. A biblioteca principal obrigatória na programação em
Linguagem C deste componente, possui o nome p30f2010.h, onde estão declarados os
endereços referentes a cada bit dos registradores do dsPIC30F2010, além de definir os valores
iniciais dos mesmos. As demais bibliotecas utilizam as definições da p30f2010.h como base
para as suas sub-rotinas e definições (MICROCHIP, 2004).
2.3.1.1 Rotina principal do programa
A rotina principal do programa do dsPIC30F2010 possui a função de ajustar a
inicialização do componente com os valores corretos dos registradores e as configurações dos
63
módulos utilizados no programa. Em seguida, a rotina principal entra em um looping16
infinito, sendo interrompido pelos módulos internos quando há necessidade de executar
alguma função. A Figura 2.11mostra o diagrama em blocos da rotina principal do programa
fonte do protótipo de aquisição de ECG.
Figura 2.11 – Fluxograma da rotina principal do programa.
2.3.1.2 Rotina principal e Looping Infinito
Esta etapa do programa tem como função setar variáveis, habilitar portas e inicializar
as estruturas internas utilizadas, tais como UART, Timer1, Timer2 e A/D. Entrando em modo
de looping, o programa fica aguardando as interrupções dos módulos. Havendo interrupção, o
looping é interrompido e a instrução do módulo é executada, ao término da instrução o
16 Looping – do inglês, é algo que da voltas, referência a um circuito fechado.
64
programa volta para o looping e aguarda a próxima interrupção. Estas estruturas internas são
apresentadas nos próximos tópicos.
2.3.1.3 Interrupção da UART
O módulo UART utilizado para comunicar serialmente com aplicativo, em
Linguagem Visual Basic (VB), para visualizar o ECG. Para habilitar o módulo UART é
necessário setar o bit UARTEN no Registrador de Função Especial, U1MODE. Após
habilitado, os pinos dos registradores U1TX e U1RX (pinos 17 e 18) são configurados para
saída e entrada respectivamente (MICROCHIP, 2004).
O baud rate que determina a velocidade da comunicação serial é ajustado através do
valor armazenado no registrador U1BRG. O cálculo deste valor segue na Equação 2.6 e a
velocidade escolhida é de 38400bps pois nesta velocidade é possível transmitir a variável
analógica sem perdas. A variável U1BRG calculada ficou em 7, resultando um erro de 1,72%.
( )
%72,138400
3840039062
390621716
5000000__
713,713840016
50000001_16
1
38400_
54
200000004
__
=−
=
=+⋅
=
→=−⋅
=−⋅
=
=
===
Erro
calculadorateBaud
rateBaudFCYBRGU
bpsrateBaud
MHzcristaldofreqüênciaFCY
(2.6)
65
2.3.1.4 Interrupção ADC
O conversor A/D é ajustado para converter apenas o sinal proveniente da entrada
analógica zero (AN0), as demais portas não são inicializadas. O sinal digital resultante possui
10 bits. Os bits VCFG definem os pinos AVDD (28) e AVSS (8 e 27) como responsáveis por
fornecer a tensão de referência utilizada pelo módulo, no projeto foi fixado em 5V. O período
entre as conversões A/D (TAD) é calculado conforme descrito na Equação 2.7, onde o
registrador ADCS armazena o valor que determina a freqüência deste clock (MICROCHIP,
2004).
( )( )
12
15.0
−⋅=
+⋅⋅=
TCYTADADCS
ADCSTCYTAD
(2.7)
Com ADCS armazenando o valor 7, o período entre conversões A/D (TAD) fica
determinado em 800ns, gerando uma freqüência do clock de 1,25MHz. Como cada conversão
exige 12 períodos de clock do A/D (TAD), a freqüência de conversão fica ajustada em 104KHz
(MICROCHIP, 2004).
Na rotina de conversão do A/D foi incorporada a transmissão da variável analógica,
assim que os 16 buffers da conversão forem preenchidos uma amostra é guardada na variável
(Val_Ana1) e esta é transmitida no UART. Isto resulta num intervalo fixo de transmissão
determinado pelo ciclo do conversor A/D.
66
2.3.1.5 Interrupção do Timer 1
A rotina de interrupção do Timer 1 serve para ligar e desligar o LED de status da
placa de aquisição e é uma ferramenta simples para diagnosticar se o processador esta
funcionando. Já que durante o projeto são efetuadas várias programações, se uma dessas
rotinas do programa não funcionar, o LED de status não vai piscar.
2.3.1.6 Interrupção do Timer 2
Este timer é responsável por setar a freqüência de amostragem do conversor A/D. A
freqüência de amostragem foi calculada em 1627 kHz conforme é descrito na Equação 2.8.
kHzfa
FTFreq CY 6.16512
5000000_ 2 =⋅
== (2.8)
2.3.2 Montagem da placa do protótipo
O circuito final desenvolvido apresentado no Anexo H foi elaborado no sotware
Multisim da EWB17 em seguida foi exportado para o Ultiboard. No Ultiboard foi criado o
layout da placa. Devido a quantidade de ligações e de componentes foi necessário utilizar uma
placa de fenolite 10X10cm e dupla face de cobre.
17 EWB – Electronic Workbench.
67
O layout criado da máscara de componentes, máscara de solda e visualização em três
dimensões são apresentadas no Anexo I.
68
3 TESTES E VALIDAÇÃO DO PROTÓTIPO
Os testes realizados com o protótipo foram basicamente dois: o primeiro foi captura
de sinal ECG padrão obtido no gerador de sinais e o segundo foi a captura de sinal real
utilizando eletrodos aderidos ao tórax.
Utilizando o gerador de sinais da Agilent (modelo 33220A) para gerar uma onda
ECG padrão foi possível verificar o funcionamento do protótipo. O sinal padrão foi
configurado na freqüência de 1,2Hz, que corresponde a um intervalo TR-R de 833ms,
resultando 72 bpm18. O cálculo para determinar o número de batimentos por minuto é
mostrado na Equação 3.1.
O sinal foi gerado com amplitude de 5Vpp, isto para verificar se toda a faixa de
captura de tensão entre 0 e 5V seria mostrada adequadamente no programa em VB.
( )( )sTsbpm
RR−
=60 (3.1)
18 Bpm – batimento por minuto.
69
A Figura 3.1 mostra o sinal ECG visualizado na ferramenta em VB desenvolvida
pelo Professor Delfim Luiz Torok para auxílio no projeto.
Figura 3.1 – Onda ECG gerada com 5Vpp.
O período entre transmissões dos bits convertidos pelo A/D foi de aproximadamente
2,39ms. Isto resulta em 418 amostras por segundo, sendo suficiente para visualizar o sinal
ECG regenerado no modo de monitorização. A Figura 3.2 mostra sinal de ECG no canal 1 e
os períodos de transmissão dos bits gerados na captura do A/D na transmissão serial.
Figura 3.2 – Período de transmissão dos bits.
70
A transmissão dos bits pela porta serial é mostrada na Figura 3.3. O período de
transmissão do start bit, 8 bits de dados e stop bit foi de 26µs, resultando em uma transmissão
de 38462bps e um erro de 0,6% entre a transmissão setada de 38400bps.
Figura 3.3 – Período da transmissão serial.
Nesta última etapa, o protótipo foi ligado a uma pessoa por meio dos três eletrodos
fixados no tórax (Figura 1.8 - Disposição convencional dos eletrodos para o registro das
derivações eletrocardiográficas padrão). Neste ensaio a pessoa estava sentada próxima a placa
de captura e esta ligada a um computador.
O sinal real capturado apresentou a presença de algumas anomalias: ruído de 60Hz,
ruído de linha de base e ruído muscular, como pode ser visto na Figura 3.4.
Figura 3.4 – Sinal de ECG real.
71
A banda de freqüências da placa de captura é de 0.5 à 50Hz. Com isso o ruído de
60Hz apresentado não veio em sua totalidade da etapa analógica, mas foi proveniente das
interferências atuantes na placa do protótipo. Como não foi implementado um filtro rejeita
banda específico para ruídos da rede elétrica, este poderá ser implementado como filtro digital
em trabalhos futuros.
Verificou-se a importância da conexão dos eletrodos no paciente. Um eletrodo mal
colocado gera potencial de meia-célula, que causa alteração na linha de base do sinal de ECG.
O ruído de linha de base apresentado não prejudica a avaliação do sinal de ECG, já que
variações deste tipo não alteram significativamente a visualização para monitoramento do
ECG.
O ruído de espasmo muscular visualizado no ECG, quando exercido algum esforço,
pode ser eliminado com um filtro rejeita banda de 35Hz. Isto pode ser implementado
futuramente através de um filtro digital no dsPIC (MELCO, 2006).
72
CONSIDERAÇÕES FINAIS
O referencial teórico forneceu uma base importante para o desenvolvimento deste
trabalho e pode servir como material de pesquisa, para que outros acadêmicos possam
proceder com trabalhos adicionais nesta área de conhecimento.
De maneira geral a funcionalidade do protótipo projetado foi satisfatória, todos os
módulos apresentados no protótipo funcionaram. A etapa analógica conseguiu estabelecer a
função de tratamento inicial do sinal de ECG e enviar o sinal tratado para o conversor A/D.
Na etapa digital todos os módulos funcionaram mostrando um bom desempenho do dsPIC. O
conversor A/D funcionou corretamente conseguindo gerar uma boa taxa de amostragem. O
módulo de comunicação UART teve bom desempenho na transmissão em 38,4 kbps, não
necessitando de Cyclic Redundancy Check (CRC).
Considera-se que o objetivo inicial básico foi alcançado a contento, contudo observa-
se, que muitos outros desenvolvimentos futuros são necessários, de forma que o protótipo
possa a vir tornar-se um eletrocardiógrafo de boa qualidade para uso em diagnósticos de
cardiopatias.
Pode ser destacada uma série de desenvolvimentos futuros a curto e médio prazo
para melhorar e dar seqüência ao trabalho aqui realizado. Entre estes, citam-se: utilização de
73
cabos específicos para conexão aos eletrodos; melhorar a eficiência dos filtros, aumentando a
sua ordem; implementar filtro digital e/ou adaptativos para auxiliar o processo captura e
correções do sinal ECG, bem como a miniaturização da placa utilizando componentes com
encapsulamento menor.
Finalmente concluir o protótipo, transformando-o em um produto final de qualidade
e competitivo, acrescentando recursos de transmissão sem fio e/ou comunicação via USB,
bem como utilizando cartão de memória para gravar os sinais obtidos em um intervalo de
tempo maior.
REFERÊNCIAS BIBLIOGRÁFICAS
BOGART Jr, Theodore F.. Dispositivos e Circuitos Eletrônicos. 3.ed. São Paulo: Makron
Books, 2001. 463p.
FILHO, Adalberto Ayjara Dornelles. Fundamentos de Linguagem C. 2.ed. Caxias do Sul:
SENAI RS, 1998. 111p.
FÜHR, Thiago Henrique. Desenvolvimento e implementação de um protótipo para
validação de sistemas de controle para motor dc por meio de modulação por largura de
pulso utilizando um processador digital de sinais. Novo Hamburgo: 2006. 173p. Trabalho
de Conclusão (Bacharel em Engenharia Eletrônica) - FEEVALE, ASPEUR, 2006.
GIACOMIN, João C.. Eletrônica Básica: Amplificadores Operacionais. São Paulo:
Universidade Federal de Lavras, 2000. 31p.
GUYTON & HALL, Arthur C.. Textbook of Medical Physiology. 11.ed. Philadelphia,
Pennsylvania - USA: Elsevier Inc., 2006. 1152p.
JUNIOR, Antonio Pertence. Amplificadores Operacionais. 3.ed. São Paulo: Makron Books,
2001. 245p.
75
LABTOOLS, Mosaico Didatic Division. Guia do Usuário ICD2BR in Circuit Debugger.
3.ed. São Paulo: Mosaico, 2005. 39p. Disponível em:
<http://www.labtools.com.br/arquivos/ICD2-BR-set.2005_rev._03.pdf>. Acesso em: 25 nov.
2007.
MALVINO, Albert Paul. Eletrônica: Volume II. 4.ed. São Paulo: Makron Books, 1995.
558p.
MELCO, Tito Coutinho. Estudo do Eletrocardiograma sob uma Abordagem Matemática.
São Paulo: 2006. 100p. Tese (Mestrado em Engenharias) - Engenharia Mecatrônica e de
Sistemas Mecânicos, Escola Politécnica da Universidade de São Paulo, 2006.
MITRA, Sanjit K.. Digital Signal Processing: a computer-based approach. 2.ed. New York:
McGraw-Hill, 2001. 866p.
OLIVEIRA, André Schneider de. Sistemas Embarcados: Hardware e Firmware na Prática.
1.ed. São Paulo: Érica, 2006. 316p.
PRODANOV, Cléber Cristiano. Manual de Metodologia Científica. 1.ed. Novo Hamburgo:
Feevale, 1997. 66p.
SEDRA, Adel S.. Microeletrônica. 4.ed. São Paulo: Makron Books, 2000. 1270p.
SHIRLEY, A. Jones. ECG Notes: Interpretation and Management Guide. 1.ed. Philadelphia
USA: F. A. Davis Company, 2005. 207p.
76
TOMPKINS, Willis J.. Biomedical Digital Signal Processing: C-Language Examples and
Laboratory Experiments for the IBM PC. 1.ed. New Jersey: Prentice Hall, 2000. 361p.
77
77
ANEXOS
78
ANEXO A - DIAGRAMA DE BLOCOS DO DSPIC30F2010
79
Fonte – Datasheet dsPIC30F2010, 2004.
80
ANEXO B – MAPA DA ORGANIZAÇÃO DAS MEMÓRIAS NO DSPIC30F2010
81
Fonte – Datasheet dsPIC30F2010, 2004.
82
ANEXO C – TABELA DE INTERRUPÇÕES DO DSPIC30F2010
83
Fonte – Datasheet dsPIC30F2010, 2004.
84
ANEXO D – MAPA DE REGISTRO DAS PORTS
85
Fonte – Datasheet dsPIC30F2010, 2004.
86
ANEXO E – AMPLIFICADOR OPERACIONAL INA128
87
Fonte – Datasheet INA128, Texas Instruments.
88
Fonte – Datasheet INA128, Texas Instruments.
89
Fonte – Datasheet INA128, Texas Instruments.
90
Fonte – Datasheet INA128, Texas Instruments.
91
Fonte – Datasheet INA128, Texas Instruments.
92
ANEXO F – AMPLIFICADOR OPERACIONAL CA3140
93
Fonte – Datasheet CA3140, INTERSIL 2005.
94
Fonte – Datasheet CA3140, INTERSIL 2005.
95
Fonte – Datasheet CA3140, INTERSIL 2005.
96
Fonte – Datasheet CA3140, INTERSIL 2005.
97
ANEXO G – CÓDIGO FONTE DO PROGRAMA DO DSPIC
98
/* Autor: Martin Nähr Data: 05/12/2007 Titulo: Ecg_DataLog */ //************************************************************************************************ //***** Bibliotecas Utilizadas ******************************************************************* #include<p30f2010.h> //Biblioteca do dsPIC30F2010 #include<uart.h> //Biblioteca UART.h #include<reset.h> //Biblioteca reset.h #include<dsp.h> //Biblioteca de DSP //******************************************************************************************************************************************** //************************************************ Fuses ************************************************************************************ _FOSC(CSW_FSCM_OFF & HS); // Oscilador externo sem tratamento de erro _FWDT(WDT_OFF); // WatchDog disabilitado _FBORPOR(MCLR_EN & PBOR_OFF & PWRT_OFF); // Desabilita MCLR, PBOR e PWRT _FGS(CODE_PROT_OFF); // Sem protecao de codigo - é possível a leitura // posterior a gravação do chip. //******************************************************************************************************************************************** //**************************************** Define Valores Padrões para o Programa **************************************************** #define Fcy 5000000 //Freqüência do ciclo=freqüência do oscilador/4 //dsPIC necessita de 4 ciclos de clock para executar //um ciclo de instrução #define Freq_T1 (Fcy / 1024) //freqüência do Timer 1 para piscar Led => 1024=0,5s #define Freq_T2 (Fcy / (512*6)) //freqüência do Timer 2 para habilitar conv.A/D = 1.6KHz #define Tad (7) //Tempo para conversão A/D a 104Ksps para Fcy=5.000.000 //******************************************************************************************************************************************** //************************************************ Declarando as variáveis *************************************************************** unsigned int Par1; //define a variável inteira sem sinal Par1 //Parâmetro 1 transmitido via UART unsigned int Par2; //define a variável inteira sem sinal Par2 //Parâmetro 2 transmitido via UART unsigned int Par; //define a variável inteira sem sinal Par //Parâmetro utilizado pelo comando int Val_Ana1; //define a variável inteira Val_Ana1 unsigned int ADResult[16]; //define a matriz de variáveis inteiras sem sinal ADResult //recebe o resultado da conversão A/D numa matriz de tamanho 16 volatile unsigned int *ptr; //define a variável ponteiro inteira sem sinal ptr //ponteiro para indicar o resultado da conversão A/D nos buffers unsigned int a; //define a variável a para a Interrupção da recebimento de dados unsigned int count;
99
//******************************************************************************************************************************************** //****************************************************** Funções Utilizadas**************************************************************** void inicia_UART(void); //declara a função para iniciar a UART void _ISR _U1TXInterrupt(void); //declara a função de tratamento da interrupção //de transmissão de dados void _ISR _U1RXInterrupt(void); //declara a função de tratamento da interrupção //de recepção de dados void TransPac (void); //declara a função para transmitir um pacote de dados via UART void TransBuf (void); //declara a função para transmitir buffer de dados via UART void inicia_timer2(void); //declara a função para iniciar o timer da conversão A/D void _ISR _T2Interrupt(void); //declara a função de tratamento da interrupção do timer da conversão A/D void inicia_ADC (void); //declara a função para iniciar a conversão A/D void _ISR _ADCInterrupt(void); //declara a função de tratamento da interrupção A/D void inicia_timer1(void); //declara a função para iniciar o timer do LED de estado void _ISR _T1Interrupt(void); //declara a função de tratamento da interrupção do timer do LED de estado //******************************************************************************************************************************************** //******************************************** Rotina Principal do Programa ************************************************************* int main(void){ a=0; //variável a=0 TRISD = 0xfffc; //Seta RD0 e RD1 p/ saídas - 1111 1111 1111 1100 LATDbits.LATD0 = 1; //Led_Status Verde = Desligado LATDbits.LATD1 = 0; //Led_Status Vermelho = Desligado inicia_timer1(); //inicializa o timer do LED de Led_Status Verde inicia_UART(); //Inicializa UART inicia_ADC(); //inicializa a conversão A/D inicia_timer2(); //inicializa o timer da conversão A/D while(1){ //loop principal -> infinito } //fim do while return 0; //devolve zero (0) } //******************************************************************************************************************************************** //******************************************* Inicialização do módulo UART ************************************************************* void inicia_UART() { unsigned int ubrg; //define a variável ubrg unsigned int config1; //define a variável config1 unsigned int config2; //define a variável config2 CloseUART1(); // desabilita a UART1 ubrg = 7; // ubrg=(fcy/(BaudRate*16))-1 // fcy=FCristal/4
100
// Neste Caso: Baud Rate=38400 // Freq.Cristal=20MHz // fcy=5MHz, ubrg=7 7,15 calculado ConfigIntUART1(UART_RX_INT_EN & //Função para configuração das interrupções da UART //habilita a interrupção de recepção UART_RX_INT_PR2 & //Define a prioridade da interrupção de recepção=2 UART_TX_INT_EN & //habilita a interrupção de transmissão UART_TX_INT_PR4); //Define a prioridade da interrupção de transmissão=4 config1 = UART_EN & //Define a variável config1 com os seguintes parâmetros //Habilita o módulo UART UART_IDLE_CON & //UART funcionando no modo IDLE UART_RX_TX & //Configura a comunicação através dos pinos padrões //de TX e RX (U1TX e U1RX) UART_DIS_WAKE & //Desabilita o modo "Wake-up" UART_DIS_LOOPBACK & //desabilita o modo "loop back" UART_DIS_ABAUD & //Desabilita o modo "autobaud" UART_NO_PAR_8BIT & //Define a comunicação com 8 bits de dados e //sem bit de paridade UART_1STOPBIT; //Define o Stop Bit=1 config2 = UART_INT_TX_BUF_EMPTY & //Define a variável config2 com os seguintes parâmetros //Ocorre interrupção de transmissão quando buffer de //transmissão for esvaziado UART_TX_PIN_NORMAL & //Define o bit TXBreak como normal UART_TX_ENABLE & //Habilita a transmissão da UART UART_INT_RX_BUF_FUL & //Ativa a interrupção de recepção quando Buffer estiver cheio (4 bytes) UART_ADR_DETECT_DIS & //Desativa o modo de "adress detect" UART_RX_OVERRUN_CLEAR; //Limpa o flag de "overrun" OpenUART1(config1, config2, ubrg); //Habilita a UART1 com os parâmetros de configuração //definidos pelas variáveis Config1, config2 e ubrg } //******************************************************************************************************************************************** //**************************** Rotina de tratamento da Interrupção da transmissão de dados **************************************** void _ISR _U1TXInterrupt(void){ //função da rotina de interrupção de transmissão de dados IFS0bits.U1TXIF=0; //clear no bit de chamada da interrupção de transmissão } //******************************************************************************************************************************************** //********************* Rotina de tratamento da Interrupção da recebimento de dados ********************************************** //******************************************************************************************************************************************** void _ISR _U1RXInterrupt(void){ //função da rotina de interrupção de recepção de dados TMR1=0; //Zera a contagem do Timer 1 if (a==1){ //verifica se a variável a=1 LATDbits.LATD0 = 0; //Liga o LED de status a=0; //variável a=0 } //fim do if else{ //se a variável a é diferente de 1 então executa os seguintes comandos LATDbits.LATD0 = 1; //Desliga o LED de status
101
a=1; //variável a=1 } //fim do else //Protocolo de comunicação = byte1:Par2, byte2:Par1 while(BusyUART1()); //retorna o status da transmissão; espera enquanto a UART estiver ocupada Par2=ReadUART1(); //lê o segundo byte do buffer de recepção da UART = Parâmetro 2 Par1=ReadUART1(); //lê o terceiro byte do buffer de recepção da UART = Parâmetro 1 Par=Par2<<8; //Byte mais significativo do Parâmetro=Parâmetro2 recebido via UART Par=Par + Par1; //Byte menos significativo do Parâmetro= Parâmetro1 recebido via UART TransPac(); //Parâmtro 1 e 2 são unidos em uma só variável Parâmetro } //fim do if IFS0bits.U1RXIF=0; //clear no bit de chamada da interrupção de recepção } //fim da interrupção de recepção da UART //******************************************************************************************************************************************** //************************************* Rotina para a inicialização do conversor A/D *************************************************** void inicia_ADC() { ADCON1bits.ADON = 0; //desabilita o módulo de conversão A/D ADCON1bits.ADSIDL = 0; //módulo A/D continua convertendo mesmo com a CPU em modo idle(inativa) ADCON1bits.FORM = 0; //formato da saída da conversão sem sinal ADCON1bits.SSRC = 7; //contador interno termina uma amostragem e já começa a próxima ADCON1bits.ASAM = 0; //amostragem individual ADCON2bits.VCFG = 0; //referencia AVDD e AVSS ADCON2bits.CSCNA = 0; //utiliza apenas um canal para a conversão ADCON2bits.SMPI = 0; //gera uma interrupção a cada conversão - buffer(0) ADCON2bits.BUFM = 0; //buffer de 16 bits ADCON2bits.ALTS = 0; //utiliza sempre o MUX A, não alterna entre MUX A e MUX B ADCON3bits.ADCS = Tad; // Tad equals Min amount of instr cycles Fastest possible //seleciona o clock de conversão ADCON3bits.SAMC = 1; //define o tempo da auto-amostragem em 1 Tad ADCON3bits.ADRC = 0; // derive Tad from system clock // //utiliza o mesmo clock do sistema ADCHS = 0; //configura o conversor AN0 como entrada positiva ADCSSL = 0x0000; //seleciona a entrada AN0 para a conversão ADPCFG = 0xFFFE; //configura apenas o pino AN0 como entrada analógica IFS0bits.ADIF = 0; //clear no bit de chamada da interrupção da conversão A/D IPC2bits.ADIP = 6; //Define a prioridade da interrupção do módulo A/D=6 IEC0bits.ADIE = 1; //habilita a interrupção do módulo A/D ADCON1bits.ADON = 1; //habilita o módulo de conversão A/D } //******************************************************************************************************************************************** //******************************* Rotina de Tratamento da Interrupção do Conversor A/D ********************************************* void __attribute__((__interrupt__)) _ADCInterrupt(void) { int i = 0; //define a variável inteira Pos_Atual ptr = &ADCBUF0; //ponteiro ptr recebe o endereço do buffer0 //de conversão A/D while (i < 16) //executa a leitura da conversão A/D enquanto i<16 {
102
ADResult[i++] = *ptr++; //ponteiro ptr é incrementado até i=15 //ADResul recebe os valores da conversão A/D na posição '0' //são feitas 16 leituras para garantir que os 16 buffers da //conversão A/D sejam lidos e automaticamente limpos, //garantindo que o resultado da próxima leitura fique no buffer0 } //fim do while Val_Ana1=ADResult[0]; //Posição atual recebe o resultado da conversão A/D TransBuf(); //transmite apos carregar o valor da (Val_Ana1/4) IFS0bits.ADIF = 0; //clear no bit de chamada da interrupção da conversão A/D } //************************************************************************************************ //****** Rotina de inicialização do timer 2 para conversão A/D *********************************** void inicia_timer2(void) { T2CON = 0; //desabilita a contagem do timer2 TMR2 = 0; //zera a contagem de tempo do timer2 IFS0bits.T2IF = 0; //clear no bit de chamada da interrupção do timer2 PR2 = Freq_T2; //Freq_AD determinando a frequência de conversão do A/D T2CONbits.TCKPS = 1; //Ajusta o prescaler para 1:1 IPC1bits.T2IP = 5; //Define a prioridade da interrupção do timer2=5 IEC0bits.T2IE = 1; //habilita a interrupção do timer2 T2CONbits.TON = 1; //habilita a contagem do timer2 } //******************************************************************************************************************************************* //********************** Rotina de tratamento da interrupção do Timer 2 para conversão A/D ************************************** void _ISR _T2Interrupt(void) { IFS0bits.T2IF = 0; // clear no bit de interrupção do timer 2 ADCON1bits.SAMP = 1; // executa a converssão A/D } //******************************************************************************************************************************************** //************************* Rotina de inicialização do timer 1 para o LED indicador de estado *************************************** void inicia_timer1(void) { T1CON = 0; //desabilita a contagem do timer1 TMR1 = 0; //zera a contagem de tempo do timer1 IFS0bits.T1IF = 0; //clear no bit de chamada da interrupção do timer1 PR1 = Freq_T1; //ajusta o período de tempo do timer1 para o valor da freqüência //do ciclo de instrução Fcy/1024 = 0.5 segundos T1CONbits.TCKPS = 3; //Ajusta o prescaler para 1:256 IPC0bits.T1IP = 7; //Define a prioridade da interrupção do timer1=7 IEC0bits.T1IE = 1; //habilita a interrupção do timer1 T1CONbits.TON = 1; //habilita a contagem do timer1 }
103
//******************************************************************************************************************************************** //************************* Rotina de tratamento da interrupção do Timer 1 para o LED de estado ********************************** void _ISR _T1Interrupt(void) { if (a==1){ //verifica se a variável a=1 LATDbits.LATD0 = 0; //Liga o LED de status a=0; //variável a=0 } //fim do if else{ //se a variável a é diferente de 1 então executa os seguintes comandos LATDbits.LATD0 = 1; //Desliga o LED de status a=1; //variável a=1 } //fim do else IFS0bits.T1IF = 0; // clear no bit de interrupção do timer 1 } //******************************************************************************************************************************************** //************************************ Rotina para enviar o pacote de dados via UART ************************************************ void TransPac (void){ //Função que transmite o pacote de dados Par1=Par; //Parâmetro 1 de transmissão recebe byte menos significativo do Parâmetro Par2=Par>>8; //Parâmetro 2 de transmissão recebe byte mais significativo do Parâmetro while(BusyUART1()); //retorna o status da transmissão; espera enquanto a UART estiver ocupada putcUART1(Par2); //transmite via UART o Parâmetro 2 putcUART1(Par1); //transmite via UART o Parâmetro 1 while(BusyUART1()); //espera a UART desocupar //1=UART ocupada, 0=UART desocupada } //******************************************************************************************************************************************** //******************************************************************************************************************************************** //********************************** Rotina para enviar o Buffer de dados via UART *************************************************** void TransBuf (void){ //Função que transmite o pacote de dados int c; while(BusyUART1()); //retorna o status da transmissão; espera enquanto a UART estiver ocupada putcUART1((y[0]/4)); // transmite serialmente o valor do A/D while(BusyUART1()); //espera a UART desocupar } //******************************************************************************************************************************************** //**************************************************** Fim do Programa******************************************************************** //********************************************************************************************************************************************
104
ANEXO H – CIRCUITO DO PROTÓTIPO
105
Circuito eletrônico do protótipo de aquisição de ECG.
106
ANEXO I – LAYOUT DA PLACA DO PROTÓTIPO
107
Máscara de solda.
Lado dos componentes.
108
Máscara de identificação.
Placa mostrada em 3 dimensões.