" title="Написать письмо">Написать письмо
Донаты на карту ВТБ:
2200 4002 2461 6363

Статистика

Пользователи : 1
Статьи : 2348
Просмотры материалов : 8852247
 
Датчик пульса: подготовка (24.12.2025). Печать E-mail
2025 - Декабрь
24.12.2025 10:28
Save & Share
Менеджер Max... Мессенджер Max... Не... Датчик пульса и кислорода MAX30100 - был успешно куплен на алиэкспрессе и доставлен за суммарные 68руб. Однако даже сейчас, когда появились время и возможности им заняться, - не получилось ничего, кроме подготовки к его использованию. Да, детка, мир жесток.



Сразу об ошибке выбора. Датчик 30102 стоит дороже 30100 на 3руб. При этом, самая последняя библиотека для 30100 датируется 2018 годом, а корректная (прибалтийская) - 2017. С учётом того, что пульсоксиметры постоянно совершенствуются и стоят сущие копейки, - есть вероятность покупки устаревшей модели датчика (хоть её и хватит для поставленной задачи: снимать пульс как логическую единицу за наносекундное время - для последующих математических расчётов, и число уд/с чисто для кучи).

Подготовительные работы были и ранее - однако их оказалось недостаточно не то, что датчик к Arduino припаять, но и использовать саму платформу:
- вспоминая разработку системы защиты от протечек, бросается в глаза эксперимент с подтягивающим резистором между RST и питанием: когда помехи от электрокранов 230В проникали в платформу и перезагружали её. Действительно, номинал 160кОм был выбран неверно - и эксперименты остановились на диапазоне 1-12кОм. Теперь же - этот вопрос поднимается снова (и другие похожие), с необходимостью уточнения номинала, чрезвычайно въедливо;
- каждый неверный резистор уменьшает точность: при пропуске одного сердечного ритма - может быть неправильно поставлен диагноз, при получении неверного числа пульса - то же самое. А дальше - всё начинается сваливаться в кучу: для увеличения точности - подтягивающие резисторы должны быть чуть ли не везде;
- к путанице добавляются разные 400-страничные руководства к ATmega328P по годам (разные номера разделов у идентичной информации, противоречащая друг друга информация). Например, в первом руководстве (далее - "№1") 2009 года интерфейс I2C описывается в разделе 21.2, во втором (далее - "№2") 2015 года - в разделе 21.8;
- попадаются разные варианты даташитов датчика, вплоть до VCC для него 5В. Их диапазоны допустимого напряжения всегда содержат в себе напряжение 3.3В - значит это есть универсальное питание.

О присоединении RST:
- в обоих документах есть таблица, где RRST ("Reset Pull-up Resistor") принадлежит диапазону 30-60кОм. И, одновременно с этим, есть фраза: "Pull-up resistors on the dW/(RESET) line must not be smaller than 10k". Вы там издеваетесь что ли? Оказалось, есть аппаратный Reset, а есть программный, - и первый написан для потребителя Arduino (потому что канал RST всегда отделён от питания), а второй - для разработчика платы Arduino с микроконтроллером в её составе. Соответственно, определён номинал - 30кОм (забиваем на энергопотребление в пользу стабильности/точности - и так везде далее). А это значит, что всю жизнь припаивал неправильный резистор к RST. Ладно, хорошо, хорошо - что же будет дальше, подумать страшно;
- к чему подключать RST: к питанию платформы или к её логическому напряжению 5В. По логике - к каналу +5V: иначе бы номинал был представлен не числом, а формулой с VIN или VCC. Но в №1: "Figure 10-2. MCU Start-up, RESET Tied to VCC". Потому что VIN - внешнее питание платформы, а VCC - внутреннее питание платформы и внешнее питание для микроконтроллера, равно 5В - надо паяться на контакт 5V. Но тут же появляется проблема, №1: "Table 8-2. Number of Watchdog Oscillator Cycles" - и там есть VCC 5V и VCC 3V. Так куда припаиваться: к 5V или к 3.3V на Arduino? №1: "Figure 24-1. The debugWIRE Setup" - вообще диапазон 1.8-5В. Значит, нужно обращаться к разработчику Arduino. Актуальные даташиты по 26стр - недоступны на территории РФ. Поэтому, возвращаясь к №1: в подавляющем большинстве таблиц фигурирует VCC = 5V - вот и ответ.

