Você está na página 1de 27

ATUALIZAÇÃO TECNOLÓGICA EM

ELETRÔNICA

UNIDADE

3
DESAFIO 2
APRESENTAÇÃO

Neste desafio, você estudará o funcionamento e a programação dos conversores analógico-digital


(A/D) e digital-analógico (D/A) do Arduino. Estudará, também, a importância da documentação
de um programa por meio de fluxogramas.

• No final deste desafio você terá subsídios para:


• Utilizar um conversor A/D na plataforma Arduino;
• Utilizar um conversor D/A na plataforma Arduino;
• Elaborar um fluxograma.

Preparado? Então siga em frente!

3
DOCUMENTAÇÃO

No desafio 1 elaboramos um programa para realizar uma atividade simples de leitura e escrita
em portas digitais. Como você pode imaginar, a quantidade de variáveis e de instruções em um
programa costuma ser bem maior do que nos programas que elaboramos até agora, tornando cada
vez mais difícil a programação e a depuração de erros.

Para organizar e registrar a tarefa de programação e facilitar a depuração de erros devemos utilizar
uma ferramenta chamada fluxograma. Um fluxograma indica as etapas de uma determinada tarefa
como, por exemplo, a sequência de gravação de um programa qualquer em um microcontrolador,
que pode ser representada pelo fluxograma, a seguir.

Como você pôde ver, as etapas de um fluxograma indicam o passo-a-passo de uma tarefa.

Importante!

É importante você saber que a elaboração de um fluxograma é indicada como


uma boa prática de programação, portanto, você deverá elaborar um para
todos os seus programas.

Provavelmente, você já deve ter estudado, em disciplinas de informática, sobre as fases de resolução
de problemas em computação. Vamos resgatar essas informações para você relembrá-las.

Análise de
Programa
Desenho do
Algoritmo

Codificação

Compilação
e Execução

Verificação

Depuração

Manutenção

Documentação

4
Note que, na segunda fase, o desenho do algoritmo retrata a maneira mais adequada de trabalhar
para alcançar o sucesso em nossos desafios.

Portanto, o fluxograma é uma representação gráfica de um algoritmo, cujos símbolos seguem uma
representação normatizada. Você pode ver, a seguir, algumas dessas formas.

Agora que conhece a importância de um fluxograma para um projeto, acompanhe o exemplo


a seguir, onde faremos um fluxograma para o programa das luzes veiculares. Para facilitar o
entendimento, faremos a elaboração do fluxograma em etapas.

1. PARTE INICIAL DO CÓDIGO:

Parte inicial do programa:

Fluxograma da parte inicial:

5
2. DECLARAÇÃO DE ENTRADAS E SAÍDAS

Trecho do programa que contém a declaração de entradas e saídas:

Fluxograma da declaração das entradas e saídas:

6
3. PROCEDIMENTO LOOP()

Trecho do programa que contém o procedimento loop():

Fluxograma do procedimento loop():

Agora, veja o fluxograma completo do exemplo:

7
Para compreender melhor o fluxograma do exemplo, acesse o simulador do projeto luzes veiculares
e compare o funcionamento do programa com o fluxograma.

Agora que você resgatou informações importantes sobre o fluxograma, não se esqueça de elaborá-
los para os próximos desafios.

A seguir, vamos estudar o conversor A/D do Arduino Due. Acompanhe.

8
CONVERSOR A/D

Como vimos no desafio 2 da unidade anterior, quando estudamos os microcontroladores


PIC, os conversores A/D convertem níveis de tensão analógicos para um número equivalente
digital. Conceitualmente falando, a conversão funciona de modo semelhante em todos os
microcontroladores, incluindo os que equipam as placas Arduino.

Embora o princípio seja o mesmo, existem particularidades que afetam o funcionamento do


conversor A/D em cada microcontrolador e o modo de programá-los como, por exemplo, a
quantidade de bits e as instruções utilizadas para fazer a conversão.

