classe PWM – modulação por largura de pulso¶
A classe PWM emite um sinal modulado por largura de pulso num Pin. É a API moderna e multiplataforma para PWM; em câmaras OpenMV STM32 encapsula a maquinaria de canal pyb.Timer subjacente, pelo que cada instância de PWM ocupa um canal de temporizador.
Exemplo de utilização:
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()
Construtores¶
- class machine.PWM(dest: Pin | int, *, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None, invert: bool = False)¶
Constrói um objeto
PWMque controladest(umPinem câmaras OpenMV). Os argumentos por palavra-chave são equivalentes a chamarinit()imediatamente após a construção:freq– frequência PWM em Hz.duty_u16– ciclo de trabalho como rácioduty_u16 / 65535.duty_ns– largura de pulso em nanossegundos.invert– seTrue, inverte a polaridade da saída.
No máximo um de
duty_u16/duty_nspode ser passado de cada vez. Definirfreqpode afetar outras instâncias dePWMque partilham o mesmo temporizador subjacente (verdadeiro em STM32 – todos os canais de um determinado TIM funcionam à mesma frequência).Métodos¶
- init(*, freq: int | None = None, duty_u16: int | None = None, duty_ns: int | None = None) None¶
Reconfigura a saída PWM. Apenas os argumentos fornecidos são atualizados; os restantes retêm os seus valores anteriores. Consulte o construtor para o significado de cada argumento.
- freq() int¶
- freq(value: int, /) None
Obtém ou define a frequência PWM.
Sem argumento, retorna a frequência atual em Hz.
Com um único argumento
value, define a frequência para esse valor em Hz. Pode lançarValueErrorse a frequência estiver fora do intervalo atingível pelo temporizador subjacente.
- duty_u16() int¶
- duty_u16(value: int, /) None
Obtém ou define o ciclo de trabalho como um valor sem sinal de 16 bits no intervalo
0–65535.Sem argumento, retorna o ciclo de trabalho atual.
Com um único argumento
value, define o ciclo de trabalho paravalue / 65535do período.0é sempre baixo,65535é sempre alto.
- duty_ns() int¶
- duty_ns(value: int, /) None
Obtém ou define a largura de pulso diretamente em nanossegundos.
Sem argumento, retorna a largura de pulso atual.
Com um único argumento
value, define o tempo alto de cada ciclo paravaluenanossegundos. Útil para saídas no estilo servo, onde a largura de pulso é a grandeza significativa em vez do rácio de ciclo de trabalho.
Limitações¶
A frequência PWM e a resolução do ciclo de trabalho são interdependentes em cada temporizador de hardware: a altas frequências, menos passos do contador cabem num período e, portanto, menos bits baixos de
duty_u16são significativos.A frequência PWM atingível depende da fonte de relógio e do prescaler do temporizador. Os TIM2 / TIM5 do STM32 são de 32 bits na maioria das variantes (e também TIM3 / TIM4 no STM32N6), proporcionando intervalos mais amplos de frequência e ciclo de trabalho; os temporizadores restantes são de 16 bits. Consulte o manual de referência do MCU relevante para os intervalos exatos.
Em STM32, múltiplos canais
PWMno mesmo TIM partilham uma frequência. Definirfreq()numa instância altera a saída de todos os outros canais associados a esse TIM.