Шины на плате
Когда датчики и мозг сидят на одной плате, их соединяют цифровыми шинами — это несколько проводов, по которым бегут сообщения в виде нулей и единиц. Три шины встречаются в робототехнике чаще всего: I²C, SPI и UART. У каждой свой характер, и выбор между ними — типичное архитектурное решение.
I²C — много устройств на двух проводах
Главное достоинство I²C в том, что на одну пару проводов можно повесить десяток устройств сразу. Провода всего два: SDA (данные) и SCL (тактовый сигнал, задающий ритм). Чтобы мозг не путал, кому он сейчас говорит, у каждого устройства на шине есть свой адрес — как номер квартиры.
Именно поэтому I²C — рабочая лошадка для датчиков: IMU, барометр, датчик освещённости и дисплей могут жить на одной шине и не мешать друг другу.
SDA и SCL к питанию. Без них шина «висит» и связь не работает. На готовых модулях они часто уже впаяны — если повесить несколько таких модулей, резисторов может оказаться слишком много, и это тоже мешает.Углубление: конфликт адресов
Если на шину повесить два одинаковых датчика, у них совпадут адреса — и мозг не сможет их различить. Решения три: некоторые модули позволяют сменить адрес перемычкой или пайкой; можно поставить специальную микросхему-мультиплексор; можно развести датчики по двум разным шинам I²C, если контроллер это поддерживает. Это классическая задача, с которой сталкиваются, когда собирают робота с несколькими одинаковыми дальномерами.
SPI — когда нужна скорость
SPI быстрее I²C, но платит за это проводами: их нужно четыре, и на каждое устройство добавляется отдельный провод выбора. Зато по SPI гоняют большие потоки данных — карты памяти, дисплеи с картинкой, скоростные АЦП. Если I²C — это общая линия с адресами, то SPI — набор отдельных «телефонных трубок» к каждому устройству.
UART — простая связь один на один
UART соединяет ровно два устройства двумя проводами: один говорит — другой слушает, и наоборот. Никаких адресов, всё просто. Так общаются две платы между собой (например, Arduino и модуль GPS) или робот с компьютером через USB. Плата за простоту — нельзя без ухищрений подключить много устройств на одну линию.
Сравнение
| I²C | SPI | UART | |
|---|---|---|---|
| Проводов | 2 | 4+ | 2 |
| Много устройств | да, по адресам | да, но по проводу на каждое | нет, только пара |
| Скорость | средняя | высокая | невысокая |
| Типичное применение | датчики, дисплеи | память, экраны, АЦП | связь двух плат |
SDA/SCL, запусти сканер шины и убедись, что мозг видит оба адреса. Это самый наглядный способ понять, что такое общая шина: один провод — несколько собеседников.Как это ложится на нашего робота
У разведчика IMU и дальномер уходят на I²C — их немного, они медленные, экономия проводов важна. Если добавим экранчик — он тоже встанет на эту шину. А вот связь с внешним GPS-модулем удобнее сделать по UART, потому что модуль присылает поток строк-координат и никакой адресации ему не нужно.