Рассматривается простой кардиограф, умещающийся в кармане и обеспечивающий регистрацию электрокардиограммы (частоты пульса), температуры и положения тела человека. Эти параметры запоминаются на карте памяти micro SD, откуда в последствии могут быть переписаны на персональный компьютер (ПК) и при помощи специальной программы отображены в виде графиков (привязанных к времени и дате съемки) для детального изучения.
Устройство разрабатывалось для изучения поведения человека во сне, но может быть также полезно спортсменам и медикам. Начинающих радиолюбителей заинтересует схема регистрации биотоков (когда источником сигнала становится человеческое тело) и пример применения широко распространенных карт памяти SD для сохранения разнородной информации.
Принципиальная схема кардиографа приведена на рис. 1.
Рис 1 - Принципиальная схема простого кардиографа
На элементах DA1, DA2, DA3 собран усилитель кардиосигнала. Это обычный УНЧ с дифференциальным входом и высоким входным сопротивлением [1]. К входам усилителя E+ и E- подключается пара электродов, закрепленных на теле в области сердца для съема исходного кардиосигнала. Элементы DA1.1 и DA1.2 работают как повторители, обеспечивающие высокое входное сопротивление. Инструментальный усилитель [2] DA3 усиливает сигнал примерно в 6 раз (коэффициент задается резистором R4) перед подачей на АЦП микроконтроллера DD1.
Помимо полезного сигнала биологического происхождения на электродах E+ и E- присутствуют синфазные помехи (прежде всего 50 Гц от осветительной сети), амплитуда которых в тысячи раз превышает полезный сигнал. Для их подавления используется «активная земля» [3]: на теле закрепляется третий электрод E0, на который с выхода DA2.1 в противофазе подаётся синфазная составляющая входного сигнала. Её выделение выполняет сумматор на R1 и R2, а DA2.1 – усиление и инверсию. Благодаря такой своеобразной отрицательной обратной связи величина синфазных помех резко снижается, и далее они эффективно подавляются DA3. Для формирования опорного напряжения (средней точки) для ОУ DA2.1 и DA3 используются элементы R6, R7, С1, С2, DA2.2.
Для измерения температуры и положения тела к микроконтроллеру DD1 по двухпроводному интерфейсу I2C подключены интегральные датчики температуры ВК1 и ускорения ВК2. Спецификация шины I2C реализуется программно. Резисторы R8 и R10 служат нагрузками линий интерфейса. Резисторы R9, R11, также как R5, R12, R14, R15 защищают выводы микроконтроллера и периферии от перегрузок при сбоях МК (в отлаженное устройство их можно не устанавливать).
Питание акселерометра BK2 осуществляется через диод VD1, который снижает напряжение питания BK2 на 0.7 в, чтобы напряжение "свежезаряженного" Ni-MH аккумулятора GB1 (4.2 в) не превышало паспортного значения для BK2 MMA7455LT (3.6 в). Положение тела определяется по проекции силы тяжести на оси чувствительности BK2, что например позволяет четко различить следующие положения тела: стоя, лежа на спине, на животе, на левом или на правом боку. По изменению ускорения фиксируется двигательная активность.
Функционирование устройства как единого целого осуществляется под управлением микроконтроллера DD1. Сразу после подачи питания устройство работает в режиме записи: DD1 выполняет периодический опрос датчиков BK1 и BK2, измерение частоты на входе CCP1 и оцифровку кардиосигнала. Объединенный информационный поток записывается в файл на карту памяти micro SD (разъем X1), а также выдаётся в ПК по интерфейсу RS-232 (разъем X2) для контроля и визуализации. Командой с компьютера можно остановить запись и перевести устройство в режим скачивания сохраненных файлов.
Сохранение информации осуществляется на карте памяти micro SD [4, 5], которая подключается через разъем X1. В процессе работы карта может потреблять до 100 мА (в импульсе), создавая мощные помехи по питанию, поэтому она запитана от источника GB1 напрямую, а остальная схема через RC - фильтр R16 C5.
От использования стандартной файловой системы FAT на карте SD пришлось отказаться: она не устойчива к внезапному исчезновению питания, а памяти МК не достаточно для буферизации поступающих в реальном времени данных. Разработан альтернативный формат хранения информации. Запись на карту осуществляется последовательно, сектор за сектором. Четырехбайтный номер первого свободного сектора EmptyPos, в который должна осуществляться запись новых данных, хранится в EEPROM микроконтроллера. После записи очередного сектора номер EmptyPos инкрементируется.
В каждом секторе SD-карты (размером 512 байт) наряду с полезными данными сохраняется сигнатура и 4-байтный номер первого сектора файла. Таким образом, хотя данные на карту пишутся строго последовательно, они структурированы в виде файлов, рис. 2. Логика получения списка всех файлов реализуется программой на персональном компьютере; при этом предпринимаются дополнительные меры по контролю и коррекции ошибок.
Рис 2 - Механизм последовательной записи файлов на SD-карту
Вместо привычных операций форматирования (при установке новой SD-карты) и удаления файлов (при исчерпании объема карты) пользователем выполняется операция установки EmptyPos на начальный сектор с номером 65536. Первые 65536 секторов карты не используются ради сохранения существующей на карте «настоящей» файловой системы.
Устройство соединяется с компьютером по интерфейсу RS-232 через разъем X2. Резистор R13 ограничивает ток через вывод RX МК в условиях, когда напряжение входного сигнала выше напряжения питания МК. Сигналы на разъёме X2 имеют уровни TTL, поэтому непосредственно подключать компьютер к разъему X2 нельзя! Следует использовать готовый переходник USB-COM от сотового телефона (обычно такие переходники имеют уровни TTL) или изготовить такой переходник самостоятельно на базе микросхемы FT232R по типовой схеме [6]. В крайнем случаем можно собрать преобразователь уровней в TTL на микросхеме MAX232 или по схеме на рис. 3. Через разъем X2 (контакты 5 и 8) может также осуществляться зарядка аккумулятора GB1.
Скорость обмена устройства с компьютером фиксированная: 57600 бод. Только для ускорения переписывания файлов с SD - карты в ПК скорость может быть повышена до 460800, 806400 или 921600 бод (если компьютер их поддерживает). Выдача данных при этом осуществляется МК программно на вывод RC0 (а выход TX отключается).
Рис. 3 - Простой преобразователь ТТЛ – RS-232
Для работы с устройством разработана специальная программа для ПК (файл программы EKG_SD_2010.exe прилагается), которая позволяет визуализировать кардиограмму и показания датчиков во время записи, считывать с SD-карты список файлов и копировать нужные на компьютер, сохранять кардиосигнал в стандартном формате WAVE PCM, обрабатывать записи с целью выделения R-зубцов [1] и расчета частоты пульса, визуализировать и сохранять в унифицированном формате полученные временные зависимости. Более подробно работа с программой описана в прилагаемом «руководстве оператора» EKG_SD_2010.doc.
МК DD1 измеряется частоту сигнала на выводе 13, что можно использовать для подключения к устройству дополнительных датчиков. Частота сигнала не должна превышать 8 КГц (относительная погрешность измерения не хуже 10-6, период измерения ~ 0.25 сек).
Детали и конструкция. В качестве DA1 и DA2 можно применять любые ОУ широкого применения, работоспособные в диапазоне питающих напряжений от 2.7 до 4.2 в. Инструментальный усилитель DA3 заменим обычным ОУ, включенным по схеме на рис. 4. Однако при этом желательно подобрать близкими сопротивления резисторов R18 и R19, R20 и R21 (а также R1 и R2).
Для микроконтроллера DD1 должна быть предусмотрена панелька. В него следует занести программу из прилагаемого файла EKG_SD_Pic.hex ("фьюзы" хранятся внутри прошивки).
Рис. 4 - Функциональная замена DA3 AD623
Устройство может работать без SD - карты или датчиков BK1 и BK2 с соответствующим снижением функциональности. Это позволяет начинающим радиолюбителям упрощать устройство по своему усмотрению без необходимости изменения прошивки DD1 или программ для компьютера. Например, если надо только наблюдать биотоки в реальном времени, а запись на SD-карту не требуется, то карту (как и дополнительные датчики) можно не устанавливать.
В качестве разъема X1 для подключения micro SD-карты используется переходник micro SD ® SD (они продаются вместе с micro SD картами). Контакты переходника аккуратно лудят, после чего подсоединяют к схеме короткими проводками МГТФ-0.05. На рис. 5 показана нумерация и обозначения контрактов для макро SD - карты (т.е. переходника). Желательно применять карты SD class 4 и выше (из-за малого объема памяти МК максимальная задержка записи одного сектора должна быть меньше 40 мс). Поддерживаются карты HC (ёмкостью ³ 4 Гб).
Рис. 5 - Нумерация контактов обычной SD-карты (переходника)
Разъем X2 – типа DB9F или более миниатюрный (подходящий к применяемому переходнику COM-USB).
Датчик температуры BK1 фиксируется на теле пластырем, а к основной схеме подключается 4-мя свитыми в жгут проводами МГТФ-0.05 длиной до 50 см.
Монтаж акселерометра BK2 MMA7455LT (размерами 3´5´1 мм) требует определенной ловкости. Проше всего приклеить датчик к плате контактами вверх и подпаять к схеме проволочками 0.1 мм. Конденсаторы С3, С4 должны стоять в непосредственной близости от ВК2. По задумке датчик должен сохранять достаточно постоянное положение относительно торса (или другой выбранной части тела). Чтобы достичь этого, BK2 можно расположить либо в корпусе кардиографа, либо сделать выносным, подключив к основной схеме проводами также как BK1.
Электроды E+, E-, E0 – металлические кружки Æ 10 мм из титана, которые закрепляются в области сердца пластырем. Для экспериментов можно использовать мелкие монеты – но от длительного контакта с телом они начинают ржаветь! Подключаются электроды неэкранированными проводами МГТФ-0.05 (по возможности провода к E+ и E- следует скрутить, а вокруг обвить провод к E0).
Электрод E0 крепится в любом месте (например, приблизительно между E+ и E-). В медицине используют специальные схемы расположения электродов на теле и соответствующие методики анализа кардиограмм [1, 7]. Однако для определения частоты пульса электроды E+ и E- можно располагать в области сердца достаточно произвольно, лишь бы наблюдались достаточно четкие импульсы положительной полярности (как на рис. 6). Кардиосигнал также можно снимать с рук, но импульсы при этом слабее (и их автоматическое выделение затруднительно).
Рис. 6 - Пример исходного кардиосигнала
Питается устройство от аккумулятора на 3.6 в. Потребляемый ток зависит от SD-карты и в среднем составляет 20-30 мА. Емкость GB1 более 400 мА/час выбирается исходя из требуемого времени записи (8 - 12 часов). Следует отметить, что напряжение свежего аккумулятора доходит до 4.2 в, превышая установленный предел для SD-карты (3.6 в). Однако практика показала, что они повышенное напряжение выдерживают.
Налаживание. Цифровая часть схемы в налаживании не нуждается. После инициализации SD-карты через 1-2 сек от включения SA1 на выходе TX DD1 должен появиться сигнал передачи потока данных в ПК. Если теперь соединить ПК к устройством и выбрать в программе EKG_SD_2010.exe правильный COM-порт, на экране должны отображаться состояние записи, номер сектора EmptyPos, показания датчиков BK1, BK2 и график оцифрованного кардиосигнала. Далее следует нажать кнопку «СТОП» и выполнить «форматирование». Успех выполнения этих операции свидетельствует о корректной связи устройства с ПК. Нажатием кнопки «Инициализация» проверяется, правильно ли устройство опознаёт SD-карту.
Пока электроды E+, E-, E0 никуда не подключены, исправный усилитель кардиосигнала должен «ловить» (а компьютер отображать) сигнал помехи 50 Гц от сети. При замыкании между собой E+, E-, E0, амплитуда помехи должна резко уменьшаться, причем на выводе 6 DA3 должна быть примерно половина питающего напряжения.
Далее электроды E+, E-, E0 крепят к телу и пытаются засечь импульсы, коррелированные с ударами сердца. При проблемах следует обеспечить увлажнение кожи в месте контакта с электродом и варьировать их положение в поисках лучшего сигнала. Можно также увеличить усиление DA3, уменьшив сопротивление R4.
Рекомендуемая литература
1. Барановский А.Л. Аппаратура непрерывного контроля ЭКГ. М.: Радио и связь, 1993. – 248 с.
2. Авербух В. Инструментальные усилители. Схемотехника, 2001. – № 1. – С. 26.
3. Гордейчук А.П. Система "активной земли" в электрокардиографах. – Петербургский журнал электроники, 2005. – №2. – C. 37.
4. http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf
5. Терехин Ю. Музыкальный звонок с картой MMC. Радио, 2009. – №9. – С. 24-27.
6. http://www.ftdichip.com/Documents/DataSheets/DS_FT232R.pdf
7. Сизенцева Г.П. - Методическое пособие по электрокардиографии (в помощь медицинской сестре). – М.: Издательство НЦССХ им. Бакулева РАМН, 1998. – 68 с.
Скачать исходники, прошивки, ПО и др. файлы к проекту вы можете ниже
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Рис. 1 | |||||||
DD1 | МК PIC 8-бит | PIC16F873 | 1 | Поиск в магазине Отрон | |||
DA1, DA2 | ОУ | КР1446УД1 | 2 | Поиск в магазине Отрон | |||
DA3 | Инструментальный усилитель | AD623 | 1 | Поиск в магазине Отрон | |||
BK1 | Датчик температуры | DS1621 | 1 | Поиск в магазине Отрон | |||
BK2 | Акселерометр | MMA7455LT | 1 | Поиск в магазине Отрон | |||
VD1 | Диод | КД522А | 1 | Поиск в магазине Отрон | |||
С1, С2 | Конденсатор | 0.22 мкФ | 2 | Поиск в магазине Отрон | |||
С3 | Конденсатор | 2.2 мкФ | 1 | Поиск в магазине Отрон | |||
С4, С6, С8 | Конденсатор | 0.1 мкФ | 3 | Поиск в магазине Отрон | |||
С5, С7 | Электролитический конденсатор | 1000 мкФ | 2 | Поиск в магазине Отрон | |||
R1, R2, R4 | Резистор | 20 кОм | 3 | Поиск в магазине Отрон | |||
R3 | Резистор | 720 кОм | 1 | Поиск в магазине Отрон | |||
R5, R9, R11, R13-R15 | Резистор | 300 Ом | 6 | Поиск в магазине Отрон | |||
R6, R7 | Резистор | 150 кОм | 2 | Поиск в магазине Отрон | |||
R8, R10 | Резистор | 4.7 кОм | 2 | Поиск в магазине Отрон | |||
R12 | Резистор | 150 Ом | 1 | Поиск в магазине Отрон | |||
R16 | Резистор | 10 Ом | 1 | Поиск в магазине Отрон | |||
ZQ1 | Кварц | 10 МГц | 1 | Поиск в магазине Отрон | |||
SA1 | Выключатель | 1 | Поиск в магазине Отрон | ||||
GB1 | Батарея | 3.6 В | 1 | Поиск в магазине Отрон | |||
E+, E-, E0 | Электрод | 3 | Поиск в магазине Отрон | ||||
X1 | Разъем | 1 | Поиск в магазине Отрон | ||||
X2 | Разъем | 1 | Поиск в магазине Отрон | ||||
Рис. 3 | |||||||
DD2 | Микросхема | К516ЛА7 | 1 | Поиск в магазине Отрон | |||
R17 | Резистор | 10 кОм | 1 | Поиск в магазине Отрон | |||
Рис. 4 | |||||||
ОУ | 1 | Поиск в магазине Отрон | |||||
R18, R19 | Резистор | 15 кОм | 2 | Поиск в магазине Отрон | |||
R20, R21 | Резистор | 150 кОм | 2 | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- cardiograph.rar (752 Кб)
Комментарии (78) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Вес, размеры, температура роботы, цена, частотный диапазон, мощность потребления.
Одного - означает от средней точки на минус.
Дело в том, что опорное напряжение АЦП совпадает с напряжением питания МК. Поэтому у автора и стоят два кондера - чтобы при пульсациях напряжения питания пропорционально пульсировала средняя точка и код АЦП не менялся (если на входах-выходах ОУ примерно пол-питания, как это в среднем и должно быть). Кстати, второй кондер был добавлен в результате именно натурных испытаний.
А у pic16f876a последние 8 байт этой области мэпнуты на первый банк.
Т.е. под pic16f876a программа даже скомпиляется без изменений, но работоспособности не ждите.
В общем результаты эксперимента:
Собирал на ОУ tl072 с двухполярным питанием +-9 вольт от 2х крон, судя по даташиту и по тому что получилось, они отлично для этого подходят. Минус только в высоком напряжении.
Цифровую часть не собирал, смотрел осциллографом. Для удобства ставил полосовой фильтр на 1-16 герц, осциллограф то не покрутишь в таких диапазонах как в программе.
Усиление задал 20, исходя из того что напряжение питания высокое, а гальванический контакт всего до 300 милливольт ожидается, т.е. 6 вольт из возможных 9. При этом удалось словить на диапазоне 50мВ/кл 1 клетку полезного сигнала и 1 клетку шума, впринципе отфильтровать уже можно обычными средствами.
Порядок сборки (той что рабочая, а до этого 2 дня тупил): Сначала собирается дифференциальный каскад, тот что на схеме замещения. После сборки подключается выход к осциллографу, входы замыкаются меду собой и подается между ними и землей прямоугольные импульсы низкой частоты, или запоминается нулевая линия и дается постоянное напряжение. Задача - добиться минимальной амплитуды импульсов или сравнять выходное напряжение с нулем изменяя любой из 4х резисторов. При этом естественно будут помехи, можно использовать функцию усреднения, так же рекомендую на выход сразу поставить ФНЧ. Калибровку делал покуда не получил результат - помехи без касания не более 1.5мВ амплитудой, при касании не более 3мВ. Подача 2 вольт синфазно смещает не более чем на 0.2мВ, если так то каскад не хуже чем AD623, максимум для tl072 Косф=90дБ далее никакая калибровка не поможет.
Снять этим делом еще ничего невозможно, строим схему дальше - добавляются буферные каскады, особой настройки им не нужно, даже резисторы с разбросом можно брать и пофиг.
После их установки, можно будущий индифферентный электрод просто кинуть на общий провод, так можно оценить результат на данный момент. Землю кидаем на язык т.к. сейчас ей нужно очень малое контактное сопротивление, электроды размещаем на груди. При хреновых электродах без проводящей жидкости придется регулировать силой прижима уровень помех. Если все ок, то сигнал уже будет заметен в виде треугольных пиков над ровным шумом в 50 герц, осциллограф по амплитуде 50мв/кл, по времени 500мс на клетку.
Кабель изготовлен 1.5 метров длины. Провод МГТФ свит в пару, а поверх пары навит еще индифферентный, который впринципе может быть и экраном. (предположение, что подойдет обычный акустический стерео). Контакты медные, спиральки из толстых проводов.
Добавляем формирование активной земли, перепаиваем на его выход индифферентный электрод. Теперь его не нужно вешать на язык, он теперь очень чувствительный и проблем с сопротивлением возникнуть не должно.
В результате уровень шума снизится, сигнал станет намного четче, в общем красота.
очень понравились.
Виктор, Вы наверное уже сами поняли, что CMD25 у Вас отвергается, потому что начальный адрес (EmptyPos) не корректный.
Скорее всего у вас ничего не работает, потому что вместо pic16f873 установлен pic16f876. Эти МК программно совместимы, но у них несколько различная архитектура памяти. Когда Вы на pic16f876a обращаетесь по адресам [f0-ff] (а по адресам a0-ff сейчас расположен буфер АЦП, который постоянно обновляется по IRQ), идет фактическое обращение по адресам [70-7f], а в текущей прошивке этой области памяти находятся переменные EmptyPosCode и File_StartAdr (см. файл EKG_SD_2010_MK.lst). Это кстати сразу объясняет, почему EmptyPosCode и как следствие EmptyPos у Вас постоянно искаженный. Проще всего это исправить, если вам не нужно измерение частоты на входе CCP, изменив декларацию в прграмме
NewLockRes_T0: 4
NewLockRes_S: 4
NewLockRes_N: 4
на
NewLockRes_T0: 0
NewLockRes_S: 0
NewLockRes_N: 4
При этом как раз освободятся 8 байт и проблема решена.
Но сейчас невозможно гаратировать, что этого будет достаточно, поскольку программа затачивалась и отлаживалась именно под pic16f873a.
1. Не записываются мелкие подробности сигнала, сигнал разбивается на крупные "ступеньки", надо повысить частоту дискретизации.
2. Ну очень долго идёт сбрасывание информации с карты памяти в компьютер (если писать кардиограмму целые сутки)
И не удиветельно, ведь RS - 232 очень медленный в отличие от USB. А нельзя ли пойти обходным путём? Вставляем записанную карту в картридер компьютера, считываем и преобразуем в нужный вид. Реально?
Очень хочется, чтобы Вы доработали схему, мне не жаль Вам помочь и материально. Дело в том, что у моей мамы уже лет 5 аритмия и поэтому эта тема для меня актуальна. Ведь те холтеровские мониторы (вроде так называются карманные пишущие кардиографы), что есть на официальных разных сайтах, они стоят от 5 зарплат простого рабочего - ну разве не грабительство? Жаль, я не могу доработать цифровую часть, прошивку - в этом я ноль. Вся надежда на вас, автор!
Поэтому либо ставить внешний АЦП (и менять схему и прошивку), либо Вам следует попробовать уменьшить сопротивление R4 в 2 - 5 раз, повысив усиление кардиосигнала. Это эквивалентно соответствующему уменьшению шага дискретизации и улучшению качества записи. Однако это одновременно уменьшает динамический диапазон устройства.
Т.е. когда электроды хорошо сбалансированы (одинаковые и только что хорошенько закреплены), то проблем нет никаких, одни плюсы.
Но когда электроды начинают отваливаться (а за сутки все может случиться), то начнётся разбаланс, усилитель перегрузится и можно вообще ничего не увидить.
Но я всё равно рекомендую Вам сначала попробовать этот простой вариант.
2. Если вы включите скорость 921600 бод (которая поддерживается устройством),
то 12 часов записи можно слить всего за 17 минут. Много?
Можно было бы и через карт-ридер, только это мне надо подумать, как получить к флешке прямой по-секторный доступ под windows, а остальное легко сделать.
3. Не болейте
Вы пишите
"Действительно, АЦП в МК всего 10 бит, это НУ ОЧЕНЬ мало для кардиграфа... "
То есть с иронией :-) А теперь посмотрите на скриншоты экрана, на первой картинке кардиоимпульсы в общем плане, так сказать, а на второй - более подробно.
http://hkar.ru/njIQ
http://hkar.ru/njIR
Видите, главный кардиоимпульс имеет длину около 1/25 секунды и я насчитал в нём около 40 "ступенек" в длину. В высоту не считал - возможно вы правы, надо добавить усиления. Главный кардиоимпульс разбит всего на 40 кусочков - я считаю, маловато. Особенно если учесть, что возле главного импульса сердце даёт несколько маленьких импульсов которые увидеть в таком случае проблематично - приходится не видеть, а угадывать, что ты видишь.
Как я писал, микросхемы КР1446 я заменил на одну импортную LMC6484 IM. Она содержит 4 операционных усилителя КМОП. Для контроля сигнала в моём варианте есть ещё один ОУ с выходом только на наушники. Так вот, при слуховом контроле сигнала, я обнаружил, что кардиосигнал, подаваемый на вход контроллера, сильно зашумлён. Вы советуете уменьшить сопротивление R4. Пробовал, усиление возрастает, но и шумы тоже. Возможно, я выбрал неудачную (шумную) замену КР1446? А что вы можете посоветовать в качестве замены этой российской микросхемы? Да, чувствительный малошумящий усилок с высокоомным входом, это конечно, проблема...
2. На счет использования картдирера - это весьма просто, у меня уже получилось работать с флэшкой напрямую, так что может и сделаю версию программы, только не знаю, когда именно.
3. Ну да, все правильно, за время 25мс имеем 40 отчетов, итого частота дискретизации ~1 КГц как и заложено. Вообще-то для кардиографа такого уровня это очень даже не плохо!
Даже у промышленных столько бывает: http://all-ecg.ru/schiller-at2.html, а Американская Ассоциация Электрокардиологов вообще рекомендует 500Гц.
В данном устройстве, думаю, реально можно без существенных переделок удвоить частоту дискретизации (довести до 1953.125 Гц).
Для этого в программе для МК надо:
строка 472: значение FILE_GRANULA увеличить с 4 до 8
строки 2335: заменить movlw -10 на movlw -5
Но возможно придется отказаться от опроса датчиков, закомментировав строку 1079: call Termo_Read
И в программе для компа надо в файле EKG_Pic_Define.h описание EKGSampleRate заменить на
#define EKGSampleRate (EKG_Device_FM/256/5)
При ещё большем увеличении частоты мы упремся в пропускную способность COM-порта.
4. Без всякой иронии, 10 бит это очень и очень мало! Норма это бит 18.
Прошивка и так пытается повысить "битность" за счет усреднения каждых десяти соседних выборок (которые берутся с частотой 9765.625 Гц), но судя по вашим картинкам, это мало помогает. Увеличьте усиление раз 5, посмотрим, что получится.
5. Не думаю, что виноват ОУ. МК при работе создаёт не слабые помехи по питанию,
а SD-карта, потребляя ток короткими импульсами в моменты внутренней физической записи, вообще может генерировать ложные импульсы до 10% от полезного сигнала
(сам видел, правда, до введения RC - фильтра по питанию). А может и синфазная помеха не полностью подавляется, вообще, что на входе, то и на выходе.
6. Вы пишите, что "кардиосигнал на входе контроллера сильно зашумлён".
Не знаю...
Судя по вашим графикам, шумы в несколько раз меньше шага дискретизации,
и намного меньше размаха полезного сигнала. Так что увеличивать усиление кардиосигнала смысл точно есть.
Есть на графике что-то вроде синусоиды, возможно это не полностью подавленная синфазная помеха 50 Гц. Впрочем, когда устройство находится на батарейном питании и не подключено к компу (даже через развязывающие устройства!), влияние синфазных помех сильно снижается. Ещё есть подозрение, что схема "активной земли" может вносить неустойчивость, может ей не помешали бы цепи частотной коррекции или подбор коэффициента усиления.
7. По поводу возможности рассмотреть "несколько маленьких импульсов" "возле главного импульса" - не знаю. Боюсь, у этого прибора не тот класс точности. Даже если сильно уменьшить роль ошибок дискретизации АЦП и использовать строго батарейное питание,
боюсь помехи от МК и особенно SD-карты будут сильно мешать. К тому же нужны электроды хорошие, неподвижность относительно тела (а грудная клетка не неподвижна) и в конце концов надо ещё знать, куда эти электроды крепить...
Запускаю программу, в ней нет картинки, а вспомогательное DOS-окно пишет "пропускаю" и некий код. Смотрел анализатором СОМ-порта -данные сыпятся как из рога изобилия. В чем может быть дело? Есть ли для данной схемы разница в версии контроллера?
Что касается вашей проблемы: похоже МК и прошивка работают нормально, ибо данные на com явно выдаются. Или скорость выдачи неправильная (кварц перепутали или он не так возбуждается, проверьте, должно быть 10МГц) или скорее всего, у вас имеется инверсия по линии данных. Как реализовано подключение к компу? Если обычный (натуральный) com с 12-вольтовыми уровнями, необходима инверсия. Если переходник usb-com, возможны варианты. Бывают переходники с дополнительной микросхемой вроде max232, которые полностью эмулируют обычный 12-вольтовый com, т.е. опять же нужна инверсия. Если же переходник с уровнями TTL, то инверсия не нужна. Проверить можно так: подключите переходник, запустите программу и померьте напряжение на выходе TX переходника (не кардиографа!). Если там примерно +3.3в, то инверсия не нужна. Если там отрицательное напряжение, необходима инверсия (можно также заскурочить переходник и выкинуть встроенный инвертор на max).
И да, кстати. Методика суточной записи ЭКГ так же уже давно придумана Норманом Холтером, носит его имя, и многократно модернизировалась.. Может, есть возможность улучшить качество получаемой ЭКГ? Тогда это было бы очень здорово, потому что заводские приборы для Холтеровского мониторирования ЭКГ очень дороги.
Простой расчет: в данной схеме при напряжении питания МК в 3.6в шаг дискретизации АЦП составляет 3.5 мВ, при R4=20КОм кардиосигнал усиливается AD623 в 6 раз, т.е. в пересчете на вход устройства шаг дискретизации смеси кардиосигнал-помеха составляет 0.6 мВ. Максимальная амплитуда кардиосигнала порядка 5мВ, т.е. на кардиосигнал уходит всего 8 градаций (если не учитывать программное накопление сигнала)! Поэтому наивно ожидать от схемы разрешения 0.1 мм. Но зато устройство нормально работает при помехах уровнем до 0.3в. Это сделано специально: устройство изначально делалось для длительных наблюдений, при этом очень сложно обеспечить качество наложения электродов.
Читаем [1]: "Между электродом и телом человека образуется электрохимический элемент с напряжением 0.3 - 1в. Так как съём ЭКГ осуществляется двумя одинаковыми электродами, разность потенциалов между ними могла бы быть скомпенсирована. Но практически достичь полной компенсации не удаётся, оставшаяся разность потенциалов может достигать 0.1-0.4в и изменяет своё значение во времени".
Данное устройство изначально делалось для длительных наблюдений, и сознательно по результатам натурных испытаний пришлось пойти на снижение качества оцифровки полезной составляющей кардиосигнала, зато обеспечить работоспособность устройства при высоких помехах (прежде всего от плохо сбалансированных электродов).
Если качество дискретизации сигнала для Вас более критично, можно попробовать понизить R4: усиление AD623 соответственно возрастет и разрешение повысится. Но ценой соответствующего возрастания требований к балансировке электродов - иначе АЦП уйдет в зашкал и вообще ничего не будет видно.
Нарисовал две платы, с SD и без, кому нужно на мыло
При проверке прошивки средствами самой прошивки (через ком-порт) вполне может выдаваться "несовпадение", потому что программатор не обязан прошивать байты за пределами реального файла прошивки, а в программе верификация делается для всей памяти МК. Но Вы можете посмотреть, какие байты отличаются (они подсвечиваются синим) - если различия только в конце, то можно не обращать внимания.
На счет "форматирования" - имейте в виду, что оно не оказывает влияния на содержимое SD-карты. При "форматировании" всего лишь номер "текущего сектора" должен записываться во flash-память МК. Т.е. для выполнения этой операции требуется лишь работоспособный обмен по ком-порту. Похоже все-таки на проблемы с обменом по ком-порту... И вот тут не понятно: чтение прошивки у Вас вроде работает (а это вообще так?), а "форматирование" нет. Отображается ли программа кардиоданные, которые выдаются потоком сразу после включения устройства?
Вообще тут любой ОУ подходит, лишь бы работал при напряжении питания 2.7 - 5 в, желательно CMOS, чтобы входное сопротивление было побольше. Ну и выход не самый маломощный для активной земли, чтобы пару мА можно было драть.
При отладке опцию "Фильтровать сигнал" лучше не ставить.
Для отладки можно попытаться уменьшить R3 раз в 10, это уменьшит качество работы активной земли, но и вероятность самовозбуждения уменьшится.
Ещё для отладки можно подать на вход медленно меняющийся сигнал ( потенциометр покрутить), чтобы убедить, что прошивка оцифровывает его и передаёт в комп без пропусков (если есть пропуски, на графике будут скачки).
Программа может показывать мусор вместо показаний отсутствующих датчиков, это не влияет на кардиоизмерения, чтобы этого избежать, можно подтянуть RB7 и RB6 к плюсу через 10 КОм.
Прошивка МК измеряет частоту цифрового сигнала на входе 13 DD1. Частота должна быть в диапазоне примерно 8КГц - 8 Гц, при необходимости следует применять делители частоты. Таким образом, к входу 13 DD1 можно подключить любой измеритель, который преобразует измеряемую величину в частоту. Период измерения частоты примерно 0.25 сек, т.е. можно наблюдать только медленно меняющиеся процессы, однако относительная точность измерения частоты весьма высокая.
Для ЭМС фильтры перед АЦП ставить уже поздно, надо ставить по входам (надеюсь понятно почему). Но это всегда вносит лишний разбаланс. Т.е. от ЭМС защитились, а 50Гц и другие синфазные станут сильнее. Это всегда дилема. Оптимального выбора без учета конкретной электромагнитной обстановки тут нет. Меня лично покоробило спера добиваться огромного вх сопротивления и хорошего подавления синфазной составляющей, а потом своими руками внести разбаланс.
Фильтр перед АЦП нужен, чтобы выполнить условия теоремы Котельникова, и снизить влияние внеполосных шумов. Но во-первых, тут и так сильная передискретизация, АЦП молотит 9765 Гц с последующей цифровой фильтрацией.
А на счет внеполосных шумов - в данном случая рабочая полоса начинается с 0.1Гц и фликер-шум превалирует над белым шумом. А выше 1МГц ОУ всё равно ничего не пропустят. Формально да, RC фильтр перед АЦП со срезом килогерца 4 не помешал бы, всего две лишних детали. Но на практике улучшений никаких - погрешности другой природы превалируют.
На счет аккумулятора - да, Ni-Mh не современно. Но никто их уже и не использует, ставят литиевые на 3.7в. И тут никакой DC/DC не нужен, линейный LDO стабилизатор на 3.3в, КПД будет то же. И опять же в кардиограф я бы импульсный DC/DC не ставил из-за ЭМС.
На счет использования в медицинских целях - при проблемах надо однозначно идти к профи. Любой самоделке не стоит доверять жизнь.
Но что-то может и этот прибор! Даже если на кардиограме нормально видны только R-зубцы, можно мерить RR-интервалы, ловить аритмии, экстрасистолы, исследовать вариации сердечного ритма (модное перспективное направление). Фактически устройство уже обеспечивает на порядок больше возможностей, чем дорогой спортивный пульсомер.
1. Поддержка карт-ридера. Карт-ридер надо выбрать в списке, где скорость скачивания. Устройство тоже должно быть подключено, чтобы прога могла прочесть номер первого свободного сектора (либо надо его запомнить и ввести вручную).
2. Новый улучшенный алгоритм выделения R-зубцов.
3. Визуализации R-R интервалов, удобна для поиска на длинной ЭКГ экстрасистол и других аритмий.
4. Записи ЭКГ можно хранить в rar-архивах (один *.rar файл на один *.экг - файл), прога распаковывает на лету (нужна unrar.dll).
Документацию на прогу обновлю позже.
Вообще, это устройство давно пора переделать под usb МК и внешний АЦП ads1294, я уж и схемку набросал, но всё упёрлось в изготовление платы и монтаж чип-компонет: больно мелкое всё. Сделал бы кто-нибудь сразу две платки, себе и мне, я бы тогда прошивкой занялся...
Кстати, если к обычному тонометру подцепить параллельно датчик давления (вроде MPX2050), можно заняться осциллометрией высокого разрешения.
Был в доме отдыха, там это рекламировалось как супер диагностика. А самому это как не фиг делать. Вопрос только в методиках анализа записей...
Используйте самую свежую версию программы отсюда http://zvzd3d.ru/EKG/ Там теперь есть показ статистики: среднего значения сигнала, его размаха, мин/макс значение (в кодах АЦП).
Замкните входные электроды (все три) - размах сигнала должен быть малым, а среднее значение близко к половине максимума, который может выдать АЦП (1023*9). Если электроды разомкнуты и не подключены, должна быть видна помеха 50Гц.
Если SD-карта не установлена или запись фактически не ведется (ваш случай), импульсных помех по питанию не должно быть.
Ещё возможно у Вас проблемы со связью с компом: время записи 158251 сек видимо не правильное. Это время должно стартовать с ноля для начала файла и далее равномерно возрастать с "естественной" скоростью. Попробуйте перейти в режим управления с компа и выполнить "форматирование" - если не проходит, значит что-то со связью.
Ещё вопрос какой МК в Вас - тут http://cxem.net/medic/medic24.php#comment-22669 обсуждалось, что на замену pic16f873 не подходит более "крутой" Pic18f876 без изменения прошивки, тут http://cxem.net/medic/medic24.php#comment-22680 сказано, почему и как можно (легко) исправить.
Лично я лучше прошивку под Pic18f25k22 напишу - он совпадает вывод в вывод с pic16f873a, можно в ту же плату впихнуть. Или для Pic18f25k50 (чтобы сразу с usb) или Pic18f27j53 (и usb и АЦП 12 бит).
И вообще, после того, как микрочип перекупила atmel, использовать меги не разумно.
В общем-то пофигу, кто кого перекупил. У них это обычное дело.
Сейчас народ на STM32 переходит. Дёшево и сердито. К тому же встроенные RTC и USB для этого прибора пригодились бы.
Непонятен выбор аккумулятора. Я лет 10 назад пытался купить именно такую модель для телефонной трубки. Цена заоблачная, ёмкость маленькая и качество никакое (родной год отработал, купленные - две недели). За те же деньги можно было купить коробку брендовых AA или AAA.
А по нынешним временам — Li-pol + LDO чип.
Кстати, сейчас бесплатная медицина докатились до того, что те самые дорогие «карманные» кардио мониторы (регистраторы) устанавливают в поликлинике на несколько дней. Обучают пользованию и отправляют домой. Потом снимают показания. Естественно, по назначению лежащего врача.
USB в пиках есть, это не проблема.
А вот с RTC (вещь, действительно нужная для этого устройства) микрочип откровенно нагадил. Например, в Pic18f27j53 (даже АЦП 12 бит) есть RTC, но вход батарейки не отдельный, просто часы тикают, даже если МК сброшен. Т.е. надо МК питать всё время, отключать только периферию и сбрасывать МК. Лишний LDO, вообщем.
Объясните, пожалуйста, как вы подбирали резисторы и конденсаторы по номиналу? Почему каждый элемент имеет именно такую величину сопротивления/ёмкости?
Ещё есть методы расчета схем, тогда номиналы выбираются исходя из цели схемы и требуемого режима работы деталей. Например, в схеме кардиографа для компенсации синфазной составляющей должно быть R1=R2. Если сопротивление R1=R2 выбрать слишком маленьким (например, 10 Ом), то ток через резисторы будет идти слишком большой (формулу I=U/R помните?), будет сильно жрать батарейку, да и ОУ на такой большой выходной ток не рассчитаны. Если взять слишком большое сопротивление (например, 100 МОм), токи утечки по входам ОУ будут превышать полезный сигнал и работа будет не стабильной. Но фактически значение можно менять в широких пределах.
Конденсаторы по питанию - чем больше, тем лучше. Но слишком большие не влезут в корпус и их зарядный ток будет насиловать батарейку. Да и свойства у (электролитических) кондёров большой емкости плохи на высоких частотах - приходится в параллель ставить керамику. В принципе для каждого элемента схемы кардиографа можно привести рассуждения, почем выбор был именно таков. Но надо понимать, что часто другое значение работало бы не хуже.
У меня есть такой вопросик, реально ли эту схему преобразовать, чтобы сигнал передавался по Bluetooth и отображался в реальном времени?
Насколько я понимаю, вы реализовали программную фильтрацию сетевой помехи. Не могли бы вы в общих чертах объяснить принцип её работы? Дело в том, что я делаю подобное устройство, только снимающее по трем основным отведениям. Но сигнал очень забит помехой 50 герц и основного сигнала почти и не видно. А с цифровой обработкой сигнала раньше как то не сталкивался.
Ну или может дадите ссылку на соответствующую литературу.
Как ни странно, в самой проге нет фильтрации именно 50гц, для батарейного питания не очень актуально, это фильтр R зубцов фильтрует как побочный эффект.
Но вообще сильная помеха 50гц во всех отведениях - признак нездоровья. Увлажняйте электроды, проверьте симметричность входов, правильность выделения синфазной составляющей для активной земли.
Более простой путь - добавить фильтр постоянной составляющей и усилить сигнал раз в 50 перед подачей на АЦП. В итоге АЦП будет оцифровывать преимущественно полезный сигнал, а не помехи. Заодно можно использовать МК с АЦП 12 бит. Пример модификации схемы есть тут http://zvzd3d.ru/EKG/
Все же интересен вопрос добавления еще одного канала. Вы писали, что это несложно. Тогда будет пять датчиков, как у простейшего холтера. Какие изменения в схеме нужны для обновленной версии 2.1? Какие порты будут задействованы в контроллере? И самое главное, изменения в прошивке контроллера, и, видимо, в программе компьютера. И еще вопрос. Какой максимальный объем СД карты поддерживается, а то с маленькими сейчас проблема.
Уже сейчас поддерживаются SDHC карты объемом 4 - 32гб, поддержку SDXC именно ради большего объёма наверное нет смысла делать, разве что из спортивного интереса...
И еще просьба. Не могли бы подсказать, как отключить программную автоматическую регулировку уровня сигнала (АРУ) в первой версии кардиографа ? Хочу поэкспериментировать, подготовку сигнала осуществить аналоговыми методами, а от микроконтроллера только требуется оцифровать аналоговый сигнал амплитудой 1 вольт (или, скажем, 2 вольта) и отключить всякие цифровые программные фильтры (если они имеются) и коррективовку положения нуля тоже отключить (если она есть). Может таким способом сделаю чётче картинку сигнала. И к тому же такой модернизированный кардиограф можно будет использовать как регистратор аналоговых величин, например, изучать как изменяется напряжение где - либо в течение суток.
Просто регистратор, включая постоянную составляющую, тоже дело полезное.