Navegando na net achei um artigo muito bom para testar o funcionamento do arduino em função da temperatura interna do Arduino, vale a pena monitorar seus sketchs e testar.
Nesse artigo vamos explorar o sensor de temperatura interno do ATmega328P, que também está agregado ao conversor A/D.
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, os bits 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:
void setup()
{
Serial.begin(9600);
Serial.println(F("Sensor de temperatura interna"));
}
void loop()
{
// exibe a temperatura em °C
Serial.println(GetTemp(),1);
delay(1000);
}
double GetTemp(void)
{
unsigned int valorADC;
double temperatura;
ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3)); //seleciona tensão interna de 1,1 V e canal 8
ADCSRA |= _BV(ADEN); // habilita o conversor AD
delay(20); // aguarda estabilização da tensão
ADCSRA |= _BV(ADSC); // inicia a conversão
//aguarda o fim da conversão
while (bit_is_set(ADCSRA,ADSC));
// le o valor da conversão
valorADC = ADCW;
// calcula o valor da temperatura
temperatura = (valorADC - 324.31 ) / 1.22;
// retorna o valor da temperatura em °C
return (temperatura);
}
A figura a seguir exibe os valores lidos de temperatura:
Site- referência: http://www.embarcados.com.br/arduino-uno-sensor-de-temperatura/
Nenhum comentário:
Postar um comentário