Контроллер

Контроллер — вычислительный центр робота. Его выбирают по конкретной карте входов, выходов, аппаратных интерфейсов, памяти, временных требований и питания, а не по общему числу контактов или популярности платы.
Зачем это нужно
Контроллер должен одновременно читать датчики, считать импульсы энкодеров, формировать команды драйверу моторов, обмениваться данными с модулями и выполнять алгоритм. Плата может иметь много контактов, но часть уже занята встроенной памятью, USB, светодиодом или радиомодулем. Не каждый выведенный контакт поддерживает ADC, ШИМ или аппаратное прерывание.
Если выбрать плату до составления карты сигналов, нехватка обнаружится во время монтажа. Приходится переносить датчик, отказываться от интерфейса или заменять контроллер. Ещё опаснее неверно сопоставить электрические уровни: внешний сигнал выше допустимого напряжения входа способен повредить микроконтроллер.
Главная идея
Выбор начинается с проекта, а не с названия платы:
функции робота -> список сигналов -> аппаратные ресурсы -> ограничения времени и памяти -> питание -> конкретная плата
Первая иллюстрация показывает учебного робота рядом с разными контроллерами и платами расширения. Это не монтажная схема: перед подключением всё равно нужна карта пинов, питания и интерфейсов.
Реальные варианты контроллеров
| Контроллер | Где подходит | Плюсы | Ограничения |
|---|---|---|---|
| Arduino UNO | первый робот, L298P shield, простые датчики | много примеров, понятная распиновка, много плат расширения | мало памяти, нет Wi-Fi/Bluetooth |
| Arduino Nano | компактный робот на той же логике AVR | маленькая плата, удобно ставить на макет | меньше удобных разъёмов |
| ESP32 DevKit | робот со связью Wi-Fi/Bluetooth | больше памяти и скорости, встроенная связь | 3,3 В логика, важны загрузочные пины |
| Raspberry Pi Pico | много PWM и быстрые задачи | дешёвый, мощный микроконтроллер | меньше готовых Arduino-шилдов |
| STM32 Nucleo | продвинутые задачи управления | много периферии и отладка | выше порог входа для новичка |
Для учебного робота удобны платы форм-фактора Arduino UNO. Под них существует много плат расширения: моторные шилды, сенсорные шилды, платы с разъёмами Grove/Gravity, клеммниками и готовым питанием. Такая плата расширения не отменяет проверку распиновки, но сильно уменьшает количество отдельных проводов и типовых ошибок монтажа.
Составляем карту сигналов
Для каждого устройства запишите направление, тип сигнала и специальные требования.
| Устройство | Сигналы контроллера | Возможный ресурс | Что уточнить |
|---|---|---|---|
| два канала драйвера | направление и команда мощности | цифровые выходы, ШИМ | сколько линий требует выбранный драйвер |
| аналоговый датчик | одно измеряемое напряжение | вход ADC | допустимый диапазон и опорное напряжение |
| энкодер колеса | один или два импульсных канала | цифровой вход, иногда прерывание или счётчик | максимальная частота и способ декодирования |
| кнопка | цифровой уровень | GPIO-вход | подтяжка и подавление дребезга |
| модуль связи | передача и приём либо общая шина | UART, I2C или SPI | уровни, контакты, занятый порт |
| сервопривод | временная импульсная команда | таймер/ШИМ или библиотека | конфликт таймеров и отдельное питание |
Один контакт может иметь несколько альтернативных функций, но обычно не выполняет их одновременно произвольно. Например, контакт ADC может также быть GPIO, а ШИМ связан с конкретным каналом таймера. В pinout нужно проверить не только номер, но и мультиплексирование функций.
GPIO и электрические уровни
GPIO — вывод общего назначения, настраиваемый как цифровой вход или выход. Но слово «общий» не означает «без ограничений».
Перед соединением проверяют:
- допустимое напряжение на входе;
- уровень логического нуля и единицы у обоих устройств;
- допускает ли вывод выходной режим;
- ток одного вывода и суммарный ток групп выводов;
- состояние во время сброса и загрузки;
- наличие внутренней подтяжки;
- специальные функции или ограничения контакта.
Arduino UNO R3, например, имеет 14 цифровых входов/выходов, из которых шесть отмечены как ШИМ, и шесть аналоговых входов. Это характеристика одной платы, а не универсальная распиновка Arduino. У Raspberry Pi Pico другое число GPIO и другое распределение ADC, UART, SPI, I2C и ШИМ. У ESP32 некоторые контакты являются загрузочными, некоторые обычно заняты flash, а часть доступна только как входы.
GPIO передаёт логический уровень. Мотор, сервопривод, мощная лента или реле требуют драйвера и рассчитанного силового пути. Допустимый ток каждого вывода берут из datasheet платы или микроконтроллера.
ADC: аналоговые датчики
ADC преобразует входное напряжение в цифровой код. При выборе платы важны число доступных аналоговых входов, разрядность, диапазон, опорное напряжение, скорость выборки и ограничения конкретной реализации.
Разрядность описывает число возможных кодов, но не гарантирует такую же точность. На результат влияют шум, источник сигнала, опора, разводка земли и характеристики ADC. Вход нельзя подавать выше разрешённого диапазона. Датчик с выходом 5 V нельзя автоматически подключать к контроллеру с входом только 3,3 V.
Если несколько датчиков опрашиваются одним внутренним ADC через мультиплексор, последовательность и время установления тоже могут влиять на измерение. Эти детали смотрят в datasheet, а не выводят из количества контактов на разъёме.
ШИМ и таймеры
ШИМ нужен для команд драйверу, регулирования яркости и некоторых приводов. Плата может указывать много ШИМ-каналов, однако каналы часто делят таймеры. Изменение частоты одного канала или подключение библиотеки способно повлиять на другой ресурс.
| Требование | Что проверить в документации |
|---|---|
| несколько независимых моторов | число одновременно доступных ШИМ-каналов |
| заданная частота | диапазон таймера и делители |
| высокая плавность команды | разрядность коэффициента заполнения при выбранной частоте |
| сервопривод и моторный ШИМ вместе | использование таймеров библиотеками |
| точный период задачи | аппаратный таймер или планировщик, задержки обработчиков |
Espressif описывает для LEDC связь частоты и разрешения: увеличение частоты уменьшает доступное разрешение коэффициента заполнения. Это пример реального компромисса, а не универсальные числа для всех микроконтроллеров.
Прерывания и энкодеры
Прерывание позволяет аппаратному событию временно передать управление короткому обработчику. Оно полезно для быстрых импульсов энкодера, но не делает любой код мгновенным. Долгий обработчик задерживает другие события, а совместно используемые данные требуют аккуратного доступа.
Перед назначением энкодера выясните:
- какие контакты поддерживают требуемый тип прерывания или аппаратного счётчика;
- какова максимальная частота импульсов при максимальной скорости колеса;
- нужно ли два канала для направления;
- выдержит ли программа суммарный поток от двух колёс;
- какой механизм подавляет помехи и неверные фронты.
Не все контакты одинаковы. Документация ESP32, например, содержит специальные ограничения для отдельных GPIO и сочетаний ADC, Wi-Fi, Bluetooth и сна. Их нельзя переносить на другую плату или даже другой чип семейства.
UART, I2C и SPI
Аппаратные интерфейсы экономят время процессора и упрощают подключение модулей, но каждый имеет свою топологию.
| Интерфейс | Типичные линии | Для чего удобен | Что посчитать |
|---|---|---|---|
| UART | передача и приём | связь точка-точка, отладочный порт, радиомодуль | число аппаратных портов и занят ли один USB-отладкой |
| I2C | общие данные и тактирование | несколько адресных датчиков на одной шине | адреса, уровни, подтяжки, ёмкость и длина шины |
| SPI | тактирование, две линии данных, выбор устройства | быстрые дисплеи, память, некоторые датчики | отдельные линии выбора и режимы устройств |
Количество интерфейсов в рекламной таблице ещё не гарантирует, что все они выведены на свободные контакты выбранной платы. Уточняйте pinout платы, затем datasheet микроконтроллера и документацию программного ядра.

