ESP32: рейтинг по количеству каналов АЦП Печать
Добавил(а) microsin   

При разработке проектов на ESP32 количество доступных АЦП-входов критично, когда нужно подключить много аналоговых датчиков. Ниже — детальный обзор по актуальным чипам Espressif от лидера по числу входов до самых компактных моделей.

Наибольшее количество аналоговых входов предлагают линейки ESP32-S2 и ESP32-S3, а также старшие модели оригинального ESP32. Ниже представлена сводная таблица для сравнения:

Микроконтроллер Всего каналов Модулей АЦП Разрядность Примечания
ESP32-S2,
ESP32-S3
20 2 13 бит Абсолютные лидеры по числу входов (GPIO 1-20)
ESP32 18 2 12 бит ADC2 (10 каналов) используется Wi-Fi стеком.
ESP32-P4 ~12-14 (точно неизвестно) 2 12/13 бит Новый чип, точное число входов уточняйте в даташите.
ESP32-C6 7 (0–6) 1 12 бит Хороший баланс для проектов без Wi-Fi.
ESP32-C3 6 (0–4, 5) 2 12 бит ADC2 имеет только 1 канал (GPIO5). Также много ограничений по использованию входов, см. [1].
ESP32-H2 2 (0–1) 1 12 бит Специализированный чип для Zigbee/Thread.

Обратите внимание: все перечисленные АЦП относятся к типу SAR (последовательного приближения), что обеспечивает хорошую скорость измерения.

[Важные нюансы использования]

При выборе МК учитывайте не только количество портов, но и особенности их работы:

1. Проблема ADC2 и Wi-Fi (ESP32 и ESP32-S2): в классическом ESP32 и ESP32-S2 10 каналов второго АЦП (ADC2) используются драйверами Wi-Fi. Если в вашем проекте активен Wi-Fi, вы не сможете одновременно считывать аналоговые сигналы с этих портов GPIO — это вызовет ошибку. Для сенсоров при работе с Wi-Fi используйте только ADC1 (порты GPIO 32–39 на ESP32).

2. Разрядность: более высокая разрядность (13 бит у ESP32-S2 и ESP32-S3 против 12 у оригинального ESP32) дает чуть лучшую теоретическую точность, но на практике для стабильных показаний все равно требуется программная калибровка.

3. Не используйте GPIO0 для сенсоров на ESP32: в старых платах (ESP32) порт GPIO0 отвечает за загрузку (Boot Mode). Подключение датчика к этому выводу может помешать прошивке устройства.

Если ваша задача — опрашивать много аналоговых датчиков (например, массив фоторезисторов или потенциометров), берите ESP32-S3. Он дает максимум входов (20) и при этом современен. Для большинства стандартных задач (подключение 3-5 датчиков) с запасом хватит ESP32-C3 или ESP32-C6 — они компактнее и дешевле. Старый добрый ESP32 остается отличным выбором, но помните про конфликт ADC2 с Wi-Fi и используйте только первую группу портов GPIO (32–39).

[Выбор платы разработчика для ESP32-S3]

Вопрос о платах разработки для ESP32-S3 очень актуальный, так как именно на этом чипе больше всего аналоговых входов — целых 20 каналов АЦП. Это идеальный выбор для проектов с множеством аналоговых датчиков.

Среди популярных плат можно выделить несколько ключевых категорий, и важно понимать, сколько входов АЦП вы реально сможете задействовать на каждой из них.

Плата разработки Всего доступно входов АЦП Примечания и особенности
Официальные платы Espressif (ESP32-S3-DevKitC-1) Все 20 Выведены почти все GPIO 1-20. Это референсные платы, гарантирующие доступ ко всей периферии чипа.
Seeed Studio XIAO ESP32-S3 До 11 Несмотря на компактный размер (палец), плата выводит много портов GPIO, включая 11 аналоговых. Отличный выбор для компактных устройств.
LILYGO T-Circle-S3 До 20 (но часть занята) У большинства GPIO есть альтернативные функции (дисплей, сенсоры), что уменьшает число свободных аналоговых портов.
Heltec LoRa 32 (V3) Переменное Из-за встроенного OLED-дисплея и LoRa-модуля значительная часть GPIO уже используется, но 5-7 входов для АЦП выделить можно.
Waveshare ESP32-S3-AUDIO-Board До 10 Много портов занято под аудиокодек, microSD и RGB-светодиоды. Аналоговых входов будет меньше из-за специализации платы.

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

