Пульсоксиметр MAX30100 / MAX30102 – исправляем ошибки платы
Пульсоксиметры MAX30100 / MAX30102 недорого стоят и популярны у радиолюбителей. К сожалению, самые дешевые платы модуля, которые тысячами штук продаются на Aliexpress, содержат фатальную ошибку. Я расскажу, как ее исправить.
ОБНОВЛЕНИЕ: об исправлении ошибки нового варианта платы модуля рассказано в другой статье. Там же показано, как отличить чип MAX30100 от чипа MAX30102.
Все сказанное далее в равной мере относится к новым чипам MAX30102 и устаревшим чипам MAX30100, поскольку они полностью совместимы по выводам и могут быть установлены на одной и той же плате.

Рис. 1. Модуль MAX30100 / MAX30102 с Aliexpress
Если вы заказали плату, изображенную на рис. 1 – поздравляю, у вас проблемы с цепями питания. Микросхеме требуется два напряжения питания:
- 1,8V для питания АЦП и цифровой части (допустимый диапазон 1,7V – 2,0V)
- 3,3V для питания встроенных светодиодов подсветки (диапазон 3,1V – 5,25V)
Внимательно посмотрите на схему модуля (рис. 2). В ней задействованы два линейных регулятора напряжения с низкими сквозными потерями (LDO). Первый формирует напряжение +3,3V из +5V (или просто пропускает насквозь питание +3,3V). Второй регулятор подключен к выходу первого и формирует напряжение +1,8V. Казалось бы, все правильно?

Рис. 2. Электрическая схема модуля MAX30100 / MAX30102
Теперь присмотритесь, куда подключены подтягивающие резисторы 4,7K для линий SCL, SDA и INT (толстая красная линия). Они подключены к линии питания +1,8V. Если такой модуль подключить к пятивольтовой плате Arduino, он не будет виден на шине I2C, потому что логические уровни слишком низкие. Впрочем, и с трехвольтовой платой шина I2C с такой подтяжкой может работать неустойчиво.
Эту ошибку легко исправить, как показано на рис. 3. Достаточно перерезать дорожку в месте красного крестика и сделать перемычку, показанную желтой линией. Для перемычки не нужен изолированный провод. Можно взять луженую жилку из многожильного провода. Плата покрыта защитной маской и замыкания на общий провод не будет.