Portanto, para utilizar o conversor A/D do Arduino Due, é importante que você conheça as
particularidades do conversor presente no microcontrolador SAM3X. É o que estudaremos, a
seguir.

9
CONVERSOR A/D DO MICROCONTROLADOR SAM3X

O microcontrolador SAM3X, que equipa o Arduino Due, possui um conversor A/D de até 12 bits.
A figura a seguir, indica as portas que podem ser utilizadas com o conversor A/D (portas AD0 à
AD14).

Adaptado de datasheet do microcontrolador SAM3X.

O conversor A/D do SAM3X possui as seguintes características:

• Resolução de 12 bits;
• Taxa de conversão de 1 MHz;
• Single Ended selecionável ou por diferencial de tensão de entrada;
• Ganho programável para ampla faixa de entrada, entre 0 – VDD;
• Multiplexador integrado que permite mais de 16 entradas analógicas independentes;
• Enable e Disable individual para cada canal;
• Sincronismo por Hardware ou Software;
• Pino de sincronismo externo;
• Saídas Timer Counter (equivalentes às de sincronismo TIOA);
• Linha de eventos PWM;
• Drive para falta de entrada PWM;
• Suporte a PDC;
• Possibilidade de configuração dos temporizadores do conversor AD;
• 2 modos Sleep e sequenciador de conversão;
• Wakeup automático com sincronismo e retorno ao modo Sleep após a conversão de todos os
canais habilitados;
• Possibilidade de sequenciamento de canais customizada;
• Mode Standby para uma rápida resposta de Wakeup;
• Capacidade de Power Down;
• Janela de comparação automática de valores convertidos;
• Registradores com proteção contra escrita.

10
Para compreender melhor o funcionamento do conversor A/D do SAM3X, é preciso conhecer
mais detalhes sobre as principais características.

FUNCIONAMENTO

O conversor A/D do microcontrolador SAM3X possui dois modos de operação: o modo


de conversão única e o modo livre (Free Running Clock - FCLK). Em modo de conversão
única, o conversor A/D faz a conversão e, em seguida, para. No modo livre, a conversão
prossegue imediatamente após terminar a anterior.
Os registradores do conversor A/D, assim como os registradores de qualquer módulo
periférico particular (por exemplo: ADC, Timer, USART etc.), proporcionam o elo
de comunicação entre o processador central e os dispositivos periféricos. Você pode
configurar o conversor A/D de acordo com a sua necessidade de programação e terá o
resultado da conversão nos registradores indicados no datasheet. O conversor A/D tem
19 registradores, sendo três deles reservados. A gestão destes registradores é realizada
pelo DACC (Digital-to-Analog Converter Controller).
As conversões são possíveis de 0 V a ADVREF. O conversor A/D suporta um modo
de resolução de até 12 bits, e os resultados da conversão são disponibilizados num
registrador comum para todos os canais, bem como num registrador dedicado de
canal. Há a possibilidade de disparo externo por meio de um sinal no pino DATRG
ou internamente, por contadores configuráveis (TRGSEL e TRGEN). O tempo de
monitoramento é diferente para o modo de conversão escolhido, sendo aconselhável
acompanhar as informações da página 1408 do datasheet do SAM3X. A figura, a seguir,
indica as tensões de trabalho e o incremento de tensão para cada modo de operação.

O circuito de comparação permite a detecção automática e de maneiras distintas, como


por exemplo, valores inferiores a um limiar, maiores do que um limiar, num determinado
intervalo ou fora do intervalo. Os intervalos dos limiares são totalmente configuráveis.
O controlador ADC está diretamente ligado à entrada PWM Fault (no PWMC), que
é acionada caso haja uma falha interna, com a finalidade de colocar, imediatamente,
as saídas PWM em um estado seguro. A figura, a seguir, ilustra o circuito de proteção
interno das saídas PWM por meio da entrada PWM fault.

