nRF24L01+: Вручную калибруем антенну при помощи MySensors и … HomeAssistant

Пожалуй, это последний пост про старые добрые nRF24L01+ и мутных китайских поставщиков, который пытаются оптимизировать каждый конденсатор. В этот раз я расскажу как соорудить небольшой стенд для калибровки модулей nRF24L01+, проверить что они адекватно работают, а если нет, то как их починить.

That’s how it looks like

Проблема

Итак, как я раньше писал, 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.

Будем менять номинал этого конденсатора
А вот правильное место для него
А вот наш волшебный набор для ремонта

Процесс вышел тупой, как пробка:

  1. Прошиваем прогамму для тестирования.
  2. Если модуль в сети, ждем 2-3 цикла измерения. Если вышло меньше 90-95% успешных доставок пакетов или оно не появилось в сети, то переходим к шагу три.
  3. Если модуль даже не появляется в сети, то закрываем антенну изолятором (каптон, изолента) и касаемся. Стало лучше? Двигаемся к шагу 4.
  4. Добавляем сначала 1pF, плавно увеличиваем емкость. Как только палец перестает «помогать» и начинает мешать, значит хватит наращивать емкость, и пора ее убавлять. Помните алгоритм бинарного поиска?
  5. Как только удовлетворились результатом, можно смело кидать модуль в кучку «хорошие» и калибровать следующий.

В теории, можно повторять отходя дальше от шлюза, но это уже на очень опытного и прожженого радиолюбителя.

Результаты

Моей гипотезой было, что всем модулям из одной партии потребуется примерно одинаковый номинал конденсатора. Так было для тех модулей, что остались из предыдущих партий, и им потребовались самые большие номиналы: 2.2pF. Но после работали идеально.

Стремные COB модули из этого поста к моему удивлению работали и без того адекватно и ничего напаивать для них не потребовалось.

Но последняя пачка, которую я получил, оказались лютым трешем, пускай и совместимым полностью с nRF24L01+. Емкость которую нужно было напаять была у каждого разная, от 1pF до 1.8pF и на каждый потребовалось 2-3 итерации, чтобы починить.

Модулям из предыдущих партий, которые нормально работали «из коробки», конденсатор не потребовался вовсе, а палец только ухудшал прием. Быть может, этот конденсатор «интегрирован» в плату на этапе проектирования/производства?

В общем, как по мне, кто-то ушлый сэкономил пару центов на котроле импеданса при производстве печатной платы и антенна вышла полное дерьмо.

Правильный номинал конденсатора дал мне 90-95% успешных доставок, а дополнительный 1uF на питании поднял это значение до 99-100%! Эпик Вин!

А вот наш пациент после доработки

Какие уроки из этого можно извлечь?

Очевидный — выбирайте поставщиков. Но это с каждым днем становится сделать все сложнее. Но если все вышеописанное норма жизни для небольшого хобби-проекта, то если я бы делал партию в тысячу устройств, я бы двинулся после калибровки первой сотни. Пожалуй, тут самым очевидным будет усновить сам чип трансивера на СВОЮ печатную плату и заказывать ее производство с контролем импеданса и прочими ништяками.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.