Я пытаюсь построить «гирляндную цепочку», используя несколько приемопередатчиков Arduino и MAX485. На всех платах есть датчик температуры. Батарея 9 В питает все платы в цепочке.
Я пытаюсь найти способ определить физическое расположение различных плат в гирляндной цепочке, например, boardA = первая, boardD = вторая, boardB = третья и т. д.
Я мог бы сделать это вручную, зная, где я подключаю каждую плату в линии. Однако это подвержено человеческим ошибкам, и я хочу сделать это автоматически. Кроме того, я хотел бы случайным образом брать доски для создания сетей, когда и где захочу.
Чтобы идентифицировать платы в сети, я мог создать цикл запроса на основной плате, чтобы вызвать все возможные имена и получить ответ от этих подключенных плат. То, что я ищу, также является ответом на то, где они расположены в сети.
Я думал измерить падение напряжения/тока как показатель того, насколько близко/далеко они находятся от мастера. Тем не менее, я не уверен, что падение достаточно велико или АЦП в Arduino достаточно точен.
Наверное, кто-то уже задумывался об этом, может быть, для этого даже есть готовые микросхемы. Я не инженер-электронщик, извините за мои ограниченные знания.
Редактировать, 2018-10-14
Больше разъяснений; скажите, что у вас есть следующий пример:
Все ведомые платы установлены в режим «прослушивания» и ждут вызова от ведущего. Мастер запускает цикл запроса, чтобы определить, какие ведомые устройства находятся на шине. Он запрашивает A, B, C, D, E и т. д. Подчиненные устройства проверят вызов ведущего. Чтобы это работало, мне нужно будет присвоить уникальное имя/адрес в программном обеспечении каждому ведомому устройству, что совершенно нормально.
Чего я хочу избежать, так это проверки имени каждого подчиненного устройства, когда я помещаю их в поле. Поэтому необходимо выяснить их относительное положение в шинной линии по отношению к ведущей и другим ведомым платам.
Это что-то похожее на Максим DS28EA00 ? Заметьте, меня интересует не только температура. Я использую датчики температуры в качестве доказательства концепции. Я мог бы использовать его для измерения давления, ускорения и т. д.
@Transitor В этом случае гирляндная цепочка = партийная линия или топология шины. Я не знаю, смогу ли я подключить RS-485 последовательно. Если да, могу ли я собирать имя каждого устройства по мере прохождения через них данных? Недостатком этого является то, что если одна ведомая плата выходит из строя, остальная часть линии тоже умирает.
Руководство по проектированию TI RS-485
@stark Можете ли вы подробнее рассказать об идее цифровой булавки? Обратите внимание, что все доски разнесены на 1-3 метра.
@Энди, он же Энди, можешь рассказать подробнее? Может ли это работать в шинной топологии?
@TimWescott Это топология шины. Может быть, я неправильно использовал термин гирляндная цепочка? Можно ли сделать настоящую гирляндную цепочку с RS-485?
Это автобусная конструкция. По определению не имеет значения, где физически расположено каждое устройство.
Если вам нужна географическая адресация, вы можете попробовать этот подход:
Подключите мастер-узел на одном из концов шины.
Каждый узел должен иметь дополнительный провод (то есть один входной и один выходной провод), который идет к соседним узлам (подойдет простой GPIO).
Когда этот провод имеет определенное состояние (по умолчанию) — узел молчит и игнорирует весь трафик.
При включении каждый узел не имеет адреса. Мастер подключает дополнительный провод к низкому (или высокому) уровню, активируя первый узел на шине. Отправляет команду «установить адрес» на шину (у которой нет адреса назначения) — конечно, только первый узел действует на это сообщение.
Мастер отправляет «линию включения управления» узлу 1 (у которого теперь есть адрес), это заставляет узел 2 прослушивать шину.
Мастер снова отправляет команду «установить адрес» (которая игнорируется узлом 1, потому что у него уже есть адрес), которая устанавливает адрес устройства 2.
Промойте и повторите для всех узлов.
Ищите 1Wire, если вы заинтересованы в измерении температуры, с множеством датчиков тут и там! https://www.maximintegrated.com/en/app-notes/index.mvp/id/148 Это не RS485, но его проще реализовать. И используйте небольшую программу, чтобы включить каждый узел 1Wire один за другим и прочитать его идентификатор, тогда у вас будет таблица физических идентификаторов по сравнению с логическими, конечно, вы можете сделать то же самое с RS485, но вам потребуется больше проводов! В этом случае у вас должна быть небольшая схема рядом с каждым датчиком, поэтому каждый раз, когда вы включаете свою схему, такая поясняющая таблица строится в мастере.
Транзистор
суровый
Энди ака
Тим Вескотт
пользователь76844
Габриэль
Габриэль
пользователь76844
Габриэль