Внутренний датчик температуры ATmega328 (Arduino)

В некоторых микроконтроллерах серии ATmega является встроенный датчик температуры, показания которого можно прочитать, используя внутренний АЦП.

К сожалению показания внутреннего датчика температуры не могут быть использована для измерения температуры окружающей среды в связи с прогревом микроконтроллера во время работы, но показания внутреннего датчика температуры могут быть использованы как элемент защиты микроконтроллера от перегрева. Так же при измерении температуры с внутреннего датчика следует учесть что показания могут быть занижены на 10 градусов Цельсия (потребуется смещение), а точность измерения будет в пределах 2 градусов Цельсия.

Для точных температур каждый отдельный чип должен быть откалиброван.

Ниже показан скетч позволяющий считать показания внутреннего датчика температуры и вывести эти показания в монитор порта:

void setup(){
  Serial.begin(9600);
  ADMUX |= (1 << REFS1)|(1 << REFS0);    // внутренний источник опорного напряжения на 1.1 вольт
  ADMUX |= (1 << MUX3);                  // датчик температуры
  ADCSRA |= (1 << ADEN);                 // включение АЦП
  ADCSRA |= (1 << ADPS2);                // CLK/16
  }

void loop(){
  ADCSRA |= (1 << ADSC);                 // начало преобразования
  while (bit_is_set(ADCSRA, ADSC));      // ожидание завершения преобразования
  double t = (ADCW - 314) / 1.22;        // расчет температуры ADCW = (ADCH << 8) | ADCL
  Serial.println(t,1);
  _delay_ms(1000);
  }  

Добавить комментарий

Войти с помощью: