Программирование ARM ESP32-C3: драйвер калибровки АЦП Tue, May 06 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


ESP32-C3: драйвер калибровки АЦП Печать
Добавил(а) microsin   

В микроконтроллере ESP32-C3 аналого-цифровой преобразователь (ADC) сравнивает входное аналоговое напряжение с опорным напряжением, и на основе этого определяет каждый бит результата преобразования. Источник опорного напряжения ADC ESP32-C3 разрабатывался для напряжения 1100 mV. Однако действительное напряжение этого опорного напряжения может отличаться, и быть у разных чипов в диапазоне от 1000 mV до 1200 mV. Это руководство описывает драйвер калибровки ADC, предназначенный для минимизации эффекта различных напряжений опорного источника, и получения более точных выходных результатов.

В последующих секциях этого документа (перевод документации [1]) описываются типовые шаги по установке и использованию ADC calibration driver:

Calibration Scheme Creation (создание схемы калибровки) - как создать дескриптор схемы калибровки (calibration scheme handle), и как его удалить.

Результат преобразования - как преобразовать сырой результат ADC в калиброванный результат.

Thread Safety - перечисляется API драйвера, которое гарантированно будет потокобезопасным (thread-safe).

Минимизация шума - описываются основные способы минимизации шума.

[Calibration Scheme Creation]

Драйвер калибровки ADC предоставляет схемы калибровки. С точки зрения драйвера калибровки схема калибровки ADC создается для дескриптора adc_cali_handle_t.

adc_cali_check_scheme() может использоваться, чтобы узнать, какая схема калибровки поддерживается на чипе. Если вы уже знаете поддерживаемые схемы, то этот шаг можно пропустить. Просто вызовите соответствующую функцию для для создания дескриптора схемы (scheme handle).

Если вы используете ваши собственные схемы калибровки ADC, то вы могли бы либо изменить эту функцию adc_cali_check_scheme(), либо просто пропустить этот шаг и вызвать вашу собственную функцию создания дескриптора.

Схема подгонки калибровочной кривой АЦП. ESP32-C3 поддерживает схему подгонки ADC_CALI_SCHEME_VER_CURVE_FITTING. Для создания этой схемы настройте сначала adc_cali_curve_fitting_config_t.

adc_cali_curve_fitting_config_t::unit_id, это блок ADC, от которого вы получаете сырые результаты преобразования.

adc_cali_curve_fitting_config_t::chan, это поле сохраняется здесь для расширяемости. Схема калибровки отличается только ослаблением (attenuation), здесь нет отличия между различными каналами.

adc_cali_curve_fitting_config_t::atten, ослабление ADC, которое использовалось ADC для получения сырых результатов.

adc_cali_curve_fitting_config_t::bitwidth, разрядность сырого результата ADC.

После настройки структуры конфигурации вызовите adc_cali_create_scheme_curve_fitting() для создания дескриптора подгонки кривой схемы калибровки (Curve Fitting calibration scheme handle). Эта функция может потерпеть неудачу по таким причинам, как ESP_ERR_INVALID_ARG (неправильные аргументы) или ESP_ERR_NO_MEM (недостаточно памяти).

Ошибки калибровки ADC, связанные с eFuse. Когда функция adc_cali_create_scheme_curve_fitting() возвратит ESP_ERR_NOT_SUPPORTED, то это означает, что схема калибровки требует бит eFuse, которые некорректны на вашей плате.

Схема калибровки ADC, предоставляемая ESP-IDF, основана на значениях в определенных битах eFuse, относящихся к калибровке ADC. Espressif гарантирует, что эти биты прошиты во время производства модуля, так что вы не должны прошивать эти биты eFuses самостоятельно.

Если вы видите такую ошибку, то обратитесь на сайт технических запросов Espressif If [2].

Создание Curve Fitting Scheme

ESP_LOGI(TAG, "calibration scheme version is %s", "Curve Fitting");
adc_cali_curve_fitting_config_t cali_config = { .unit_id = unit, .atten = atten, .bitwidth = ADC_BITWIDTH_DEFAULT, }; ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &handle));

Когда калибровка ADC больше не используется, удалите драйвер схемы калибровки из дескриптора калибровки вызовом adc_cali_delete_scheme_curve_fitting().

