O sensor é um diodo que produz uma tensão proporcional a temperatura interna do microcontrolador. No ATmega328P este sensor está ligado ao canal 8 (ADC8) do conversor. O sensor possui uma relação linear entre tensão e temperatura, porém a tensão de saída do sensor varia de um chip para outro, devido ao seu processo de fabricação.

 

A temperatura interna do microcontrolador aumenta durante o seu funcionamento e, por exemplo, se um pino é usado para acionar um LED, a temperatura irá aumentar mais.

 

A temperatura interna pode ser monitorada para verificar se não há problema no sistema. Por exemplo, se a temperatura durante o funcionamento normal acresce por volta de 5°C e no momento ela atingiu 20°C a mais, isso indica um problema no sistema.

 

A faixa de temperatura de operação do Atmega328 vai de -40°C a 85°C, conforme exibido em sua folha de dados.

 

Esse sensor não pode ser utilizado para medir a temperatura ambiente, porém ao ligar o microcontrolador, quando o mesmo estiver desligado por um bom tempo, a temperatura lida será bem próxima da temperatura ambiente.

 

Abaixo são exibidos os valores típicos de temperatura versus tensão, porem para cada chip, a tensão pode variar:

A sensibilidade é de aproximadamente 1 mV/°C e precisão do valor medido é de +/- 10°C. Essa precisão pode ser melhorada para aproximadamente 2°C se o ganho e offset forem medidos e usados na equação de temperatura. Isso pode ser feito conforme sugerido no application note:AVR122 – Calibration of AVR’s internal temperature reference, com a seguinte equação:

O valor de ganho e offset são diferentes para tipos de microcontroladores. Conforme sugerido pelo tutorial no site no site Arduino Playground – InternalTemperatureSensor, a equação para o ATmega328P é:

 

temperatura = (ADC – 324.31) / 1.22

Sketch para teste

 

Primeiramente vamos entender o que será necessário configurar nos registradores do ADC. Conforme explicado na folha de dados do ATmega328P, para utilizar o sensor de tensão é necessário escolher o canal ADC8 e selecionar a tensão de referência interna de 1,1V.

 

Para selecionar a tensão de referência interna é necessário configurar o registrador ADMUX, osbits 7:6 – REFS1:RFS0,  conforme a tabela a seguir:

Como pode-se observar na tabela deve-se colocar nível lógico 1 nesses dois bits para selecionar a referência de tensão interna.

 

Agora vamos selecionar o canal 8(ADC8), este canal não é selecionado através da função do arduino, devemos configurar no ADMUX os bits 3:0 – MUX3:0, conforme tabela abaixo:

Dessa forma vamos criar uma função para configuração e leitura do sensor conforme sketch a seguir:

A figura a seguir exibe os valores lidos de temperatura:

Referências

 Retirado do site: http://www.embarcados.com.br/arduino-uno-sensor-de-temperatura/

Arduino Playground – InternalTemperatureSensor

AVR122 – Calibration of AVR’s internal temperature reference

moderador: move para tutoriais.

Exibições: 1011

Responder esta

Respostas a este tópico

muito interessante rogerio vlw

Curioso, não sabia desta possibilidade

Artigo muito interessante e que agrega conhecimento. Parabéns e Obrigado por compartilhar.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço