DS18b20 Заказ датчиков на кабеле
У меня есть группа из 10 датчиков DS18b20, подключенных к одной двухпроводной линии (паразитное питание). Ниже приведена таблица датчиков, где они расположены на проводе, и в каком порядке, где они обнаружены.
Serial Order on wire* Order discovered
286305560100002c 1 7
28a158610100006a 2 3
28ad48610100006b 3 6
2851ae60010000ad 4 4
289b426101000089 5 8
28cd1161010000ce 6 5
2864026101000030 7 1
280c766101000026 8 2
Я прочитал этот документ о том, как OneWire обнаруживает датчики на шине. https://www.maximintegrated.com/en/app-notes/index.mvp/ идентификатор/187
Мой вопрос: есть ли способ определить порядок датчиков на проводе?
3 ответа
Лучший ответ:
Невозможно определить положение на шине, поскольку все устройства подключены параллельно. Вот почему требуется последовательный или «цепной» провод, добавленный к более новым устройствам.
(Чтобы усложнить ситуацию, что такое «порядок устройств» — или даже значение «порядка» в шине с центральным питанием, кольцевой, звездообразной или другой разветвленной сети? Порядок — это то, что мы воспринимаем, когда Глядя на линейную сеть с конечным питанием Электроны не заботятся Представьте конденсатор (к сожалению, шина ведет себя как один, но это другая история) с двумя пластинами, площадью в несколько сантиметров, и дюжиной 1-проводных устройств, подключенных от пластины на тарелку. А теперь в каком порядке? Ой, у меня мозг болит! Вернемся к линейным автобусам.)
Порядок обнаружения зависит от набора двоичных идентификаторов устройств на шине. Есть два известных мне способа узнать физический порядок, оба эмпирические (т. е. путем наблюдения):
Подключите набор устройств по одному к временной шине, например к макетной плате. С помощью Arduino прочитайте их идентификаторы и пометьте их (удобно для чтения). Зная алгоритм обнаружения или запустив фактическое обнаружение на Arduino со всеми подключенными устройствами, запишите идентификаторы в порядке их обнаружения, который является инвариантным для данного набора идентификаторов устройств. Соберите свою проводную шину с устройствами в этом порядке.
(Обратное 1 и более быстрое построение, и это то, что вы уже показали в своем вопросе: подключите шину. С помощью простой программы Arduino многократно сэмплируйте все устройства на шине и распечатывайте их индексы. и температуры (индексы будут в порядке открытия).По одному нагревайте каждое устройство рукой и отмечайте, какой индекс устройства затронут.Запишите физическое положение (первое, второе, ...) и индекс.Это — это таблица сопоставления между позицией и индексом. Включите ее в свой алгоритм управления.
Так что я бы сказал, что DS1820 для профессионального использования бесполезен! Нет простого способа добавить или заменить датчик на существующем приборе для измерения температуры и быть уверенным в том, что вы измеряете. Я прав?, @Satman
@Satman Иногда датчики все равно не реагируют, поэтому вы можете подумать, что датчик 3 станет датчиком 2, если датчик 2 не ответит. Я бы не сказал, что они бесполезны, но вам нужно знать идентификатор датчика (что-то, что вы можете узнать на стенде), прежде чем развертывать его в полевых условиях. Использование ID в любом случае будет намного точнее, потому что тогда вы будете уверены, что получили определенный датчик, а не только потому, что он оказывается пятым в цепочке., @Nick Gammon
Я нашел эту заметку по применению.
ПРИМЕЧАНИЕ ПО ПРИМЕНЕНИЮ 4037
Восстановите информацию о местоположении, используя функцию 1-Wire® Chain — простой метод сигнализации и протокола для определения физического местоположения устройства
https://www.maximintegrated.com/en/app-notes/index .mvp/id/4037
Обратите внимание, что 1) этот метод не применим к DS18b20 и аналогичным устройствам 1-wire; и новые устройства - при использовании этой возможности - больше не являются 1-проводными, для цепного сигнала требуется другой проводник., @JRobert
По-видимому, вы можете использовать пространство пользовательских данных, отведенное для будильника, и добавить туда идентификатор. Я еще не сделал этого, но рассматриваю этот вариант, так как в моем массиве датчиков более 40 датчиков в линии, и в идеале я хотел бы, чтобы верхний из них был 0, а последний в цепочке — 40.
- Ошибка компиляции в nodeMCU вместе с датчиком температуры oneWire ds18b20 и ЖК-дисплеем 2x16 (не I2C)
- DS1820 плохие показания 4-го датчика
- Подключение DS18B20 к Arduino pro mini
- Обнаружение датчиков DS18B20 и правильное назначение их реле
- Драйвер Arduino One Wire Bus DS18B20 собственной разработки, в котором отсутствуют биты или посторонние биты
- Установка значения float до двух знаков после запятой
- Эмуляция 1-проводных устройств
- ESP-01 неправильно просыпается после глубокого сна
Я так не думаю. Между разными датчиками нет ничего другого, кроме незначительной разницы в сопротивлении провода из-за большей длины., @Gerben
Порядок обнаружения соответствует алгоритму поиска (который зависит от номера ROM/ID). Вы можете расположить датчики по порядку, когда у вас есть их ID, или использовать таблицу сопоставления в своем скетче. Алгоритм поиска не определяет физический порядок датчиков., @Mikael Patel