classe PWM – modulação por largura de pulso¶
A classe PWM emite um sinal modulado por largura de pulso em um Pin. É a API moderna e multiplataforma para PWM; em câmeras OpenMV STM32 ela encapsula a maquinaria de canais subjacente de pyb.Timer, de modo que cada instância de PWM ocupa um canal de timer.
Exemplo de uso:
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
PWMcontrolandodest(umPinem câmeras OpenMV). Os argumentos por palavra-chave são equivalentes a chamarinit()imediatamente após a construção:freq– frequência do PWM em Hz.duty_u16– ciclo de trabalho como a razãoduty_u16 / 65535.duty_ns– largura de pulso em nanossegundos.invert– seTrue, inverte a polaridade da saída.
No máximo um entre
duty_u16/duty_nspode ser passado de cada vez. Definirfreqpode afetar outras instâncias dePWMque compartilham o mesmo timer subjacente (verdadeiro no STM32 – cada canal de um dado TIM funciona na 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 do PWM. Apenas os argumentos fornecidos são atualizados; os demais mantêm seus valores anteriores. Veja o construtor para o significado de cada argumento.
- freq() int¶
- freq(value: int, /) None
Obtém ou define a frequência do 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 levantarValueErrorse a frequência estiver fora da faixa alcançável pelo timer subjacente.
- duty_u16() int¶
- duty_u16(value: int, /) None
Obtém ou define o ciclo de trabalho como um valor de 16 bits sem sinal na faixa
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 estilo servo, onde a largura de pulso é a quantidade significativa, em vez da razão do ciclo de trabalho.
Limitações¶
A frequência do PWM e a resolução do ciclo de trabalho são interdependentes em todo timer de hardware: em frequências altas, menos passos do contador cabem em um período e, portanto, menos bits baixos de
duty_u16são significativos.A frequência de PWM alcançável depende da fonte de clock do timer e do prescaler. STM32 TIM2 / TIM5 são de 32 bits na maioria das peças (e TIM3 / TIM4 também no STM32N6), oferecendo faixas mais amplas de frequência e ciclo de trabalho; os demais timers são de 16 bits. Veja o manual de referência do MCU correspondente para as faixas exatas.
No STM32, vários canais
PWMno mesmo TIM compartilham uma frequência. Definirfreq()em uma instância altera a saída de todos os outros canais conectados a esse TIM.