Contents

Escurecer um LED e muito mais: PWM no Raspberry Pi

O PWM é algo que todos nós usamos todos os dias, mesmo que não o saibamos. É uma técnica que é simples e incrivelmente útil numa série de aplicações. Melhor ainda, é algo que o seu Raspberry Pi pode fazer sem suar muito. Como? Vamos dar uma olhadela.

O que é PWM?

O termo “Modulação por Largura de Impulso”, embora pareça complexo, refere-se ao ato de alternar rapidamente um sinal elétrico entre os estados ligado e desligado. Esta técnica oferece um meio simples de gerar sinais analógicos variáveis sem a necessidade de hardware adicional, como Raspberry Pi HATs ou componentes externos. De facto, para tarefas como controlar um queimador de fogão, fazer girar um motor ou ajustar o brilho de um LED, um sinal PWM imita eficazmente uma tensão analógica genuína.

Ciclos de trabalho

O processo envolve a alimentação de uma sequência de impulsos numa carga, que é o objeto a ser acionado. Embora esta ação possa parecer rudimentar em si mesma, torna-se significativamente mais significativa quando a duração destes impulsos é modificada. Ao alterar a largura dos impulsos, podemos alterar o período de tempo durante o qual eles permanecem activos ou “ligados”. A proporção de tempo dentro de cada ciclo durante o qual o impulso permanece ativo é referida como o ciclo de trabalho.

Considere um sinal modulado por largura de impulso (PWM) de três volts que tem um ciclo de funcionamento de cinquenta por cento. Neste cenário, a tensão média aplicada através do díodo emissor de luz (LED) corresponderia a um sinal ininterrupto de um volt e meio. Ao aumentar o ciclo de funcionamento, a luminosidade do LED aumentará, ao passo que ao diminuí-lo, a luminosidade diminuirá. Da mesma forma, os sinais de áudio também podem ser gerados utilizando PWM, o que pode levar a interferências com a saída de áudio do Raspberry Pi se outras aplicações PWM estiverem a ser utilizadas simultaneamente.

/pt/images/pwm-anim.gif

PWM no Raspberry Pi

Utilizar o software Pulse Width Modulation (PWM) é uma opção viável para todos os pinos GPIO no Raspberry Pi. No entanto, o acesso à funcionalidade PWM do hardware está limitado a pinos específicos, nomeadamente GPIO12, GPIO13, GPIO18 e GPIO19.

A utilização de software de computador para produzir um sinal pode resultar num maior consumo de recursos da CPU. Enquanto a unidade central de processamento (CPU) está ocupada com esta tarefa, pode ficar preocupada com outras tarefas que podem afetar negativamente a temporização da modulação por largura de pulso (PWM).

Consequentemente, muitas vezes é melhor delegar a tarefa a circuitos especializados. No caso do Raspberry Pi, esse circuito fica dentro do System on Chip que abriga a CPU.O PWM de hardware é geralmente muito mais preciso e conveniente e, portanto, é a opção preferida na maioria dos casos. Se quiserem ter uma ideia do que se passa debaixo do capô do chip Broadcom BCM2711 da Raspberry Pi 4, então podem ver a documentação do BCM2711 . O capítulo 8 cobre as coisas do PWM!

Escurecer um LED

Para que o nosso LED funcione corretamente em conjunto com a Raspberry Pi, vamos ter de fazer algum breadboarding. Este processo implica ligar o LED e uma resistência de regulação de corrente numa configuração em série. É crucial que esta resistência seja incluída, uma vez que serve para evitar que o LED seja sujeito a uma corrente excessiva, protegendo-o assim de uma morte infeliz caracterizada por um odor nocivo que emana de uma desintegração esfumada.

Calcular o valor da resistência

A posição em que uma resistência é ligada a um LED não tem qualquer efeito sobre o seu desempenho; pelo contrário, é o valor da resistência que determina o fluxo de corrente através do dispositivo. Dado que o Raspberry Pi 4 pode fornecer aproximadamente 16 miliamperes (mA) por pino, pode-se utilizar a Lei de Ohm para calcular o valor da resistência necessária para o funcionamento correto.

O princípio acima mencionado dita que a impedância precisa de ser equivalente à diferença de potencial através do condutor em relação à corrente que flui através dele. A tensão fornecida pelo pino GPIO do Raspberry Pi é conhecida como 3,3 volts, enquanto a corrente prescrita é estabelecida como 16 miliamperes, ou 0,016 amperes. Quando estes valores são divididos, o resultado é 206. No entanto, encontrar resistências com especificações tão precisas pode ser um desafio; assim, será utilizada uma alternativa de 220 ohms.

