MicroPython:Библиотеки/pyb/Класс ADC

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс ADC – аналогово-цифровое преобразование[1]

Как пользоваться:

import pyb

adc = pyb.ADC(pin)                  # создает аналоговый объект
                                    # на контакте «pin»
val = adc.read()                    # считывает аналоговое значение 

adc = pyb.ADCAll(resolution)        # создает объект «ADCAll»
adc = pyb.ADCAll(resolution, mask)  # создает объект «ADCAll» на
                                    # выбранных аналоговых каналах 
val = adc.read_channel(channel)     # считывает заданный канал
val = adc.read_core_temp()          # считывает температуру MCU 
val = adc.read_core_vbat()          # считывает напряжение
                                    # резервной батарейки (VBAT) MCU
val = adc.read_core_vref()          # считывает опорное напряжение MCU 
val = adc.read_vref()               # считывает питающее
                                    # напряжение MCU

Конструкторы

Методы

Объект «ADCA11»

Инстанцинирование этого объекта переводит все выбранные АЦП-контакты в режим ввода аналоговых данных. Доступ к предварительно обработанным данным о температуре микроконтроллера, а также VREF и VBAT можно получить на АЦП-каналах 16, 17 и 18 соответственно. Масштабирование данных выполняется с помощью опорного напряжения (обычно 3.3 вольта). Температурный датчик на чипе имеет заводскую калибровку и позволяет считывать его температуру с точностью +/- 1 градус по Цельсию. На первый взгляд кажется, что это хорошая точность, но не забывайте, что этот датчик замеряет внутреннюю температуру микроконтроллера. В зависимости от вычислительной нагрузки и активности I/O-подсистем, температура чипа может быть запросто на десятки градусов выше окружающей температуры. Другими словами, если вывести PyBoard из долгого пребывания в режиме простоя, она покажет корректную окружающую температуру, но с учетом условий, обозначенных выше.

Методы read_core_vbat(), read_vref() и read_core_vref() объекта ADCA11 считывают, соответственно, напряжение резервной батареи, опорное напряжение и опорное напряжение, основанное на питающем напряжении (обычно это 1.21 вольт). Результат всех трех функций – это напряжение постоянного тока в виде чисел с плавающей точкой.

Функция read_core_vbat() возвращает напряжение резервной батареи. Это напряжение тоже настраивается согласно питающему напряжению. Чтобы не допустить перегрузки на входных аналоговых контактах, напряжение резервной батареи измеряется через делитель напряжения и масштабируется согласно значению этого делителя. Чтобы не допустить чрезмерной нагрузки на резервную батарею, делитель напряжения активен только во время АЦП-операций.

Функция read_vref() измеряет внутреннее опорное напряжение и выполняет обратное масштабирование полученного значения при помощи заводского калибровочного значения внутреннего опорного напряжения. В большинстве случаев результат будет близок к 3.3 вольтам. Если PyBoard работает от батареи, питающее напряжение может упасть ниже 3.3 вольт. PyBoard будет по-прежнему работать нормально – до тех пор, пока будут соблюдены операционные условия. При правильных частоте микроконтроллера, скорости доступа к flash-памяти и режиме программирования PyBoard может работать даже на 2 вольтах и по-прежнему выполнять нормальное аналогово-цифровое преобразование. Очень важно убедиться, чтобы напряжение на входных аналоговых контактах никогда не превышало питающее напряжение.

Другие входные аналоговые каналы (0-15) возвращают немасштабированные целые числа в соответствии с выбранной точностью.

Чтобы избежать нежелательной активации входных аналоговых каналов (0-15), в этой функции можно задать второй аргумент. Значением в нем служит двоичный паттерн, в котором каждый запрошенный входной аналоговый контакт имеет соответствующий набор битов. Значение по умолчанию – «0xffffffff», которое означает, что активны все входные аналоговые каналы. Если вам нужны только внутренние каналы (16-18), в этом масочном паттерне должно быть значение «0x70000».

Пример:

adcall = pyb.ADCAll(12, 0x70000) # 12-битное разрешение, 
                                 # внутренние каналы
temp = adcall.read_core_temp()

См.также

Внешние ссылки