ESP32-C3: работа со встроенным АЦП |
Добавил(а) microsin | ||||||||||
В ESP32-C3 интегрировано два блока АЦП (ADC1 и ADC2), построенных по принципу заполнения регистра последовательного приближения (Successive Approximation Register, SAR). Всего имеется 6 каналов, распределенных по этим блокам. ADC1: 5 каналов, жестко привязанных к выводам GPIO0 .. GPIO4 (ADC1_CHANNEL_0 .. ADC1_CHANNEL_4) [Ослабление по входу АЦП] Для измерения внешнего уровня напряжения блоки АЦП используют внутренний источник опорного напряжения Vref. Таким образом, ESP32-C3 может измерять аналоговые напряжения от 0V до Vref. От экземпляра к экземпляру чипа значение Vref может меняться относительно среднего напряжения 1.1V. Чтобы получить возможность преобразования в цифровую форму напряжений больших, чем Vref, входные напряжения могут быть ослаблены перед подачей на вход АЦП (ADC Attenuation). Для этого имеется 4 доступные опции ослабления. Чем ослабление выше, тем более высокое напряжение можно измерить. Таблица 1. Опции аттенюации по входу АЦП.
[Аналого-цифровое преобразование] Преобразование (ADC conversion) переводит входное аналоговое напряжение в числовое значение. Результаты преобразования предоставляются драйвером ADC в виде сырых данных. Максимальная разрешающая способность ESP32-C3 ADC в режиме однократного чтения (Single Read mode) составляет 12 бит (диапазон выходных сырых значений оцифровки 0 .. 4095). Для запуска преобразования и получения сырых результатов имеются функции: adc1_get_raw() Для вычисления реального напряжения на основе сырых значений ADC используется формула: Vout = Dout * Vmax / Dmax (1) Здесь: Vout Реальное значение входного напряжения в милливольтах. Для плат, у которых запрограммированы биты калибровки (eFuse ADC calibration bits), может использоваться функция esp_adc_cal_raw_to_voltage() для получения калиброванных результатов преобразования. Эти результаты будут означать реальное напряжение (в mV), нет необходимости преобразовывать сырые значения по формуле (1). Если используется ADC calibration API на платах без eFuse ADC calibration bits, то генерируется предупреждение (см. далее "Калибровка ADC"). Примечание: для использования АЦП существуют ограничения, подробнее см. раздел "Ограничения ADC" статьи [2]. Последовательность действий для использования АЦП в режимах ADC Continuous (DMA) Read и ADC Single Read также см. в статье [2]. Минимизация шума. ESP32-C3 ADC может быть чувствителен к шумам на входе и из-за помех по питанию, что приводит к скачкообразным изменениям значений преобразования. В зависимости от сценария использования, для уменьшения шума и ошибок измерений к входному выводу канала АЦП может быть подключен фильтрующий кондеyсатор (например керамика 100 нФ). Кроме этого для устранения шума может использоваться техника передискретизации и усреднения (multisampling). [Калибровка ADC] Калибровка ESP32-C3 ADC состоит из 2 шагов: аппаратная калибровка (Hardware Calibration) и программная калибровка (Software Calibration). Hardware Calibration. На основании последовательных сравнений с опорным напряжением ESP32-C3 ADC определяет вес каждого бита выходного оцифрованного значения. Расчетное значение опорного напряжения (Vref) составляет 1100 mV, однако реальное значение Vref может находится в диапазоне от 1000 mV до 1200 mV, в зависимости от экземпляра чипа. Чтобы минимизировать эту разницу, была введена аппаратная калибровка, которая состоит из 2 шагов. 1. Устанавливается параметр автокалибровки для диапазона опорного напряжения (bandgap voltage reference). Этим может быть сведена к минимуму упомянутая выше погрешность величины Vref. Некалиброванная характеристика ADC может выглядеть так: Рис. 1. Характеристика АЦП до аппаратной калибровки. Смещение (offset) не откалиброванной характеристики может быть значительным. На шаге 2 корректируется это смещение, чтобы оно стало нулевым. Рис. 2. Характеристика АЦП после аппаратной калибровки. Аппаратная калибровка осуществляется внутри кода драйвера ADC. Последующими результатами будут необработанные сырые данные. Для получения конечного результата значения напряжения необходима трансформация по формуле (1), см. выше раздел "Аналого-цифровое преобразование". Software Calibration. Для преобразования сырых данных ADC в калиброванные цифровые данные должны быть выполнены последующие шаги: 1. Проверка eFuse, чтобы определить, поддерживается ли программная калибровка. Это делается вызовом esp_adc_cal_check_efuse(). После программной калибровки характеристика ADC должна выглядеть так: Рис. 3. Характеристика АЦП после аппаратной и программной калибровки. Результаты, предоставленные API-функциями, учитывающими калибровку (ADC calibration API) показывают реальные значения напряжения в милливольтах. Пример программной калибровки можно найти в директории peripherals/adc/single_read среди примеров проектов ESP-IDF. [Справочник по API] API-функции ADC поделены на 3 категории: · ADC driver Общее описание назначения API-функций, см. в статье [2], полное описание функций и их параметров, макросов и типов данных см. в документации [1]. Примечание: версия 5 среды разработки ESP-IDF внесла изменения в API драйвера ADC, см. [3 .. 5]. [Ссылки] 1. ESP32-C3 Analog to Digital Converter site:espressif.com. |