Удаление Curve Fitting Scheme

ESP_LOGI(TAG, "delete %s calibration scheme", "Curve Fitting");
ESP_ERROR_CHECK(adc_cali_delete_scheme_curve_fitting(handle));

Замечание: если вы хотите использовать свои собственные схемы калибиовки, то должны предоставить функцию создания, чтобы создать дескриптор вашей схемы калибровки. Проверьте таблицу функций adc_cali_scheme_t в заголовочном файле adc_cali_interface.h, который находится в каталоге components/esp_adc/interface/, чтобы узнать интерфейс ESP ADC calibration.

[Результат преобразования]

После настройки характористи калибровки вы можете вызвать adc_cali_raw_to_voltage() для преобразования сырого результата ADC в калиброванный результат. Калиброванный результат представляется в единицах mV. Эта функция может потерпеть неудачу из-за неправильного аргумента. В особенности, если эта функция возвратит ESP_ERR_INVALID_STATE, то это означает, что схема калибровки не создана. Вам нужно создать дескриптор схемы калибровки (calibration scheme handle), используя adc_cali_check_scheme(), чтобы узнать поддерживамую схему калибровки. С другой стороны, вы можете также предоставить пользовательскую схему калибровки и создать дескриптор.

Получение напряжения

ESP_ERROR_CHECK(adc_cali_raw_to_voltage(adc_cali_handle,
                                        adc_raw[0][0],
                                        &voltage[0][0]));
ESP_LOGI(TAG, "ADC%d Channel[%d] Cali Voltage: %d mV", ADC_UNIT_1 + 1,
                                                       EXAMPLE_ADC1_CHAN0,
                                                       voltage[0][0]);

[Thread Safety]

Заводская функция esp_adc_cali_new_scheme() гарантирует безопасность драйвера для потоков (thread-safe). Таким образом, вы можете вызвать её из различных задач RTOS без защиты дополнительными блокировками.

Другие функции, которые принимают adc_cali_handle_t в качестве первого позиционного аргумента, не являются безопасными для потоков, вам следует избегать их использования из нескольких задач.

[Минимизация шума]

ESP32-C3 ADC чувствителен к шуму, что приводит к большим расхождениям в показаниях АЦП. В зависимости от сценария использования для минимизации шума вам может понадобиться подключить блокирующий конденсатор (например, керамический конденсатор 100 nF) к входному выводу ADC. Кроме того, может использоваться множественное измерение (multisampling) для дополнительного устранения эффектов шума.

[Справочник по API драйвера калибровки АЦП]

Заголовочные файлы драйвера находятся в каталоге components/esp_adc/include/esp_adc/, и они могут быть подключены к проекту следующим образом:

#include "esp_adc/adc_cali.h"
#include "esp_adc/adc_cali_scheme.h"

Эти заголовочные файлы - часть API, предоставленного компонентом esp_adc. Для декларации, что ваш компонент (приложение) зависит от esp_adc, добавьте в свой файл CMakeLists.txt:

REQUIRES esp_adc

или:

PRIV_REQUIRES esp_adc

В следующей таблице приведено общее описание функций драйвера калибровки АЦП. Для полной информации (прототип функции, описание параметров и возвращаемых значений) обратитесь к документации [1].

Функция Описание
adc_cali_check_scheme Проверит поддерживаемую схему калибровки ADC.
adc_cali_raw_to_voltage Преобразует сырые данные ADC в калиброванное напряжение.

typedef struct adc_cali_scheme_t *adc_cali_handle_t

Дескриптор калибровки ADC.

enum adc_cali_scheme_ver_t

Варианты схемы калибровки:

ADC_CALI_SCHEME_VER_LINE_FITTING Линейная схема подгонки.

ADC_CALI_SCHEME_VER_CURVE_FITTING Схема подгонки кривой.

[Ссылки]

1. ESP32-C3 Analog to Digital Converter (ADC) Calibration Driver site:espressif.com.
2. Espressif Technical Inquiries site:espressif.com.
3. ESP32-C3: встроенный АЦП.
4. ESP32-C3: работа со встроенным АЦП.
5. ESP32-C3: драйвер АЦП непрерывного режима преобразования.

 

Добавить комментарий


Защитный код
Обновить

Top of Page