·

Engenharia de Software ·

Microeletrônica

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

RELATÓRIO 12 Data Disciplina E209 Prof João Pedro Magalhães de Paula Paiva Monitores Thalita Domingos João Henrique Delfino Pedro Fraga Conteúdo Microcontrolador ATMega328p Tema ATMega 328 ADC Nome Matrícula Curso OBJETIVOS Utilizar as ferramentas de simulação para desenvolver programas para o ATMega328p Desenvolver um programa que faz uso do conversor ADC do ATMega328p Utilizar as entradas e saídas do ATMega328p com circuitos analógicos Parte Teórica Introdução ao conversor analógico digital ADC O conversor AD realiza o processo de amostragem desratização e codificação de uma tensão aplicada a um pino de entrada analógica do MCU Quando uma conversão é iniciada o valor instantâneo da tensão no pino é retido pelo bloco conversor Esse valor de tensão é associado a uma palavra binária através do método de aproximação sucessiva SAR No caso do ATMega328p a palavra binária tem 10 bits sendo armazenada uma parte no registro ADCL e outra no ADCH Dessa forma a tensão de entrada é convertida utilizando as tensões de referência em valores digitais de 0 a 1023 Para controlar o processo de conversão AD os registros ADMUX e ADCSRA em anexo devem ser configurados para que o canal AD do Atmega328p opere corretamente O Atmega328p permite que sejam utilizadas diversas formas de conversão em função da aplicação Nós utilizaremos a função mais simples que é a conversão única Nesse método uma conversão é disparada quando o bit ADEN ADC ENABLE e o ADSC ADC Start Conversion são setados ligados Quando a conversão chega ao fim a flag ADIF vai para 1 indicando que a leitura do valor convertido pode ser realizada Os pinos utilizados como entradas analógicas são aqueles identificados de ADC0 a ADC5 PC0 à PC5 Leitura e conversão das leituras ADC Como a conversão é em 10 bits a tensão de entrada é convertida seguindo a expressão PalavraDigital ADCH ADCL Vin 1023 𝑉𝑟𝑒𝑓 Vin PalavraDigital 𝑉𝑟𝑒𝑓 1023 A relação 𝑉𝑟𝑒𝑓 1024 é conhecida como resolução do conversor AD ou seja a menor variação da tensão de entrada que provoca a alteração de 1 bit na palavra digital de saída Vamos considerar a tensão de alimentação VDD 5V Sabendo que a resolução do Atmega328 é de 5V1024 488mV Assim caso o conversor retorne um valor digital lido de 430 a tensão existente na entrada analógica do microcontrolador seria de 20984 V A linha de programa que é capaz de calcular a tensão aplicada na entrada analógica do microcontrolador seria considere que a variável que armazena o valor digital é valorLido tensao valorLido 5000 1023 Aqui vale ressaltar que se a linha tiver escrita exatamente como acima podese gerar um resultado incorreto devido a limitação de armazenamento da variável tensão Vejamos se tensao for do tipo unsigned int ela não poderá armazenar o resultado de valorLido5000 caso valorLido tenha seu valor máximo de 1023 uma vez que 102350005115000 o que ultrapassa o limite de armazenamento de uma variável do tipo unsigned int que é 65535 É preferível fazer o seguinte unsigned long int aux unsigned int valorLido unsigned int tensao aux valorLido 5000 Variável auxiliar para o cálculo aux aux 1023 Dividese por 1023 tensao unsigned int aux Retorna o resultado do tipo unsigned int A última linha utiliza o recurso denominado casting no qual um tipo de variável é convertido para o outro No caso de unsigned long int para unsigned int Configuração do bloco ADC Para fazermos uso do conversor AD devemos configurálo Primeiramente vamos configurar a tensão de referência 𝑉𝑟𝑒𝑓 o prescaler utilizado e habilitar o ADC Para definir o 𝑉𝑟𝑒𝑓 devemos setar os BITs escolhidos no registro ADMUX por exemplo configurando 𝑉𝑟𝑒𝑓 5V ADMUX 1 REFS0 0b01000000 Figura 1 Bits de configuração da tensão de referência Para configurar o prescaler se faz uso do registro ADCSRA analisar User Guide em anexo para escolha ADCSRA 1 ADPS2 1 ADPS1 1 ADPS0 divisor 128 Figura 2 Bits de configuração do Prescaler Por fim habilitamos o ADC ADCSRA 1 ADEN habilita o ADC Lembrese as tensões podem ser modificadas ao longo do programa de acordo com o necessário Após as configurações principais devemos iniciar a parte de conversão do nosso AD Para isso faremos uso dos registros ADCSRA e ADMUX Vamos informar qual a entrada queremos converter ADMUX ADMUX 0xF8 input seleciona o canal de entrada Agora devemos começar a conversão para isso é necessário setar o bit ADSC ADCSRA 1 ADSC inicia a conversão Considerações importantes Um detalhe importante é que só podemos fazer a conversão de 1 canal por vez ou seja se tivermos 2 canais devemos esperar um pouco para iniciar a conversão do outro Agora considere a seguinte ocasião Você irá fazer uma conversão simples de um sensor que estava com tensão de 12V e no momento de converter um ruído 5 volts entra no seu sistema por um breve período de tempo Esse ruído irá gerar uma resposta no ADC result ADCL ADCH de 1023 5V e não 245 12V que seria o correto Para evitarmos esse tipo de erro devemos criar uma amostragem de por exemplo 100 leituras e tirar a média de todas elas isso irá garantir que o valor lido está aproximado ao que realmente deveria ter sido lido Para uma boa conversão podemos realizar a seguinte operação Espera o ADC terminar a conversão e salva for i 0 i NUMERODEAMOSTRAS i ADCSRA 1 ADSC inicia a conversão while ADCSRA 1 ADIF Espera o fim da conversão vartemp ADCL Leitura do ADCL vartemp ADCH 8 Leitura do ADCH vararmazenagem vartemp Soma dos valores lidos varmedia vararmazenagem NUMERODEAMOSTRAS Calcula a média O código acima espera a conversão AD terminar linha WHILE Internamente a flag ADIF é setada quando uma conversão foi finalizada e armazenada e resetada assim que a interrupção for tratada ela é tratada mesmo sem um ISR Parte Prática O projeto é um sistema que realiza a medição da tensão na entrada analógica do microcontrolador e controla a potência do LED verde via PWM de acordo com o valor convertido diretamente proporcional Parte 1 A tensão de entrada é aplicada através de um potenciômetro variando de 0V até 5V No programa é feito a conversão de binário para tensão A dica aqui é trabalhar com a tensão em milivolts com o objetivo de evitar operações em ponto flutuante Figura 3 Conexão do potenciômetro no microcontrolador Parte 2 Realize a conexão de um LED no pino PD6 e configure o TIMER0 para operar em modo fastPWM depois configure os bits e registradores necessários para que o LED possa ter seu brilho variado de 0 à 100 dependendo da tensão entre 0 e 5V obtida do potênciometro Figura 4 Conexão do LED no microcontrolador Parte 3 Modifique o pino no qual está fazendo a leitura analógica trocando de PC0 para PC2 por exemplo e modifique o programa para realizar a leitura desse pino Depois experimente com o circuito e veja se os resultados foram como esperado 2391 ADMUX ADC Multiplexer Selection Register 2392 ADSCRA ADC Control and Status Register A