Ligue o terminal positivo (ânodo) da fita LED ao GPIO 18, que corresponde ao pino físico 12 do Raspberry Pi. Além disso, ligue o terminal negativo (cátodo) da tira de LED a qualquer um dos pinos de terra do dispositivo. Lembre-se de incluir uma resistência no circuito, posicionando-a em qualquer ponto do percurso, conforme necessário. Com estes preparativos concluídos, está tudo pronto para prosseguir com o seu projeto.

/pt/images/raspberry-pi-led-circuit.jpg

Implementando PWM no Raspberry Pi

Para fazer o PWM de hardware funcionar no Raspberry Pi, usaremos a biblioteca rpi-hardware-pwm de Cameron Davidson-Pilon , adaptada do código de Jeremy Impson . Isto foi usado no Pioreactor (um bioreactor baseado em Pi) - mas é suficientemente simples para os nossos propósitos.

Vamos começar por aceder ao ficheiro de configuração localizado na pasta “/boot”.Para prosseguir com a nossa tarefa, é necessário acrescentar uma única linha de texto, nomeadamente “dtoverlay=pwm-2chan”. Se precisarmos de utilizar pinos GPIO para além dos atribuídos a 18 e 19, podemos incluir parâmetros suplementares conforme necessário. Neste caso, no entanto, manteremos a simplicidade.

Reinicia a tua Pi e corre:

 lsmod | grep pwm 

O presente comando produz um inventário abrangente de todos os módulos que foram afixados ao componente essencial do sistema operativo, designado por kernel. Para identificar exclusivamente os componentes relativos à modulação por largura de pulso, empregamos a utilização da função grep, que significa “impressora de expressão regular aplicada globalmente”.

Se a presença de “pwm\_bcm2835” dentro dos módulos catalogados indicar uma instalação bem-sucedida, estamos quase concluindo nosso processo de configuração preliminar. O passo final envolve a instalação da biblioteca atual através de um comando a partir do terminal:

 sudo pip3 install rpi-hardware-pwm 

Agora estamos prontos para começar.

/pt/images/a-coder-woman.jpg

Codificar o circuito LED PWM

De facto, está na altura de mergulhar no mundo da programação utilizando a linguagem Python no ambiente Thonny. Para começar, é necessário iniciar a plataforma Thonny e, em seguida, replicar o trecho de código fornecido na sua interface. Quando o código tiver sido introduzido com sucesso, prima o botão “Run” (Executar) para executar o programa.

 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()

De facto, em circunstâncias normais, deve observar-se que o LED se tornará progressivamente mais luminoso até que a variável contador atinja o valor 100. Nessa altura, deixará de brilhar. Este fenómeno deve ser analisado em pormenor.

Estamos a importar a parte pertinente da biblioteca PWM do hardware, juntamente com o módulo de tempo associado, e a definir uma nova variável. O canal pwm\_channel pode ser atribuído a 0 ou 1, sendo que 0 corresponde ao pino 18 da GPIO no Raspberry Pi, enquanto 1 é mapeado para o pino 19 da GPIO.

Pode atribuir-se arbitrariamente um valor de hertz (hz) a uma frequência desejada, embora devam ser consideradas limitações práticas, como a velocidade de processamento da Raspberry Pi. Um valor de hz de 60 não deve apresentar cintilação percetível de modulação de largura de pulso (PWM). É aconselhável começar com um valor de hz extremamente baixo, digamos 10, e aumentá-lo gradualmente até que os impulsos perceptíveis se tornem visíveis. Esta abordagem permite a observação direta do fenómeno em vez de se basear na mera aceitação de afirmações.

A nossa tarefa atual consiste em aumentar gradualmente o ciclo de trabalho do sinal de modulação por largura de impulsos (PWM), variando de zero a cem por cento, utilizando um ciclo for em Python.O parâmetro “time.sleep” pode ser ajustado de acordo com a preferência pessoal ou requisitos específicos, uma vez que o PWM é processado por hardware e funciona independentemente de quaisquer atrasos de software.

Há mais para aprender com PWM

De facto, é louvável que tenha executado com sucesso um programa PWM no seu Raspberry Pi. No entanto, é importante notar que as aplicações potenciais para modulação de largura de pulso são vastamente expansivas quando se utiliza hardware periférico apropriado, como um HAT PWM dedicado. Assim, seria prudente não se limitar à simples iluminação de um único LED, mas sim explorar as possibilidades de controlar motores, codificar informações e gerar sinais de áudio através de vários meios de modulação. As oportunidades disponíveis são, de facto, abundantes e aguardam exploração.