Макет повторителя CAN

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

Возможно несколько способов решения этой задачи:

  • Применение специализированных микросхем;
  • Применение микроконтроллера;
  • Два приемопередатчика с дополнительной логикой.

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

Два приемопередатчика с дополнительной логикой

За основу был взят материал с какого-то сайта. Сейчас не смог найти эту статью, но если найду, обязательно упомяну…

Рассмотрим сигналы в дифференциальной CAN шине и TTL уровни интерфейса CAN.

Сигналы CAN шины
Сигналы CAN шины

“0” является доминантным, “1” – рецессивной. Это означает, что при появлении в дифференциальной линии бита “0” от одного приемопередатчика и бита “1” от другого приемопередатчика на линии будет бит “0”. На выходе приемопередатчика будет бит “0”. Поскольку приемопередатчик принимает им самим же передаваемые биты, то в режиме передачи, биты на TTL выходе всегда будут соответствовать битам на TTL входе. В режиме приема на TTL входе необходимо установить “1”. Таким образом, невозможно просто соединить два приемопередатчика TTL входами/выходами, так как это приведет к защелкиванию на доминантном бите.

Схема включения двух CAN приемопередатчиков приводящая к защелкиванию

Поэтому необходимо на внешней логике реализовывать схему определения направления передачи данных. Работа схемы заключается в том, чтобы при появлении бита “0” на TTL выходе первого сегмента подать его на TTL вход второго сегмента, но не допустить появление нулевого бита на TTL входе первого сегмента. Иначе говоря, при появлении бита “0” на TTL выходе одного из сегментов, на TTL входе этого же сегмента необходимо установить бит “1”.

Логическая схема CAN повторителя

По этой логической схеме и собирался макет. В качестве элемента задержки использовалась RC-цепь. Перед составлением схемы была собрана ее модель в программе симуляции Micro-Cap.

Схема CAN повторителя в программе Micro-Cap
Результаты симуляции модели CAN повторителя

Ссылка на архив с моделью для Micro-Cap: can_repiter

Макет

Схема и топология макета составлялись в Altium Designer. Для гальванической развязки был добавлен оптрон на выходах одного из передатчиков.

Схема макета CAN повторителя
Топология макета CAN повторителя
Собранный макет CAN повторителя

При сборке использовались микросхемы стандартной логики, найденные у нас в старых запасах. Они по характеристикам подобны тем, которые производят сейчас.

Тестирование

Для тестирования макета использовались две CAN-USB коробки. Сначала мы соединяли их с двух разных компьютеров и пытались отправлять данные с помощью программы BUSMASTER. В ней есть возможность работы с коробками VSCom.

Сразу работать макет отказывался. Проблема была в том, что время переключения между линиями было слишком большим. Это не давало проходить биту подтверждения и появлялась ошибка обмена. Нужно было изменить соответствующим образом конденсатор в цепи задержки. Опытным путем был подобран подходящий номинал — 1000 пФ. Поставили отечественные конденсаторы К10-79.

После отладки на столе тестировали макет в камере тепла и холода. Что на минусе, что на плюсе схема продолжала работать. В результате, макет работает должным образом на разных скоростях. PROFIT!!!

UPD Использовать нужно обязательно ТТЛ-микросхемы логики. Схема плохо работает на микросхемах КМОП серии 1554, потому что им не хватает тока для того, чтобы раскачать оптрон.