На карте один аналоговый сигнал, два канала энкодера, две команды драйверу и двунаправленный обмен занимают разные группы ресурсов. Прямоугольные импульсы — лишь условное обозначение временной команды, не измеренный график и не масштаб частоты. Питание и общий провод специально опущены. Расположение контактов иллюстративное: реальную возможность проверяют для конкретной платы.
Память и вычислительный запас
У контроллера несколько видов памяти. Flash хранит программу, SRAM — изменяемые данные во время работы, энергонезависимая память может сохранять настройки. Большие буферы связи, таблицы, строки, фильтры и библиотеки расходуют SRAM даже при небольшом тексте программы.
ATmega328P имеет 32 KB flash и существенно меньший объём SRAM; RP2040 располагает другим классом ресурсов. Нельзя заключать, что одна плата «лучше» только по частоте процессора. Для простого следования по линии небольшой контроллер может быть достаточен, а для одновременной связи, сложной фильтрации и журналирования нужен запас.
Составьте бюджет:
- размер прошивки после сборки;
- статические данные и максимальные буферы;
- глубина стека и динамические выделения, если они используются;
- частота главного цикла;
- худшее время обработки датчиков и интерфейсов;
- запас для отладки и будущих функций.
Время реакции и архитектура программы
Мобильному роботу важна не только средняя скорость вычислений, но и худшая задержка. Если алгоритм надолго блокируется ожиданием связи, он поздно увидит линию или препятствие. Несколько задач должны укладываться в общий временной бюджет.
t_чтения + t_вычисления + t_передачи + t_запаса ≤ T_управления
Здесь T_управления — период между запусками цикла, а слагаемые слева оценивают худшее время его работы и резерв. Если сумма превышает период, новый цикл должен начаться раньше, чем завершился предыдущий: архитектуру или выбранный период нужно менять.
Для энкодеров используют короткие обработчики или аппаратные счётчики, для связи — буферы, для основного управления — неблокирующий цикл с понятными периодами. Реальные сроки подтверждают измерением времени выполнения, а не только частотой ядра в спецификации.
Питание контроллера
Проверьте входной диапазон платы, её рабочее логическое напряжение, пиковое потребление при включённых интерфейсах и допустимый ток встроенного стабилизатора. Радиомодуль может кратковременно увеличить нагрузку. Датчики, питаемые от вывода платы, тоже входят в бюджет.
Моторы подключают к отдельному драйверу и силовой ветви. Если контроллер и драйвер обмениваются однопроводными логическими уровнями, им обычно нужна общая точка отсчёта согласно схеме. Преобразователь уровней применяют, когда стандарты и допустимые напряжения не совпадают.
Сравниваем платы без универсальной распиновки
Вместо рейтинга названий заполните матрицу требований:
| Критерий | Минимум проекта | Плата-кандидат | Результат проверки |
|---|---|---|---|
| свободные цифровые контакты | по карте устройств + запас | из pinout с учётом занятых функций | хватает / нет |
| ADC | число датчиков и диапазон | из datasheet | совместимо / нужен делитель или другой датчик |
| ШИМ и таймеры | каналы, частота, разрешение | из руководства ядра | конфликтов нет / есть |
| прерывания | два энкодера и частота событий | из таблицы GPIO | обработка возможна / нужен счётчик |
| интерфейсы | UART/I2C/SPI | реальные выведенные порты | свободны / заняты |
| память и время | измеренный бюджет с запасом | отчёт сборки и тест | проходит / не проходит |
| уровни и питание | диапазоны всех соединений | datasheet платы | совместимо / нужна адаптация |
После выбора закрепите таблицу назначений выводов в проекте. Если меняется плата, начните проверку заново: одинаковый номер контакта не означает ту же аппаратную функцию.
Что запомнить про контроллер
- Сначала составляют карту сигналов и временных требований, затем выбирают плату.
- Общее число контактов не равно числу свободных ADC, ШИМ, прерываний и интерфейсов.
- Pinout конкретной платы и datasheet микроконтроллера важнее внешнего сходства разъёмов.
- Логические уровни и допустимые напряжения проверяют до соединения.
- Таймеры, ШИМ, библиотеки и интерфейсы могут совместно использовать ресурсы.
- Моторы питаются через драйвер; контроллер передаёт команды.
- Запас памяти и времени подтверждают сборкой и измерением на полной конфигурации.
Практика
Задание 1. Карта сигналов робота
Для робота с двумя моторами, двумя энкодерами, тремя датчиками линии и одним модулем связи составьте таблицу всех сигналов. Укажите направление, требуемую функцию контакта, электрический уровень и желательность аппаратного прерывания. Номера выводов пока не назначайте.
Задание 2. Проверка платы-кандидата
Возьмите официальный pinout одной платы и назначьте ресурсы из первой задачи. Отметьте занятые системой контакты, конфликты таймеров и интерфейс, используемый для загрузки или отладки. Если ресурсов не хватает, измените архитектуру или выберите другую плату.
Задание 3. Временной бюджет
Задайте требуемый период управления и оцените максимальное время чтения датчиков, обработки энкодеров, вычисления команды и передачи телеметрии. Запланируйте измерение каждого этапа на реальной прошивке. Ответ должен содержать правило, что делать при превышении бюджета.
Задание 4. Аудит уровней и питания
По datasheet платы, датчика и драйвера заполните таблицу максимальных входных напряжений, логических уровней и потребления. Нарисуйте отдельный безопасный путь питания и общий провод. Не подключайте оборудование, пока каждый уровень не подтверждён источником.
Проверьте себя
- Почему число контактов на разъёме не равно числу доступных специальных функций?
- Какие параметры ADC нужны кроме количества каналов?
- Как ШИМ-каналы могут конфликтовать через таймеры?
- Когда полезно аппаратное прерывание и почему обработчик должен быть коротким?
- Чем отличаются UART, I2C и SPI по набору линий и топологии?
- Почему нельзя считать расположение контактов на иллюстрации универсальным pinout?
- Какие виды ресурсов входят в бюджет памяти и времени?
- Почему контроллер не должен напрямую питать мотор?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Контроллер — плата с микроконтроллером и обвязкой, выполняющая программу робота.
- GPIO — цифровой вывод общего назначения с ограничениями конкретного чипа.
- ADC — аналого-цифровой преобразователь, превращающий напряжение в числовой код.
- ШИМ (PWM) — импульсный сигнал с управляемой долей активного времени.
- Таймер — аппаратный счётчик времени, используемый для периодов, ШИМ и событий.
- Прерывание — аппаратный механизм реакции программы на событие.
- Интерфейс — согласованный набор линий и правил обмена, например UART, I2C или SPI.
- Распиновка — соответствие физических контактов их функциям на конкретной плате.
Связанные темы
- Элемент питания — как согласовать напряжения и бюджет мощности.
- Драйвер моторов — какие команды и силовые ветви нужны приводу.
- Сенсоры — какие аналоговые, цифровые и интерфейсные входы потребуется выделить.
- Колёса — зачем контроллеру импульсы энкодеров и две независимые команды.
- Монтаж и отладка — как проверять назначение выводов и узлы по одному.