- O que é um sinal PWM?
- Como converter o sinal PWM em tensão analógica?
- Diagrama de circuito:
- Programando o MSP para o sinal PWM:
- Controlando o brilho do LED com PWM:
Este tutorial faz parte de uma série de tutoriais do LaunchPad MSP430G2 em que estamos aprendendo a usar o LaunchPad MSP430G2 da Texas Instruments. Até agora, aprendemos os fundamentos da placa e cobrimos como ler a tensão analógica, fazer a interface do LCD com o MSP430G2 etc. Agora vamos prosseguir com a próxima etapa de aprendizado sobre o PWM no MSP430G2. Faremos isso controlando o brilho de um LED variando o potenciômetro. Assim, o potenciômetro será acoplado a um pino analógico do MSP430 para leitura de sua tensão analógica, portanto, é recomendável conhecer o tutorial do ADC antes de prosseguir.
O que é um sinal PWM?
A modulação por largura de pulso (PWM) é um sinal digital mais comumente usado em circuitos de controle. Este sinal é definido como alto (3,3 V) e baixo (0 V) em um tempo e velocidade predefinidos. O tempo durante o qual o sinal permanece alto é chamado de “tempo de ativação” e o tempo durante o qual o sinal permanece baixo é chamado de “tempo de desligamento”. Existem dois parâmetros importantes para um PWM, conforme discutido abaixo:
Ciclo de trabalho do PWM:
A porcentagem de tempo em que o sinal PWM permanece ALTO (no tempo) é chamada de ciclo de serviço. Se o sinal estiver sempre LIGADO, ele está em 100% do ciclo de trabalho e se estiver sempre desligado, ele está em 0% do ciclo de trabalho.
Ciclo de trabalho = tempo para ligar / (tempo para ligar + tempo para desligar)
Frequência de um PWM:
A frequência de um sinal PWM determina a rapidez com que um PWM completa um período. Um período é LIGADO e DESLIGADO completo de um sinal PWM, conforme mostrado na figura acima. Em nosso tutorial, a frequência é 500 Hz, pois é o valor padrão definido pelo Energia IDE.
Existe uma infinidade de aplicações para sinais PWM em tempo real, mas para se ter uma ideia, o sinal PWM pode ser usado para controlar servo motores e também pode ser convertido para tensão analógica que pode controlar o brilho do brilho de um LED. Vamos aprender um pouco sobre como isso pode ser feito.
Aqui estão alguns exemplos de PWM com outro microcontrolador:
- Gerando PWM usando Microcontrolador PIC com MPLAB e XC8
- Controle servo motor com Raspberry Pi
- Dimmer LED baseado em Arduino usando PWM
Verifique todos os projetos relacionados a PWM aqui.
Como converter o sinal PWM em tensão analógica?
Para sinais PWM para tensão analógica, podemos usar um circuito chamado filtro RC. Este é um circuito simples e mais comumente usado para essa finalidade. O circuito inclui apenas um resistor e um capacitor em série, conforme mostrado no circuito abaixo.
Então o que basicamente acontece aqui é que quando o sinal PWM está alto, o capacitor carrega através do resistor e quando o sinal PWM fica baixo, o capacitor descarrega através da carga armazenada. Desta forma, teremos sempre uma tensão constante na saída que será proporcional ao ciclo de trabalho do PWM.
No gráfico mostrado acima, o amarelo é o sinal PWM e o azul é a tensão analógica de saída. Como você pode ver, a onda de saída não será uma onda DC pura, mas deve funcionar muito bem para nossa aplicação. Se você precisa de onda DC pura para outro tipo de aplicação, deve projetar um circuito de comutação.
Diagrama de circuito:
O diagrama do circuito é bastante simples; só tem um potenciômetro e um resistor e um capacitor para formar um circuito RC e o próprio Led. O potenciômetro é usado para fornecer uma tensão analógica com base na qual o ciclo de trabalho do sinal PWM pode ser controlado. A saída do potenciômetro é conectada ao Pino P1.0, que pode ler tensões analógicas. Em seguida, temos que produzir um sinal PWM, o que pode ser feito usando o pino P1.2, este sinal PWM é então enviado para o circuito do filtro RC para converter o sinal PWM em Tensão Analógica que é então fornecida ao LED.
É muito importante compreender que nem todos os pinos da placa MSP podem ler a tensão analógica ou gerar pinos PWM. Os pinos específicos que podem fazer as tarefas específicas são mostrados na figura abaixo. Sempre use isso como uma orientação para selecionar seus pinos para programação.
Monte o circuito completo conforme mostrado acima, você pode usar uma placa de ensaio e alguns fios de jumper e fazer as conexões facilmente. Uma vez que as conexões foram feitas, minha placa ficou como mostrado abaixo.
Programando o MSP para o sinal PWM:
Assim que o hardware estiver pronto, podemos começar com nossa programação. A primeira coisa em um programa é declarar os pinos que vamos usar. Aqui, usaremos o pino número 4 (P1.2) como nosso pino de saída, pois ele tem a capacidade de gerar PWM. Portanto, criamos uma variável e atribuímos o nome do pino para que seja fácil referenciá-lo posteriormente no programa. O programa completo é fornecido no final.
int PWMpin = 4; // Estamos usando o 4º pino no módulo MSP como pino PWM
Em seguida, entramos na função de configuração . Qualquer código escrito aqui será executado apenas uma vez, aqui declaramos que estamos usando este 4º pino como um pino de saída, já que PWM é uma funcionalidade de saída. Observe que usamos a variável PWMpin aqui em vez do número 4 para que o código pareça mais significativo
void setup () { pinMode (PWMpin, OUTPUT); // O PEMpin é definido como Outptut }
Finalmente, entramos na função de loop . Tudo o que escrevemos aqui é executado repetidas vezes. Neste programa, temos que ler a tensão analógica e gerar um sinal PWM de acordo e isso tem que acontecer repetidamente. Portanto, primeiro vamos começar lendo a tensão analógica do pino A0, uma vez que conectamos o potenciômetro a ele.
Aqui estamos lendo o valor usando a função AanalogRead , esta função retornará um valor de 0 a 1024 com base no valor da tensão aplicada ao pino. Em seguida, armazenamos esse valor em uma variável chamada "val", conforme mostrado abaixo
int val = analogRead (A0); // leia o valor ADC do pino A0
Temos que converter os valores de 0 a 1024 do ADC para valores de 0 a 255 para dar à função PWM. Por que devemos converter isso? Eu direi isso em breve, mas por agora apenas lembre que temos que nos converter. Para converter um conjunto de valores em outro conjunto de valores, Energia tem uma função de mapa semelhante ao Arduino. Portanto, convertemos os valores de 0-1204 em 0-255 e salvamos de volta na variável “val”.
val = mapa (val , 0, 1023, 0, 255); // O ADC dará um valor de 0-1023 convertê-lo para 0-255
Agora temos um valor variável de 0-255 com base na posição do potenciômetro. Tudo o que precisamos fazer é usar este valor no pino PWM. Isso pode ser feito usando a seguinte linha.
analogWrite (PWMpin, val); // Escreva esse valor no pino PWM.
Vamos voltar à pergunta por que 0-255 é gravado no pino PWM. Este valor 0-255 decide o ciclo de trabalho do sinal PWM. Por exemplo, se o valor do sinal for 0, isso significa que o ciclo de trabalho é 0% para 127 é 50% e para 255 é 100%, exatamente como o que é mostrado e explicado no início deste artigo.
Controlando o brilho do LED com PWM:
Depois de compreender o hardware e o código, é hora de se divertir um pouco com o funcionamento do circuito. Faça o upload do código para a placa MSP430G2 e gire o botão do potenciômetro. Conforme você gira o botão a tensão no pino 2 irá variar que será lida pelo microcontrolador e de acordo com a tensão os sinais PWM serão gerados no pino 4. Quanto maior a tensão, maior será o ciclo de trabalho e vice-versa.
Este sinal PWM é então convertido em voltagem analógica para acender um LED. O brilho do LED é diretamente proporcional ao ciclo de trabalho do sinal PWM. Além do LED na placa de ensaio você também pode notar o LED smd (cor vermelha) variando seu brilho semelhante ao do led da placa de ensaio. Este LED também está conectado ao mesmo pino, mas não tem uma rede RC, então está piscando muito rápido. Você pode sacudir o quadro em uma sala escura para verificar sua natureza trêmula. O trabalho completo também pode ser conferido no vídeo abaixo.
Isso é tudo por enquanto pessoal, nós aprendemos a usar sinais PWM na placa MSP430G2, em nosso próximo tutorial vamos aprender como é fácil controlar um servo motor usando os mesmos sinais PWM. Se você tiver alguma dúvida, poste-as na seção de comentários abaixo ou nos fóruns de ajuda técnica.