Электрокардиограф на базе микроконвертора

Компоненты и технологии, № 6'2004

Электрокардиограф

на базе микроконвертора

В статье описаны подходы и технические решения, позволяющие спроектировать схемотехнически простой и недорогой электрокардиомонитор на базе микроконвертора фирмы Analog Devices.

Энрик Компани-Бош Экарт Хартманн

Перевод: Алексей Власенко alexey.vlasenko@analog.spb.ru

Введение

Электрокардиография — это запись электрических сигналов, генерируемых при работе сердца. Сигнал ЭКГ снимается с кожных покровов при помощи электродов, размещаемых в определенных точках. Кривая ЭКГ имеет характерную форму, пики и интервалы между пиками обозначаются латинскими буквами Р, Q, И, 8, Т и и (см. рис. 1).

В данной статье предложены некоторые идеи по реализации недорогого ЭКГ-монитора. Устройство предполагается использовать совместно с персональным компьютером. Хотя при написании статьи предусматривались средства, обеспечивающие безопасность пациента, это не значит, что все представленные идеи сами по себе удовлетворяют всем требованиям стандартов безопасности; при разработке устройства вам следует самим обеспечить его соответствие требованиям безопасности.

Сначала мы рассмотрим типичную топологию входной (аналоговой) части электрокардиографа. Затем предложим схему, которая обеспечит аналого-цифровое преобразование, цифровую фильтрацию и нормирование цифрового сигнала — все это обеспечит микроконвертор — интегральная «система-на-кристалле», в которую входят аналого-цифровой преобразователь, микроконтроллер и флэш-память. В данной статье будут рассматриваться вопросы выбора компонентов и программирования микроконвертора.

Требования к электрокардиографу

Входные цепи аппарата ЭКГ должны усиливать довольно слабый сигнал — в диапазоне напряжений 0,5-5 мВ в сочетании с постоянной составляющей величиной до ±300 мВ, которая возникает при контакте электрода с кожей (в русскоязычной литературе это явление называется кожно-гальванической реакцией, КГР. — Прим. перев.), плюс синфазная составляющая величиной до 1,5 В между электродами и общим (земляным) проводом. Полоса частот, подлежащая обработке и анализу, составляет, в зависимости от вида исследования, от 0,5 Гц

до 50 Гц (в устройствах мониторинга при интенсивной терапии), и до 1 кГц при исследовании водителей сердечного ритма (пейсмейкеров). Стандартный клинический аппарат ЭКГ работает с полосой частот 0,05-100 Гц.

На сигналы ЭКГ могут накладываться различного рода шумы и помехи. Основные источники шумов и помех это:

• влияние сетевых помех с частотой 50 Гц (или 60 Гц) и гармоник сетевого напряжения;

• влияние изменений параметров контакта электрода с кожей, приводящее к дрейфу постоянной составляющей;

• мышечные сокращения: при этом на сигнал ЭКГ накладываются сигналы типа миограммы (ЭМГ);

• дыхательные движения вызывают смещение постоянной составляющей;

• электромагнитные наводки от других электронных устройств, когда провода электродов ЭКГ играют роль антенн;

• высокочастотные шумы от других электронных устройств.

Для точной и достоверной регистрации ЭКГ необходимо принять все меры для отфильтровыва-ния или устранения перечисленных шумов.

Типичная сигнальная цепочка аппарата ЭКГ

На рис. 2 показана структурная схема типичного одноканального электрокардиографа. Видно, что в данной сигнальной цепочке все виды фильтрации сигнала осуществляются с помощью аналоговой техники, тогда как микропроцессор, микроконтрол-------www.finestreet.ru------------------------

Компоненты и технологии, № 6'2004

лер или процессор DSP используется только для целей коммуникации, управления и т. п. Таким образом, имеющийся вычислительный ресурс процессора не использован. Кроме того, сложные аналоговые фильтры могут оказаться весьма нежелательными с точки зрения неудобства их перестройки, а также занимаемого места на плате, высокой стоимости и энергопотребления.

Предлагаемое схемное решение

Сигнальная цепочка может быть значительно упрощена при использовании микроконвертора ADuC842, который позволяет заменить АЦП, фильтры и вычислительный блок одной интегральной микросхемой. Дополнительные преимущества заключаются в гибкости перестройки параметров фильтра и в изоляции цифрового интерфейса. Предлагаемое схемное решение приведено на рис. 3.

Аналоговый вход