Об интерфейсе I2C:
- несмотря на то, что интерфейс датчика I2C был изучен подробно аж в 2 статьях (раз, два) - этого оказалось мало;
- на идентичных картинках руководств - и к SDA, и к SCL: подключаются 2 резистора - при этом называются R1 и R2 (что намекает на разность номиналов);
- одновременно с этим, в идентичных таблицах 28.6 №1 и 28.7 №2 - описывается только один некий резистор Rp (и именно не Rp, а Rp), имеющий формулы минимального значения (VCC - 0.4V)/3mA и максимального значения (300 или 1000)ns/Cb (где Cb - ёмкость одной шины в пФ). Начинаешь искать по всему руководству Rp с учётом регистра - нет описания. Соответственно, единственный путь - считать Rp = R1 = R2;
- ёмкость шины Cb (по факту, провода - взял 1м 1.2мм2) - не удаётся измерить даже с помощью LCR-T3. Даташит на него: измеряет от 25пФ. Если смотреть по формулам - минимальный номинал Rp составляет 967Ом. Умышленно считая минимум и максимум Rp одинаковыми - Cb не может быть больше 300пф или 1000пФ. Это какие-то запредельные значения - и либо они существуют в реальности в длинных проводах (LCR-T3 не справился - включив измерение сопротивления вместо ёмкости), либо сама формула максимального значения бредовая. Поэтому, максимальное значение не учитывается - берутся номиналы для SDA и SCL по минимуму, 1кОм (который ещё и универсален для любой частоты интерфейса I2C);
- чтобы понять, что не так с расчётом Cb, сунулся в материалы, посвящённые паразитной ёмкости. Студенческие работы - доставляют: "Эта емкость составляет 4.4•10-10 Ф/м или 44 пФ/м" - убейся, бл, об стену. Существует понятие "удельная ёмкость кабеля" - в даташитах на кабели составляет 0.26-0.73мкФ/км (elcable.ru/upload/load/059/c94349b6_5fa5_11eb_a2d5_b026281add27.pdf). Чем меньше напряжение при одном и том же сечении - тем больше ёмкость. Чем больше сечение при одном и том же напряжении - тем больше ёмкость. И если 0.263мкФ/км для 6кВ и 35мм2 - то что тогда произошло бы, если бы подключил датчик напряжением 3.3В и проводом 1.2мм2? Разум вышел из чата: величина точно больше 263пФ/м. Вот почему для I2C очень критична длина провода (и люди с длиной 2м получали искажённые результаты), вот почему формула максимума содержит в себе труднопонимаемую ёмкость. Вышел за ≤300пФ или ≤1000пФ (в зависимости от настройки частоты интерфейса) - "денег нет - но вы держитесь, до свидания";
- таким образом, не имею в наличии сдвоенного, тонкого и одновременно длинного кабеля для подключения датчика к платформе хотя бы на 1м, чтобы не привязывать платформу к пальцу вместе с датчиком - оставив себе возможность свободно беспокойно крутиться во сне, без вероятности напороться на какой-нибудь штырь 2.54мм;
- одновременно с этим, выгоднее было бы использовать для датчика напряжение питания 5В - однако он без каких-либо надписей, производитель неизвестен, и ТТХ тоже, - спокойно может сгореть.

