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
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:
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.
Tags:
muito interessante rogerio vlw
Curioso, não sabia desta possibilidade
Artigo muito interessante e que agrega conhecimento. Parabéns e Obrigado por compartilhar.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por