ads1115

Форк
0

README.md

Модуль MicroPython для управления ADS1115. Многоканальный, дифференциальный I2C АЦП от TI. MicroPython module for controlling ADS1115. Multichannel, differential I2C ADC from TI.

Описание

ADS1115 представляет собой прецизионный маломощный 16-разрядный I2C-совместимый аналого-цифровой преобразователь (АЦП). ADS1115 включает в себя источник опорного напряжения с малым дрейфом и генератор. Также имеется усилитель с программируемым усилением (PGA) и цифровой компаратор. Эти особенности, а также широкий диапазон рабочих напряжений питания, делают ADS1115 подходящим для приложений измерения датчиков с ограниченной мощностью.

Применения

  • Портативные приборы
  • Мониторинг напряжения и тока батарей
  • Измерение температуры
  • Бытовая электроника
  • Автоматизация производства и управление процессами

Питание

Напряжение питания 3.3, 5.0 В (от 2.0 В до 5.5 В)!

Адрес датчика

Находятся в диапазоне 72..75.

Шина I2C

Просто подключите контакты (VCC, GND, SDA, SCL) платы с ADS1115 к соответствующим контактам Arduino, ESP или любой другой платы с прошивкой MicroPython! Подайте питание на плату.

Загрузка ПО в плату

Загрузите прошивку micropython на плату NANO(ESP и т. д.), а затем файлы: main.py, ads1115mod.py и папку sensor_pack_2 полностью! Затем откройте main.py в своей IDE и запустите/выполните его.

Режимы работы АЦП

Ручной

