sexta-feira, 2 de junho de 2017

Portas Analógicas nos Microcontroladores - ADC e PWM

Vamos falar um pouco sobre portas analógicas tanto de entrada como de saída, para isso temos que entender o que é um sinal analógico e como podemos ler esse sinal.
Um valor digital (ou binário) só possui dois estados que podem ser considerados como 0 e 1 ou ligado e desligado ou alto e baixo, etc. Esse valor quando é lido de uma porta digital só consegue nos retornar uma dessas duas informações discretas. No artigo sobre GPIO eu comentei que várias portas digitais podem ser combinadas para que em uma única operação sejam lidos vários bits simultaneamente, essa afirmação é verdadeira mas temos que perceber que cada bit é um sinal independente, mesmo que no final faça parte de um mesmo dado, por exemplo, quando 8 entradas digitais são lidas por uma porta como um conjunto de 8 bits, ou seja, um byte.

Portas analógicas de entrada
Nos sinais analógicos de entrada os valores podem oscilar entre os limites mínimo e máximo que a porta consegue captar, se ela consegue ler tensões entre 0v e 5v então a tensão aplicada no pino da porta será convertida para um valor digital que poderá ser tratado pelo software. Para fazer isso o microcontrolador se utiliza de um circuito chamado de Conversor Analógico/Digital (ou ADC que significa Analog/Digital Converter), existem diversas formas de funcionamento desses conversores, não entraremos em detalhes por enquanto mas no momento só precisamos saber qual é a sua "resolução" ou qual o número de bits que esse conversor possui. Um conversor de 8 bits consegue ler valores entre 0 e 255 (o máximo de valores é calculado pela fórmula 2 elevado ao numero de bits, como são 256 valores, temos de 0 a 255), então uma tensão 0v na entrada apresenta um valor 0 na porta e uma tensão de 5v apresenta 255 quando é feita a leitura. No Arduino o ADC possui 10 bits retornando assim valores entre 0 e 1023. É possível usar um ADC externo com resoluções maiores.

Portas analógicas de saída
Não é comum que os microcontroladores possuam Conversores Digital/Analógico (DAC), um circuito desse tipo é muito específico e poderia ser usado, por exemplo, para reproduzir músicas pois essa é a base para geração de sons analógicos a partir do armazenamento digital. Mas existe um outro tipo de saída que não é analógica mas que pode, com certas restrições, ser usada com esse propósito. Esse tipo de saída se chama PWM (Pulse With Modulation), esse é um padrão usado por diversos dispositivos como, por exemplo, os servo-motores que se valem desse padrão para que o circuito possa controlar o ângulo em que o servo deve se posicionar.
O PWM gera uma saída com uma frequência fixa onde cada ciclo ocorre em 2 milissegundos, durante esse período o sinal fica parte do tempo em nível alto e parte em nível baixo, ele é um sinal de onda quadrada, não é uma onda senoidal. A frequência é fixa mas podemos controlar por quanto tempo a onda ficará em nível alto e isso é proporcional ao valor que gravamos na porta de saída. No Arduino os pulsos PWM são controlador por meio de um valor de 8 bits, então se usamos o valor 127 a onda vai ficar 50% do tempo alta e 50% do tempo baixa, se diminuímos o valor o tempo de onda alta também diminui e isso pode ser usado, por exemplo, para controlar o brilho de um LED pois quanto mais tempo em nível alto, mais claro o LED vai ficar.
Tudo bem, já percebemos que isso não é nem de longe uma saída analógica, mas como no caso do exemplo com o LED, ele pode funcionar de forma parecida.
Abaixo está a imagem do funcionamento dos pulsos PWM obtida do site do Arduino.



Nenhum comentário:

Postar um comentário