Электрокардиограф на базе микроконвертора
В статье описаны подходы и технические решения, позволяющие спроектировать
схемотехнически простой и недорогой электрокардиомонитор на базе микроконвертора фирмы Analog Devices.
Введение
Электрокардиография — это запись электрических сигналов, генерируемых при работе сердца. Сигнал ЭКГ снимается с кожных покровов при помощи электродов, размещаемых в определенных точках. Кривая ЭКГ имеет характерную форму, пики и интервалы между пиками обозначаются латинскими буквами P, Q, R, S, T и U (см. рис. 1).
Рис. 1. Форма сигнала ЭКГ
В данной статье предложены некоторые идеи по реализации недорогого ЭКГ-монитора. Устройство предполагается использовать совместно с персональным компьютером. Хотя при написании статьи предусматривались средства, обеспечивающие безопасность пациента, это не значит, что все представленные идеи сами по себе удовлетворяют всем требованиям стандартов безопасности; при разработке устройства вам следует самим обеспечить его соответствие требованиям безопасности.
Сначала мы рассмотрим типичную топологию входной (аналоговой) части электрокардиографа. Затем предложим схему, которая обеспечит аналого-цифровое преобразование, цифровую фильтрацию и нормирование цифрового сигнала — все это обеспечит микроконвертор — интегральная «система-на-кристалле», в которую входят аналого-цифровой преобразователь, микроконтроллер и флэш-память. В данной статье будут рассматриваться вопросы выбора компонентов и программирования микроконвертора.
Требования к электрокардиографу
Входные цепи аппарата ЭКГ должны усиливать довольно слабый сигнал — в диапазоне напряжений 0,5–5 мВ в сочетании с постоянной составляющей величиной до ±300 мВ, которая возникает при контакте электрода с кожей (в русскоязычной литературе это явление называется кожно-гальванической реакцией, КГР. — Прим. перев.), плюс синфазная составляющая величиной до 1,5 В между электродами и общим (земляным) проводом. Полоса частот, подлежащая обработке и анализу, составляет, в зависимости от вида исследования, от 0,5 Гц до 50 Гц (в устройствах мониторинга при интенсивной терапии), и до 1 кГц при исследовании водителей сердечного ритма (пейсмейкеров). Стандартный клинический аппарат ЭКГ работает с полосой частот 0,05–100 Гц.
На сигналы ЭКГ могут накладываться различного рода шумы и помехи. Основные источники шумов и помех это:
- влияние сетевых помех с частотой 50 Гц (или 60 Гц) и гармоник сетевого напряжения;
- влияние изменений параметров контакта электрода с кожей, приводящее к дрейфу постоянной составляющей;
- мышечные сокращения: при этом на сигнал ЭКГ накладываются сигналы типа миограммы (ЭМГ);
- дыхательные движения вызывают смещение постоянной составляющей;
- электромагнитные наводки от других электронных устройств, когда провода электродов ЭКГ играют роль антенн;
- высокочастотные шумы от других электронных устройств.
Для точной и достоверной регистрации ЭКГ необходимо принять все меры для отфильтровывания или устранения перечисленных шумов.
Типичная сигнальная цепочка аппарата ЭКГ
На рис. 2 показана структурная схема типичного одноканального электрокардиографа. Видно, что в данной сигнальной цепочке все виды фильтрации сигнала осуществляются с помощью аналоговой техники, тогда как микропроцессор, микроконтроллер или процессор DSP используется только для целей коммуникации, управления и т. п.
Рис. 2. Типичный одноканальный электрокардиограф
Таким образом, имеющийся вычислительный ресурс процессора не использован. Кроме того, сложные аналоговые фильтры могут оказаться весьма нежелательными с точки зрения неудобства их перестройки, а также занимаемого места на плате, высокой стоимости и энергопотребления.
Предлагаемое схемное решение
Сигнальная цепочка может быть значительно упрощена при использовании микроконвертора ADuC842, который позволяет заменить АЦП, фильтры и вычислительный блок одной интегральной микросхемой. Дополнительные преимущества заключаются в гибкости перестройки параметров фильтра и в изоляции цифрового интерфейса. Предлагаемое схемное решение приведено на рис. 3.
Рис. 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 кОм.
В схеме обратной связи, предназначенной для компенсации синфазного сигнала, применен операционный усилитель типа OP97 — малопотребляющий прецизионный ОУ с чрезвычайно высоким коэффициентом ослабления синфазного сигнала (мин. значение 114 дБ). Эта схема подает на правую ногу пациента напряжение, компенсирующее синфазную составляющую сигнала с целью устранить влияние синфазного сигнала. Операционный усилитель имеет коэффициент усиления для синфазного сигнала, равный 91 [то есть R4/(R2||R3) = 1 МОм/11 кОм], и частоту среза низкочастотного фильтра около 160 Гц, что обеспечивает устойчивость усиления
Гальваническая развязка цифрового сигнала
Гальваническая развязка применена в цифровом интерфейсе RS-232, связывающем электрокардиограф и компьютер, который предназначен в этом примере для вывода данных. В качестве устройства изоляции сигнала применена ИС ADuM1301 — двунаправленный цифровой изолятор, созданный по технологии iCoupler фирмы Analog Devices. Данная технология позволила создать устройства развязки цифрового сигнала, лишенные недостатков, присущих оптопарам (таких недостатков, как очень малый коэффициент передачи, нелинейная передаточная характеристика и т. д.)
Устройства iCoupler, кроме того, обеспечивают высокую скорость передачи данных при гораздо меньшем энергопотреблении по сравнению с оптопарами. ИС ADuM1301 имеет три изолирующих канала, два их которых используются в данной схеме — один для передачи, другой для приема данных. (Неиспользуемый канал в дальнейшем можно использовать для передачи сигнала разрешения/запрещения передачи данных.) Питание входной части прибора осуществляется с помощью ИС ADP3607-5 — стабилизатора напряжения на переключаемых конденсаторах, который обеспечивает постоянное напряжение 5 В. Линии питания той части прибора, которая подключена к компьютеру, совершенно изолированы от входной части.
Питание выходной части прибора может осуществляться от компьютера или от другого источника питания.
Безопасное электропитание
Питание изолированной части регистратора ЭКГ осуществляется с помощью батареи, которая периодически подзаряжается с помощью зарядного устройства в то время, когда аппарат ЭКГ не используется. Для того чтобы обрабатывать биполярный входной сигнал, усилителям AD620 и OP97 требуется биполярное питание ±5 В. Стабилизатор напряжения на переключаемых конденсаторах ADP3607-5 и инвертор на переключаемых конденсаторах ADP3605 служат для получения стабилизированного двухполярного питания от батареи напряжением 3 В.
ИС ADP3607 — удвоитель напряжения со стабилизированным выходным напряжением, обеспечивающий ток до 50 мА. Она способна работать при напряжении питания 3 В, имеется версия, обеспечивающая фиксированное выходное напряжение 5 В (ADP3607-5)— именно такой применен в данной схеме. (Данные ИС поставляются также в варианте с подстройкой выходного напряжения в диапазоне 3...9 В с помощью внешнего резистора. Они могут обеспечить и более высокое напряжение, если добавить внешнюю ступень «насоса» — несколько пассивных компонентов.)
Инверторы на переключаемых конденсаторах ADP3605 со стабилизированным выходным напряжением могут обеспечить ток до 120 мА. Они поставляются с фиксированным выходным напряжением –3 В (ADP3605-3) или с регулируемыми внешними резисторами в диапазоне –3...–6 В. (Более высокое напряжение можно получить с помощью дополнительного внешнего каскада, так же как и в ИС ADP3607.)
Нам необходим источник напряжения питания –5 В при входном напряжении +5 В, поэтому сопротивление резистора R выбрано равным 31,6 кОм (±1%) при помощи уравнения VOUT = –1,5 R/9,5 кОм. Оба напряжения питания (±5 В) получены с помощью емкостных «зарядовых насосов», в принципе неспособных генерировать небезопасное напряжение даже при нарушении режимов работы, так как в схеме отсутствуют катушки индуктивности. В этих микросхемах также имеется режим отключения (shutdown), что позволяет микроконвертору переводить их в этот режим, когда система находится в состоянии ожидания.
Безопасность пациента
Помимо приборов гальванической развязки цифрового сигнала и безопасного источника питания в схеме имеются резисторы Rx1, Rx2 и Rx3, обеспечивающие безопасность пациента — в соответствии с требованиями стандарта AAMI (Association for the Advancement of Medical Instrumentation) на безопасную величину тока. Эти стандарты требуют, чтобы среднеквадратическое значение тока утечки на землю или тока в аварийном режиме не превышало 50 мкА.
Обработка сигнала
Микроконвертор ADuC842 хорошо подходит для решения задач обработки сигнала. Он обладает быстрым 12-разрядным АЦП и другими встроенными высокопроизводительными аналоговыми периферийными устройствами, имеет быстрое ядро типа 8052, 62 кбайт встроенной флэш-памяти программ и еще некоторые полезные функциональные узлаы (рис. 4).
Рис. 4. Структурная схема ADuC842
Главные блоки микроконвертора с точки зрения данной разработки — это АЦП и ядро процессора. АЦП преобразует выходной сигнал инструментального усилителя в цифровой код. Программное обеспечение, написанное для процессора 8052, предназначено для обработки цифровых данных и окончательного получения цифрового сигнала для передачи в компьютер. Как и во многих случаях, когда применяется микроконвертор, программное обеспечение включает в себя как сложный код, написанный на языке высокого уровня C, так и критичные ко времени исполнения фрагменты, написанные на ассемблере. В нашем случае реализация низкочастотного и режекторного фильтров написана на C, а АЦП управляется с помощью кода, написанного на ассемблере.
Эффективный код в сочетании с быстродействующим ядром процессора обеспечивает накопление множества отсчетов, что увеличивает эффективную разрешающую способность АЦП сверх обычных 12 разрядов.
На рис. 5 показана хорошая иллюстрация эффективности микроконверторов. На верхней кривой показан сигнал на выходе инструментального усилителя, поданный на вход АЦП. На средней кривой показан предварительный результат, полученный с помощью фильтра, реализованного на C, а на нижнем графике показан окончательный результат после обработки множества отсчетов, алгоритм которой написан на ассемблере.
Рис. 5. Кривые на экране осциллографа
Полученный сигнал обрабатывается с помощью цифрового фильтра в микроконверторе. Для разрабатываемого нами устройства мы применили два фильтра с бесконечной импульсной характеристикой (IIR), рассчитанной для частоты дискретизации 500 Гц. Режекторный фильтр предназначен для подавления сигнала с частотой 50 Гц. Выбранный нами алгоритм разработки фильтра — это метод размещения нулей и полюсов, частота подавления — 50 Гц, полоса задержания шириной 10 Гц. Полученная в результате расчета передаточная функция:
Эту функцию можно преобразовать в рекурсивный алгоритм:
В данном уравнении индекс k означает текущий отсчет, k–1 означает значение величины в предыдущий момент времени и т. д.
Теперь нам нужно преобразовать приведенное уравнение в код. Программирование на C— наиболее рациональный метод для написания алгоритмов ресурсоемкой математической обработки в подобных случаях; программирование на ассемблере заняло бы слишком много времени. Но напрямую написать уравнения фильтра было бы неэффективно для процессора типа ADuC842, так как этот процессор не оптимизирован для операций с плавающей точкой. К счастью, мы можем масштабировать коэффициенты (умножив их на 4096) и получить код фильтра:
Таким образом реализован фильтр второго порядка. Хотя мы можем рассчитать фильтр и более высокого порядка, на практике вполне можно каскадировать фильтры второго порядка.
Второй фильтр — это полосовой фильтр Баттерворта с частотами среза 0,05 Гц снизу и 100 Гц сверху. Передаточная функция и рекурсивный алгоритм:
здесь потеряна передаточная функция
На языке C эти уравнения будут выглядеть следующим образом:
iBOut = (1723L*iBIn-1723L*iBIn2+4745L*iBOut1-
650L*iBOut2)/4096;
|
Обратите внимание, что величину выходного сигнала можно масштабировать, изменяя коэффициенты на входе. Также заметьте, что если все сигналы положительны, деление на 4096 — это в сущности сдвиг двоичного числа вправо на 12 разрядов.
Реализация алгоритма показана на рис. 6 в виде каскада из 5 полосовых фильтров и 2 режекторных фильтров. Отсчеты сигнала умножаются на 4 в каждом полосовом фильтре первого или второго порядка. Сдвиг вправо на 12 разрядов соответствует делению на 4096.
while(1)
{
while(c25ms<64); //Ждем, когда будет произведено 64 измерения
iBIn = iAdc0>>3; //Сохраняем накопленное значение
iAdc0 = 0; //Сбрасываем переменную для накапливания новых
отсчетов
c25ms = 0; //Сбрасываем таймер синхронизации
// Полосовой фильтр 0.05 — 100Hz
//Fs=500
iBOut = (6891L*lBIn-6891L*lBIn2+4745L*iBOut1-
650L*iBOut2)>>12L; iBO10 = (6891L*iBOut-
6891L*iBOut2+4745L*iBO11- 650L*iBO12)>>12L; iBO20 =
(1723L*iBO10-1723L*iBO12+4745L*iBO21- 650L*iBO22)>>12L;
iBO30 = (1723L*iBO20-1723L*iBO22+4745L*iBO31-
650L*iBO32)>>12L; iNIn = (1723L*iBO30-
1723L*iBO32+4745L*iNIn1-650L*iNIn2)>>12L; // 2 notch filters.
iNOut = (4096L*iNIn-6627L*iNIn1+4096L*iNIn2+6211L*iNOut1-
3598L*iNOut2)>>12L; iN3O = (4096L*iNOut-
6627L*iNOut1+4096L*iNOut2+6211L*iN3O1-
3598L*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
Обратите внимание на строки if(iAdc00>24000)iDac -= 1 и if(iAdc00<8000)iDac += 1, которые управляют цифро-аналоговым преобразователем в составе ИС ADuC842. Сигнал ЦАП управляет входом сдвига уровня микросхемы AD620 для того, чтобы сдвинуть выходное напряжение AD620 в рабочий диапазон входа АЦП. Это желательно для того, чтобы уменьшить воздействие переменного смещения, которое возникает из-за разности качества контактов между электродами и кожей. Подобный же подход применен для сдвига выходного напряжения в центр диапазона выходных напряжений.
Обработка на ассемблере
Основное назначение ассемблерного кода — измерение входного сигнала с одинаковыми интервалами времени и обеспечение требуемой скорости вычислений 500 отсчетов в секунду. Сначала мы программируем Timer0 на непрерывную работу и генерацию прерываний с интервалом 1 мс. С каждым прерыванием перезапускается Timer0, считывается отсчет входного сигнала и увеличивается значение переменной c2ms, которая используется для синхронизации с кодом C.
На этой стадии разработки кода первыми строками кода на C были:
while(c2ms<2);
c2ms = 0;
iAdc00 = iAdc0;
|
Изначально c2ms равно нулю и код C зациклится на строчке while(c2ms<2). После 1 ms таймер Timer0 вырабатывает прерывание, затем c2ms увеличивается на 1. После следующей 1 мс переменная c2ms увеличивается до 2. Теперь условие (c2ms<2) больше не выполняется, сбрасывается на 0 счетчик c2ms, и производятся вычисления фильтра. После этого код C помещает результаты в цепочку переменных, представляющих собой последовательные результаты, готовые для дальнейшей обработки с помощью повторной
итерации. Завершает цикл команда printf(...), которая посылает результат на дисплей компьютера. Последующая обработка данных на PC может быть очень простой — например, просто вывод результата на графический дисплей, — либо сколь угодно сложной.
Для повышения точности результата период прерываний таймера Timer0 был сокращен до 1/32 мс и данные были накоплены в iAdc0 для того, чтобы получить большее число измерений за то же время. Кроме того, условие цикла было переделано в c2ms<64, так что процессор дожидается 64 измерений, прежде чем выполнить цикл фильтрации.
Величина iAdc0 сохранена в iAdc00 для дальнейшей обработки, затем iAdc0 сбрасывается, и теперь эта переменная готова к получению следующих 64 измерений. На рис. 7 приведен код на ассемблере. Этот улучшенный алгоритм обеспечивает получение графика, показанного на рис. 5 внизу.
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 c25ms ;Увеличить счетчик ms.
IntT0R: pop PSW
pop ACC
reti
|
Рис. 7. Программа на ассемблере
Усиление
Усиление сигнала — всегда очень важный аспект работы системы ЭКГ. В описываемой выше конструкции усиление зависит от ряда факторов. Коэффициент усиления аналоговой части равен 8, как говорилось выше.
Затем за счет накопления отсчетов происходит усиление в 64 раза. Далее происходит уменьшение цифрового значения сигнала в 8 раз с помощью команды iBIn = iAdc0>>3. И наконец, усиление в 4 раза дважды за счет масштабирования при работе алгоритма полосового фильтра. В результате мы имеем: G = (8 X 64/8) X 4 X 4 = 1024, типичное значение для системы ЭКГ.
Заключение
На рис. 8 показана кривая, записанная с отведения I (стандартное отведение по Эйнтховену). Видно, что получен хороший результат, несмотря на простоту аппаратной части нашего прибора. Данная статья показывает, что можно достичь значительного повышения качества записи ЭКГ при простом аппаратном обеспечении с помощью программной обработки. В данном примере мы не достигли максимально возможного качества регистрации сигнала ЭКГ; полученный результат можно значительно улучшить. Дальнейшее повышение качества записи возможно за счет написания различных программных реализаций фильтров с различными характеристиками и дополнительными возможностями. Память программ процессора ADuC842 основана на флэш-технологии, что дает возможность изменять алгоритм работы уже готового устройства. Основной результат заключается в том, что мы можем построить компактный, недорогой электрокардиограф, рассчитывая на большой объем рынка.
Рис. 8. График практически измеренного сигнала
Энрик Компани-Бош, Экарт Хартманн Перевод: Алексей Власенко
|