Пожалуй, это последний пост про старые добрые nRF24L01+ и мутных китайских поставщиков, который пытаются оптимизировать каждый конденсатор. В этот раз я расскажу как соорудить небольшой стенд для калибровки модулей nRF24L01+, проверить что они адекватно работают, а если нет, то как их починить.
Проблема
Итак, как я раньше писал, nRF24L01+ могут быть очень жестоко оптимизированными и даже если кремний — не подделка, у него могут быть некоторые проблемы «волшебного пальца». К концу праздников мне приехала (к моей радости) свежая партика модулей nRF24L01+ И к моему разочарованию ни один нормально «из коробки» не заработал.
Пока я ждал, я умудрился при помощи хаков заставить COB-варианты на SI24R01-подобном чипе работать с нормальными нордиками в одной сети, запатчив для этого по-орочьи mysensors. Но это история для другого поста, что же не так с этими штуками? По ходу та самая проблема ‘волшебного пальца’, о которой я писал ранее. Но в этот раз все было настолько сурово, что ни один из десяти модулей так и не заработал с mysensors, хотя прошивался по воздуху через мой rf24boot bootloader загрузчик. Что могло вызвать такое поведение?
Разница была в скорости радиоинтерфейса. Для загрузчика я использую 2Mbps: быстрее, радиус действия особенно не влияет. Для сети mysensors у меня используется скорость 250Kbps для лучшего радиуса действия. И, как оказалось, скорость 250Kbps наиболее чувствительна к тому, как спроектирована антенна (Ну и правильно, шумим-то в эфир дольше на каждый пакет). А у модулей из последней пачки с этим было все очень плохо. Добавление 1pF конденсатора немного помогло, но качество связи оставляло желать лучшего. Касание к антенне помогало, но для того чтобы точно подобрать конденсатор, нужно было как-то измерить параметры. 2.4Ghz анализатор спектра? Ну, я не Элон Маск с парой миллионов баксов на карманные расходы к его услугам. Может собрать какой-нибудь тестовый стенд по «дендрофекальной технологии»? Или, быть может его кто-то уже собрал?
Перерабатываем творчески nRFDoctor
Все уже быо изобретено до нас. Стенд отправляет пакеты на шлюз, запрашивая подтверждение, и считает статистику потерь. Там использовался LCD дисплей для отображения результатов, но я решил просто кидать данные в HomeAssistant для отображения и использовать одну из своих плат как испытательный стенд. Пойдет вообще любая плата на контроллере, который поддерживает mysensors и куда можно подцепить nRF24L01+, хотя я бы убедился что там все нормально с питанием. Не просто так все рекомендуют паять конденсаторы на сами модули.
Мой переработанный nRFDoctor выплеввывал наружу 4 датчика: номер текущего пакета из серии (его мы будем использовать для рисования прогресс-бара), успешно отправленные (и вернувшиея) пакеты, ошибки передачи (TX Failures) на аплинк и недошедшие обратно отклики (TX failures+RX failures по логике). А в графический интерфейс lovelace я добавил такую вот карточку:
type: vertical-stack
cards:
- type: gauge
entity: sensor.red_wisp_radiotester_250_0
min: 0
max: 100
name: Testing Progress
unit: '%'
- type: sensor
entity: sensor.red_wisp_radiotester_250_1
unit: '%'
name: Link Quality
- type: sensor
entity: sensor.red_wisp_radiotester_250_2
unit: packets
name: TX Failed
- type: sensor
entity: sensor.red_wisp_radiotester_250_3
unit: packets
name: RX Failed
В итоге получился такой вот интерфейс для тестирования.
Помимо этого я жестко задал в виде аплинка свой шлюз mysensors, чтобы потери по пути к шлюзу не учитывались в тесте.
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
Алгоритм измерения я тоже немного поправил. Кидаем серию из ста пакетов, выплеввываем статистику для этих ста. Потом повторяем.
Так как такая штука сгенерирует кучу мусорного траффика, который не хочется хранить в БД HomeAssistant’а, то его надо сконфигурировать чтобы он игнорировал историю для счетчика.
recorder:
exclude:
entities:
- sensor.red_wisp_radiotester_250_0
Тестируем и калибруем датчики
Как только мы соорудили стенд, то можно и оценить на сколько плохи полученные датчики. Для этого придется немного попаять разные конденсаторы на антенну. По экспериментам оказалось, что нужен номинал где-то между 1pF и 2.2pF.
Процесс вышел тупой, как пробка:
- Прошиваем прогамму для тестирования.
- Если модуль в сети, ждем 2-3 цикла измерения. Если вышло меньше 90-95% успешных доставок пакетов или оно не появилось в сети, то переходим к шагу три.
- Если модуль даже не появляется в сети, то закрываем антенну изолятором (каптон, изолента) и касаемся. Стало лучше? Двигаемся к шагу 4.
- Добавляем сначала 1pF, плавно увеличиваем емкость. Как только палец перестает «помогать» и начинает мешать, значит хватит наращивать емкость, и пора ее убавлять. Помните алгоритм бинарного поиска?
- Как только удовлетворились результатом, можно смело кидать модуль в кучку «хорошие» и калибровать следующий.
В теории, можно повторять отходя дальше от шлюза, но это уже на очень опытного и прожженого радиолюбителя.
Результаты
Моей гипотезой было, что всем модулям из одной партии потребуется примерно одинаковый номинал конденсатора. Так было для тех модулей, что остались из предыдущих партий, и им потребовались самые большие номиналы: 2.2pF. Но после работали идеально.
Стремные COB модули из этого поста к моему удивлению работали и без того адекватно и ничего напаивать для них не потребовалось.
Но последняя пачка, которую я получил, оказались лютым трешем, пускай и совместимым полностью с nRF24L01+. Емкость которую нужно было напаять была у каждого разная, от 1pF до 1.8pF и на каждый потребовалось 2-3 итерации, чтобы починить.
Модулям из предыдущих партий, которые нормально работали «из коробки», конденсатор не потребовался вовсе, а палец только ухудшал прием. Быть может, этот конденсатор «интегрирован» в плату на этапе проектирования/производства?
В общем, как по мне, кто-то ушлый сэкономил пару центов на котроле импеданса при производстве печатной платы и антенна вышла полное дерьмо.
Правильный номинал конденсатора дал мне 90-95% успешных доставок, а дополнительный 1uF на питании поднял это значение до 99-100%! Эпик Вин!
Какие уроки из этого можно извлечь?
Очевидный — выбирайте поставщиков. Но это с каждым днем становится сделать все сложнее. Но если все вышеописанное норма жизни для небольшого хобби-проекта, то если я бы делал партию в тысячу устройств, я бы двинулся после калибровки первой сотни. Пожалуй, тут самым очевидным будет усновить сам чип трансивера на СВОЮ печатную плату и заказывать ее производство с контролем импеданса и прочими ништяками.