3.4. Выводы и периферийные устройства¶
Вывод – это простейшее периферийное устройство на MCU: одиночный провод, соединяющий чип с внешним миром. Любое взаимодействие с реальной аппаратурой – управление светодиодом, чтение состояния переключателя, измерение напряжения, отправка байтов по последовательной линии – в конечном счёте проходит через один или несколько выводов.
3.4.1. Режимы выводов¶
Прежде чем вывод начнёт приносить пользу, он настраивается в один из нескольких режимов:
Pin.IN– вход. Вывод наблюдает за напряжением, приложенным к нему извне, и сообщает его как0(низкий) или1(высокий).Pin.OUT– выход. Вывод сам задаёт на себе либо напряжение питания (1), либо землю (0), так что внешние компоненты видят это напряжение.Pin.OPEN_DRAIN– выход, который может только подтягивать линию к низкому уровню. Чтобы перейти в высокий уровень, вывод отпускает линию (переходит в плавающее состояние), и внешний подтягивающий резистор поднимает линию. Используется для общих шин, где несколько устройств могут задавать одну и ту же линию.
Для входов можно дополнительно включить внутренний подтягивающий резистор, который гарантирует определённый уровень, когда вывод ничем извне не задаётся:
Pin.PULL_UP– слабая подтяжка к шине питания.Pin.PULL_DOWN– слабая подтяжка к земле.
Конструктор принимает id, mode и pull в качестве позиционных аргументов:
from machine import Pin
led = Pin("P0", Pin.OUT)
button = Pin("P1", Pin.IN, Pin.PULL_UP)
3.4.2. Альтернативные функции¶
У большинства выводов помимо роли GPIO есть альтернативная функция. Одна физическая контактная площадка на чипе может быть:
Цифровым входом или выходом (
machine.Pin).Входом ADC, измеряющим напряжение (
machine.ADC).Выходом PWM, выдающим прямоугольный сигнал (
machine.PWM).Линией TX или RX интерфейса UART (
machine.UART).
Другие периферийные устройства (дополнительные последовательные шины, таймеры и так далее) также занимают конкретные выводы; разработчик чипа подключает каждый аппаратный блок к фиксированному набору площадок. ADC дискретизирует только те выводы, что подключены к его мультиплексору; UART передаёт по тому единственному выводу, к которому подключён его сигнал TX.
Примечание
Камеры OpenMV маркируют выводы внешнего разъёма как P0 … P9 (немного варьируется в зависимости от платы). То, какой вывод несёт какую альтернативную функцию, зависит от платы; см. таблицу в кратком справочнике OpenMV Cam.
3.4.3. Различия между платами¶
Несколько деталей варьируются в зависимости от платы, и их всегда следует сверять с кратким справочником, а не предполагать по другой плате:
Допустимое напряжение. У некоторых камер есть выводы ввода-вывода, толерантные к 5 В (сигнал 5 В можно подавать напрямую без повреждений); другие работают со своим вводом-выводом на 3,3 В или 1,8 В и требуют преобразователь уровней для любого сигнала выше этого значения. Подключение источника 5 В к нетолерантному выводу может повредить чип.
Опорное напряжение ADC. Напряжение, которое ADC считает полной шкалой, зависит от напряжения питания ввода-вывода платы.
read_u16()всегда возвращает0..65535, но напряжение, которое представляет65535, – это то, каково опорное напряжение платы.Нагрузочная способность. Вывод GPIO может выдавать или принимать ограниченный ток – обычно десятки миллиампер. Достаточно для небольшого светодиода через резистор; недостаточно для двигателя, зуммера или любой индуктивной нагрузки. Для чего-либо более мощного используйте внешний драйвер (транзистор, MOSFET, H-мост).
Краткий справочник OpenMV Cam приводит точные значения для каждой платы.