PWM - Simulando sinais analogicos

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