11
O conversor A/D se conecta com um canal PDC (Peripheral DMA Controller) e esta
integração, por meio de ciclos de latência e sequenciamento da conversão, contribui para
reduzir tanto o consumo de energia como a intervenção do processador.
Internamente, no conversor A/D, um conjunto de tensões de referência é gerado a partir
de um único nó de tensão de referência externo que pode ser igual à tensão de alimentação
analógica. Uma capacitância externa de desacoplamento será necessária para filtragem
de ruído. Um circuito de correção de erro digital, com base no algoritmo multi-bit
RSD (Redundant Signed Digit), é utilizado a fim de reduzir erros INL (Integral Non-
linearity) e DNL (Differential Non-linearity). Finalmente, o usuário pode configurar os
temporizadores do conversor A/D, tais como o Startup Time e o Tracking Time.

O conversor A/D usa seu clock interno para executar as conversões. A conversão de um
único valor analógico para um digital de 12 bits requer vários ciclos de monitoramento
do clock, tal como definido no campo TRACKTIM, em ADC mode register (página
1333 do datasheet do SAM3X) e outros ciclos de clock para transferência, como definido
no campo TRANSFER do mesmo registro.
A frequência de clock do conversor A/D é selecionada no campo PRESCAL do Mode
Register (ADC_MR). A fase de monitoramento é iniciada durante a conversão do canal
anterior. Se este tempo for maior do que o tempo de conversão, a fase se estende para o
final da conversão que a precede.
A faixa de clock do conversor A/D está entre MCK/2, se PRESCAL for igual a 0,
e MCK/512, se PRESCAL for igual a 255 (0xFF). O valor de PRESCAL deverá ser
programado de forma a proporcionar uma frequência de clock do conversor A/D de
acordo com os parâmetros indicados na seção de características elétricas do produto no
datasheet do SAM3X.
Alguns projetos avançados necessitam deste conhecimento e você pode acompanhar e
discutir no link.

12
ADC PRESCALER

O conversor A/D necessita de alguns pulsos de clock para fazer a conversão. Os pulsos
são gerados pelo clock do sistema que é dividido, sucessivamente, até obter a frequência
necessária. Para funcionar, o conversor A/D necessita de uma frequência entre 1 e 22
MHz. Quanto maior a frequência, mais rápida é a conversão. Por outro lado, frequências
menores proporcionam conversões mais precisas. A frequência do sistema pode ser
definida com qualquer valor definido pelo usuário (usando osciladores internos ou
externos). O clock do sistema pode ser dividido por 1, 2, 3*, 4, 16, 32, 64, sempre definido
pelo Prescaler (campo PRES com default em 1).

*Apenas no Master Clock Controller, que fornece o clock para os periféricos.

Saiba mais...

Para saber mais sobre o prescaler utilizado pelo conversor A/D do


SAM3X, acesse a página 1404 do datasheet, disponível em:
http://www.atmel.com/Images/Atmel-11057-32-bit-Cortex-M3-
Microcontroller-SAM3X-SAM3A_Datasheet.pdf

CANAIS

O conversor A/D do SAM3X tem 12 canais, o que significa que você pode tirar doze
amostras de sinais em diferentes portas, ou seja, você pode conectar até doze sensores
diferentes e obter os seus valores separadamente.

Saiba mais...

Para saber mais sobre o funcionamento do conversor A/D do SAM3X,


acesse a nota de aplicação do fabricante, disponível no seguinte endereço:
http://www.atmel.com/Images/Atmel-42298-SAM3-4S-4C-Analog-to-
digital-Converter-ADC_ApplicationNote_AT06860.pdf

13
ENTRADAS E SAÍDAS ANALÓGICAS

Como vimos no desafio anterior, o Arduino Due possui 12 entradas e 2 saídas analógicas,
identificadas como Ax e DACx, respectivamente (de modo que x indica o número da entrada/
saída).

