Здесь попробую просто объяснить как работает арбитраж на шине CAN: почему два устройства не «перекрикивают» друг друга.
Представьте себе обычную комнату, где несколько человек хотят поговорить одновременно. Если все начнут говорить в один голос, получится каша — никто ничего не поймёт. Но есть правило: кто говорит тише — замолкает и ждёт, пока громче говорящий закончит. Так и работает CAN-шина (Controller Area Network) — это «комната» для электронных устройств в машине, где они обмениваются сообщениями без конфликтов.
CAN — это два провода (CAN-H и CAN-L), по которым все устройства (датчики, блоки управления, моторы) в автомобиле (и не только) отправляют и получают сообщения.
Это как одна телефонная линия на всю квартиру. Все могут позвонить и принять звонок, но только по одному проводу.
Устройства не имеют отдельных «своих» проводов — все подключены к одному и тому же. Не стоит путать с 1-wire где питание идет по той же шине. Здесь питание к модулям подается отдельно.
Как устройства «говорят» по проводу?
Каждое сообщение — это последовательность 0 и 1, как в компьютере.
Логический 0 = доминантный уровень → провод «тянет» напряжение в одну сторону (например, 3,5 В на CAN-H и 2,5 В на CAN-L). Это как громкий голос.
Логическая 1 = рецессивный уровень → провод «отпускает» напряжение (2,5 В на обоих). Это как тишина.
Если одно устройство передаёт 0, а другое — 1 (молчит), то на шине будет 0. Потому что 0 — «сильнее».
Это как если несколько человек договорились отвечая «ДА» или «НЕТ» произносить ответ в слух только если ответ «ДА». Тогда если ответы будут разными все услышат только тех кто сказал «ДА!». Так передается бинарный код состоящий из комбинации нулей и единиц, либо «ДА» или «НЕТ».
Что такое арбитраж?
Арбитраж — это процесс, когда два устройства начинают говорить одновременно, но одно из них само замолкает, не мешая другому.
Это не прерывание, не «столкновение» и не «ошибка». Это мирное соревнование.
Как это работает? Пример с номерами
Каждое сообщение в CAN начинается с идентификатора — это как номер важности.
Реальный пример: два устройства начинают говорить одновременно
Оба начинают передавать в один и тот же момент.
На шине будет 0 (потому что 0 доминирует).
Устройства слушают шину одновременно с передачей!
B замолкает и переходит в режим приёма.
Шаг 2: Второй и третий биты
А что если идентификаторы одинаковые?
Тогда оба продолжают — потому что они передают одно и то же. Это нормально: одинаковые сообщения не конфликтуют.
CAN-шина (Controller Area Network) изначально разрабатывалась для автомобилей, но её надёжность, простота и устойчивость к помехам сделали её популярной вне автопрома.
Заводы и конвейеры: датчики, двигатели, ПЛК (программируемые контроллеры) общаются по CAN.
Медицинское оборудование: МРТ, УЗИ, операционные столы, инвалидные коляски с электроприводом.
Лифты и эскалаторы: датчики дверей, этажей, двигатель, панель управления — всё на CAN.
Сельскохозяйственная техника, морской и речной транспорт, железные дороги и поезда, авиация (малые самолёты, дроны), умные здания и автоматизация и многое другое.
Никаких ссылок на каналы или что-то ещё — просто попытался простым языком объяснить, как это устроено, для тех, кто, возможно, задумывался, но не решался спросить у поисковиков. Если где-то ошибся — поправьте, пожалуйста, и я обновлю пост.