Об аналоговых каналах:
- влияют друг на друга без установки подтягивающих резисторов. Искажают показания, если напряжение питания платформы низкое (например, через удлинитель USB);
- в №1 и №2: "RPU I/O Pin Pull-up Resistor" - 20-50кОм. Сейчас главное - аккуратно выдохнуть и не принять это значение за правду: потому что нужно использовать резистор pull-down, а не pull-up. Pull-up - это для разработчика Arduino: включаемое программно сопротивление INPUT_PULLUP в PinMode();
- нет в даташитах номинала резисторов для заземления аналоговых каналов. Бардак ещё осложняется тем, что получается: аналоговый канал имеет одновременно pull-down и pull-up резисторы, если выполняется INPUT_PULLUP. То есть, имеется не просто слабое включение светодиода как потребителя во всяких видеоуроках - а полноценный делитель напряжения между аналоговым каналом и GND. То есть, неправильный номинал может не просто привести к искажению данных или просто бессмысленной пайке - он ещё напряжение у светодиода дополнительно отнимет: через 40кОм светодиод последовательно - но делитель напряжения главнее;
- здесь остаётся только апеллировать к прошлому опыту: был выведен номинал, корректно работающий даже при пониженном напряжении питания платформы 3.8В: 85кОм - гарантирующий получение правильного сигнала с точностью до сотых. Да, он 2/3 напряжения отожрёт при использовании INPUT_PULLUP - но плохо помнится, что когда-либо им вообще пользовался: всегда надёжнее свой резистор, номинал которого 100% знаешь (а не 20-50кОм по даташиту).

Думаете, это конец истории? Нет:
- у интерфейса I2C уже проскакивало значение 3мА: это максимально возможный для этого интерфейса ток. Дополнительно это подтверждается почему-то только в укороченном №2 относительно №1: "3mA sink current" для "2-wire Serial Interface Characteristics" (потому что, внезапно, - это синоним I2C);
- в интернете проскакивала величина такого тока 16мА (опять дезинформация какая-нибудь). Захотел измерить реальный ток по SCL у ЖК-экрана (который ещё не был отпаян после возни с ним - и точно не является энергоэффективным устройством). Но обнаружилось, что линия mA у мультиметра уже давно не работает. Второго мультиметра нет (сгорел из-за некачественных деталей) - не прозвонишь предохранитель на плате (выглядит и как сгоревший и как не сгоревший: толстые 2 края и тонкая нить между ними - в колбе). При этом, на самом мультиметре написано: 20A Unfused и 200mA Fused - ну, спасибо, хоть 1 предохранитель поставили, - за 1.5к-то без скидки;
- значит, только на работе можно будет сделать ТО мультиметру (а заодно и померить ток SCL дорогущим APPA 505). А до этого времени - разбирать эту тестовую поделку нельзя. Значит, нельзя вставить платформу в печатную плату. Значит, нельзя припаять резисторы;
- единственное, что удалось сделать/найти: корпус из мыльницы, адаптер питания 12В/0.7А (попасть в диапазон по даташиту Arduino 6-20В).

(добавлено 26.12.2025) Мультиметр починил: да, это был недосгоревший недопредохранитель.

Ток по SDL ЖК-монитора - 18.66мкА, на мгновения сменяясь на ~13мкА. То есть, писавший в интернете про 16мА - должен убиться об стену: по той же причине, как описанный студент выше.

Но SDL используется в I2C для контроля передачи информации. Когда ЖК-экран заканчивает передачу по SDA (перестаёт идти импульсами SDL), SDL выходит на высокий уровень и на нём держится, ожидая следующей порции информации. Что же с SDA: 23мкА, сменяющиеся при передаче данных на 16-20мкА (понятно: опять импульсный сигнал идёт - но уже с пакетами).

(добавлено 10.01.2026) Практические уточнения о номиналах подтягивающих резисторов, в т.ч. для I2C (раз - и её реализация для I2C два).
Обновлено ( 10.01.2026 12:49 )
 
 

Последние новости


©2008-2026. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).

Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год. Политика сайта: написать статью, а потом обновлять ее много лет.
Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Top.Mail.Ru