class PWM – 펄스 폭 변조

PWM 클래스는 Pin에 펄스 폭 변조 신호를 출력합니다. 이는 PWM을 위한 현대적인 크로스 포트 API입니다. STM32 OpenMV 카메라에서는 내부의 pyb.Timer 채널 메커니즘을 감싸므로, 각 PWM 인스턴스는 하나의 타이머 채널을 차지합니다.

사용 예제:

from machine import PWM, Pin

# 50 Hz PWM on a header pin with a 12.5 % duty.
pwm = PWM(Pin("P7"), freq=50, duty_u16=8192)

pwm.duty_u16(32768)            # change duty to 50 %
pwm.init(freq=5000, duty_ns=5000)  # re-init at 5 kHz, 5 us pulse
pwm.duty_ns(3000)              # 3 us pulse

pwm.deinit()

생성자

class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)

dest(OpenMV 카메라의 Pin)를 구동하는 PWM 객체를 생성합니다. 키워드 인수는 생성 직후 init()를 호출하는 것과 동일합니다:

  • freq – PWM 주파수(Hz).

  • duty_u16duty_u16 / 65535 비율로 표현한 듀티 사이클.

  • duty_ns – 나노초 단위의 펄스 폭.

  • invertTrue이면 출력 극성을 반전합니다.

duty_u16 / duty_ns 중 한 번에 최대 하나만 전달할 수 있습니다. freq를 설정하면 동일한 내부 타이머를 공유하는 다른 PWM 인스턴스에 영향을 줄 수 있습니다(STM32에서 그러함 – 주어진 TIM의 모든 채널은 동일한 주파수로 동작합니다).

메서드

init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None

PWM 출력을 재구성합니다. 제공된 인수만 갱신되며, 나머지는 이전 값을 유지합니다. 각 인수의 의미는 생성자를 참조하세요.

deinit() None

PWM 출력을 비활성화하고 차지하고 있던 타이머 채널을 해제합니다.

freq() int
freq(value: int, /) None

PWM 주파수를 가져오거나 설정합니다.

인수가 없으면 현재 주파수를 Hz 단위로 반환합니다.

단일 value 인수를 사용하면 주파수를 해당 값(Hz)으로 설정합니다. 주파수가 내부 타이머로 달성 가능한 범위를 벗어나면 ValueError를 발생시킬 수 있습니다.

duty_u16() int
duty_u16(value: int, /) None

듀티 사이클을 065535 범위의 부호 없는 16비트 값으로 가져오거나 설정합니다.

인수가 없으면 현재 듀티를 반환합니다.

단일 value 인수를 사용하면 듀티 사이클을 주기의 value / 65535로 설정합니다. 0은 항상 로우, 65535는 항상 하이입니다.

duty_ns() int
duty_ns(value: int, /) None

펄스 폭을 나노초 단위로 직접 가져오거나 설정합니다.

인수가 없으면 현재 펄스 폭을 반환합니다.

단일 value 인수를 사용하면 각 사이클의 하이 타임을 value 나노초로 설정합니다. 듀티 비율보다 펄스 폭이 의미 있는 양인 서보 방식 출력에 유용합니다.

제한 사항

  • PWM 주파수와 듀티 분해능은 모든 하드웨어 타이머에서 상호 의존적입니다. 높은 주파수에서는 한 주기에 들어가는 카운터 스텝이 적어지므로 duty_u16의 하위 비트 중 의미 있는 비트가 줄어듭니다.

  • 달성 가능한 PWM 주파수는 타이머의 클록 소스와 프리스케일러에 따라 다릅니다. STM32 TIM2 / TIM5는 대부분의 부품에서 32비트(그리고 STM32N6에서는 TIM3 / TIM4도 마찬가지)여서 더 넓은 주파수와 듀티 범위를 제공하며, 나머지 타이머는 16비트입니다. 정확한 범위는 해당 MCU 레퍼런스 매뉴얼을 참조하세요.

  • STM32에서는 동일한 TIM의 여러 PWM 채널이 주파수를 공유합니다. 한 인스턴스에서 freq()를 설정하면 해당 TIM에 연결된 다른 모든 채널의 출력이 변경됩니다.