Для схемы аналогового входа применено традиционное для подобных систем решение — инструментальный усилитель (IA) и операционный усилитель обратной связи, выход которого подключен к правой ноге пациента. В качестве инструментального усилителя применен AD620 — недорогой усилитель с высокой точностью и превосходными характеристиками на постоянном токе: коэффициент ослабления синфазного сигнала CMR >> 100 dB на частотах вплоть до 1 кГц, смещение на входе не более 50 мкВ, малый входной ток (1 нА макс.) и низкое напряжение шума (0,28 мкВ в полосе 0,1...10 Гц).

Для AD620 требуется единственный внешний резистор Rg, задающий коэффициент усиления. Резисторы R2 и R3 также влияют на коэффициент усиления: КУС = 1+49,4k/ Rg + (49,4k/2)/22k. Для того чтобы избежать насыщения выхода, коэффициент усиления установлен таким, чтобы размах выходного напряжения соответствовал максимальному, если на входе присутствует максимальное расчетное напряжение сигнала. При напряжении питания ±5 В размах выходного напряжения ИС AD620 составляет ±3,8 В; тогда при входном сигнале ±5 мВ и при возможном постоянном смещении ±300 мВ расчетный коэффициент усиления составит 12,45. Таким образом, с учетом запаса, мы устанавливаем коэффициент усиления равным 8 (±1%) при помощи Rg = 8,45 кОм.

В схеме обратной связи, предназначенной для компенсации синфазного сигнала, применен операционный усилитель типа ОР97 — малопотребляющий прецизионный ОУ с чрезвычайно высоким коэффициентом ослабления синфазного сигнала (мин. значение 114 дБ). Эта схема подает на правую ногу пациента напряжение, компенсирующее синфазную составляющую сигнала с целью устранить влияние синфазного сигнала. Операционный усилитель имеет коэффициент усиления для синфазного сигнала, равный 91 [то есть К4/(Я2!1И3) = 1 МОм/11 кОм], ичастоту среза низкочастотного фильтра около 160 Гц, что обеспечивает устойчивость усиления

[f-

3dB

1/2п х (10 кОм х 0,1 мкФ)].

Гальваническая развязка цифрового сигнала

Гальваническая развязка применена в цифровом интерфейсе RS-232, связывающем электрокардиограф и компьютер, который предназначен в этом примере для вывода данных. В качестве устройства изоляции сигнала применена ИС ADuM1301 — двунаправленный цифровой изолятор, созданный по технологии iCoupler фирмы Analog Devices. Данная технология позволила создать устройства развязки цифрового сигнала, лишенные недостатков, присущих оптопарам

Устройства iCoupler, кроме того, обеспечивают высокую скорость передачи данных при гораздо меньшем энергопотреблении по сравнению с оптопарами. ИС ADuM1301 имеет три изолирующих канала, два их которых используются в данной схеме — один для передачи, другой для приема данных. (Неиспользуемый канал в дальнейшем можно использовать для передачи сигнала разрешения/запрещения передачи данных.) Питание входной части прибора осуществляется с помощью ИС ADP3607-5 — стабилизатора напряжения на переключаемых конденсаторах, который обеспечивает постоянное напряжение 5 В. Линии питания той части прибора, которая подключена к компьютеру, совершенно изолированы от входной части. Питание выходной части прибора может осуществляться от компьютера или от другого источника питания.

Безопасное электропитание

Питание изолированной части регистратора ЭКГ осуществляется с помощью батареи, которая периодически подзаряжается с помощью зарядного устройства в то время, когда аппарат ЭКГ не используется. Для того чтобы обрабатывать биполярный входной сигнал, усилителям AD620 и OP97 требуется биполярное питание ±5 В. Стабилизатор напряжения на переключаемых конденсаторах ADP3607-5 и инвертор на переключаемых конденсаторах ADP3605 служат для получения стабилизированного двухполярного питания от батареи напряжением 3 В.

ИС ADP3607 — удвоитель напряжения со стабилизированным выходным напряжением, обеспечивающий ток до 50 мА. Она способна работать при напряжении питания 3 В, имеется версия, обеспечивающая фиксированное выходное напряжение 5 В

Инверторы на переключаемых конденсаторах ADP3605 со стабилизированным выходным напряжением могут обеспечить ток до 120 мА. Они поставляются с фиксированным выходным напряжением -3 В (ADP3605-3) или с регулируемыми внешними резисторами в диапазоне -3...-6 В. (Более высокое напряжение можно получить с помощью дополнительного внешнего каскада, так же как и в ИС ADP3607.) Нам необходим источник напряжения питания -5 В при входном напряжении +5 В, поэтому сопротивление резистора R выбрано равным 31,6 кОм (±1%) при помощи уравнения VOUT = -1,5 R/9,5 кОм.