1. Часть портов занята встроенными на плате компонентами (дисплеи, microSD, аудиочипы).
2. Некоторые GPIO нужны вам для других интерфейсов (I2C, SPI, UART).

[Привязка входов АЦП ESP32-S3 к выводам портов GPIO]

Входы АЦП у ESP32-S3 жестко привязаны к определенным выводам GPIO. Это аппаратное ограничение — вы не можете произвольно назначить любой GPIO для аналогового ввода. Доступен фиксированный набор из 20 портов GPIO, которые разделены между двумя АЦП-модулями.

ESP32-S3 имеет два 12-битных SAR АЦП (ADC1 и ADC2), каждый из которых поддерживает по 10 каналов. Полная таблица привязки АЦП к GPIO:

АЦП-модуль Канал Вывод GPIO RTC GPIO
ADC1 CH0 GPIO1 RTC_GPIO1
CH1 GPIO2 RTC_GPIO2
CH2(*) GPIO3 RTC_GPIO3
CH3 GPIO4 RTC_GPIO4
CH4 GPIO5 RTC_GPIO5
CH5 GPIO6 RTC_GPIO6
CH6 GPIO7 RTC_GPIO7
CH7 GPIO8 RTC_GPIO8
CH8 GPIO9 RTC_GPIO9
CH9 GPIO10 RTC_GPIO10
ADC2 CH0 GPIO11 RTC_GPIO11
CH1 GPIO12 RTC_GPIO12
CH2 GPIO13 RTC_GPIO13
CH3 GPIO14 RTC_GPIO14
CH4 GPIO15 RTC_GPIO15
CH5 GPIO16 RTC_GPIO16
CH6 GPIO17 RTC_GPIO17
CH7 GPIO18 RTC_GPIO18
CH8 GPIO19 RTC_GPIO19
CH9 GPIO20 RTC_GPIO20

Примечание *: strapping pin (вывод управления загрузкой). Таким образом, этот вход использовать для аналогового ввода - плохая идея.

Таким образом, каждый аналоговый вход доступен строго на GPIO1–GPIO20. Все остальные порты (GPIO21, GPIO26–48) такой функции не имеют.

Ключевые ограничения и предостережения:

1. Конфликт ADC2 с Wi-Fi (важнее всего!). На ESP32-S3, как и на оригинальном ESP32, АЦП-модуль ADC2 используется Wi-Fi драйвером. Если в вашем проекте активен Wi-Fi (например, вы отправляете данные на сервер), вы не сможете одновременно читать аналоговые сигналы с GPIO11–GPIO20. Это вызовет ошибки. Для аналоговых датчиков при работе с Wi-Fi используйте только ADC1 (GPIO1–GPIO10).

2. Strapping pins (выводы, влияющие на загрузку). Некоторые порты, входящие в группу аналоговых, имеют особые функции при старте чипа и требуют осторожного обращения:

● GPIO0 и GPIO3: используются для определения режима загрузки (UART download mode, JTAG интерфейс). Подача неправильного уровня на эти порты во время включения может помешать запуску или прошивке.
● GPIO45 и GPIO46: также являются strapping pins, но они не входят в число аналоговых, так что для АЦП не критичны.

3. Порты, занятые flash/PSRAM (GPIO9 и GPIO10). На многих платах разработки с ESP32-S3 выводы GPIO9 и GPIO10 используются для подключения внешней flash-памяти и PSRAM. В таких платах эти порты не выведены на разъемы или их использование для других целей крайне не рекомендуется, так как это нарушит работу с памятью.

Практические рекомендации:

1. Проекты с Wi-Fi: используйте только GPIO1–GPIO10 (ADC1). Это даст вам 10 аналоговых входов, которых достаточно для большинства задач. Проекты без Wi-Fi: у вас есть доступ ко всем 20 аналоговым портам (GPIO1–GPIO20, с учетом других ограничений).
2. Избегайте проблем с загрузкой: старайтесь не подключать критически важные датчики к GPIO0 и GPIO3, если вы не уверены в уровнях сигналов при старте.
3. Проверяйте распиновку платы: перед использованием GPIO9 и GPIO10 убедитесь, что они не задействованы под flash/PSRAM на вашей конкретной модели платы.

[Порты для АЦП у платы YD-ESP32-23]

В магазине OZON можно купить недорогую плату [3], по сути это открытый проект [4].

