PIndastrial shield — модуль питания и интерфейса RS-485 для Raspberry PI

eskqackcfwafsysj40d17bg5dsi.jpeg

Существует множество проектов, где в качестве основы системы используется Raspberry PI, но имеется ряд сложностей с обеспечением питания и взаимодействия с внешними устройствами. Я хотел бы поделиться опытом создания небольшого шилда для миникомпьютера, упрощающего его применение и повышающего надежность всей системы.

Типичная задача, решаемая при помощи Raspberry PI, это малая домашняя/промышленная автоматизация, в которой присутствует набор периферийных модулей, питающихся от 12—24 вольт и имеющих шину RS-485. Для того чтобы питать Raspberry от того же питания, что и модули, приходится ставить некий преобразователь в 5 вольт и подключать его через разъем GPIO или USB. К этому добавляется еще USB-RS485 или UART-RS485 переходник который торчит из USB или каким то образом висит на GPIO разъеме. Такие варианты конструкции не отличаются надежностью.


mst0dcgastacs-iof-vspsk6aqu.png

Первая проблема — это питание. Как известно, Raspberry PI питается от 5 вольт через разъём micro USB или type С в новой модели. Столь низкое входное напряжение приводит к весьма высоким токам питания, которые могут доходить до 2.5 — 3А при высоких нагрузках на CPU. Если посмотреть параметры microUSB разъемов, то видно, что они не очень подходят для таких токов. В графе Current Rating (Amps) максимальное значение 1.8А. Проблем добавляют провода различного качества, которые в любом случае имеют сопротивление и индуктивность, и при резких скачках тока в питании появляются провалы по напряжению, которые в итоге приводят к нестабильной работе Raspberry или снижению ее производительности.
Вообще на практике для питания устройств используются более высокие напряжения, порядка 12 — 48 вольт, для уменьшения тока в цепях питания.

На различных форумах и чатах про миникомпьютеры я много раз встречал обсуждение загадочной молнии на экране Raspberry. В большинстве случаев избавиться от нее помогает использование качественного источника питания и провода USB. Этот вариант хорошо подходит для настольного применения и прототипирования, но в боевой системе это не очень удобно и, как говорилось выше, недостаточно надежно.

Что же делать со всеми этими неудобствами? Конечно же надо сделать свой шилд для Raspberry! Эта идея пришла ко мне, когда я скроллил инстаграмм ребят, которые на основе Raspberry делают автоматизацию для разных квестов. У них была мотивирующая фотка смонтированного щита управления с полным набором болей: обрезанный USB провод, зажатый в клеммниках и грустный USB свисток, торчащий сбоку. Впечатлившись увиденным, я сразу сформулировал требования к новому устройству:


  • Питание микрокомпьютера без дополнительных источников и в обход ненадежного USB
  • Интерфейс RS-485 без дополнительных USB переходников.


xwzcg94b0ehzkjkf6uxgesevtum.png

Схема получилась максимально простой. Поставил свой любимый DC-DC преобразователь на основе микросхемы LMR23630. Это синхронный понижающий импульсный преобразователь с входным напряжением до 36 В и выходным током до 3 А.

Для преобразования сигналов UART в RS-485 вовремя подвернулся приемопередатчик MAX13487 с интересной функцией автоопределения направления передачи. Она позволяет избавиться от сигала RE/DE.

Для подключения питания и связи использовал чудесные зеленые разъемные клеммники.
Картину венчает оранжевый светодиод для индикации питания.
Все это поместилось на плате размером 56×21 мм.


beqhcc5ynewejl0rnrh-qt69zcu.png

Платы изготовил, собрал, протестировал — вроде работает. Пришло удовлетворение, можно забыть про проект. Так он и был заброшен больше чем на полгода, пока мы с товарищами не решили собрать свою СКУД для хакспейса B4CKSP4CE. И конечно же в качестве контроллера мы планировали использовать Raspberry, чтобы управлять разными устройствами по протоколу MODBUS через RS-485. И без шилда PI PWR никак было не обойтись. Разработка системы затянулась на не один месяц, ведь мы решили использовать самодельные платы ввода-вывода и программировать на всех языках что знали. Все это происходило очень весело и даже сформировалась целое мероприятие MODBUS-PATY, но это уже другая история.

В ходе очередного дебага нашей системы обнаружилась интересная особенность работы микросхемы приемопередатчика. Мы постоянно получали локальное эхо. Это когда посылка возвращается обратно при попытке ее отправить по шине RS-485. Такая ситуация возможна если приемник не отключается на время передачи. А этим процессом управляет внутренний алгоритм приемопередатчика. Я изучил даташит и не обнаружил никакого описания этой проблемы. А вот программисты нашли решение в недрах stackoverflow:


Talking with the Maxim-IC guy, I was missing a pull-up resistor on the RO. Fixed it! Thank you for your time and hope my solution will help someone! — Alexandre Lavoie Nov 4 '14 at 21:19

Оказалось что для отключения локального эха, необходимо было подтянуть выход RO к питанию. Спасибо мужику из Maxim-IC, что поделился этим тайным знанием.
Благодарю парней из B4CKSP4CE за мощный дебаг.


chlqhsb439fpiez4imqggg8hfe4.jpeg

Помимо бага с эхом, во время эксплуатации выявились и другие проблемы:


  • Одинаковые разъемы, естественно, всегда вставляются не туда.
  • Устройство с одним статично горящим светодиодом скучное. Без весело моргающей индикации приема/передачи никак.

Сейчас идет работа над новой ревизией платы, и есть несколько дилемм:


  • Возможно стоит отказаться от MAX13487 с автоопределением и использовать обычный приемопередатчик для управления которым использовать сигнал GPIO.
  • Добавить гальваническую развязку, но это увеличит стоимость и размеры.
  • Конструкция. Есть минусы, не очень хорошо подходит для Raspberry PI Zero и добавляет еще одну сторону с разъемами, затрудняет корпусирование.
  • Поставить разъемы с разным количеством выводов, чтобы не путать. (Это точно необходимо)
  • Добавить светодиодов для индикации приема/передачи. (Без этого никак)

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

Схему устройства можно найти тут.

Технические характеристики


  • Входное питание 6…36V
  • Выходное напряжение 5V
  • Выходной ток 3A
  • Преобразователь UART — RS-485
  • Защита от перенапряжения и переполюсовки
  • Управляемый выход 5V

© Habrahabr.ru