28 de julho de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Laboratório Maker 04: Gerador de sinal PWM

Gerador de sinal PWM

O gerador de sinal PWM da UsinaInfo é a quarta ferramenta que tive realmente a intenção de apresentar, porque nesse ponto já será possível relacionar as ferramentas anteriores para mais testes. E vejam só: sem nenhuma MCU ou programação, conseguiremos produzir diversão para os fins de semana, além de usar as ferramentas para análises reais. Mas cada uma delas será detalhada mais e mais, gradativamente, para mostrar as possibilidades e não misturar as informações. Agora, relacionado à estrela do artigo de hoje, vamos iniciar com o conceito para depois poder comparar com a qualidade do produto.

Conceito do sinal PWM

Primeiro, o acrônimo significa “Pulse Width Modulation”, que na tradução direta é “modulação de largura de pulso”. No PWM temos 2 parâmetros que podem (ou não) ser configurados: a frequência e o comprimento de cada pulso.

Nas placas Arduino a frequência varia conforme os modelos. Vamos usar como base o Arduino Due, porque é o único que tem 1000Hz de frequência e isso facilita um bocado na explicação.

Se quiser saber as frequências de outras placas, visite o link oficial relacionado no site do Arduino.

O que é a frequência?

A frequência é a quantidade de pulsos que pode ser gerado em 1 segundo. No caso do Due, mil vezes. No Arduino UNO, Nano e Mini, a frequência é de 490Hz, mas nos pinos 5 e 6 tem um duty cicle mais alto do que o esperado, por causa da interação com as funções millis() e delay(), que compartilham o mesmo timer usado para gerar esses PWMs. Isso pode ser mais facilmente percebido em duty cycles baixos, que podem resultar em um absoluto nada na saída. Mas e o duty cycle?

O que é duty cycle?

“Duty cycle” ou, “ciclo de trabalho” é o tempo que o nível alto permanecerá ativo dentro do intervalo de tempo da frequência. Esse valor deve ser considerado em porcentagem, pois de outro modo não casaria:

FREQUENCIA = 1000Hz
DUTY CYCLE = 2ms

Se fôssemos considerar o desejo de ter pulsos altos de 2ms em uma frequência de 1000 vezes, não haveria como comportar. Para ter 2ms de nível alto por 1000 vezes seriam necessários 2 segundos. Agora, se considerarmos que queremos pulsos de 2ms, bastaria dividir a frequência pelo número de pulsos desejados:

1000/2 = 500

Ok, conseguimos 500 pulsos de 2ms em um segundo. Mas se for para fazer isso, não seria melhor usar logo um pino digital em HIGH? Porque isso representa 100% do espaço intervalar da frequência, ou seja, não há espaço para nível baixo. Então, se quisermos intervalos de pulso proporcionais, bastaria dividir o tempo de pulso por 2, assim metade ficaria pro nível alto e metade ficaria para o nível baixo:

500/2 = 250

Nesse caso, teríamos 250 pulsos em 1 segundo com intervalos de 2ms, que ocuparia 500ms em nível alto e assim sobra 500ms pro nível baixo. Mas é muito melhor fazer isso em porcentagem:

Gerador de sinal PWM

Se pensarmos na porcentagem do tempo que o sinal deve ficar alto, acabamos não nos preocupando com a frequência, mas isso serve bem para um efeito em LED ou coisas simples. Há casos que pode ser necessário fazer uma modulação.

Pensando no LED, podemos controlar sua luminosidade com PWM. Nos momentos que o sinal estiver baixo será imperceptível o desligamento, não só por causa do tempo curto, que pode ser insuficiente para o desligamento completo do LED, mas também pelo chamado “POV” – Persistence Of Vision ou, “persistência de visão”, em português. Isso porque nosso cérebro demora a processar a ausência da luz nos intervalos curtos de uma modulação PWM, exceto, claro, se esse pulso seja tão intervalar quanto o necessário para que seja percebido seu desligamento.

Para que serve o PWM?

Além do já citado controle do LED, serve para controlar motores DC, AC e servo-motores, por exemplo. Claro que nesse caso outros periféricos são necessários, dependendo da aplicação: transistores e pontes H, fora os componentes mais primitivos.

Dá pra fazer um PWM com NE555, que é um fantástico componente do qual já escrevi alguns artigos:

Vale a pena ler os artigos supracitados, minha sensação é de um “nano-computador programável por hardware”.

Já o gerador de sinal PWM serve tanto para uma função fixa que dependa de PWM, como para fazer testes de aferição em outros equipamentos. Serve também para experimentação prévia de um dado sinal para aplicação em um projeto final a posteriori.

Mas apesar da beleza envolta em meu parágrafo sobre a consideração do pulso em %, não é de todo verdade. Como citei, para controlar luminosidade de LED é fácil, mas para servo motor “tem” um tempo específico, e é irremediável. Quando pesquisando por uma imagem para exemplificar, achei uma que considero a melhor de todas, principalmente por mostrar também outro tipo de motor e seu pulso:

Será que conseguimos esse ajuste para testar um servo SG90? Veja no vídeo, com link no final do artigo.

PWM no Arduino

O Arduino tem registradores de 8 bits, permitindo controlar o duty cycle com uma divisão de 256 valores (0 à 255), sendo que para 50% de duty cycle devemos usar o valor 127.

Se não sabia desses detalhes todos, então agora já há argumentos suficientes para se agradar com esse gerador de sinal PWM de baixíssimo custo e considerá-lo em seu laboratório maker!

Características do gerador de sinal PWM

Esse pequeno dispositivo que cabe na palma da mão tem impressionantes características que colocam qualquer Arduino no chinelo!

  • Alta precisão – não haverá falhas, de modo que pode ser usado para calibrar outros dispositivos ou aferir a capacidade de leitura deles.
  • Comunicação serial TTL.
  • Frequência de 1Hz a aproximadamente 150KHz – KILO HERTZ!
  • duty cycle de 0 à 100%, com passos de 1.
  • Seleção de parâmetro de ajuste pelo pressionamento do encoder rotativo.
  • Ajuste fino de duty cycle, permitindo ajuste decimal de 0.1%.
  • Tela LCD.
  • Tensões de 3V3 a 30V!
  • Amplitude de saída igual a da tensão de entrada – isso é, se entrar com 24V, a amplitude de saída será 24V.
  • Modo de ajuste fino: 1Hz ~ 150KHz / 1Hz ~15KHz.
  • Salvamento automático do último parâmetro selecionado.

É ou não é um monstrinho?

Para alternar entre o modo simples e o modo de ajuste fino, pressione o encoder rotativo por 5 segundos.

Para travar o parâmetro, pressione por 2 segundos.

Para alternar entre os parâmetros, pressione brevemente.

Para comunicação serial, veja o link do produto na UsinaInfo através desse link e confira a documentação.

Vídeo demonstrativo

Neste vídeo estou aproveitando para fazer o teste com uma ferramenta já apresentada em outro artigo da série Laboratório Maker, que é o analisador lógico e de protocolos, esse último também da UsinaInfo. Já monte seu pacote, porque senão é capaz do frete bater o produto!

Até a próxima!

 

Autor: Djames Suhanko
Revisão: Ricardo Amaral de Andrade