O PWM (Pulse Width Modulation) é uma técnica utilizada por microcontroladores que permite simular um sinal analógico através de um sinal digital. Nesta técnica, o controlador gera uma onda quadrada cujo valor de tensão varia entre HIGH (5V) e LOW (0V) por um período de tempo predeterminado (duty cycle). Ao variar um sinal entre HIGH e LOW a tensão final do sinal será uma média entre o tempo que o sinal ficará em HIGH e o tempo que o sinal ficará em LOW, por exemplo, se o PWM tiver um duty cicle de 50% a tensão será de 2,5 V. Para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:
Vout = (duty cycle/100)* Vcc
Onde:
Vout - tensão de saída.
Duty cycle - valor do ciclo ativo do PWM em %;
Vcc - tensão de alimentação.
Na figura 1, é possível observar a modulação da onda quadrada para diferentes duty cycles:
![]() |
Figura 1. Moduação por largura de pulso - crédito da imagem |
Para usar o PWM com saída de dados será necessário utilizar a função AnalogWrite onde a sintaxe da função é dada por:
analogWrite(pin, valor);
Onde:
pin: representa o numero da porta que será usando pelo PWM
valor: o rendimento do ciclo: entre 0 (sempre desligado) e 255 (sempre ligado).
No Arduino, as portas que utilizam PWM são identificadas por um " ~ " conforme indicado na figura 2 onde um Arduino Uno será usado na simulação.
![]() |
Figura 2. Pinos que usam PWM no Arduino UNO - Pinos indicados pelo "~" |
O PWM pode ser usado para diversas aplicações, como por exemplo:
- Variação da luminosidade de leds;
- Geração de sinais de áudio. (clique aqui para ouvir uma musica usando buzzer e PWM)
- Controle de velocidade de motores;
Com base no exemplo da postagem "Motor DC - Como controlar via Arduino", vamos variar a velocidade de um motor CC com base no PWM. Neste projeto, o motor irá girar somente num sentido e a velocidade será incrementa via porta serial quando o usuário digitar "+". A Figura 3 abaixo mostra o circuito criado para essa experiência.
![]() |
Figura 3. Circuito de controle do motor com controle de velocidade por PWM |
Para o circuito da Figura 3, foi implementado o seguinte código:
int motor = 9; // Variável criada para guardar numero da porta PWM que controlará o motor
char op; // Variável para incrementar ou decrementar velocidade do motor
int velocidade=0; // Variável para controlar velocidade do motor valor inicial 0 (motor desligado)
void setup()
{
Serial.begin(9600); // inicializa a comunicação serial com Baud rate de 9600
pinMode(motor, OUTPUT);
}
void loop()
{
analogWrite(motor, velocidade); // Saída de dados PWM usando analogWrite
op=Serial.read(); // Lendo caractere da porta serial
if(op=='+'&& velocidade <250) // Se tecla + foi apertada E a velocidade < 250, aumeta velocidade
{
Serial.println(velocidade); // exibi valor da velocidade na serial antes de incrementar
velocidade=velocidade+50; // velocidade será aumentada PWM 50
Serial.println(velocidade); // exibi valor da velocidade na serial depois de incrementar
}
}
Agora Pratique:
Exercício 1. Reproduza o esquema da Figura 3 e faça uma função que acelere e desacelere o motor usando as teclas "+" e "-"....
Exercício 2. Com base na Figura 4, reproduza a experiência realizada na postagem "Motor DC - Como controlar via Arduino". Assim como no exercício 1, o motor deve ser acelerado e desacelerado usando as teclas "+" e "-"
![]() |
Figura 4. Circuito para controle de motor CC usando ponte H (L293D) |
Exercício 3. Reproduza o circuito da Figura 4 e adicione 2 botões. Ao inves da velocidade do motor ser controlada via serial, o controle será feito pelos botões.....
Ainda tá com duvida, curta nossa pagina no facebook no link abaixo e poste sua duvida lá.
Nenhum comentário:
Postar um comentário