Aprenda como controlar o brilho de um LED conectado a um Raspberry Pi usando PWM.

PWM é algo que todos usamos todos os dias, mesmo que não saibamos disso. É uma técnica simples e incrivelmente útil em diversas aplicações. Melhor ainda, é algo que o seu Raspberry Pi pode fazer sem suar a camisa. Como? Vamos dar uma olhada.

O que é PWM?

Conforme a terminologia, "Modulação por largura de pulso" parece muito sofisticado. Mas tudo o que estamos falando aqui é desligar e ligar novamente um sinal elétrico - extremamente rápido. Por que podemos querer fazer isso? Simplesmente porque é uma forma muito fácil de simular um sinal analógico variável, sem recorrer a Chapéus Raspberry Pi, complementosou circuitos extras. Para certas aplicações, como aquecer um fogão, acionar um motor ou diminuir a intensidade de um LED, um sinal PWM é literalmente indistinguível de uma tensão analógica “real”.

Ciclos de trabalho

Então, temos uma série de pulsos sendo alimentados em uma carga (aquilo que estamos acionando). Isso por si só não é tão útil – até começarmos a alterar (ou modular) a largura desses pulsos. A fase "ligada" de um determinado período liga-desliga pode ocupar de 0 a 100% do ciclo total. Chamamos essa porcentagem de

instagram viewer
ciclo de trabalho.

Por exemplo, suponha que temos um sinal PWM de 3V com um ciclo de trabalho de 50%. A quantidade média de energia que passa pelo LED seria equivalente a um sinal sempre ligado de 1,5V. Aumente o ciclo de trabalho e o LED ficará mais brilhante; diminua e o LED escurece. Podemos gerar áudio usando o mesmo método – e é por isso que a saída de áudio do seu Raspberry Pi pode parar de funcionar se você estiver usando PWM para outras coisas.

PWM no Raspberry Pi

Você pode usar o software PWM em cada pino GPIO do Raspberry Pi. Mas o PWM de hardware está disponível apenas em GPIO12, GPIO13, GPIO18, e GPIO19.

Qual é a diferença? Bem, se você for usar software para gerar o sinal, estará consumindo ciclos de CPU. No entanto, sua CPU pode ter coisas melhores para fazer do que dizer a um LED para desligar e ligar várias centenas de vezes por segundo. Na verdade, ele pode ficar distraído e atolado em outras tarefas, o que pode atrapalhar seriamente os tempos do PWM.

Conseqüentemente, muitas vezes é melhor delegar a tarefa a circuitos especializados. No caso do Raspberry Pi, esse circuito fica dentro o sistema no chip que abriga a CPU. O PWM de hardware costuma ser muito mais preciso e conveniente e, portanto, é a opção preferida na maioria dos casos. Se você quiser ter uma ideia do que está acontecendo nos bastidores do chip Broadcom BCM2711 do Raspberry Pi 4, você pode dar uma olhada a documentação do BCM2711. O Capítulo 8 aborda o assunto PWM!

Escurecimento de um LED

Para que nosso LED funcione com nosso Raspberry Pi, precisaremos fazer alguns testes. Isso significa dois componentes: o próprio LED e um resistor limitador de corrente, que conectaremos em série com ele. Sem o resistor, seu LED corre o risco de morrer em uma nuvem de fumaça fétida se muita corrente passar por ele.

Calculando o valor do resistor

Não importa a qual extremidade do LED você conecta o resistor. O que importa é o valor do resistor. O Raspberry Pi 4 pode fornecer cerca de 16 miliamperes por pino. Então nós podemos use a lei de Ohm para calcular o valor do resistor necessário.

A referida lei afirma que a resistência deve ser igual à tensão sobre a corrente. Sabemos a tensão que sai do pino GPIO do Pi (3,3 V) e qual deve ser a corrente (16 miliamperes ou 0,016 amperes). Se dividirmos o primeiro pelo último, obtemos 206,25. Agora, como você terá dificuldade para encontrar resistores desse valor, vamos usar 220 ohms.

Conecte o ânodo do LED (perna longa) ao GPIO18 (que é o pino físico 12 no Raspberry Pi). Conecte o cátodo (perna curta) a qualquer um dos pinos de aterramento do Pi. Não se esqueça do resistor, em algum lugar ao longo do caminho. Agora você está pronto para começar!

Implementando PWM no Raspberry Pi

Para fazer o PWM de hardware funcionar no Raspberry Pi, usaremos o biblioteca rpi-hardware-pwm de Cameron Davidson-Pilon, adaptado de código de Jeremy Impson. Isto tem sido usado no Pioreator (um biorreator baseado em Pi) – mas é bastante simples para nossos propósitos.

Primeiro, vamos edite o config.txtarquivo, encontrado no /boot diretório. Só precisamos adicionar uma linha: dtoverlay=pwm-2chan. Se quiséssemos usar pinos GPIO diferentes de 18 e 19, poderíamos adicionar alguns argumentos adicionais aqui. Por enquanto, vamos manter as coisas simples.

Reinicie seu Pi e execute:

lsmod | grep pwm

Este comando lista todos os módulos carregados na parte central do sistema operacional, chamada kernel. Aqui, estamos filtrando-os para encontrar apenas o material PWM, usando o grep (que é o comando "impressão de expressão regular global").

Se pwm_bcm2835 aparecer entre os módulos listados, então estamos no caminho certo. Estamos quase terminando de preparar! Resta apenas instalar a biblioteca real. No terminal, execute:

sudo pip3 install rpi-hardware-pwm

Agora estamos prontos para começar.

Codificando o circuito LED PWM

É hora de sujar as mãos com um pouco de codificação em Python. Abra o Thonny e copie o código a seguir. Então bata Correr.

from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

Se tudo correr bem, você verá o LED ficar gradualmente mais brilhante até o eu variável de contador atinge 100. Então ele será desligado. O que está acontecendo aqui? Vamos examinar isso.

Estamos importando a parte relevante da biblioteca PWM de hardware (junto com o tempo módulo) e declarando uma nova variável. Podemos definir o canal_pwm para 0 ou 1, que correspondem respectivamente aos pinos 18 e 19 do GPIO no Pi.

O Hz valor que podemos definir para qualquer frequência que desejarmos (embora estejamos limitados pela velocidade do clock do Pi). A 60 Hz, não devemos ver nenhuma oscilação do PWM. Mas pode ser uma boa ideia começar com um valor muito baixo (como 10) e aumentar gradualmente as coisas. Faça isso e você poderá ver os pulsos acontecendo. Não acredite apenas na nossa palavra!

Trabalhamos nosso ciclo de trabalho (eu) de 0 a 100 usando um loop for do Python. Vale a pena notar que podemos definir o hora de dormir argumento pelo tempo que quisermos - como o PWM está sendo gerenciado no hardware, ele será executado nos bastidores, por quanto tempo pedirmos ao programa para esperar.

Há mais para aprender com o PWM

Parabéns! Você escreveu seu primeiro programa PWM. Mas, como costuma acontecer com o Raspberry Pi, há muito que você pode fazer com essas coisas, especialmente se você complementar seu Raspberry Pi com o PWM HAT certo. Portanto, não se contente com um pequeno LED. Você pode usar esse novo poder para controlar motores, codificar mensagens e gerar tons de sintetizador. Um mundo de modulação o aguarda!