Я пытаюсь понять тайну того, как один неисправный приемопередатчик RS-485 в сетевой шине с несколькими устройствами, по-видимому, очень неравномерно влияет на успех передачи самого себя и своих соседей.
НАСТРОЙКА
Установка состоит из шинной сети RS-485 с примерно 20 устройствами на линии. В качестве приемопередатчиков используются платы Sparkfun RS-485 Breakout ( Sparkfun BOB-10124 ). Согласующие резисторы на 220 Ом были удалены с плат, чтобы обеспечить возможность установки нескольких устройств. Витая пара между устройствами имеет длину от 14 до 30 метров. В целях безопасности и шумоподавления установлены повторители RS-485 ( РПТ-485_422-2 ) между 6 устройствами каждый.
ПРОБЛЕМА
Из-за неизвестных проблем (возможно: скачок напряжения или короткое замыкание или другая форма неправильного обращения) время от времени трансивер повреждается. Анализ передачи показывает, что существует проблема с несколькими устройствами в сети. Не очевидно, какой трансивер вызывает проблему. Как только неисправный трансивер найден (в основном методом проб и ошибок) и заменен, скорость передачи всех остальных устройств возвращается к норме.
Когда неисправный трансивер проверяется сам по себе (один к одному, а не в шине), кажется, что он работает. Простые измерения сопротивления между контактами на плате приемопередатчика не показывают никакой разницы с новой неиспользованной платой. На плате не видно никаких повреждений.
На изображении ниже показано, что происходит при анализе успешной передачи, когда один и тот же неисправный трансивер вставляется в разные позиции сетевой шины. Иногда собственный успех передачи приемопередатчика составляет 0% (в позиции #11 или #12), иногда - 100% (в позиции #13 или #15). Иногда его соседние устройства имеют 0% или 100% или значения между ними. Обратите внимание, что эти результаты являются постоянными и не колеблются.
Я надеюсь, что кто-то увидит закономерность в этих результатах, или у него появится представление о том, какая часть трансивера могла быть повреждена. Может быть, кто-то сталкивался с подобными проблемами с сетями RS-485 и может указать мне на некоторые направления. В этом посте я не пытаюсь выяснить, что могло вызвать повреждение трансивера, а пытаюсь понять, как это повреждение влияет на всю сеть. Чтобы в будущем можно было диагностировать быстрее.
Вот изображение трансивера, используемого в установке: плата Sparkfun RS-485 Breakout board ( Sparkfun BOB-10124 ). Обратите внимание, что согласующий резистор на 220 Ом был удален для установки.
Я думаю, чтобы правильно диагностировать это, вам нужно будет подслушать что-то вроде преобразователя FTDI rs458 вместе с осциллографом. С помощью прицела вы можете видеть, когда трансивер захватывает и отпускает линию. Возможно, вам придется вручную опросить каждый узел и просмотреть каждый ответ. Если вы можете точно определить модуль, который удерживает линию «внизу», посмотрите, действительно ли соответствующий вывод включения находится в высоком состоянии. Если линия не удерживается, это может означать, что два узла пытаются ответить одновременно (проблема прошивки atmega).
Убедитесь, что вы нагрузили систему двумя резисторами на 120 Ом в соответствии с инструкциями повторителя.
Многие инженеры игнорируют сигнальную землю, когда создают сеть RS485, потому что RS485 известен как «двухпроводная связь».
Подключаете ли вы сигнальную землю, а также два сигнала данных?
Если вы не подключите сигнальную землю, приемопередатчик RS485 будет поврежден из-за разности потенциалов заземления.
И вам могут понадобиться два резистора смещения (некоторые люди называют их подтягивающим и подтягивающим резисторами).
В RS485 есть два сигнала - A и B (некоторые люди называют их TRX+ и TRX-). И приемопередатчик RS485 выводит сигнал на контроллер UART в соответствии с разницей между A и B следующим образом:
AB > 150 мВ: выход High AB < -150 мВ: выход Low Если AB находится в диапазоне от -150 мВ до +150 мВ, состояние выхода непредсказуемо. Таким образом, резисторы смещения необходимы в цепи RS485.
Смещающие резисторы в цепи RS485 поддерживают высокий или низкий уровень сигнальных линий A и B в состоянии ожидания RS485. (См. ниже.)
A: должен оставаться высоким B: должен оставаться низким в режиме ожидания
Это делает сигнальную линию высокой, когда нет данных. Когда нет резисторов смещения, могут быть мусорные данные, когда нет данных передачи.
Крис Стрэттон