Перейти к содержанию

ATmega328P, RP2040 или ESP32-C3: какой микроконтроллер выбрать

Три самых доступных микроконтроллера любительских плат решают разные задачи. ATmega328P — 5-вольтовая логика, EEPROM и сон от 0,1 мкА. RP2040 — два ядра, 264 КБ ОЗУ, USB и программируемые блоки ввода-вывода PIO. ESP32-C3 — Wi-Fi и Bluetooth LE в одном чипе. Сравниваем их по даташитам и даём правила выбора.

Обновлено Редакция GAW

ATmega328P, RP2040 и ESP32-C3 стоят на самых распространённых недорогих платах: Arduino Uno и Nano, Raspberry Pi Pico и платах вроде ESP32-C3-DevKitM-1. Это три разных поколения и три подхода: 8-разрядный микроконтроллер с флеш-памятью в кристалле и питанием 5 В, двухъядерный Cortex-M0+ без своей флеш-памяти и с программируемым вводом-выводом, система на кристалле с радио. Ниже — сравнение по критериям, которые чаще всего решают выбор.

Коротко

5 В
только ATmega328P: питание 1,8–5,5 В
ОЗУ
2 КБ / 264 КБ / 400 КБ
Радио
Wi-Fi и Bluetooth LE — только ESP32-C3
USB-устройство
только RP2040: USB 1.1 хост и устройство
Сон
4,2 мкА с WDT, 0,1 мкА без / 0,18 мА (ядро) / 5 мкА
Флеш-память
32 КБ в кристалле / внешняя / в корпусе или внешняя

Сравнение по даташитам

Числа — из даташитов Microchip DS40002061B, Raspberry Pi RP2040 и Espressif ESP32-C3 v2.4, номера таблиц — в источниках. Токи типовые; условия у производителей разные, поэтому они указаны прямо в ячейках.

ATmega328PRP2040ESP32-C3
Ядро8-разрядное AVR2 × Cortex-M0+RISC-V, одно ядро
Частотадо 20 МГц при 4,5–5,5 В, до 10 МГц при 2,7 Вдо 133 МГц (200 МГц при 1,15 В на ядре)до 160 МГц
ОЗУ2 КБ264 КБ400 КБ (16 КБ — кэш)
Флеш-память32 КБ в кристаллевнешняя QSPI, до 16 МБ4 или 8 МБ в корпусе у части версий, иначе внешняя
EEPROM1 КБнетнет
Питание выводов1,8–5,5 В1,62–3,63 В3,0–3,6 В
Вход 5 Вда, при питании 5 Внет: до IOVDD + 0,3 Внет: до VDD + 0,3 В
Ввод-вывод23 линии30 GPIO22 GPIO (16 у ESP32-C3FH4X)
Ток выводадо 40 мА предельно2, 4, 8 или 12 мА по настройке40 мА вытекающий, 28 мА втекающий при наибольшей силе
АЦП10 бит, 6 или 8 каналов, ±2 LSB тип. (VREF = 4 В, 200 кГц), до 15 тыс. отсчётов/с12 бит, 4 входа, ENOB 8,7 бита, 500 тыс. отсчётов/с12 бит, до 6 каналов, ±10…35 мВ после калибровки в диапазоне до 2500 мВ, 100 тыс. отсчётов/с
USBнетUSB 1.1 хост и устройствоUSB Serial/JTAG (COM-порт и отладка)
РадионетнетWi-Fi 802.11b/g/n, Bluetooth 5 LE
Особые блоки—8 автоматов PIOTWAI (CAN 2.0), шифрование и Secure Boot
Ток в работе5,2 мА (8 МГц, 5 В)только график (рис. 172) и демонстрационные программы (табл. 637)23 / 28 мА (160 МГц, периферия выкл. / вкл., радио выкл.)
Пик тока——335 мА (передача 802.11b, 21 дБм)
СонPower-down при 3 В: 4,2 мкА со сторожевым таймером, 0,1 мкА без негоDORMANT: ядро DVDD 0,18 мАDeep-sleep с таймером RTC 5 мкА
Температура−40…+85 °C−40…+85 °C (корпус)−40…+105 °C

Ток RP2040 в работе даташит даёт в двух видах: таблицей для демонстрационных программ при 48 МГц и в режиме BOOTSEL (табл. 637) и графиком тока ядра DVDD от частоты для типового чипа, который на обоих ядрах считает БПФ (рис. 172). Одного числа, сравнимого с другими столбцами, там нет, поэтому в таблице — ссылка на эти данные, а значения с графика мы не снимаем. Ток сна RP2040 в таблице — это только ток ядра DVDD; на плате к нему добавляются стабилизатор и флеш-память.

