Часть 6: Измерение напряжения без резистивного делителя (Внутренний источник опорного напряжения 1.1В)

Стандартный способ измерить напряжение выше 5В — использовать делитель на резисторах. Но есть хитрый способ измерить напряжение питания Arduino, используя внутренний источник опорного напряжения 1.1В (Internal Bandgap).

Как это работает:

  1. Вы измеряете значение внутреннего источника 1.1В относительно VCC (напряжения питания).
  2. Зная, что 1.1В — это константа, вы вычисляете VCC по формуле: VCC = 1.1 / (measuredValue / 1023.0).

Зачем это нужно?

  • Отслеживать разряд батарейки в автономных проектах.
  • Калибровать АЦП, если питание нестабильно.

Код для измерения VCC:

float readVCC() {
    // Выключаем все лишнее для точности
    ADCSRA &= ~(1 << ADATE);  // Отключаем авто-триггер
    
    // Настраиваем АЦП на измерение внутреннего источника 1.1В
    ADMUX = (1 << REFS0) | (1 << MUX3) | (1 << MUX2) | (1 << MUX1);
    // REFS0 = 1 (опора на AVCC)
    // MUX биты 3,2,1 = 1 (внутренний 1.1В)
    
    delay(10);  // Ждем стабилизации
    
    // Делаем несколько измерений для усреднения
    uint32_t sum = 0;
    for (int i = 0; i < 16; i++) {
        ADCSRA |= (1 << ADSC);  // Запускаем преобразование
        while (ADCSRA & (1 << ADSC));  // Ждем завершения
        sum += ADC;
    }
    
    float avg = sum / 16.0;
    return 1.1 / (avg / 1023.0);  // Вычисляем VCC в вольтах
}

void loop() {
    float vcc = readVCC();
    Serial.print("Напряжение питания: ");
    Serial.print(vcc, 2);
    Serial.println(" В");
    delay(1000);
}

Точность: ±2% при комнатной температуре. Отлично подходит для индикации заряда аккумулятора!

Вам также может понравиться

About the Author: ардуинчиков

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *