MicroPython의 ESP32: PWM 및 듀티 사이클
ESP32에서 사용할 수 있는 PWM 하드웨어는 예상보다 조금 더 복잡하며 RMT를 사용하면 일부 작업을 더 잘 수행할 수 있습니다. 이 추출물은MicroPython에서 ESP32 프로그래밍,I 프로그래머 라이브러리의 일부이며 PWM 하드웨어를 사용하는 방법을 보여줍니다.
아마존에서 구매하세요.
머리말
<아신:B0C8NV75TF>
<아신:1871962099>
ESP32에는 두 가지 PWM 하드웨어 구현이 있습니다. 하나는 모터 제어에 사용하도록 고안되었으며 데드존 및 자동 제동과 같은 추가 기능이 있습니다. 이는 MicroPython에서 지원되지 않으며 이를 활용하려면 C로 이동해야 합니다. 두 번째 LEDC는 자동 조광과 같은 기능과 보다 이국적인 기능을 통해 LED를 구동하도록 특별히 설계되었습니다. MicroPython은 기본 LEDC 작업을 지원하지만 모든 추가 기능에 대한 액세스를 제공하지는 않습니다.
PWM 생성기는 모든 GPIO 핀에 할당될 수 있습니다. ESP32의 PWM 생성기 수는 정확한 모델에 따라 다릅니다. 그들은 빠르고 느린 두 그룹으로 나뉩니다. Fast Type은 AutoDimming 기능을 갖추고 있어 주파수와 듀티 사이클을 원활하게 변경할 수 있습니다. 느린 유형에는 이러한 기능이 없으며 주파수와 듀티 사이클을 변경하는 것은 소프트웨어에 달려 있습니다. 또한 각 그룹에는 생성할 수 있는 서로 다른 주파수 수와 지정된 채널 수를 결정하는 설정된 수의 타이머가 있습니다.
EP32를 사용하는 가장 일반적인 개발 보드에는 두 개의 그룹(빠른 그룹과 느린 그룹)이 있으며 각 그룹에는 8개의 채널이 있습니다. ESP32-S2에는 하나의 빠른 그룹만 있지만 그 외에는 동일합니다. RISC 기반 ESP32-C3은 ESP32-S2와 동일하지만 채널이 6개만 있습니다. 모든 ESP32 장치에는 각 그룹에 4개의 타이머가 있습니다. 즉, 4개의 서로 다른 주파수를 설정할 수 있습니다.
MicroPython은 빠른 그룹의 추가 기능을 사용하지 않기 때문에 두 그룹 간의 구분은 MicroPython의 관점에서는 부적합합니다. 이것이 의미하는 바는 MicroPython의 관점에서 ESP32에는 8개의 서로 다른 주파수에서 작동할 수 있는 16개의 PWM 채널이 있다는 것입니다. 모든 채널은 서로 다른 듀티 사이클로 작동할 수 있습니다.
PWM 하드웨어의 작동 방식을 알 필요는 없지만 일부 제한 사항을 이해하는 데 도움이 됩니다.
PWM 객체를 생성하려면 해당 생성자에 Pin 객체를 전달해야 합니다. 예를 들어:
GPIO4와 관련된 PWM 객체를 생성합니다. 다음을 사용하여 빈도를 설정할 수 있습니다.
주파수를 Hz 단위로 설정합니다. 이 시점에서는 PWM 하드웨어가 활성화되지 않습니다. 신호 생성을 시작하려면 듀티 사이클을 설정해야 합니다. 이는 다음을 사용하여 수행됩니다.
여기서 관세는 0~100%에 해당하는 0~65,535 범위의 값입니다.
도 있습니다:
이는 라인이 높은 시간을 나노초 단위로 설정합니다. 이는 일반적인 사용에는 유용하지 않으며 설정된 기간보다 긴 시간을 지정하면 예외가 생성됩니다.
또는 생성자를 사용하여 PWM의 모든 특성을 지정할 수 있습니다.
이 글을 쓰는 시점에 MicroPython 1.19에는 freq()를 사용하여 주파수를 설정하면 듀티 사이클이 잘못 설정되는 버그가 있습니다. 해결 방법은 항상 생성자를 사용하여 초기 빈도를 설정하는 것입니다.
MicroPython의 PWM 구현은 지능적인 방식으로 채널에 타이머를 할당합니다. 특정 주파수에서 작동하는 PWM 객체를 생성하는 경우 먼저 해당 주파수에서 작동하는 동일한 그룹에 타이머가 있는지 확인합니다. 있는 경우 이를 PWM 개체에 할당합니다. 해당 주파수에서 작동하는 기존 타이머가 없으면 무료 타이머가 할당되어 새 주파수에서 작동하도록 설정됩니다. 남은 무료 타이머가 없고 필요한 빈도로 실행되는 타이머도 없으면 예외가 발생합니다. 이것이 의미하는 바는 모든 타이머를 다 사용할 때까지 걱정 없이 주파수를 할당할 수 있으며 그런 다음 이미 사용한 주파수를 설정해야 한다는 것입니다. 이는 ESP32의 경우 16개의 서로 다른 채널에 대해 최대 8개의 서로 다른 주파수를 설정할 수 있음을 의미합니다.