Преобразование АЦП в напряжение зависит от фактического значения выводов +5 В?

Вопросы:

  1. Преобразование АЦП в напряжение зависит от фактического напряжения на выводе + 5 В V?
  2. Если да, то каков приемлемый способ получения этого напряжения от платы?

Фон /деталь:

У меня есть схема, в которой у меня есть Arduino Nano (клон), идущий от USB-разъема (от концентратора). Задача Arduino - измерить напряжение на батарее, которая будет включать вторую цепь, включенную /выключенную Nano. Для справки это тестер батареи.

 Цепочка тестирования

Существует экран Nokia 5110, который отображает напряжение от очень простого эскиза ниже.

void setup() {
  Serial.begin(9600);
  display.begin();
  // Init done

  // You can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);

  // Text display tests
  display.setTextSize(1);
  display.setTextColor(BLACK);
}


void loop() {
  display.clearDisplay();   // Clears the screen and buffer
  display.setCursor(0,0);
  display.print("Vin=");
  int rawVIN = analogRead(VIN);
  float floatVin = (rawVIN*4.75)/1023.0;
  display.println(floatVin);
  Serial.println(rawVIN);
  display.display();
  delay(1000);
}
  • Я измерил напряжение батареи, используя DVM, и это 4.13 В, но Nano сообщает 4,35 В.
  • У меня есть общая основа между батареей и Arduino.
  • Поскольку подключение к тестированию напряжения может плавать, у меня есть выпадающий резистор, чтобы остановить дикие колебания (> 10 кО

После некоторого исследования я обнаружил, что + 5 В V фактически выводил 4.75 В V и менял свой эскиз из

float v = (rawVIN*5.0)/1024.0;

к

float v = (rawVIN*4.75)/1024.0;

и показания напряжения на Arduino были правильными. Я сделал это не потому, что понял, что я сделал, я сделал это, потому что у меня возникло подозрение, что он может изменить значение на правильное.

11 голосов | спросил Caribou 8 PMpSat, 08 Apr 2017 13:30:24 +030030Saturday 2017, 13:30:24

4 ответа


12

АЦП внутри Arduino не измеряет напряжение, а скорее напряжение . А именно отношение от напряжения на аналоговом входе к напряжению на выводе Vref.

В конфигурации по умолчанию вывод Vref внутренне привязан к + 5 В. Вы можете использовать вместо внутреннюю ссылку как Vref :

 analogReference(INTERNAL);

Эта ссылка относится к 1,1 В, и она невосприимчива к колебания на + 5Â V. Проблема заключается в том, что вы не можете измерить напряжения выше эталонного.

Для вашего тестера батареи, если вы хотите какой-то «абсолютный» измерения, вы можете использовать внутреннюю ссылку и делитель напряжения для обеспечения того, чтобы измеренное напряжение было ниже 1,1 В.

Изменить . Еще одна опция, которая не требует делителя напряжения, - это используйте Vcc в качестве ссылки для измерения обоих аналогового входа и внутренняя 1.1 В V - полоса частот - ссылка. Измерение 1.1 V против Vcc - косвенный способ измерения Vcc. Это не поддерживается в основной библиотеке Arduino, но вы можете сделать это, непосредственно программируя управляющие регистры АЦП:

 // Return the supply voltage in volts.
float read_vcc()
{
    const float V_BAND_GAP = 1.1;     // typical
    ADMUX  = _BV(REFS0)    // ref = Vcc
           | 14;           // channel 14 is the bandgap reference
    ADCSRA |= _BV(ADSC);   // start conversion
    loop_until_bit_is_clear(ADCSRA, ADSC);  // wait until complete
    return V_BAND_GAP * 1024 / ADC;
}

Помните, что первое чтение после загрузки может быть фиктивным.

ответил Edgar Bonet 8 PMpSat, 08 Apr 2017 14:38:42 +030038Saturday 2017, 14:38:42
7

USB-питанием Arduino Nano будет иметь опорное напряжение АЦП, который не может полагаться, в связи с +/- 5% допуском входного напряжения USB. Кроме того, Nano имеет диод Шоттки MBR0520 (D1), который будет падать между 0,1 и 0,5 В в зависимости от его собственных производственных допусков, его температуры и текущей потребляемой мощности вашей платы.

Что вы можете сделать с этим?

MCU на борту Arduino Nano является ATmega328P. АЦП Nano может масштабировать свои показания аналогового напряжения в соответствии с несколькими доступными ссылками (и вы можете выбрать тот, который вам подходит). Вы можете сделать это с помощью функции analogReference (type) и выбрать один из следующих ссылок type s:

  
  • ПО УМОЛЧАНИЮ: стандартная аналоговая ссылка 5 В (на плате V Arduino на 5 В) или 3,3 вольта (на плате в 3,9 В Arduino).
  •   
  • ВНУТРЕННИЙ: встроенный опорный сигнал, равный 1,1 вольтам на ATmega168 или ATmega328 и 2,56 вольт на ATmega8 (не доступен на   Arduino Mega)   [...]
  •   
  • ВНЕШНИЙ: в качестве эталона используется напряжение, приложенное к выходу AREF (только от 0 до 5 В).
  •   

Источник: analogReference

Это схема АЦП для того, что находится внутри ATmega328, чтобы вы могли видеть, что там происходит:

 ADm-блок ATmega328P

Источник: ATmega328 datasheet

Таким образом, прямое решение создает слабый делитель напряжения, чтобы получить напряжение, которое вы хотите измерить ниже ссылки INTERNAL 1.1 V, и затем соответствующим образом настроить analogReference.

Разделитель напряжения должен быть слабым (высокие значения R), поэтому вы не потребляете слишком много тока из аккумулятора, но не слишком слабы, чтобы его загружали входным импедансом АЦП.

Bonus

Тем не менее, если вам нужна ссылка на напряжение выше, чем внутренняя 1.1-V-запретная ссылка ATmega328, вам все равно не повезло. Вариантом будет использование выходного сигнала регулятора LDE 3.3 V V на встроенном FT232RL, который доступен вам на выводе 14 заголовка, но я не думаю, что он также является надежным. таблица FT232RL указывает ее на 3,0 - 3,6 В (номинальная 3.3 В)

Таким образом, универсальным решением было бы построить ссылку на внешнее напряжение на основе дешевого TL431 . Это может дать вам надежную ссылку до 4,0 - 4,25 В с точностью +/- 1%.

Внешний источник опорного напряжения схема будет что-то же просто, как это (и TL431 доступен в дружной пакете макетирования TO-92!):

 Напряжение на напряжение TL431

ответил Enric Blanco 8 PMpSat, 08 Apr 2017 14:44:19 +030044Saturday 2017, 14:44:19
4

У меня есть страница о конвертере ADC на Atmega328P . Немного вниз по странице Я описываю ссылки на напряжение. Вы можете использовать чип TL431 для обеспечения различных опорных напряжений, например 4V:

 Ссылка на напряжение 4 В

Изменяя резисторы, вы можете получить другое напряжение (похоже, вы хотите около 4.2V).

Выходное напряжение не зависит от входного напряжения (в этом случае 5 В).

Связанная страница описывает, как вы можете выбрать значения резисторов.

ответил Nick Gammon 9 AMpSun, 09 Apr 2017 00:41:34 +030041Sunday 2017, 00:41:34
3
  

Соответствует ли преобразование счетчика adc на напряжение фактическому напряжению вывода + 5v?

да и нет: модуль adc заботится о Vref, который может поставляться через Vdd, внутри или снаружи.

  

Если да, то какой принятый способ получить это напряжение от платы?

, настроив модуль adc. в таблице данных устройства должны быть регистры /биты, которые необходимо настроить для этого.

ответил dannyf 8 PMpSat, 08 Apr 2017 23:55:22 +030055Saturday 2017, 23:55:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132