Оба напряжения питания (±5 В) получены с помощью емкостных «зарядовых насосов», в принципе неспособных генерировать небезопасное напряжение даже при нарушении режимов работы, так как в схеме отсутствуют катушки индуктивности. В этих микросхемах также имеется режим отключения (shutdown), что позволяет микроконвертору переводить их в этот режим, когда система находится в состоянии ожидания.

Компоненты и технологии, № 6'2004

Безопасность пациента

Помимо приборов гальванической развязки цифрового сигнала и безопасного источника питания в схеме имеются резисторы Rx1, Rx2 и Rx3, обеспечивающие безопасность пациента — в соответствии с требованиями стандарта AAMI (Association for the Advancement of Medical Instrumentation) на безопасную величину тока. Эти стандарты требуют, чтобы среднеквадратическое значение тока утечки на землю или тока в аварийном режиме не превышало 50 мкА.

Обработка сигнала

Микроконвертор ЛБиС842 хорошо подходит для решения задач обработки сигнала. Он обладает быстрым 12-разрядным АЦП и другими встроенными высокопроизводительными аналоговыми периферийными устройствами, имеет быстрое ядро типа 8052, 62 кбайт встроенной флэш-памяти программ и еще некоторые полезные функциональные узлаы (рис. 4).

Главные блоки микроконвертора с точки зрения данной разработки — это АЦП и яд-

ро процессора. АЦП преобразует выходной сигнал инструментального усилителя в цифровой код. Программное обеспечение, написанное для процессора 8052, предназначено для обработки цифровых данных и окончательного получения цифрового сигнала для передачи в компьютер. Как и во многих случаях, когда применяется микроконвертор, программное обеспечение включает в себя как сложный код, написанный на языке высокого уровня С, так и критичные ко времени исполнения фрагменты, написанные на ассемблере. В нашем случае реализация

О