Как выбрать между ATmega328P, RP2040 и ESP32-C3: порядок вопросовПять вопросов по порядку. Нужен Wi-Fi или Bluetooth LE — ESP32-C3. Иначе: логика и модули на 5 В без преобразователей уровня — ATmega328P. Иначе: USB-устройство вроде клавиатуры или MIDI либо нестандартный протокол на выводах — RP2040 с блоками PIO. Иначе: сон от батарейки, когда будит только внешний сигнал, — ATmega328P: 0,1 мкА в Power-down без сторожевого таймера; с пробуждением по времени ATmega328P и ESP32-C3 близки, 4,2 и 5 мкА. Иначе: нужно больше 2 КБ ОЗУ и 32-разрядные вычисления — RP2040 или ESP32-C3. Если ни одно условие не выполнено, хватит ATmega328P.Нужен Wi-Fi или Bluetooth LE?ESP32-C3данетЛогика и модули на 5 Вбез преобразователей уровня?ATmega328PданетUSB-устройство (клавиатура, MIDI)или свой протокол на выводах?RP2040USB 1.1 и PIOданетСон от батарейки, будит тольковнешний сигнал (кнопка, датчик)?ATmega328PPower-down без WDT 0,1 мкАданетБольше 2 КБ ОЗУ,32-разрядные вычисления?RP2040 или ESP32-C3данетХватит ATmega328P
Порядок вопросов при выборе: первое «да» даёт ответ

Питание и уровни: 5 или 3,3 В

ATmega328P работает от 1,8 до 5,5 В, и на Arduino Uno и Nano он питается от 5 В. Поэтому 5-вольтовые модули — HC-SR04, реле с транзисторным входом, ЖК-индикаторы на HD44780 — подключаются к нему напрямую. RP2040 и ESP32-C3 питают выводы от 3,3 В, и вход выше питания на 0,3 В для них уже за пределами нормы (табл. 625 и 5-4). Для 5-вольтового сигнала нужен делитель или преобразователь уровней; выход 3,3 В при этом многие 5-вольтовые входы понимают, но это надо проверить по их даташиту.

Плате на ESP32-C3 нужен источник, который отдаёт не меньше 0,5 А (табл. 5-2): при передаче Wi-Fi чип потребляет 335 мА. ATmega328P на 8 МГц и 5 В берёт 5,2 мА, и ему хватит любого стабилизатора.

Память и программа

У ATmega328P 2 КБ ОЗУ: этого хватает для опроса датчиков и управления, но не для сетевого стека или буфера дисплея. RP2040 и ESP32-C3 — 32-разрядные, с сотнями килобайт ОЗУ; на них работают MicroPython, графические библиотеки и TLS. Программа ATmega328P хранится во флеш-памяти в кристалле. RP2040 своей флеш-памяти не имеет вообще: программа исполняется из внешней микросхемы QSPI через кэш, а в ПЗУ зашит загрузчик UF2, который показывает плату компьютеру как флешку. У ESP32-C3 флеш-память либо в корпусе (версии FH4, FH4X, FH8X), либо внешняя.

У ATmega328P есть 1 КБ EEPROM — побайтно перезаписываемая память для настроек. У RP2040 и ESP32-C3 настройки хранят во флеш-памяти, страницами, с учётом износа.

АЦП

Если сравнивать в милливольтах при опорном 3,3 В, три АЦП ближе друг к другу, чем кажется по разрядности. 10-разрядный АЦП ATmega328P с типовой погрешностью ±2 LSB (при опорном 4 В и тактовой 200 кГц, табл. 29-15) даёт около ±6,4 мВ при опорном 3,3 В (наш расчёт: 2 · 3,3 / 1024). ESP32-C3 после калибровки — ±10 мВ в диапазонах до 1300 мВ и ±35 мВ до 2500 мВ (табл. 5-6); выше 2500 мВ калиброванного диапазона нет, тогда как ATmega328P и RP2040 измеряют до опорного напряжения. RP2040 даёт 12 разрядов, но по измерениям Raspberry Pi эффективных — 8,7 бита (табл. 627), а на кодах 512, 1536, 2560 и 3584 у него пики дифференциальной нелинейности (эрратум RP2040-E11, обхода нет). Быстрее всех RP2040 — 500 тыс. отсчётов в секунду; ATmega328P при полном разрешении — до 15 тысяч.

USB и PIO

У RP2040 настоящий контроллер USB 1.1 с режимами хоста и устройства: на нём делают USB-клавиатуры, мыши, MIDI- и аудиоустройства. У ESP32-C3 встроенный USB — контроллер USB Serial/JTAG: через него прошивают, открывают COM-порт и отлаживают, но произвольное USB-устройство на нём не сделать. У ATmega328P USB нет; на Arduino Uno его роль играет отдельный микроконтроллер ATmega16U2.

