Arduino Uno: обзор платы, питание, порты и память

Arduino Uno: обзор платы, питание, порты и память

Как устроена самая известная плата на ATMega328: связь с компьютером, варианты питания, назначение выводов, типы памяти и встроенная защита.

Что такое Arduino Uno

Arduino Uno — отладочная плата на микроконтроллере ATMega328. Она служит посредником между разработчиком и микроконтроллером: даёт удобный доступ к его выводам и позволяет загружать прошивку прямо из среды программирования. Плату с открытой архитектурой разработали итальянские инженеры, а с ростом популярности появилось множество клонов, полностью совместимых программно и аппаратно. Размер платы — 7 на 5,5 см.

Плата Arduino Uno с двух сторон

Выводы микроконтроллера выведены на штыревые линейки по краям платы, к ним подключаются макетные провода. Под эту же топологию выпускаются шилды, которые ставятся сверху каскадом: наборы датчиков, клавиатуры, экраны, расширители портов, радиомодули. Прототип в результате собирается как конструктор.

Arduino Uno с установленным шилдом для ЧПУ
Основные элементы и группы контактов платы Arduino Uno

Связь с компьютером и запись прошивки

USB-разъём выполняет две задачи: обмен данными с ПК и запись прошивки. За обмен отвечает модуль UART микроконтроллера ATMega328, выведенный на контакты 0 (RX) и 1 (TX). Между ним и компьютером стоит отдельный микроконтроллер ATMega16 со специальной прошивкой, благодаря которой плата определяется как виртуальный COM-порт. Во время обмена мигают светодиоды RX и TX.

Прошивка записывается одной кнопкой в Arduino IDE: плата поставляется с загрузчиком, работающим по протоколу STK500, и внешний программатор не нужен. Для записи в обход загрузчика есть колодка ICSP. DFU-загрузчик самого ATMega16 тоже можно переписать через аналогичную колодку. В качестве альтернативы стандартной среде называют PlatformIO.

Способы питания

Вариантов три:

  • через USB-разъём тем же кабелем, что служит для программирования;
  • от адаптера AC/DC с выходным напряжением 7–12 В через разъём внешнего питания;
  • подачей 7–12 В на контакт Vin, при этом минус источника соединяют с одним из контактов GND.

При любом способе встроенные линейные стабилизаторы формируют на отдельных контактах 5 В и 3,3 В; с вывода 3,3 В можно снять не более 50 мА. Подавать питание на плату через эти выводы рискованно: напряжение идёт мимо стабилизатора, и любой скачок способен сжечь микроконтроллер.

Все контакты GND соединены между собой. Значительная часть необъяснимых сбоев в проектах возникает оттого, что землю платы забыли соединить с землёй подключённых модулей и датчиков. Вывод IOREF сообщает шилдам уровень бортового напряжения: модуль, способный работать и от 5 В, и от 3,3 В, по нему выбирает режим.

Некоторая защита от перегрузок на плате есть: восстанавливаемые предохранители с порогом 500 мА берегут USB-порт компьютера от перегрузок и замыканий.

Цифровые и аналоговые выводы

У платы 14 цифровых выводов с номерами от 0 до 13 и 6 аналоговых. Каждый цифровой вывод работает как вход или как выход, направление задаёт функция pinMode(). Программно включается подтягивающий резистор к плюсу питания номиналом 20–50 кОм. Выходное напряжение вывода — до 5 В, ток — до 40 мА; превышение нагрузки может повредить микроконтроллер.

Аналоговые выводы A0–A5 подключены к 10-битному АЦП, то есть каждый канал выдаёт 1024 значения. По умолчанию измеряется диапазон 0–5 В: нулю вольт соответствует 0, пяти — 1023. Верхнюю границу можно изменить, подав собственное опорное напряжение на AREF. Аналоговые выводы без ограничений используются и как цифровые. Низкий уровень на выводе RESET сбрасывает микроконтроллер.

0, 1Serial: RX и TX
2, 3Вход внешних прерываний
3, 5, 6, 9, 10, 11ШИМ, функция analogWrite()
10, 11, 12, 13SPI: SS, MOSI, MISO, SCK
13Светодиод на плате
A4, A5I2C: SDA и SCL
Карта выводов Arduino Uno с альтернативными функциями

Вывод 13 соединён со светодиодом на плате через резистор 220 Ом, поэтому питать от него нагрузку не стоит: реле на этом выводе может работать нестабильно, хотя на остальных сбоев нет.

Три вида памяти

Flash-память объёмом 32 кБ хранит скомпилированные скетчи; 2 кБ из них занимает загрузчик, упрощающий запись кода.

EEPROM на 1 кБ сохраняет данные после отключения питания и обычно используется для настроек. Ресурс её ограничен: производитель гарантирует 100000 циклов перезаписи каждой ячейки, поэтому писать в неё следует как можно реже. Для работы с ней в Arduino IDE есть библиотека EEPROM.h.

Оперативной памяти SRAM 2 кБ, здесь лежат переменные и объекты программы, которые пропадают при выключении. У неопытных разработчиков она быстро заканчивается. Расход планируют заранее: меньше глобальных переменных, внимание к типам данных, большие однотипные массивы — в память программ.

Программный сброс

Перезагрузить плату можно без кнопки и вывода RESET. В начале программы объявляют указатель на функцию с нулевым адресом — void(*resetFunc) (void) = 0; — и в нужном месте вызывают resetFunc().

В целом Uno подходит и начинающим, и опытным разработчикам: при скромных размерах её возможностей хватает большинству проектов, а обилие библиотек, примеров и учебных материалов сокращает путь от идеи до работающего устройства.

← Все статьи