Skip to content

Шины на плате

Когда датчики и мозг сидят на одной плате, их соединяют цифровыми шинами — это несколько проводов, по которым бегут сообщения в виде нулей и единиц. Три шины встречаются в робототехнике чаще всего: I²C, SPI и UART. У каждой свой характер, и выбор между ними — типичное архитектурное решение.

I²C — много устройств на двух проводах

Главное достоинство I²C в том, что на одну пару проводов можно повесить десяток устройств сразу. Провода всего два: SDA (данные) и SCL (тактовый сигнал, задающий ритм). Чтобы мозг не путал, кому он сейчас говорит, у каждого устройства на шине есть свой адрес — как номер квартиры.

Именно поэтому I²C — рабочая лошадка для датчиков: IMU, барометр, датчик освещённости и дисплей могут жить на одной шине и не мешать друг другу.

Подтягивающие резисторы. Линиям I²C нужны два небольших резистора (обычно 4.7 кОм), подтягивающих SDA и SCL к питанию. Без них шина «висит» и связь не работает. На готовых модулях они часто уже впаяны — если повесить несколько таких модулей, резисторов может оказаться слишком много, и это тоже мешает.
Углубление: конфликт адресов

Если на шину повесить два одинаковых датчика, у них совпадут адреса — и мозг не сможет их различить. Решения три: некоторые модули позволяют сменить адрес перемычкой или пайкой; можно поставить специальную микросхему-мультиплексор; можно развести датчики по двум разным шинам I²C, если контроллер это поддерживает. Это классическая задача, с которой сталкиваются, когда собирают робота с несколькими одинаковыми дальномерами.

SPI — когда нужна скорость

SPI быстрее I²C, но платит за это проводами: их нужно четыре, и на каждое устройство добавляется отдельный провод выбора. Зато по SPI гоняют большие потоки данных — карты памяти, дисплеи с картинкой, скоростные АЦП. Если I²C — это общая линия с адресами, то SPI — набор отдельных «телефонных трубок» к каждому устройству.

UART — простая связь один на один

UART соединяет ровно два устройства двумя проводами: один говорит — другой слушает, и наоборот. Никаких адресов, всё просто. Так общаются две платы между собой (например, Arduino и модуль GPS) или робот с компьютером через USB. Плата за простоту — нельзя без ухищрений подключить много устройств на одну линию.

Сравнение

I²CSPIUART
Проводов24+2
Много устройствда, по адресамда, но по проводу на каждоенет, только пара
Скоростьсредняявысокаяневысокая
Типичное применениедатчики, дисплеипамять, экраны, АЦПсвязь двух плат
Практика в мастерской. Возьми два модуля с I²C — например, дисплей и датчик. Соедини их на одной паре проводов SDA/SCL, запусти сканер шины и убедись, что мозг видит оба адреса. Это самый наглядный способ понять, что такое общая шина: один провод — несколько собеседников.

Как это ложится на нашего робота

У разведчика IMU и дальномер уходят на I²C — их немного, они медленные, экономия проводов важна. Если добавим экранчик — он тоже встанет на эту шину. А вот связь с внешним GPS-модулем удобнее сделать по UART, потому что модуль присылает поток строк-координат и никакой адресации ему не нужно.