Ler tensões analógicas com microcontroladores é relativamente simples, a maioria dos microcontroladores de baixo custo têm periférico para leitura de tensão. Já obter valores analógicos (saídas) a partir destes mesmos processadores é bem mais específico, e merece um pouco mais de estudo para sua execução.
   A maneira mais direta de se obter um valor analógico a partir de um microcontrolador é utilizando um periférico conhecido com DAC (Digital-to-Analog converter) que se encarrega de converter sinal digital em analógico de forma independente; microcontroladores como o Arduino DUE e Arduino ZERO possuem módulos de DAC integrados, porém outros como o Arduino UNO, Nano, Micro, Leornardo e Mega Não possuem este módulo.
   A maneira mais direta e fácil de se criar uma saída analógica em microcontroladores que não a possuem é através de sinais PWM (Pulse-width modulation, ou “modulação por largura de pulso”), pois o PWM é um sinal digital pulsante cuja característica é variar o período em nível alto ou baixo, e não a frequência de oscilação.

   Obsevando a figura acima é possível concluir que a primeira onda é quadrada, está 50% do tempo em nível baixo e 50% em nível alto; isto faz com que a tensão media deste sinal seja 50% da tensão total. Já o sinal de baixo (retangular) está apenas 20% do tempo em nível alto, fazendo com que sua tensão média seja apenas 20% da tensão total. 
   Este efeito de variação de período (e não frequência) é a base para geração de um sinal analógico, porém não pode ser utilizado sem uma filtragem do sinal: uma saída analógica geralmente é em tensão contínua, não variando igual á imagem acima. Para resolver este problema é preciso utilizar um filtro passa-baixas, que deixa “passar” apenas frequências baixas (abaixo de um certo valor).
   A tensão “V average” (ou tensão média) na imagem acima é obtida após o sinal retangular mostrado ter passado pelo filtro passa-baixas. Na imagem abaixo é mostrado este filtro, que depende apenas de dois componentes: um resistor e um capacitor. 
   Você não precisa ser expert em eletrônica para calcular os valores do resistor e capacitor do filtro acima, basta utilizar Esta ou Esta ferramenta online e gratuíta. Uma informação básica solicitada nas duas ferramentas é a frequência do PWM, que no caso do Arduino uno é 490 Hz na maioria dos pinos, porém os pinos 5 e 6 funcionam á 980 Hz.
  A forma como os filtros passa-baixas funcionam é atenuando o sinal de saída, então quanto maior a frequência aplicada, maior a atenuação; porém calcular um filtro para uma frequência muito próxima á frequência que se deseja atenuar faz com que o filtro não seja tão eficaz. Um dos segredos do cálculo do filtro PWM para Arduino (por experiência própria) é calcular o filtro para em torno de 300Hz, ao invés de 490 Hz (que é a frequência do PWM do Arduino UNO). 
   
   A imagem acima demonstra a utilização desta ferramenta, onde foram entrados os valores de Fc (frequência de corte) e C (capacitância), e o valor do resistor R sugerido (abaixo da imagem á esquerda) é de 5.1k ohm, dando uma frequência de corte de exatamente 312.06 Hz. Isto significa que utilizando um Capacitor de 100nF e um resistor de 4.7k ohm (valor comercial de resistor 5% mais próximo de 5.1k ohm) é possível obter um sinal de 0 á 5V utilizando PWM no Arduino. 
   Na imagem acima a tensão analógica é obtida sobre o capacitor cerâmico de 100nF, onde o fio vermelho é a tensão analógica filtrada e o fio preto é o GND. O Arduino UNO pode ser configurado para ter 6 saídas PWM (pinos 3, 5, 6, 9, 10, 11), sendo que cada saída PWM deve ter um resistor em série com um capacitor para que o valor obtido seja analógico. 
   O código para teste do circuito acima se chama “fade.ino” e está disponível na IDE do Arduino, em “Arquivo > Exemplos >  Básicos > Fade”. O que ele faz é incrementar e decrementar (aumentar e diminuir) o valor analógico no pino  9 do Arduino, de pouco em pouco e continuamente.  
 /*  
Fade

This example shows how to fade an LED on pin 9
using the analogWrite() function.

This example code is in the public domain.
*/

int led = 9; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by

// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 9:
analogWrite(led, brightness);

// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;

// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// wait for 30 milliseconds to see the dimming effect
delay(30);
}

   Obter uma saída analógica a partir de PWM é relativamente simples em qualquer microcontrolador, bastando para isso gerar e filtrar um PWM com um circuito passa-baixas (Resistor-Capacitor) calculado da forma correta.

Criando uma saída analógica (0-5V) com Arduino
Classificado como:                                    

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Solve : *
30 + 24 =