yd esp32 s3 devkitc 1 clone pinout

На этой плате для входов АЦП можно использовать порты, помеченные зеленым цветом:

Канал Вывод GPIO Имя в ESP-IDF для ADC Имя ESP-IDF для RTC Имя в Arduino IDE (analogRead()) Другие аппаратные функции (IO MUX)
Блок  ADC1:
CH0 GPIO1 ADC1_CH0 RTC_GPIO1 1 или A0 TOUCH1 (сенсорный вход)
CH1 GPIO2 ADC1_CH1 RTC_GPIO2 2 или A1 TOUCH2 (сенсорный вход)
CH2
GPIO3 ADC1_CH2 RTC_GPIO3 3 или A2 Управление загрузкой
CH3 GPIO4 ADC1_CH3 RTC_GPIO4 4 или A3 TOUCH4 (сенсорный вход)
CH4 GPIO5 ADC1_CH4 RTC_GPIO5 5 или A4 TOUCH5 (сенсорный вход)
CH5 GPIO6 ADC1_CH5 RTC_GPIO6 6 или A5 TOUCH6 (сенсорный вход)
CH6 GPIO7 ADC1_CH6 RTC_GPIO7 7 или A6 TOUCH7 (сенсорный вход)
CH7 GPIO8 ADC1_CH7 RTC_GPIO8 8 или A7 TOUCH8 (сенсорный вход), SUBSPICS1 (SPI slave)
CH8 GPIO9 ADC1_CH8 RTC_GPIO9 9 или A8 TOUCH9, FSPIHD (SPI Host), SUBSPIHD
CH9 GPIO10 ADC1_CH9 RTC_GPIO10 10 или A9 TOUCH10, FSPICS0 (SPI Host), FSPIIO4, SUBSPICS0
Блок ADC2:
CH0 GPIO11 ADC2_CH0 RTC_GPIO11 11 или A10 TOUCH11, FSPID (SPI Host), FSPIIO5, SUBSPID
CH1 GPIO12 ADC2_CH1 RTC_GPIO12 12 или A11 TOUCH12, FSPICLK (SPI Host), FSPIIO6, SUBSPICLK
CH2 GPIO13 ADC2_CH2 RTC_GPIO13 13 или A12 TOUCH13, FSPIQ (SPI Host), FSPIIO7, SUBSPIQ
CH3 GPIO14 ADC2_CH3 RTC_GPIO14 14 или A13 FSPIWP (SPI Host), FSPIDOS, SUBSPIWP
CH4 GPIO15 ADC2_CH4 RTC_GPIO15 15 или A14 U0RTS (UART0), XTAL_32K_P (такты 32кГц)
CH5 GPIO16 ADC2_CH5 RTC_GPIO16 16 или A15 U0CTS (UART0), XTAL_32K_N (такты 32кГц)
CH6 GPIO17 ADC2_CH6 RTC_GPIO17 17 или A16 U1TXD (UART1 передача)
CH7 GPIO18 ADC2_CH7 RTC_GPIO18 18 или A17 U1RXD (UART1 прием), CLK_OUT3 (вывод тактовой частоты)
CH8 GPIO19 ADC2_CH8 RTC_GPIO19 19 или A18 USB DN2
CH9 GPIO20 ADC2_CH9 RTC_GPIO20 20 или A19 USB DP2

Важные замечания:

1. Помеченные красным цветом порты использовать как входы АЦП на этой плате нельзя.

2. Аналоговые функции: как видно из таблицы, эти порты используются двумя разными АЦП — ADC1 (GPIO1-10) и ADC2 (GPIO11-18). Это деление важно, так как АЦП2 имеет некоторые особенности при одновременном использовании с Wi-Fi.

3. Сенсорные входы (TOUCH): почти все эти порты, за исключением GPIO14-18, могут работать как входы для емкостных сенсорных кнопок.

4. SPI интерфейсы: многие порты имеют альтернативные функции для шин SPI (например, FSPI* для основного контроллера и SUBSPI* для вспомогательного), что полезно при подключении нескольких SPI-устройств.

[Ссылки]

1. ESP32-C3: работа со встроенным АЦП.
2. ESP32 ADC.
3. ESP32-S3 Двойная Плата Для Разработки Core Board ESP32 S3 N16R8 N8R2 site:ozon.ru.
4. rtek1000 / YD-ESP32-23.