Manual
do
Maker
.
com
PWM na RPi Pico é moleza, como tudo em Python. E vamos ver nesse artigo como usar PWM na RPi Pico com o firmware MicroPython, que faz parte dessa primeira série com Pico, que inclusive tem uma playlist própria no canal. Só tem uma coisa; com MicroPython temos uma liberdade extra, então temos que saber bem o conceito pra usar direito.
O duty cycle é a fração de um período de sinal. Comumente o duty cycle é expressado em porcentagem. O período é o intervalo de tempo para a conclusão de 1 ciclo. Trocando em miúdos, o duty cycle determina o tempo de duração do estado do pino em 1 (ou "HIGH", ou "LIGADO"). Por essa razão ele normalmente é expressado em porcentagem, já que o limite é finito dentro do tempo.
A frequência é o número de vezes que se repete um evento dentro de um período. Isso é pra tudo; por exemplo um motor DC com 1000RPM: A frequência é de 1000 voltas por minuto. Isso representará o número de vezes em que o estado deverá mudar de 0 para 1 no PWM na RPi Pico.
Supondo que a frequência seja de 100 vezes por segundo, não podemos especificar um duty cycle com intervalos de, por exemplo, 100ms. Não cabe 100 vezes o desligamento de intervalos de 100ms em 1000ms. Por essa razão é comum expressar o duty cycle em porcentagem.
Podemos variar os dois para ter um controle melhor, como é o caso do servo motor. Inclusive, recomendo esse vídeo com gerador PWM. Ou se prefere uma boa leitura, esse artigo bem detalhado sobre PWM.
Na RPi Pico podemos fazer ajustes finos, variando a frequência, o ciclo de trabalho e o atraso. É bom fazer umas experimentações para perceber o que dá pra fazer. No livro tem um exemplo funcional, mas não considero claro. Dei uma pequena adaptada, sem mexer na lógica original, apenas para fazer a execução a partir da IDE Thonny:
from time import sleep
from machine import Pin, PWM
def runNow():
pwm = PWM(Pin(25))
pwm.freq(1000)
duty = 0
direction = 1
tudo = 0
for _ in range(8 * 256):
duty += direction
if duty > 255:
duty = 255
direction = -1
elif duty < 0:
duty = 0
direction = 1
pwm.duty_u16(duty * duty)
tudo = duty * duty
if tudo > 60000:
print(tudo)
sleep(0.001)
if **name** == '**main**':
runNow()
Clicando no botão de executar ele deverá rodar e com isso será feito um fade do LED builtin. Repare no código que tem um print do duty, que era pra ver até onde ia, pois não estava acreditando no valor: 60025, rodando esse código.
Se ainda não tem a sua, aproveite o preço na Robocore e pegue sua RPi Pico já para acompanhar os artigos. Mesmo que não curta Python, em breve começaremos a série em C. Imperdível! Se perdeu o "fio da meada", dê uma verificada nesses artigos sobre RPi Pico.
As frequências que consegui rodar foram 8 de mínima e 1000 de máxima. Vou juntar mais uns dois artigos e faço um vídeo mostrando tudo. Por enquanto são 5 vídeos disponíveis na playlist do Raspberry Pi Pico, não perca; e se inscreva no canal!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.