HARDWARE CONVST (23

ADC0 (Г

ADC1 (X

ADC2 к

ADC3 С4'

ADC4 (if

ADC5 (12

ADC6 (й

ADC7 (l 4

—(g) PWM0

PWM1

^—(22) то

^@ Т1

М—ф Т2

Т2ЕХ

INTO

© INTI

Рис. 4. Структурная схема ADuC842

Компоненты и технологии, № 6'2004

ИНД

CH3 50.0mV~

REF1 500mV 400ms

M400ms ACH3f251mV

Рис. S. Кривые на экране осциллографа

низкочастотного и режекторного фильтров написана на С, а АЦП управляется с помощью кода, написанного на ассемблере. Эффективный код в сочетании с быстродействующим ядром процессора обеспечивает накопление множества отсчетов, что увеличивает эффективную разрешающую способность АЦП сверх обычных 12 разрядов.

На рис. 5 показана хорошая иллюстрация эффективности микроконверторов. На верхней кривой показан сигнал на выходе инструментального усилителя, поданный на вход АЦП. На средней кривой показан предварительный результат, полученный с помощью фильтра, реализованного на С, а на нижнем графике показан окончательный результат после обработки множества отсчетов, алгоритм которой написан на ассемблере.

Алгоритм фильтра, написанный на С

Полученный сигнал обрабатывается с помощью цифрового фильтра в микроконверторе. Для разрабатываемого нами устройства мы применили два фильтра с бесконечной импульсной характеристикой (НИ), рассчитанной для частоты дискретизации 500 Гц. Режекторный фильтр предназначен для подавления сигнала с частотой 50 Гц. Выбранный нами алгоритм разработки фильтра — это метод размещения нулей и полюсов, частота подавления — 50 Гц, полоса задержания шириной 10 Гц. Полученная в результате расчета передаточная функция:

1 -1.6182-4

H(Z):

1 - 1.5164Z”1 + 0.8783z“2

этот процессор не оптимизирован для операций с плавающей точкой. К счастью, мы можем масштабировать коэффициенты (умножив их на 4096) и получить код фильтра:

iNOut = (4096L х 1Шп - 6627L х 1Шп1 +

+ 4096L х iNIn2 + 62Ш х iNOut1 -- 3598L х iNOut2)/4096;

Таким образом реализован фильтр второго порядка. Хотя мы можем рассчитать фильтр и более высокого порядка, на практике вполне можно каскадировать фильтры второго порядка.

Второй фильтр — это полосовой фильтр Баттерворта с частотами среза 0,05 Гц снизу и 100 Гц сверху. Передаточная функция и рекурсивный алгоритм:

ш ч = 0.4206 - 0Л206г~2

1 - 1.15822-1 + 0.15822“2

здесь потеряна передаточная функция ВОМк = 0.4206ВП - 0.4206В1пк-2 +

На языке C эти уравнения будут выглядеть следующим образом:

iBOut = (1723L*iBIn-1723L*iBIn2+4743L*iBOut1-630L*iBOut2)/4096;

Эту функцию можно преобразовать в рекурсивный алгоритм:

NOutk = NInk _ 1.618NInk_1 + NInk_2 +

В данном уравнении индекс к означает текущий отсчет, к-1 означает значение величины в предыдущий момент времени и т. д.

Теперь нам нужно преобразовать приведенное уравнение в код. Программирование на С — наиболее рациональный метод для написания алгоритмов ресурсоемкой математической обработки в подобных случаях; программирование на ассемблере заняло бы слишком много времени. Но напрямую написать уравнения фильтра было бы неэффективно для процессора типа ЛБиС842, так как

while

{

while(c23ms<64); //Ждем, когда будет произведено 64 измерения

iBIn = iAdc0>>3; //Сохраняем накопленное значение

iAdc0 = 0; //Сбрасываем переменную для накапливания новых

отсчетов

c23ms = 0; //Сбрасываем таймер синхронизации // Полосовой фильтр 0.03 — 100Hz //Fs=300

iBOut = (6891L*lBIn-6891L*lBIn2+4743L*iBOut1-630L*iBOut2)>>12L; iBO10 = (6891L*iBOut-6891L*iBOut2+4743L*iBO11- 630L*iBO12)>>12L; iBO20 = (1723L*iBO10-1723L*iBO12+4743L*iBO21- 630L*iBO22)>>12L; iBO30 = (1723L*iBO20-1723L*iBO22+4743L*iBO31-630L*iBO32)>>12L; iNIn = (1723L*iBO30-1723L*iBO32+4743L*iNIn1-630L*iNIn2)>>12L; // 2 notch filters. iNOut = (4096L*iNIn-6627L*iNIn1+4096L*iNIn2+6211L*iNOut1-3398L*iNOut2)>>12L; iN3O = (4096L*iNOut-6627L*iNOut1+4096L*iNOut2+6211L*iN3O1-3398L*iN3O2)>>12L; iBIn2 = iBIn1; //Сохраняем предыдущие значения.

iBIn1 = iBIn; iBOut2 = iBOut1; iBOut1 = iBOut; iNIn2 = iNIn1; iNIn1 = iNIn; iNOut2 = iNOut1; NOut1 = iNOut; iBO12 = iBO11; iBO11 = iBO10; iBO22 = iBO21; iBO21 = iBO20; ... //Остальные величины не показаны (для краткости).

if(iBIn>24000) iDac -= 1; //Управляем уровнем сигнала на выходе AD620.

if(iBIn<8000) iDac += 1; iOut1 = (iDac)&0xfff; DAC0H = (iOut1>>8)&0xf; DAC0L = iOut1&0xff; if((iN3O+iOfs)>3000) iOfs -= 1; //Управляем выходным смещением. if((iN3O+iOfs)<1000) iOfs += 1; iOut = ((iN3O+iOfs))&0xfff; DAC1H = (iOut>>8)&0xf; //Выводим на осциллограф. DAC1L = iOut&0xff; if(!(c2++&3)) printf(«%4d\r\n»,iOut); //Передаем результат в компьютер.

}

Рис. 6. Часть программы на C

Обратите внимание, что величину выходного сигнала можно масштабировать, изменяя коэффициенты на входе. Также заметьте, что если все сигналы положительны, деление на 4096 — это в сущности сдвиг двоичного числа вправо на 12 разрядов.

Реализация алгоритма показана на рис. 6 в виде каскада из 5 полосовых фильтров и 2 режекторных фильтров. Отсчеты сигнала умножаются на 4 в каждом полосовом фильтре первого или второго порядка. Сдвиг вправо на 12 разрядов соответствует делению на 4096.

Обратите внимание на строки 1£(1Л^00>24000)Шас -= 1 и 1£(1Л^00<8000)Юас += 1, которые управляют цифро-аналоговым преобразователем в составе ИС ЛБиС842. Сигнал ЦАП управляет входом сдвига уровня микросхемы ЛБ620 для того, чтобы сдвинуть выходное напряжение ЛБ620 в рабочий диапазон входа АЦП. Это желательно для того, чтобы уменьшить воздействие переменного смещения, которое возникает из-за разности качества контактов между электродами и кожей. Подобный же подход применен для сдвига выходного напряжения в центр диапазона выходных напряжений.

Обработка на ассемблере

Основное назначение ассемблерного кода — измерение входного сигнала с одинаковыми интервалами времени и обеспечение требуемой скорости вычислений 500 отсчетов в секунду. Сначала мы программируем Ттег0 на непрерывную работу и генерацию прерываний с интервалом 1 мс. С каждым прерыванием перезапускается Т1шег0, считывается отсчет входного сигнала и увеличи-

вается значение переменной с2ш8, которая используется для синхронизации с кодом С. На этой стадии разработки кода первыми строками кода на С были:

while(c2ms<2); c2ms = 0; iAdc00 = iAdc0;

Изначально с2ш8 равно нулю и код С зациклится на строчке ^Де(с2т8<2). После 1 ш8 таймер ТішегО вырабатывает прерывание, затем с2шв увеличивается на 1. После следующей 1 мс переменная с2ш8 увеличивается до 2. Теперь условие (с2шв<2) больше не выполняется, сбрасывается на 0 счетчик с2ш8, и производятся вычисления фильтра. После этого код С помещает результаты в цепочку переменных, представляющих собой последовательные результаты, готовые для дальнейшей обработки с помощью повторной итерации. Завершает цикл команда ргіпЩ...), которая посылает результат на дисплей компьютера. Последующая обработка данных на РС может быть очень простой — например, просто вывод результата на графический дисплей, — либо сколь угодно сложной.

Для повышения точности результата период прерываний таймера Тішег0 был сокращен до 1/32 мс и данные были накоплены в іЛ^0 для того, чтобы получить большее число измерений за то же время. Кроме того, условие цикла было переделано в с2шв<64, так что процессор дожидается 64 измерений, прежде чем выполнить цикл фильтрации. Величина іЛ^0 сохранена в іЛ^00 для дальнейшей обработки, затем іЛ^0 сбрасывается, и теперь эта переменная готова к получению следующих 64 измерений. На рис. 7 приведен код на ассемблере. Этот улучшенный алгоритм обеспечивает получение графика, показанного на рис. 5 внизу.

1.1382BOutk_1 _ 0.1382BOutk_2

+ 1.3164NOutk_1 _ 0.8783NOutk_2

Компоненты и технологии, № 6'2004

IntT0: push ACC push PSW

clr TR0 ;Остановить счетчик T0.

mov TH0,#0fdh ;Загрузить 1/32ms.

mov TL0,#0f6h

setb TR0 ;Запустить T0.

mov a,ADCDATAL

add a,iAdc0+3

mov iAdc0+3,a

mov a,ADCDATAH ;прибавить результат

;преобразования к iAdc0.

anl a,#0fh

addc a,iAdc0+2

mov iAdc0+2,a

clr a

addc a,iAdc0+1 mov iAdc0+1,a

mov ADCCON2,#0 ;Начать преобразование.

mov ADCCON2,#10h

inc c23ms ;Увеличить счетчик ms.

IntT0R: pop PSW pop ACC reti

Рис. 7. Программа на ассемблере

Рис. S. График практически измеренного сигнала

Усиление

Усиление сигнала — всегда очень важный аспект работы системы ЭКГ. В описываемой выше конструкции усиление зависит от ряда

факторов. Коэффициент усиления аналоговой части равен 8, как говорилось выше. Затем за счет накопления отсчетов происходит усиление в 64 раза. Далее происходит уменьшение цифрового значения сигнала в 8 раз с помощью команды iBIn = iAdc0>>3. И наконец, усиление в 4 раза дважды за счет масштабирования при работе алгоритма полосового фильтра. В результате мы имеем: О = (8 х 64/8) х 4 х 4 = 1024, типичное значение для системы ЭКГ.

Заключение

На рис. 8 показана кривая, записанная с отведения I (стандартное отведение по Эйнтхо-вену). Видно, что получен хороший результат, несмотря на простоту аппаратной части нашего прибора. Данная статья показывает, что можно достичь значительного повышения качества записи ЭКГ при простом аппаратном обеспечении с помощью программной обработки. В данном примере мы не достигли максимально возможного качества регистрации сигнала ЭКГ; полученный результат можно значительно улучшить. Дальнейшее повышение качества записи возможно за счет написания различных программных реализаций фильтров с различными характеристиками и дополнительными возможностями. Память программ процессора АБиС842 основана на флэш-технологии, что дает возможность изменять алгоритм работы уже готового устройства. Основной результат заключается в том, что мы можем построить компактный, недорогой электрокардиограф, рассчитывая на большой объем рынка.