Часть первая
Хотя CAN шина довольно неприхотливая, ввиду множества защит и механизмов, но поскольку она может работать на высоких скоростях и больших расстояниях, то важным моментом является грамотное ее проектирование. В частности правильное терминирование оконечных устройств или перегрузка из-за количества устройств. Из-за которых возникает большинство проблем в шине.
▌Количество устройств
Когда то давно стандарт предписывал 32 устройства на шине. Но было это очень давно и сейчас таких ограничений нет. Все теперь зависит от нагрузочной способности самого слабого трансивера на шине. Чтобы понять о чем речь надо рассмотреть внутреннее устройство трансивера:
Обратите внимание на устройство выходного каскада. В свободном (рецессивном) состоянии выводы CANL и CANH притянуты к внутреннему источнику напряжения, равному половине питания. В результате в шине находится 2.5 вольта примерно.
В доминантном состоянии транзисторы прижимают линию вверх и вниз, соответственно.
Сопротивление этих резисторов может быть около 2030кОм, их можно найти в даташите, а если трансивер под рукой, то просто измерить сопротивление между линиями CANL и CANH и поделить пополам.
Таким образом, для того, чтобы транзистор трансивера мог продавить линию его выходной ток должен соответствовать нагрузке. Обычно минимальное сопротивление линии для трансиверов около 60 Ом. В даташите это параметр RL, считаете сопротивление всех узлов, они будут как параллельно включенные резисторы по 30кОм, и получите искомую нагрузку на шину.
Например, у нас есть 100 приемников с сопротивлением между CANL и CANH = 30кОм. И два терминатора по 120 Ом. И все это включено в параллель. Считаем суммарное сопротивление этой параллельной цепи резисторов:
- Сопротивление трансиверов 30 000/100 = 300ом
- Два трансивера в параллели 120/2.
Итого, суммарное сопротивление которое нагрузит выходные цепи трансивера (300*60)/(300+60) = 50ом.
▌Terminator
Терминирование на обоих конечных узлах шины CAN является необходимостью. Без оконечной нагрузки 120 Ом на обоих концах возникает отражение сигнала, вызванное несоответствием импеданса между шиной CAN и драйвером, которое приводит к полной неработоспособности всей шины, особенно на высоких скоростях.
Как я писал в прошлой статье, лучше соединять узлы шлейфом:
В принципе, шина допускает соединение ветвями. Автомобильный стандарт ISO 11898 даже описывает длину этой ветви в 0.3м. Если же у вас медленная скорость и очень хочется, то можно и длинней делать.
Но в этом случае, на высоких скоростях, могут начаться отражения сигнала. Которые положат всю сеть. Что делать? Поставить дополнительный терминатор на такую вот ветку. Но не полноценный, иначе мы можем завалить сопротивление шины, а на 1-2 кОм. Существенно улучшает ситуацию. Но лучше так не делать, а разводить шлейфом.
▌Terminator 2
Высокое входное сопротивление шины в рецессивном состоянии делает ее уязвимой даже для небольших токов утечки, которые могут возникать если в шине есть обесточенные узлы. Как, например, может быть в автомобиле. Где часть систем запитана всегда, а часть только когда двигатель заведен. В результате синфазное напряжение может быть ниже, по сравнению с номинальным Vcc/2. При передаче первого доминантного бита синфазное напряжение возвращается до номинального значения. Такие скачки порождают повышенные помехи.
Чтобы их снизить в некоторых трансиверах есть Vref или SPLIT выход. Отдельная нога, на которую выводится половина питающего напряжения. Поэтому если в сети есть узлы которые могут терять питание, то терминатор лучше подключать не между линиями CANL и CANH, а до этого опорного напряжения, через половину терминатора. Как указано по схеме:
Хоть в этом случае у нас больше деталей, но зато мы получаем фильтр нижних частот для синфазного шума в сети, и, таким образом, может помочь в уменьшении электромагнитных излучений. Резисторы и конденсатор (RC) создают RC-фильтр нижних частот с частотой среза.
f = 1/(2*pi*R*C )
И да, частота среза этого фильтра не зависит от частоты полезного сигнала. Поскольку конденсатор фильтрует только синфазный сигнал. А состояние шины определяет дифференциальный сигнал. Поэтому нет необходимости выбирать фильтр с частотой среза выше бодрейта.
Главное, что тут надо следить за согласованностью резисторов терминатора. Они должны быть как можно более одиннаковые. Чтобы не было ни малейшего перекоса. Любое изменение сопротивления преобразует синфазный шум, присутствующий в сети, в дифференциальный шум, что снижает помехоустойчивость приемника.
Но есть современные трансиверы которые не требуют разделения терминатора. Например TCAN4550 от TI.
Сам же резистор терминатора лучше брать побольше, такой чтобы тянул хотя бы миллиампер 100.
Комментарии к статье:
Чтобы оставить комментарий, прокрутите в самый конец статьи Комментировать материал
Как всегда топ, спасибо за статью) Читаю уже 13 лет, вот решил и написать первый коммент, раз уж тут тихо. Знакомство с миром МК начал с этого сайта. Им и продолжаю)
Или я что-то упускаю, или каждый драйвер даёт 60 кОм, а не 30, если там два по 30к последовательно
Там на самом деле большой разброс. От 20 до 100, всё которые у меня тут меряются на 30 или около того.
Ди, приветствую. С твоей подачи подсел на SprintLayout, уж сколько плат на нём сделал. А теперь ты говоришь что Спринт какашка, есть нормальные CAD. Пробовал KiCAD, и как то не прочувствовал всей мощи.
Просить статью о проектировании плат в ((?)cad) мне наглость не позволяет. 🙂
Но может быть хоть просто видео запишешь как разводишь плату в нормальных, по твоему мнению, CAD ? Даже не туториал, а просто пример на одной из твоих многочисленных плат, когда будешь её рисовать?
KiCAD весьма похож на Eagle (ну или наоборот), который тут неоднократно упоминался. Основное отличие нормального CAD это работа не над конкретной платой, а над проектом: в нём есть схема, из неё быстро печатается список деталей, к схеме привязаны корпуса деталей (выводные или SMD диоды 1N4007 например), которые переносятся в виде посадочных мест на плату, а самих плат может быть 10 вариантов к одной схеме в разных исполнениях. Опять же, просмотр платы в виде 3D модели очень полезная штука.
Sprint Layout по итогу служит для единоразового изготовления платы (ну да, можно сколько угодно копий наделать), а более сложные CADы позволяют именно работать над проектом: дополнять схему, модифицировать состав и вид компонентов, создавать множество версии плат. Не знаю как у Eagle, но файлы KiCadа внутри текстовые, их отлично жрёт Git, можно разворачивать систему контроля версий проекта и откатываться до нужной в любой удобный момент, делать тестовые ответвления и т.д.
Не понимаю, зачем нужно советовать CAN, если давно уже есть улучшенная редакция CAN CAN FT. Высокоскоростной потолок необходим крайне редко, а вот надежность соединения, как-бы, востребовано всегда. Кроме того, одной из разновидностью CAN-FT есть однопроводные трансиверы. Тут уж о защите нет речи, зато упрощается соединение.
Крайне редко можно выбирать то, что хочется. Обычно приходится плясать от того что есть и с чем надо работать. И почти всегда это древний Кан.
Высокоскоростной потолок необходим крайне редко гореть вам в аду за такие слова. Как правило устройства работающие на шине CAN используют её и для загрузчика. Лить 4Мб прошивки через линию 125kbps при условии что шина не на 100% твоя одно удовольствие, а когда делаешь это по несколько раз в день вообще песня. А ещё есть Debug over CAN. Для защиты CAN-HS есть аппаратные средства счётчики ошибок, которые генерят EW/EP состояния и в конце затыкают устройства в BUS OFF если ошибок много. + в трансиверах бывает защита от длинных импульсов, которая не позволит навсегда положить шину. От КЗ на шине вас и FT не спасёт ибо пропускная способность упадёт на дно. А трафика даже в не больших сетях сейчас много. Вот CAN-FD это да, годное обновление. А FT и однопроводные шины отжили своё. В авионике и космосе используют свои шины и там FT как резерв канает. А промке на земле это кал.
Вообще-то и для CAN есть схемы подключения по однопроводной линии.
Вот тоже хороший материал по CAN шине:
habr.com/ru/articles/726350/