É importante lembrar que as portas analógicas também podem funcionar como portas
digitais, dependendo da configuração indicada no software. Por outro lado, as portas
digitais não podem ser utilizadas como analógicas, portanto, quando for escolher as
portas que pretende utilizar no Arduino Due, certifique-se de que esteja utilizando as
mais adequadas para o seu projeto, evitando o uso de portas dedicadas sem necessidade.

14
COMO CONFIGURAR UMA ENTRADA ANALÓGICA

No SAM3X, assim como acontece em outros microcontroladores, as portas analógicas também


podem ser utilizadas como portas digitais, dependendo da configuração. Além disso, podem operar
como entradas ou como saídas. Tudo depende da configuração informada no software.

No Arduino, essa configuração é feita pela instrução pinMode(), que estudamos no desafio anterior.
Portanto, para utilizar uma porta como entrada analógica, basta configurá-la como entrada, do
mesmo modo que fizemos no desafio anterior. Significa dizer que, no Arduino, não é necessário
indicar se a porta será digital ou analógica, basta configurá-la como entrada ou como saída.
Acompanhe um exemplo:

Opcionalmente, você também pode configurar a resolução do conversor por meio da instrução
analogReadResolution(). O parâmetro da instrução indica a resolução desejada. Se você não
configurar a resolução, o valor padrão de 8 bits será utilizado.

Acompanhe um exemplo de como configurar a resolução para 12 bits:

Saiba mais...

Para saber mais sobre a instrução analogReference, consulte:


http://www.arduino.cc/en/Reference/AnalogReference

15
COMO CONFIGURAR UMA ENTRADA ANALÓGICA

O Arduino utiliza uma função chamada analogRead() para iniciar a conversão e obter o valor
digital equivalente à tensão da entrada requisitada.

O microcontrolador demora cerca de 100 microssegundos (0,0001 s) para ler uma entrada analógica,
então, a taxa máxima de leitura será de 10.000 vezes por segundo, aproximadamente.

Importante!

O comando analogRead não funcionará adequadamente se uma entrada


analógica for previamente definida como uma saída, por isso, se for o caso,
redefina-a como entrada antes de usar a função. O resistor pull-up interno, no
microcontrolador, será redefinido quando voltar a ser entrada.

A função analogRead() possui apenas um parâmetro, que é o número da porta que você deseja fazer
a conversão. A função retornará um valor numérico inteiro, que corresponde ao valor convertido.
O valor pode ser carregado em uma variável. Acompanhe um exemplo:

Saiba mais...

Para outras informações sobre o módulo A/D do Arduino Due, consulte:


http://www.arduino.cc/en/Reference/AnalogReadResolution
http://www.arduino.cc/en/Tutorial/AnalogInputPins

Dica...

Para fazer várias conversões sucessivas, o fabricante recomenda adicionar


um pequeno atraso entre as execuções da função analogRead().

16
EXEMPLO DE PROGRAMAÇÃO (POTENCIÔMETRO E LED COM
CONVERSOR A/D)

Imagine que você necessita ler uma tensão por meio de uma entrada analógica e sinalizar o valor
lido, de algum modo. Podemos fazê-lo à partir de um potenciômetro, simulando um dispositivo
ou sensor que forneça uma tensão entre 0 e 3,3 V (limitação do modelo Due). Este programa de
exemplo lê a tensão na entrada analógica A0 e mantém um Led aceso por um tempo proporcional
ao valor retornado da função analogRead. Acompanhe o fluxograma e o programa de exemplo:

Fluxograma:

17
Programa:

O que ocorre se modificarmos o segundo delay, quando ledout está em LOW, para (1023-van)?
Simule com números inteiros entre 0 e 1023 e note a mudança nos tempos do Led.
Pronto! Agora você pode copiar o trecho do programa e colar no software Arduino. Salve com
um nome à sua escolha. O arquivo salvo estará na pasta com o mesmo nome acompanhado da
extensão.ino.

Saiba mais...

Você pode saber mais sobre as funções e comandos usados neste exemplo em:

