Цифровые интерфейсы

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

В этой статье мы кратко разберём особенности основных применяемых интерфейсов и методы работы с ними.


UART

Прототипом для большинства цифровых интерфейсов служит UART, существующий наверное столько же, сколько и сама ЭВМ. Он работает с напряжением 5В и суть его проста - для подачи сигнала "1" мы даём на провод 5 вольт, для подачи "0" мы замыкаем провод на землю, если нужно передать несколько бит информации, то мы с определённой периодичностью меняем напряжение на проводе. Промежуточные значения от 1 до 4 вольт не учитываются, попадая в разряд "неопределено". Всё казалось бы просто, если не учитывать один маленький фактор - реальный мир. В этом самом реальном мире если вы тянете линию связи между двумя маршрутизаторами, а по пути этой линии стоят штук пять электродвигателей, пара блоков реле и кусок высоковольтной ЛЭП, то какой сигнал придёт от передатчика к приёмнику - известно одному Ему. На сигнал 5 вольт могут наложиться помехи разной полярности, на передатчик придёт что-то от 3 до 7 вольт, вот тебе и ошибочный пакет с потеряными значениями. Так что, не смотря на простоту и теоретическую надёжность, этот протокол работает в объёме одного устройства, линия максимум в полметра, удобно для связи между электросхемами, но нам не подходит.


RS-232

Этот интерфейс существует ещё с 70х годов прошлого века и создан для автоматизации промышленности, это прямой потомок UART, только вместо GND и 5В он использует +12В и -12В. Логика разработчиков с одной стороны проста, увеличивая напряжение мы увеличиваем границу неопределённых значений, значит наводки +/-2В нам не так уж и страшны. Да, напряжение странноватое и решение не самое дешёвое, но работает. Так оно и работало до начала ныняшнего века, если откроете компьютер тех годов, то на блоке питания найдёте выход -12В. Он создан только для работы RS-232 и больше ни для чего, большинство схем работает на 5В. Напряжения +/-10В конечно можно получить из 5В, спаяв схему из горстки радиодеталей, и эта схема даже работала, но до той поры, когда контроллеры начали питаться от 3,3В. Тогда делать отдельную схему питания стало дорого, получить -10 неоткуда, RS-232 по сути отправился в аналы истории как пережиток. Его ещё можно встретить в автопромышленности, но и оттуда он потихоньку уходит.

У интерфейса два провода, входящий сигнал (Rx, recieve) и исходящий (Tx, transmit), и в этом основная сложность при работе с ним - возможность перепутать провода. Все производители, маркируя разъём, подписывают на нём Rx и Tx, но что они имеют ввиду, "Это мой Rx" или "Это будет Rx принимающего устройства" - иногда приходится проверять опытным путём.


RS-485

Вот это уже серъёзная заявка. Этот интерфейс дифференциальный, сигнал здесь идёт по двум проводам сразу, если на А сигнал больше, чем на В, то это "1", если меньше, то "0". Это во-первых позволило уменьшить напряжение, схема работает при разнице в 3 вольта. Во-вторых если ваша схема тянется через конвеер со всеми наводками, то эти наводки лягут на сигнальную линию одинаково, и при рассчёте А-В на приёмнике мы увидим абсолютно тот же сигнал. При этих характеристиках линия может достигать сотен метров и работать в любых условиях.

У интерфейса есть адресация, для общения по протоколу LLS на одну линию вы можете подключить 16 устройств. Провода при этом не перепутать, есть А и В для любого устройства на шине.


1-Wire

Обычно это термодатчики на базе ds18b20 и ключи i-Button. Всего один провод, удобно, весело, просто, пока вы не начнёте усложнять. Каждое устройство, которое общается по этому протоколу, находится в сети со совоим уникальным адресом. Причём патент на использование этого интерфейса принадлежит одной компании, адрес будет не уникальным в конкретной сети, а уникальным в мире, ВООБЩЕ. У устройства 64-битный адрес, это даёт нам 18 квинтиллионов значений. Не считайте, просто поверьте, что это много и этого хватит ещё надолго.

Сложность только одна, и то она не серьёзная - если наш трекер просто спросит "есть кто на линии", а на линии больше одного датчика, то на этом единственном проводе начнётся кавардак, поэтому при подобных схемах нужно чётко знать адрес датчика и настраивать трекер, чтобы он обращался к датчикам по их адресам.


CAN

Controller Area Network, в отличие от предыдущих чисто промышленных интерфейсов, вошёл в автомобилестроение сразу при появлении в конце 80х, сейчас эта система работает в самолётах, на морском транспорте, в роботах и ещё много где. В автомобиле много электронных блоков управления, индикаторов, датчиков, дублирующих резервных систем, и зачастую блоки одновременно работают с одними и теми же датчиками. Тот же датчик температуры ДВС даёт информацию на контроллер этого ДВС, на климат-контроль, на приборную доску и вентилятор. И если это всё соединить проводами, то проводов в машине хватит на отливку второй машины из меди. CAN служит для того, чтобы каждый блок управления знал о каждом датчике, будучи не соединённым с ним напрямую, это удешевило производство и позволило автоэлектрикам крепче спать.

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

  • Первое - найти шину. Провода зачастую не отличаются сечением от других, не маркируются в пучке, и их расположение нужно запрашивать у производителя или искать в сети. Как вариант взять сигнал с разъёма OBD, на нём по еврозакону должен быть сигнал для проверки экологических показаний, но это может быть не весь CAN, а отдельный контроллер.
    ВАЖНО!!! Если вы будете подключать к примеру Man или Volvo, то можете нахватать ошибок на бортовой компьютер, т.к. он периодически опрашивает всю периферию, и новое устройство может ввести его в ступор. В таких случаях либо ставится бесконтактный считыватель, либо подключение идёт к отдельному блоку, которого в штатном исполнении может не быть.
  • Второе - убедиться, что нашёл верно. По примеру с OBD разъёмом понятно, что шин в машине может быть несколько, с разными скоростями под разные задачи. На общей (медленной) шине вы скорее всего не найдёте сигналов от контроллера безопасности, а на быстрой шине нет сигнала с топливного датчика.
  • Третье - разобрать протокол. Как и RS-485, шина CAN это просто провод под меняющимся напряжением, если вы не знаете по каким правилам оно меняется, вы ничего с шины не прочтёте. Разные производители по-разному используют потенциал шины, но в большинстве случаев протоколом передачи данных будет J1939, особенно если дело касается коммерческого транспорта.
  • Четвёртое - найти тэги со значениями. Если на трекере нет кан-сканера, то он будет ловить только те тэги, которые есть в конфигурации, а тэги производитель может и не дать. В итоге вы точно знаете, что данные по ДУТ в шине есть, но вам они недоступны.


Цифра всё больше и глубже проникает в нашу жизнь. Она развивается, меняется, и, казалось бы, темп её развития подвластен только лютым программистам. На самом деле базы цифрового мира заложились уже давно и остались неизменными. И ошибочно думать, что цифра это нечто новое, неизведанное и отличное от нашей повседневности. Это то же самое, просто сказаное на другом языке, и язык этот нужно хотябы понимать по слогам, эта база останется с нами ещё очень и очень долго.