ADC

ADC

Этот модуль содержит функции для доступа к модулю аналого-цифрового преобразователя (АЦП).

АЦП - это система, которая преобразует аналоговый сигнал в числовое представление.

Внутренне АЦП калибруется для работы в диапазоне напряжений, определяемых VRef- и VRef+, и преобразует аналоговый входной сигнал с заданной разрешающей способностью в двоичное число, которое пропорционально [VRef-, VRef+]. Например, если у АЦП разрешение 12 бит и VRef- = 0, а VRef+ = 3.3 В, то при аналоговом сигнале 0 В преобразование равно 0, при аналоговом сигнале 3.3 В преобразование равно 4095, а при входном сигнале 1,65 В преобразование равно 2048.

Для работы с модулем необходимо сделать следующее:

  1. Подключите устройство АЦП к каналу АЦП, используя функцию adc.attach. Функция attach возвращает экземпляр канала АЦП, к которому подключено устройство. Этот экземпляр необходимо сохранить в переменной для дальнейшей работы с ним.

    device = adc.attach(.....)
  2. Прочитайте данные АЦП

    device:read()

Внутренний АЦП

В ESP32 достпен только один АЦП:

adc.ADC1:

  • Это внутренний модуль АЦП.
  • АЦП может работать с разрешением 9, 10, 11 и 12 бит.
  • Опорное напряжение VRef- составляет 0.0 В, а VRef+ установлено на уровне 1.1 В. Эти опорные напряжения программист установить не может.
  • Программист может установить максимальное значение входного сигнала АЦП для данного канала. Это используется внутренне для установки коэффициента ослабления.
  • Предоставляется 8 каналов АЦП, с 0 по 7.

При использовании внутреннего АЦП программист может ссылаться на канал по его номеру или по GPIO:

Канал GPIO
0 36
1 37
2 38
3 39
4 32
5 32
6 34
7 35

АЦП должен быть откалиброван, поскольку внутреннее опорное напряжение составляет около 1100 милливольт, но может варьироваться. Для этого используйте функцию adc.calibrate и внешний АЦП. Эта функция предоставляет значение внутреннего опорного напряжения в милливольтах.

-- Get the internal voltage reference for ADC1 using GPIO26, and measure it with an ADS1115 connecting
-- channel 0 to GPIO26
/ > adc.calibrate(adc.ADC1, pio.GPIO26, adc.ADS1115, 0)
i2c0 at pins scl=GPIO21/sdc=GPIO25 at speed 400000 hz
adc ADS1115 channel 0 at i2c0, PGA +/- 2048 mvolts, address 0, 15 bits of resolution
1108

В ESP32 показания выше 1.1 В достигаются с использованием коэффициента ослабления, который уменьшает входное напряжение, но тесты, проведенные командой Whitecat, показывают, что использование ослабления может привести к неточным показаниям. Мы рекомендуем использовать делитель напряжения или внешнее аппаратное обеспечение АЦП, если вам нужно измерить напряжения выше 1.1 В.

Внешний АЦП

Lua RTOS позволяет программисту получить доступ к внешним устройствам АЦП, используя тот же API.

adc.ADS1015:

Этот блок отображается на внешний чип ADS1015 (интерфейс I2C).

Рабочее разрешение составляет 12 бит.

Внутреннее опорное напряжение, которое нельзя установить аппаратно или программно.

Значения входного сигнала АЦП могут варьироваться от 0 до 6144 милливольт.

Программист может установить максимальное значение входного сигнала АЦП для данного канала. Это используется внутренне для установки PGA.

Предоставляется 4 канала АЦП, с 0 по 3.

Техническое описание ADS1015

adc.ADS1115:

Этот блок отображается на внешний чип ADS1115 (интерфейс I2C).

Рабочее разрешение составляет 15 бит.

Внутреннее опорное напряжение, которое нельзя установить аппаратно или программно.

Значения входного сигнала АЦП могут варьироваться от 0 до 6144 милливольт.

Программист может установить максимальное значение входного сигнала АЦП для данного канала. Это используется внутренне для установки PGA.

Предоставляется 4 канала АЦП, с 0 по 3.

Техническое описание ADS1115

adc.MCP3008:

Этот блок отображается на внешний чип MCP3008 (интерфейс SPI), с максимальным разрешением 10 бит.

Рабочее разрешение составляет 10 бит.

Программист может указать значения VRef+ и VRef- при использовании этого блока (см. функцию adc.attach). Стандартные значения VRef+ и VRef- составляют 3.3 В и 0 В.

Максимальное значение входного сигнала АЦП, которое может установить программист, не предусмотрено. Предполагается, что максимальное значение равно Vref+.

Предоставляется 8 каналов АЦП, с 0 по 7.

Техническое описание MCP3008

adc.MCP3208:

Этот блок отображается на внешний чип MCP3208 (интерфейс SPI), с максимальным разрешением 12 бит.

Рабочее разрешение составляет 12 бит.

Программист может указать значения VRef+ и VRef- при использовании этого блока (см. функцию adc.attach). Стандартные значения VRef+ и VRef- составляют 3.3 В и 0 В.

Максимальное значение входного сигнала АЦП, которое может установить программист, не предусмотрено. Предполагается, что максимальное значение равно Vref+.

Предоставляется 8 каналов АЦП, с 0 по 7.

Техническое описание MCP3208

instance = adc.attach(id, channel, [resolution, vref, max value])

Подключение к каналу АЦП.

Аргументы:

  • id: идентификатор модуля АЦП. Для этого используйте одну из констант, определенных во Внутренний АЦП или Внешний АЦП.

  • channel: идентификатор канала АЦП. Используйте константу adc.ADC_CHx для этой цели.

  • resolution (опционально): разрешение для использования. Доступно не во всех поддерживаемых устройствах АЦП. Если разрешение не предоставлено, или его значение равно 0 или nil, применяется разрешение по умолчанию.

  • vref (опционально): положительное опорное напряжение в милливольтах. Доступно не во всех поддерживаемых устройствах АЦП (см. Поддерживаемые устройства АЦП). Если vref не предоставлено, или его значение равно 0 или nil, применяется опорное напряжение по умолчанию.

  • max value (опционально): максимальное входное напряжение, приложенное к каналу. Доступно не во всех поддерживаемых устройствах АЦП (см. Поддерживаемые устройства АЦП). Если максимальное значение не предоставлено, или его значение равно 0 или nil, применяется опорное напряжение по умолчанию.Это значение используется внутренне для настройки АЦП для получения наилучшего измерения. Например, если нам нужно измерить значение датчика, которое дает максимальное напряжение 1100 милливольт и мы используем внешний чип ADS1115, это будет установка настройки PGA на +/- 2048.

Возвращает: экземпляр канала АЦП или исключение. Этот экземпляр необходимо сохранить в переменной для дальнейшей работы с ним.

-- Setup device attached to ADC1 on GPIO32
channel = adc.attach(adc.ADC1, pio.GPIO32)

raw, millivolts = instance:read()

Чтение значения АЦП экземпляра канала.

Возвращает: необработанное значение, преобразованное в милливольты, или исключение.

  • raw (сырое значение): необработанное значение.
  • millivolts (милливольты): преобразованное в милливольты.
-- Setup device attached to ADC1 on GPIO32
channel = adc.attach(adc.ADC1, pio.GPIO32)

-- Read
raw, millivolts = channel:read()