http://www.arduino.cc/en/Reference/Setup
http://www.arduino.cc/en/Reference/Loop
http://www.arduino.cc/en/Reference/DigitalWrite
http://www.arduino.cc/en/Reference/Delay
http://www.arduino.cc/en/Reference/PinMode
http://playground.arduino.cc/Code/Potentiometer

Você já pensou em como ficaria a ligação física do exemplo com a placa Arduino Due? No desafio
1 já fizemos o cálculo do resistor externo, em série com o Led. Se você deseja apenas testar a
programação, pode usar o Led L, interno, já que a programação utiliza o pino 13. A figura, a seguir,
traz um exemplo de ligação do Led no Arduino Due.

18
Se desejar, você pode verificar o funcionamento do programa de exemplo no simulador disponível
em seu ambiente virtual de aprendizagem.

19
CONVERSOR D/A

Um conversor D/A faz o caminho inverso do conversor A/D. Imagine um CD de músicas. Como
você sabe, as músicas são gravadas no formato digital, e as informações são interpretadas por um
software. Depois da conversão, o resultado será o som, no formato analógico.

Um conversor D/A converte um número preciso, abstrato e finito (geralmente um número binário
de ponto fixo) em uma quantidade física real. Em outras palavras, cada número binário será
convertido para um nível de tensão equivalente, compatível com a tensão de referência e com a
resolução (quantidade de bits) de conversor.

No caso do CD, como você pode imaginar, o intervalo entre cada unidade digital forma uma
lacuna, criando uma espécie de degrau entre cada amostra da conversão. Para compor o sinal
analógico é preciso preencher essas lacunas, e para isso são utilizadas técnicas de interpolação de
sinais.

Segundo o teorema de amostragem de Nyquist-Shannon, um sinal de amostra analógico, limitado


em banda, pode ser recuperado a partir de uma sequência infinita de amostras se a taxa de
amostragem for maior do que o dobro da maior frequência do sinal original. No entanto, mesmo
com um filtro de reconstrução ideal, o processo em si introduz erros de quantificação, o que torna
praticamente impossível uma perfeita representação.

Uma maneira de reduzir os erros de quantificação, é aumentar a resolução do conversor, ou seja,


aumentar a quantidade de bits.

A figura, a seguir, é um exemplo de interpolação de um sinal digital (em vermelho) para um sinal
analógico (em cinza).

É importante que você saiba que nem todas as aplicações exigem a interpolação do sinal. Significa
dizer que, em alguns casos, as lacunas entre as amostras não afetam no funcionamento da aplicação.

20
CONVERSOR D/A

O microcontrolador SAM3X, que equipa o Arduino Due, possui um conversor D/A de até 12 bits.
A figura, a seguir, indica as portas que podem ser utilizadas com o conversor D/A (portas DAC0,
DAC1 e DATRG).
O conversor D/A do SAM3X possui as seguintes características:

• Resolução de 12 bits;
• Tensão de trabalho entre 2 e 3,6 V;
• Comunicação com velocidade de até 1 Msps (1.000.000 de amostras por segundo);
• Função sleep;
• Trigger configurável: interno ou externo.

Para compreender melhor o funcionamento do conversor D/A do SAM3X, é preciso conhecer mais
detalhes sobre as principais características.

FUNCIONAMENTO

O controlador do conversor D/A (DACC) utiliza o clock mestre (MCK) dividido por
dois para realizar as conversões. Este relógio é nomeado DACC clock. Uma vez que uma
conversão é iniciada, o DACC leva 25 períodos de clock para fornecer o resultado da
conversão no canal de saída analógica selecionada.
No modo de funcionamento livre (free running), a conversão começa assim que um dos
canais é habilitado. Nesse instante, os dados são gravados no registrador de dados DACC
e, 25 períodos de clock mais tarde, os dados convertidos estão disponíveis na respectiva
saída analógica escolhida. No modo por disparo externo, espera-se a primeira borda de
subida para iniciar o processo de conversão.