Рис. 3. Исправления на плате модуля
Но не все так просто!
Как вы думаете, что сделали китайцы, когда узнали, что изготовили 100500 миллионов штук плат с ошибкой? Дышите глубже: вместо регулятора на напряжение 1,8V они начали устанавливать на плату регулятор с выходным напряжением 2,8V. Это подлый удар в спину радиолюбителю – не могу назвать это иначе. При таком напряжении питания шина I2C нормально работает с пятивольтовыми платами Arduino. На первый взгляд с модулем все в порядке. Он вроде бы работает и даже что-то измеряет. Однако для самой микросхемы пульсомера это напряжение далеко выходит за пределы допустимого диапазона.
Нет, микросхема не выходит из строя. Просто она измеряет что попало и как попало. В даташите четко сказано, что соблюдение диапазона питания необходимо для устойчивой работы встроенного счетчика (имеется в виду встроенный блок тактирования для АЦП и таймеров логики). В итоге мы с удивлением обнаруживаем, что сенсор профессионального уровня работает крайне нестабильно и совсем не так, как описано в интернетных статьях. Я убил целый вечер, чтобы понять, что происходит не так. Только когда ткнул щупом осциллографа в вывод SDA и увидел там логический уровень 2,8V, у меня появились подозрения.
Окончательная доработка
Измерьте напряжение на выходе второго регулятора. Если там +1,8V, значит вам повезло. После перерезания дорожки и установки перемычки доработка завершена. В противном случае дополнительно придется заменить регулятор. На плате должен быть установлен регулятор XC6206P182MR. Этот регулятор надо где-то приобрести. К сожалению, в крупных сетевых магазинах радиодеталей его предлагают только под заказ со сроком поставки 2-4 недели. За это время его проще и дешевле заказать из Китая. На Aliexpress лот из 100 регуляторов предлагают за $1,70. Будьте внимательны при заказе! Две цифры после буквы P обозначают рабочее напряжение. В нашем случае 18 обозначает 1,8V.
Раздобыв регулятор на 1,8V, сдуваем с платы неправильный регулятор и устанавливаем новый.
Мне лота из 100 регуляторов хватит на несколько жизней, поэтому я с удовольствием готов поделиться ими. Напишите через форму обратной связи, и я отправлю регулятор заказным письмом по стоимости доставки письма. Это будет намного быстрее, чем ждать лот из Китая.
за предупреждение о китайском косяке спасибо огромное..
на схеме у XC6206P182MR ноги 2 и 3 перепутаны.
в маркировке стабилизатора на 1.8в третий знак которая буковка должна быть “к”, у 2.8в она “х”.
на моей плате стабилизатор стоит на 1.8в, но переход с обратной стороны платы на третью ногу не звонится, придётся пропаивать.
Да, китайские модули – это еще та лотерея… Насчет буковки на корпусе вы правильно подметили, удобно проверять без вольтметра. Я в местном магазинчике посмотрел 5 штук модулей, все с неправильным стабилизатором.
На некоторых модулях с MAX30102 стоят повышающие стабилизаторы на входе,и при питании 3.3В на вход второго стабилизатора приходит 5В. И если переделать как показано на рисунке, то подтяжка шины I2C будет пятивольтовая. Так что прежде чем переделывать померьте все напряжения на плате и только потом модифицируйте плату
Согласно типовой схеме включения MAX30102 из даташита (стр. 28 и 31) на линии SCL, SDA и INT подается подтяжка через резисторы 1 КОм от _напряжения_питания_VDDIO_хост-процессора. Так что при подключении модуля к Arduino и пятивольтовой подтяжке с микросхемой MAX30102 не только ничего не случится, но именно так и должно быть по даташиту! При доработке платы как описано в статье, мы подключаем подтяжку к линии +3,3 лишь потому что а) так проще конструктивно и б) даже при такой подтяжке плата уже нормально работает с Arduino.
“…которые тысячами штук продаются на Aliexpress, содержат фатальную ошибку. ”
Я бы не согласился. Данный модуль можно подключать к различным МК, а не только к Ардуино. Видимо разработчики выпустили модули под МК, у которых логические уровни 1,8В. Можно и Ардуино на ATmega328 подключать. Если Ардуино будет на 8МГц или это будет плата Duo, то логические уровни на 3,3В нужно переделывать. Если 16МГц Ардуино, то на 5В переделывать. Ведь мы же понимаем что MAX30102 изначально производился не для Ардуино, а для намного более портативных устройств. В этих устройствах свои МК с напряжением питания даже ниже 3,3В. Например МК на базе ядра ARM9 изначально работали на 1,8В, затем в SAM9M10 уже можно выбирать напряжение: 1,8 или 3,3В.
В общем нет никакой фатальной ошибки, просто под разные МК возможно придётся переделать подключение подтягивающих резисторов.
Фатальная ошибка вовсе не в уровнях подтяжки. И даже не в том, что китайцы подключили резисторы подтяжки после низковольтного стабилизатора (хотя это тоже грубая ошибка, которую они совершают регулярно). Главное – чтобы исправить ошибку разводки они ставят на плату стабилизатор 2,8 вольта, что категорически запрещено производителем микросхемы. Бедный сенсор греется и периодически показывает погоду в Куала-Лумпуре. Так что речь-то была вовсе не про напряжение подтяжки как таковое, а о том, что из этого вытекает.
Подтяжка к VDD хоста, а не к одному из внутренних питающих напряжений, делает модуль действительно универсальным (как и задумано разработчиками MAX3010x). А тут всё-таки скорее ошибка проектировщика платы.
Огромное спасибо!
У кого-нибудь есть алгоритм для получения приличных цифр сатурации и ЧСС?
Стандартная библиотека от sparkfun не подходит для MAX30102 : Она НЕ отключает красный из-за чего инфра-красный ВСЕГДА засвечен красной компонентой и, как следствие, неверен. Так же у меня есть большие сомнения по поводу включения инфра-красного канала: не одна камера его не увидела (хотя, по-идее, они без светофильтров). Сам алгоритм там… ну… думаю можно сделать намного лучше… ЧСС у меня скачет 30-220 при сидении на слуле, а SpO2 вообще не завелся.
[…] Не буду стомлювати читачів нашими пошуками причин непрацездатності. Про це рекомендуємо читати в статті MAX30100 / MAX30102 […]
Первый преобразователь не LDO, а т.н. Charge-Pump (как правило, HX4002-3.3), что позволяет питать плату от 1,8-4,5 вольт (например от 2032 или двух AAA)