Модуль MicroPython для управления MCP342X. 18-битный аналого-цифровой преобразователь с интерфейсом I2C и встроенным ИОН. 18-Bit Analog-to-Digital Converter with I2C Interface.
MCP3421 — это одноканальный малошумящий высокоточный ΔΣ аналого-цифровой преобразователь с дифференциальными входами и разрешением до 18 бит в небольшом корпусе SOT-23-6. Встроенное прецизионное опорное напряжение 2,048 В обеспечивает дифференциальный входной диапазон ±2,048 В (Δ напряжения = 4,096 В). Устройство использует двухпроводный последовательный интерфейс, совместимый с I2C, и работает от одного источника питания от 2,7 В до 5,5 В.
- Портативные приборы
- Весы и указатели уровня топлива
- Измерение температуры с помощью RTD, термистора и термопары.
- Мостовой датчик давления, деформации и силы.
Напряжение питания 3.3, 5.0 В (от 2.7 В до 5.5 В)!
Фиксирован, 0x68.
Просто подключите контакты (VCC, GND, SDA, SCL) платы с MCP3421 к соответствующим контактам Arduino, ESP или любой другой платы с прошивкой MicroPython! Подайте питание на плату.
Загрузите прошивку micropython на плату NANO(ESP и т. д.), а затем файлы: main.py, mcp3421mod.py и папку sensor_pack_2 полностью! Затем откройте main.py в своей IDE и запустите/выполните его.
На каждое измерение нужен вызов метода start_measurement(single_shot=True... .
Вызовом метода start_measurement, датчик переводится в режим автоматического выполнения измерений. start_measurement(single_shot=False... .
Представляет собой основу для описания любого АЦП. Выражаясь языком программиста, класс ADC, является классом, наследуя который, можно программно описать АЦП. В частности, MCP3421!
Конструктор. Параметры:
- init_props - параметры, описывающие АЦП: опорное напряжение, предельное кол-во значащих бит в отсчете, количество обычных (single ended) каналов, количество дифференциальных(differential) каналов, дифференциальный АЦП (bool).
- model - строковое наименование АЦП, по которому, функция возвратит init_props.
Возвращает основные свойства АЦП:
- Опорное напряжение
- Текущее кол-во бит в отсчете
- Предельное кол-во бит в отсчете
- Текущий номер канала
- Кол-во обычных (single ended) каналов
- Кол-во дифференциальных (differential) каналов
Возвращает основные 'сырые' свойства АЦП, которые считываются из регистра, обычно конфигурации:
- Текущая "частота" взятия отсчетов
- Текущее усиление PGA (усилитель с программируемым усилением)
- Режим работы АЦП (одиночный или автоматический)
Возвращает уникальные для АЦП свойства, желательно в виде именованного кортежа. Для переопределения в классе-наследнике!
Проверяет сырое усиление на правильность. В случае ошибки (значение вне допустимого диапазона) выброси исключение! Возвращает значение gain_raw в случае успеха! Для переопределения в классе-наследнике! Вызывается в методе start_measurement.
Проверяет сырое значение 'частоты' взятия отсчетов, data_rate, на правильность. В случае ошибки выброси исключение! Возвращает data_rate_raw в случае успеха! Для переопределения в классе-наследнике.
Возвращает цену младшего разряда в Вольтах в зависимости от текущих настроек АЦП.
Возвращает время преобразования в [мкc/мс] аналогового значения в цифровое в зависимости от текущих настроек АЦП. Переопредели для каждого АЦП!
Возвращает 'сырое' значение отсчета АЦП. Переопределяется в классах - наследниках!
Возвращает именованный кортеж: 'сырое' значение отсчета АЦП, нижний предел, верхний предел. Переопределяется в классах - наследниках!
Преобразует 'сырое' значение из регистра АЦП в значение в Вольтах.
Преобразует 'сырое' значение усиления в 'настоящее'.
Возвращает значение текущего канала в Вольтах, если raw в Ложь, в коде, если raw в Истина.
Возвращает информацию о текущем активном канале АЦП.
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 для записи значений в соответствующие поля класса!
Возвращает текущие настройки датчика из числа, возвращенного get_raw_config(!), в поля(!) класса. raw_config -> adc_properties
Преобразует свойства АЦП из полей класса в 'сырую' конфигурацию АЦП. adc_properties -> raw_config
Возвращает(считывает) текущие настройки датчика из регистров(конфигурации) в виде числа.
Записывает настройки (value) во внутреннюю память/регистр датчика.
def start_measurement(self, single_shot: bool, data_rate_raw: int, gain_raw: int, channel: int, differential_channel: bool):
Параметр channel это номер канала. Их количество зависит от используемого АЦП семейства MCP342X. Параметр differential_channel установите в Истина, поскольку АЦП одноканальный с дифференциальным входом. Параметр data_rate_raw и gain_raw 0..3.
raw gain | gain |
---|---|
0 | 1 |
1 | 2 |
2 | 4 |
3 | 8 |
raw sample rate | частота преобразования [Гц] | Время преобразования, мкс | Бит в отсчете |
---|---|---|---|
0 | 240 | 4166 | 12 |
1 | 60 | 16666 | 14 |
2 | 15 | 66666 | 16 |
3 | 3.75 | 266666 | 18 |
Никогда не подавайте на входы АЦП напряжение больше + U_пит. и меньше 0 Вольт!
Отличительная особенность АЦП с дифференциальным входом в том, что результат преобразования всегда будет знаковым! Когда на IN+ потенциал больше чем на IN-, результат будет положительный, иначе отрицательный. То есть если у нас 18-битный АЦП с дифференциальным входом, результат преобразования будет находиться в пределах от -131071 до +131071. Эти 131072 отсчета соответствуют опорному напряжению (2048 мВ), а дальше все, как у обычного single-ended АЦП.
- устраняет любой синфазный шум
- позволяет измерять малые напряжения при больших смещениях
Класс Mcp342X, кроме mcp3421, может работать с mcp3422, mcp3422. Я проверял работу только с mcp3421!