21
CANAIS

O conversor D/A do SAM3X tem 2 canais, o que significa que você pode obter dois sinais
diferentes, um em cada porta.

Saiba mais...

Para saber mais sobre o funcionamento do conversor D/A do SAM3X, consulte


a página 1356 do datasheet disponível em:
http://w w w.at mel.com/Images/At mel-11057-32-bit-C or tex-M3-
Microcontroller-SAM3X-SAM3A_Datasheet.pdf

22
COMO CONFIGURAR UMA SAÍDA ANALÓGICA

Do mesmo modo que ocorre com o conversor A/D, a porta do conversor D/A pode ser configurada
com a instrução pinMode(), mas essa configuração é opcional, pois a instrução que escreve na
saída analógica não requer o uso da pinMode(). De qualquer modo, se por algum motivo você
precisar configurar a porta antes, pode utilizar a instrução pinMode() sem problemas.

Para configurar uma porta como saída por meio da instrução pinMode(), basta informar, nos
parâmetros da instrução, o número da porta e o texto OUTPUT. O exemplo, a seguir, ilustra a
configuração da porta 66 como saída.

Opcionalmente, você também pode configurar a resolução do conversor por meio da instrução
analogWriteResolution(). O parâmetro da instrução indica a resolução desejada. Se você não
configurar a resolução, o valor padrão de 8 bits será utilizado. Acompanhe um exemplo de como
configurar a resolução para 12 bits:

Importante!

A instrução analogWriteResoltion() é exclusiva do Arduino Due, ou seja, ela


não funciona nas outras placas Arduino.

23
COMO ESCREVER EM UMA SAÍDA ANALÓGICA

O Arduino utiliza uma instrução chamada analogWrite() para iniciar a conversão e disponibilizar
a tensão analógica equivalente ao valor digital informado.

A instrução analogWrite() possui dois parâmetros, sendo um para informar a porta em que o sinal
será disponibilizado e outro para informar o valor digital que você deseja converter para analógico.
Acompanhe um exemplo:

É importante lembrar que o valor informado no segundo parâmetro deve ser compatível
com a resolução configurada, ou seja, se o conversor estiver no modo padrão, de 8 bits, o
valor máximo permitido será 255.

24
EXEMPLO DE PROGRAMAÇÃO (POTENCIÔMETRO E LED COM
CONVERSOR D/A)

No exemplo anterior, controlamos o tempo de acendimento de um Led com base na tensão de uma
porta analógica, proveniente de um potenciômetro. Na medida que aumentávamos a tensão na
porta A/D, o Led piscava mais rapidamente.

Agora, vamos manter a leitura da porta A/D do mesmo modo, com o potenciômetro, mas ao invés
de variar o intervalo de acendimento, vamos controlar o brilho do Led. O controle do brilho será
feito por meio de um conversor D/A. Acompanhe o fluxograma e o programa de exemplo:

Fluxograma:

25
Programa:

A figura, a seguir, indica as ligações do potenciômetro e do Led no Arduino Due para o exemplo
que acabamos de ver.

26
DESAFIO 2

Agora que você conhece o funcionamento dos conversores A/D e D/A


do Arduino, chegou o momento de retomar o desafio 2.

Retorne à página principal do ambiente virtual de aprendizagem e par-


ticipe do desafio 2. Lembre-se que a elaboração da tarefa proposta de-
verá ser realizada em grupo. Você terá à disposição, um ambiente de
grupo, para debater com os colegas e um espaço destinado para a entre-
ga da tarefa.

Bom trabalho!

RECAPITULANDO

Neste desafio você estudou:

• Como elaborar um fluxograma;


• Como funciona o conversor A/D do Arduino Due;
• Como funciona o conversor D/A do Arduino Due; e
• Como estruturar um programa para ler entrada e acionar saídas
analógicas.

Você deverá participar da seguinte atividade:

• Desafio 2 – Elaborar um programa para simular o funcionamento do controle de temperatura


da água.