Introdução
A Raspberry Pi pode ser compreendida como um computador disposto em uma única placa, no tamanho de um cartão de crédito que roda um sistema operacional baseado no Linux e permite, desta forma, implementar diversas soluções tecnológicas em sistemas embarcados. O projeto desta placa foi desenvolvido pela Fundação Raspberry Pi, do Reino Unido. Uma das premissas iniciais deste projeto era a de introduzir o ensino de computação no ensino básico, podendo ser uma das ferramentas para o estudo de robótica educacional. Mais detalhes sobre o projeto podem ser obtidos através do seu site, onde, inclusive, há também a lista de distribuidores no qual o leitor poderá adquirir a placa Raspberry Pi.
Em três posts anteriores foi referenciada a modulação PWM. No artigo de Fabio Souza foi abordado o controle de saídas PWM em um Arduino; no artigo de Rodrigo Almeida, com a colaboração de seus alunos, também foi estudado o controle de motores utilizando PWM; No artigo de Vinicius Maciel foi detalhado o uso da biblioteca wiringPi na Raspberry Pi em C.
Para demonstrar o funcionamento do experimento proposto neste artigo foi utilizada a placa Raspberry Pi, modelo B disponível na figura 1.
PWM (Pulse Width Modulation)
O PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma forma de operação onde a frequência de funcionamento é constante, porém a largura do pulso, ou seja, o ciclo ativo (duty cycle) pode alterar, permitindo desta forma com que a Raspberry Pi tenha controle de potência de cargas DC, como, por exemplo, motores, lâmpadas, LED, etc, já que a tensão média aplicada à carga pode variar do mínimo ao máximo. É importante frisar que dependendo da carga será necessário utilizar um driver, fazendo uso de um IGBT, MOSFET ou transistor de potência.
Observe no gráfico da figura 2 um exemplo de sinal PWM.
Neste exemplo a frequência é constante e analisando o período, nota-se que do tempo total, apenas 50% ficam ativos e 50% não. Quando isso ocorre, sabe-se que o ciclo ativo ou duty cycle é de 50%. Caso haja uma carga DC linear conectada a uma destas saídas, pode-se inferir que neste instante, ela estaria na metade de sua potência total se a mesma tiver uma resposta linear.
Na figura 3 outra curva a ser analisada.
Nota-se outro exemplo em que o duty cycle é diferente, ficando 20% ativo e 80% não. Neste caso, considerando novamente uma carga DC linear, a mesma ficaria com a potência de 1/5 (20%) da total.
Preparando a giga de testes
O esquema elétrico da figura 4 permite testar o PWM para controlar a intensidade luminosa de uma LED.
Para acessar a função PWM na Raspberry Pi foi utilizado ao todo 3 funções disponíveis no interpretador que já vem instalado na placa, neste caso o Python, listadas abaixo.
Funções de acesso ao PWM no Python:
pwm=GPIO.PWM(Canal,Frequência) pwm.start(DC Inicial) pwm.ChangeDutyCycle(DC)
A linha pwm=GPIO.PWM(Canal,Frequência) permite criar um objeto chamado pwm que permite o acesso a tais funções, como troca de frequência ou duty cycle (DC). Para isso, é necessário instanciar o objeto, neste caso chamado de pwm, porém outros nomes podem ser utilizados, desde que não sejam palavras reservadas da linguagem Python. O parâmetro Canal define o pino no qual será utilizada a saída de PWM, enquanto que o parâmetro Frequência é relativo à frequência de PWM adotada no projeto.
A linha pwm.start(DC Inicial) inicializa o sinal de PWM, com um duty cycle (DC) inicial, que pode variar da faixa de 0% a 100%.
A função pwm.ChangeDutyCycle(DC) permite que o duty cycle seja alterado no decorrer da execução do programa, na faixa de 0% a 100%. Como exemplo, observe o código abaixo, que gera uma frequência de 100 Hz com duty cycle de 50%.
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(23,GPIO.OUT) pwm=GPIO.PWM(23,100) #Configura para 100 Hz pwm.start(50) #Inicia com DC=50%
A figura 5 foi obtida de um osciloscópio digital funcionando de acordo com o programa anterior.
O programa a seguir deixa o ciclo ativo em 20% usando a mesma frequência.
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(23,GPIO.OUT) pwm=GPIO.PWM(23,100) #Configura para 100 Hz pwm.start(20) #Inicia com DC=20%
A figura 6 foi obtida de um osciloscópio digital funcionando de acordo com o programa anterior.
O programa a seguir permite variar de 0% a 100% a intensidade do LED com intervalo de 100 ms entre cada passo, já que uma variável é utilizada dentro de um loop for para fazer tal contagem.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(23,GPIO.OUT)
pwm=GPIO.PWM(23,100) #Configura para 100 Hz
pwm.start(0) #Inicia com DC=0%
while(1):
for dc in range(0,100,1):
pwm.ChangeDutyCycle(dc)
time.sleep(0.1)
Conclusão
A Raspberry Pi oferece recursos computacionais avançados em uma placa de dimensões de um cartão de crédito. Neste artigo, procurou-se estudar a função PWM, porém inúmeras possibilidades estão disponíveis como porta serial, acesso a I/Os, etc. Este sistema embarcado pode ser utilizado em diversas aplicações, obtendo grande espaço no mercado de automação. Em breve, mostrarei outros recursos desta placa, de modo a deixar o leitor a par desta novidade.
Saiba mais sobre PWM
– Gerando PWM com a Raspberry PI
– Ponte H com bootstrap para acionamento de motores DC
Referências
– SOUZA, V.A. Aplicações Eletrônicas na Raspberry Pi. Disponível em: <https://clubedeautores.com.br/>.









Muito legal seu artigo, parabéns!