Какое напряжение может измерить АЦП ESP32-C3?
Обновлено Редакция GAW
У ESP32-C3 два 12-битных АЦП, но пользоваться удобно одним — ADC1 на выводах GPIO0–GPIO4. Входной диапазон задаёт ослабление (attenuation): чем оно больше, тем шире диапазон и тем больше ошибка. Данные — по таблице 5-6 даташита Espressif, после калибровки:
| Ослабление | Диапазон | Ошибка |
|---|---|---|
| ATTEN0 | 0–750 мВ | ±10 мВ |
| ATTEN1 | 0–1050 мВ | ±10 мВ |
| ATTEN2 | 0–1300 мВ | ±10 мВ |
| ATTEN3 (ADC_11db в Arduino, по умолчанию) | 0–2500 мВ | ±35 мВ |
Наш расчёт: ±35 мВ на 2500 мВ — 1,4 % шкалы, ±10 мВ на 750 мВ — 1,3 %. Чем ближе сигнал к верху своего диапазона, тем меньше относительная ошибка, поэтому ослабление выбирают по максимуму сигнала.
Каналы
| АЦП | Каналы | Выводы | Калибровка |
|---|---|---|---|
| ADC1 | 5 | GPIO0–GPIO4 | заводская |
| ADC2 | 1 | GPIO5 | нет; на части ревизий не работает |
GPIO0 и GPIO1 заодно служат выводами часового кварца 32 кГц: если он стоит на плате, под АЦП остаются GPIO2–GPIO4. Ограничения остальных выводов — на странице ESP32-C3.
Как получить точность
- Делитель для напряжений выше 2,5 В — сопротивления подберёт калькулятор делителя.
- Конденсатор 100 нФ на входе: в таких условиях Espressif измерял нелинейность АЦП.
- Калиброванный результат, а не «сырой» код: в Arduino это
analogReadMilliVolts(), в ESP-IDF — драйвер калибровки, как описано в статье «АЦП ESP32». Перевести код в напряжение для разных ослаблений поможет калькулятор АЦП ESP32.
Похожие вопросы
Можно ли пользоваться ADC2 на GPIO5?
Даташит не советует на него рассчитывать: ADC2 у ESP32-C3 — один канал без заводской калибровки, а у части ревизий чипа он вовсе неработоспособен (Espressif отсылает к errata). Для измерений берите ADC1 на GPIO0–GPIO4.
Как измерить напряжение аккумулятора 4,2 В?
Через делитель, который опускает 4,2 В ниже 2,5 В. Наш расчёт: делитель 100 кОм + 100 кОм даёт 2,1 В — в пределах ATTEN3 с запасом; конденсатор 100 нФ на входе АЦП, как в условиях измерения даташита, сгладит выборку. Делитель постоянно разряжает аккумулятор током 21 мкА.
Почему без делителя на 3,3 В АЦП показывает максимум?
Потому что 3,3 В выше диапазона 0–2500 мВ при наибольшем ослаблении: всё, что выше, АЦП не различает. Для измерения таких напряжений нужен делитель.
Источники
- Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 4.2.2.1: два 12-битных SAR АЦП; ADC1 — 5 каналов, откалиброван на заводе; ADC2 — 1 канал, без заводской калибровки, на некоторых ревизиях чипа неработоспособен (см. errata); IO MUX: ADC1_CH0–CH4 — GPIO0–GPIO4, ADC2_CH0 — GPIO5; табл. 5-5: DNL ±7 LSB, INL ±12 LSB с конденсатором 100 нФ на входе, постоянным сигналом, при 25 °C и выключенном Wi-Fi, до 100 тыс. выборок/с; табл. 5-6: после калибровки ATTEN0 0–750 мВ ±10 мВ, ATTEN1 0–1050 мВ ±10 мВ, ATTEN2 0–1300 мВ ±10 мВ, ATTEN3 0–2500 мВ ±35 мВ
- Espressif. Arduino-ESP32 Documentation: ADC; arduino-esp32 3.3.12, cores/esp32/esp32-hal-adc.c — analogRead — некалиброванный код, analogReadMilliVolts — калиброванные милливольты; разрешение по умолчанию 12 бит; таблица ослаблений для ESP32-C3: ADC_0db 0–750 мВ, ADC_2_5db 0–1050 мВ, ADC_6db 0–1300 мВ, ADC_11db 0–2500 мВ; по умолчанию в ядре — ADC_11db (cores/esp32/esp32-hal-adc.c тега 3.3.12: static uint8_t __analogAttenuation = ADC_11db)
Нашли ошибку?
Смотрите также
- АЦП ESP32Каналы ADC1 и ADC2, ослабление, калибровка, нелинейность, Wi-Fi и analogRead
- АЦП ESP32: ослабление и делительОслабление по напряжению, делитель, погрешность на входе, код Arduino и ESP-IDF
- Делитель напряженияВыход, ток, нагрузка, подбор пары резисторов
- ESP32-C3: выводы и GPIO22 GPIO: функции, свободные и занятые выводы, флеш-память, strapping, USB, JTAG, токи