Второе отличие RP2040 — блоки PIO: восемь маленьких автоматов, которые исполняют свою программу и сами двигают выводы. На них делают протоколы, которых нет в аппаратной периферии: светодиоды WS2812, VGA, дополнительные UART, квадратурные энкодеры.

Радио

Wi-Fi 802.11b/g/n и Bluetooth 5 LE из трёх чипов есть только у ESP32-C3. К ATmega328P и RP2040 радио подключают отдельным модулем — по SPI или UART. Для RP2040 у Raspberry Pi есть плата Pico W с беспроводным модулем. Сравнение радиотехнологий — в статье «Беспроводные технологии для микроконтроллеров».

Сон и батарейка

Сравнивать токи сна нужно при одинаковом способе пробуждения. Чтобы просыпаться по времени, ATmega328P оставляет включённым сторожевой таймер и в режиме Power-down потребляет 4,2 мкА при 3 В (табл. 29-8), ESP32-C3 в Deep-sleep с таймером RTC — 5 мкА (табл. 5-9): почти одинаково. Если устройство будит только внешний сигнал — кнопка, геркон, выход датчика, — ATmega328P без сторожевого таймера потребляет 0,1 мкА. Оба годятся для устройств, которые месяцами работают от батареек. У RP2040 в режиме DORMANT только ядро берёт 0,18 мА (табл. 637) — в 36 раз больше, чем весь ESP32-C3 в Deep-sleep (наш расчёт: 180 / 5). Это не значит, что Pico нельзя питать от батареи, но годы работы от пары элементов AA с ним не получить. Время работы по среднему току — в калькуляторе времени работы от батареи.

Правила выбора

  1. Нужен Wi-Fi или Bluetooth LE — ESP32-C3.
  2. Логика и модули на 5 В без преобразователей — ATmega328P.
  3. USB-устройство (клавиатура, MIDI) или протокол, которого нет в периферии — RP2040 с USB 1.1 и PIO.
  4. Сон от батарейки, а будит только внешний сигнал (кнопка, геркон, датчик) — ATmega328P: 0,1 мкА в Power-down без сторожевого таймера. С пробуждением по времени ATmega328P (4,2 мкА) и ESP32-C3 (5 мкА) близки.
  5. Больше 2 КБ ОЗУ и 32-разрядные вычисления — RP2040 или ESP32-C3; с радио — ESP32-C3, с USB-устройством — RP2040.
  6. Если ни одно условие не выполнено, хватит ATmega328P: для него больше всего примеров, а плату под него выбирают по статье «Arduino Uno, Nano или Pro Mini».

Если задача выросла из любительских плат — нужны CAN, точный АЦП, управление двигателями и 5-вольтовые входы при сотнях килобайт памяти, — посмотрите сравнение «ESP32 или STM32».

Типичные ошибки

  • Подключать 5-вольтовый модуль к Pico или ESP32-C3 напрямую. Входы рассчитаны на 3,3 В; превышение больше чем на 0,3 В выходит за нормы даташита.
  • Ждать от 12-разрядного АЦП RP2040 точности 12 разрядов. Эффективных — 8,7, и на четырёх кодах есть скачки.
  • Делать USB-клавиатуру на ESP32-C3. Его USB — только COM-порт и JTAG.
  • Питать ESP32-C3 от слабого стабилизатора. Пик 335 мА при передаче Wi-Fi вызывает просадку и перезагрузку.
  • Считать Pico батарейной платой. Даже в DORMANT ядро RP2040 берёт 0,18 мА, а стабилизатор и флеш-память на плате добавляют своё.

Частые вопросы

Что выбрать новичку: Arduino на ATmega328P, Raspberry Pi Pico или ESP32-C3?

Если устройство должно выходить в Wi-Fi или говорить со смартфоном по Bluetooth — плату на ESP32-C3. Если вокруг датчики и модули на 5 В, а программа простая, — Arduino Uno или Nano на ATmega328P. Raspberry Pi Pico выбирают, когда нужны USB-устройство, много ОЗУ или нестандартный протокол на выводах через PIO.

Можно ли подключать к RP2040 и ESP32-C3 модули на 5 В?

Напрямую нельзя. По табл. 625 даташита RP2040 и табл. 5-4 даташита ESP32-C3 напряжение на входе не должно превышать питание выводов больше чем на 0,3 В, то есть примерно 3,6 В. Сигнал 5 В подают через делитель или преобразователь уровней. ATmega328P работает от 5 В и принимает такие сигналы без преобразования.

Какой из трёх чипов лучше для работы от батарейки?