На каждое измерение нужен вызов метода start_measurement(single_shot=True... .

Автоматический

Вызовом метода start_measurement, датчик переводится в режим автоматического выполнения измерений. start_measurement(single_shot=False... .

Модуль adcmod

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

Методы модуля

def init(self, init_props: adc_init_props, model: str = None):

Конструктор. Параметры:

  • init_props - параметры, описывающие АЦП: опорное напряжение, предельное кол-во значащих бит в отсчете, количество обычных (single ended) каналов, количество дифференциальных(differential) каналов, дифференциальный АЦП (bool).
  • model - строковое наименование АЦП, по которому, функция возвратит init_props.

def get_general_props(self) -> adc_general_props:

Возвращает основные свойства АЦП:

  • Опорное напряжение
  • Текущее кол-во бит в отсчете
  • Предельное кол-во бит в отсчете
  • Текущий номер канала
  • Кол-во обычных (single ended) каналов
  • Кол-во дифференциальных (differential) каналов

def get_general_raw_props(self) -> adc_general_raw_props:

Возвращает основные 'сырые' свойства АЦП, которые считываются из регистра, обычно конфигурации:

  • Текущая "частота" взятия отсчетов
  • Текущее усиление PGA (усилитель с программируемым усилением)
  • Режим работы АЦП (одиночный или автоматический)

def get_specific_props(self):

Возвращает уникальные для АЦП свойства, желательно в виде именованного кортежа. Для переопределения в классе-наследнике!

def check_gain_raw(self, gain_raw: int) -> int:

Проверяет сырое усиление на правильность. В случае ошибки (значение вне допустимого диапазона) выброси исключение! Возвращает значение gain_raw в случае успеха! Для переопределения в классе-наследнике! Вызывается в методе start_measurement.

def check_data_rate_raw(self, data_rate_raw: int) -> int:

Проверяет сырое значение 'частоты' взятия отсчетов, data_rate, на правильность. В случае ошибки выброси исключение! Возвращает data_rate_raw в случае успеха! Для переопределения в классе-наследнике.

def get_lsb(self) -> float:

Возвращает цену младшего разряда в Вольтах в зависимости от текущих настроек АЦП.

def get_conversion_cycle_time(self) -> int:

Возвращает время преобразования в [мкc/мс] аналогового значения в цифровое в зависимости от текущих настроек АЦП. Переопредели для каждого АЦП!

def get_raw_value(self) -> int:

Возвращает 'сырое' значение отсчета АЦП. Переопределяется в классах - наследниках!

def get_raw_value_ex(self, delta: int = 5) -> raw_value_ex:

Возвращает именованный кортеж: 'сырое' значение отсчета АЦП, нижний предел, верхний предел. Переопределяется в классах - наследниках!

def raw_value_to_real(self, raw_val: int) -> float:

Преобразует 'сырое' значение из регистра АЦП в значение в Вольтах.

def gain_raw_to_real(self, raw_gain: int) -> float:

Преобразует 'сырое' значение усиления в 'настоящее'.

def get_value(self, raw: bool = True) -> float:

Возвращает значение текущего канала в Вольтах, если raw в Ложь, в коде, если raw в Истина.

def get_current_channel(self) -> adc_channel_info:

Возвращает информацию о текущем активном канале АЦП.

def start_measurement(self, single_shot: bool, data_rate_raw: int, gain_raw: int, channel: int, differential_channel: bool)

Запуск однократного(single_shot в Истина) или многократного(single_shot в Ложь) измерения. data_rate_raw - частота получения выборок АЦП, отсчетов в сек., RAW-параметр, смотри в datasheet битовое поле! gain_raw - коэффициент усиления входного аналогового напряжения, RAW-параметр, смотри в datasheet битовое поле! channel - номер аналогового входа. От 0 до self._channels/self._diff_channels - 1 differential_channel - если Истина, то канал с номером channel дифференциальный(!) Внимание! Последней строкой этого метода всегда вызывайте метод raw_config_to_adc_properties для записи значений в соответствующие поля класса!

def raw_config_to_adc_properties(self, raw_config: int):

Возвращает текущие настройки датчика из числа, возвращенного get_raw_config(!), в поля(!) класса. raw_config -> adc_properties

def adc_properties_to_raw_config(self) -> int:

Преобразует свойства АЦП из полей класса в 'сырую' конфигурацию АЦП. adc_properties -> raw_config

def get_raw_config(self) -> int:

Возвращает(считывает) текущие настройки датчика из регистров(конфигурации) в виде числа.

def set_raw_config(self, value: int):

Записывает настройки (value) во внутреннюю память/регистр датчика.

ADS1115

Параметры АЦП в методах

def start_measurement(self, single_shot: bool, data_rate_raw: int, gain_raw: int, channel: int, differential_channel: bool):

Имя параметраraw значенияЗначения______
data_rate_raw0..78, 16, 32, 64, 128, 250, 475, 860
gain_raw0..5+/-3, +/-2, +/-1, +/-0.5, +/-0.25, +/-0.125
channel_raw0..70 - AIN0-AIN1 (diff),
1 - AIN0-AIN3 (diff)
2 - AIN1-AIN3 (diff)
3 - AIN2-AIN3 (diff)
4 - AIN0-GND
5 - AIN1-GND
6 - AIN2-GND
7 - AIN3-GND
AIN3-GND

Зависимость gain от raw_gain, (коэффициента усиления от 'сырого' усиления)

raw gaingain
01/3
11/2
21
32
44
54

Зависимость частоты и времени преобразования от raw_sample_rate ('сырой' частоты преобразования)

raw sample rateчастота преобразования [Гц]Время преобразования, мкс
08125_000
11662500
23231250
36415625
41287812.5
52504000
64752105.3
78601162.8

channel - номер канала. 8 каналов АЦП я разбил на две группы по 4 канала 0..3. Если вы установите differential_channel в ЛОЖЬ, то подключите к PGA обычный (single ended) канал, иначе подключите PGA дифференциальный канал.

Предупреждение

Никогда не подавайте на входы АЦП напряжение больше + U_пит. и меньше 0 Вольт!

Отличительная особенность АЦП с дифференциальным входом в том, что результат преобразования всегда будет знаковым! Когда на IN+ потенциал больше чем на IN-, результат будет положительный, иначе отрицательный. То есть если у нас 16-битный АЦП с дифференциальным входом, результат преобразования будет находиться в пределах от -32767 до +32767. Эти 65536 отсчета соответствуют опорному напряжению, а дальше все, как у обычного single-ended АЦП.

Преимущества дифференциального АЦП перед single-ended:

  • устраняет любой синфазный шум
  • позволяет измерять малые напряжения при больших смещениях

Плата с ADS1115

alt text

Среда разработки (IDE)

IDE

alt text

Описание

Модуль для управления ADS1115. Многоканальный, дифференциальный I2C АЦП от TI. MicroPython.

Языки

Python

Сообщить о нарушении

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.