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_u16–duty_u16 / 65535비율로 표현한 듀티 사이클.duty_ns– 나노초 단위의 펄스 폭.invert–True이면 출력 극성을 반전합니다.
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 출력을 재구성합니다. 제공된 인수만 갱신되며, 나머지는 이전 값을 유지합니다. 각 인수의 의미는 생성자를 참조하세요.
- freq() int¶
- freq(value: int, /) None
PWM 주파수를 가져오거나 설정합니다.
인수가 없으면 현재 주파수를 Hz 단위로 반환합니다.
단일
value인수를 사용하면 주파수를 해당 값(Hz)으로 설정합니다. 주파수가 내부 타이머로 달성 가능한 범위를 벗어나면ValueError를 발생시킬 수 있습니다.
제한 사항¶
PWM 주파수와 듀티 분해능은 모든 하드웨어 타이머에서 상호 의존적입니다. 높은 주파수에서는 한 주기에 들어가는 카운터 스텝이 적어지므로
duty_u16의 하위 비트 중 의미 있는 비트가 줄어듭니다.달성 가능한 PWM 주파수는 타이머의 클록 소스와 프리스케일러에 따라 다릅니다. STM32 TIM2 / TIM5는 대부분의 부품에서 32비트(그리고 STM32N6에서는 TIM3 / TIM4도 마찬가지)여서 더 넓은 주파수와 듀티 범위를 제공하며, 나머지 타이머는 16비트입니다. 정확한 범위는 해당 MCU 레퍼런스 매뉴얼을 참조하세요.
STM32에서는 동일한 TIM의 여러
PWM채널이 주파수를 공유합니다. 한 인스턴스에서freq()를 설정하면 해당 TIM에 연결된 다른 모든 채널의 출력이 변경됩니다.