ATmega328P или ESP32-C3. Если устройство просыпается по времени, они близки: ATmega328P в Power-down со сторожевым таймером потребляет 4,2 мкА при 3 В, ESP32-C3 в Deep-sleep с таймером RTC — 5 мкА. Если будит только внешний сигнал, ATmega328P без сторожевого таймера потребляет 0,1 мкА. У RP2040 в самом экономном режиме DORMANT одно только ядро берёт 0,18 мА, то есть в 36 раз больше, чем весь ESP32-C3 в Deep-sleep.

Можно ли сделать на Raspberry Pi Pico USB-клавиатуру, а на ESP32-C3 — нет?

Да. У RP2040 есть контроллер USB 1.1 с режимами хоста и устройства, поэтому на нём делают клавиатуры, мыши, MIDI-устройства. У ESP32-C3 встроенный USB — это контроллер USB Serial/JTAG: виртуальный COM-порт и отладка, а не произвольное USB-устройство. У ATmega328P USB нет вовсе.

У какого чипа АЦП точнее?

В милливольтах — близко, но диапазоны разные. ATmega328P даёт 10 бит с типовой погрешностью ±2 LSB (Microchip указывает её при опорном 4 В и тактовой АЦП 200 кГц), это около ±6,4 мВ при опорном 3,3 В и измерении до самого опорного. ESP32-C3 после калибровки — ±10 мВ до 1300 мВ и ±35 мВ до 2500 мВ, а выше 2500 мВ калиброванного диапазона нет. RP2040 даёт 12 бит, но эффективных разрядов 8,7, и на четырёх кодах у него пики дифференциальной нелинейности.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B, 2020) — с. 1–3 — 8-разрядное ядро AVR, 32 КБ флеш-памяти, 1 КБ EEPROM, 2 КБ SRAM, 23 линии ввода-вывода, питание 1,8–5,5 В, −40…+85 °C, 0–20 МГц при 4,5–5,5 В; разд. 24.1 — АЦП 10 бит, ±2 LSB, до 15 тыс. отсчётов/с при полном разрешении, 6 каналов в SPDIP и 8 в TQFP и VQFN; табл. 29-8 — Active 8 МГц при 5 В 5,2 мА тип., Power-down при 3 В 4,2 мкА тип. со сторожевым таймером и 0,1 мкА тип. без него; табл. 29-15 — абсолютная погрешность 2 LSB тип. при VREF = 4 В, тактовой АЦП 200 кГц; разд. 29.1 — 40 мА на вывод предельно
  2. Raspberry Pi Ltd. RP2040 Datasheet (build-date 2025-02-20, build-version 3184e62) — разд. 1 — два ядра Cortex-M0+ до 133 МГц (200 МГц при 1,15 В на ядре), 264 КБ SRAM, внешняя флеш-память QSPI до 16 МБ, 30 GPIO, из них 4 — входы АЦП, USB 1.1 хост и устройство, 8 автоматов PIO, 16 каналов ШИМ, загрузчик UF2 в ПЗУ; табл. 624 — корпус −40…+85 °C; табл. 625 — VIH при 3,3 В от 2 В до IOVDD + 0,3 В, выходной ток 2, 4, 8 или 12 мА по настройке; табл. 627 — АЦП 12 бит, ENOB 8,7 бита; табл. 634 — IOVDD 1,62–3,63 В, USB_VDD 3,135–3,63 В; табл. 637 — ток ядра DVDD в DORMANT 0,18 мА, в SLEEP 0,39 мА тип., остальные строки — демонстрационные программы и BOOTSEL; рис. 172 — график тока DVDD от частоты при вычислении БПФ на обоих ядрах; эрратум RP2040-E11 — пики DNL на кодах 512, 1536, 2560 и 3584
  3. Espressif Systems. ESP32-C3 Series Datasheet, version 2.4 — Features — одно ядро RISC-V до 160 МГц, 400 КБ SRAM, 22 GPIO (16 у ESP32-C3FH4X), Wi-Fi 802.11b/g/n, Bluetooth 5 (LE), USB Serial/JTAG, TWAI, два АЦП 12 бит до 6 каналов, Deep-sleep 5 мкА; табл. 1-1 — флеш-память в корпусе 4 или 8 МБ у части версий, −40…+105 °C; табл. 5-2 — питание 3,0–3,6 В, источник от 0,5 А; табл. 5-4 (3,3 В, 25 °C) — VIH не выше VDD + 0,3 В, IOH 40 мА, IOL 28 мА при наибольшей силе выхода; табл. 5-5 — 100 тыс. отсчётов/с; табл. 5-6 — после калибровки ±10 мВ до 1300 мВ и ±35 мВ до 2500 мВ; табл. 5-7 — пик передачи 802.11b 21 дБм 335 мА; табл. 5-8 — Modem-sleep 160 МГц 23 / 28 мА; табл. 5-9 — Light-sleep 130 мкА, Deep-sleep 5 мкА

Нашли ошибку?