ESP32 в MicroPython: ШИМ и рабочий цикл
Аппаратное обеспечение ШИМ, доступное на ESP32, немного сложнее, чем вы могли ожидать, и некоторых задач можно было бы лучше достичь с помощью RMT. Этот отрывок изПрограммирование ESP32 на MicroPython,часть библиотеки I Programmer и показывает, как использовать оборудование ШИМ.
Купить на Amazon.
Предисловие
<АСИН: 187196282X>
<АСИН:B0C8NV75TF>
<АСИН:1871962099>
ESP32 имеет две аппаратные реализации ШИМ. Один предназначен для управления двигателем и имеет дополнительные функции, такие как мертвая зона и автоматическое торможение. Это не поддерживается MicroPython, и если вы хотите его использовать, вам придется перейти на C. Второй, LEDC, специально разработан для управления светодиодами с такими функциями, как автоматическое затемнение, а также более экзотическими функциями. Хотя MicroPython поддерживает основные операции LEDC, он не обеспечивает доступ ко всем его дополнительным функциям.
Генератор ШИМ можно назначить любому выводу GPIO. Количество генераторов ШИМ, которые имеет ESP32, зависит от его конкретной модели. Они делятся на две группы – быстрые и медленные. Быстрый тип имеет функции автоматического затемнения и способен плавно изменять частоту и рабочий цикл. У медленного типа эти функции отсутствуют, и его частоту и рабочий цикл может изменить программное обеспечение. Каждая группа также имеет определенное количество таймеров, которые определяют, сколько разных частот может быть сгенерировано и заданное количество каналов.
Наиболее распространенная плата разработки, использующая EP32, имеет две группы ШИМ (быструю и медленную) по восемь каналов в каждой группе. ESP32-S2 имеет только одну быструю группу, но в остальном она идентична. ESP32-C3, основанный на RISC, аналогичен ESP32-S2, но имеет только шесть каналов. Все устройства ESP32 имеют четыре таймера в каждой группе, что означает, что вы можете установить четыре разные частоты.
Различие между этими двумя группами не имеет значения с точки зрения MicroPython, поскольку он не использует дополнительные функции быстрой группы. Это означает, что с точки зрения MicroPython ESP32 имеет 16 каналов ШИМ, которые могут работать на восьми разных частотах. Все каналы могут работать с разными рабочими циклами.
Вам не обязательно знать, как работает оборудование ШИМ, но это помогает понять некоторые ограничения.
Чтобы создать объект PWM, вам необходимо передать его конструктору объект Pin. Например:
создает объект PWM, связанный с GPIO4. Вы можете установить частоту, используя:
который устанавливает частоту в Гц. Аппаратное обеспечение ШИМ на данный момент не включено. Чтобы начать генерировать сигнал, вам необходимо установить рабочий цикл. Это делается с помощью:
где пошлина — это значение в диапазоне от 0 до 65 535, соответствующее от 0 до 100%.
А также есть:
который устанавливает время, в течение которого линия находится на высоком уровне в наносекундах. Это не так полезно для общего использования, и если вы укажете время, превышающее установленный период, вы сгенерируете исключение.
Альтернативно вы можете использовать конструктор, чтобы указать все характеристики ШИМ:
На момент написания статьи в MicroPython 1.19 имеется ошибка, из-за которой рабочий цикл устанавливается неправильно, если частота задается с помощью freq(). Решение состоит в том, чтобы всегда использовать конструктор для установки начальной частоты.
Реализация ШИМ в MicroPython интеллектуально распределяет таймеры по каналам. Если вы создаете объект ШИМ, работающий на определенной частоте, он сначала проверяет, есть ли в той же группе таймер, работающий на этой частоте. Если он есть, он назначает его объекту ШИМ. Если существующего таймера, работающего на этой частоте, нет, то выделяется свободный и устанавливается для работы на новой частоте. Если свободных таймеров не осталось и ни один из них не работает с требуемой частотой, выдается исключение. Это означает, что вы можете распределять частоты, не беспокоясь, пока не израсходуете все таймеры, а затем вам придется установить частоты, которые вы уже использовали. Это означает, что для ESP32 вы можете установить до восьми разных частот для 16 разных каналов.