Вопросов:
- Зависит ли преобразование счетчика АЦП от напряжения от фактического напряжения на выводе +5 В?
- Если да, то какой метод получения напряжения от платы принят?
Предпосылки / Detail:
У меня есть схема, в которой у меня есть 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 В на самом деле выводило 4,75 В, и изменил мой эскиз с
float v = (rawVIN*5.0)/1024.0;
в
float v = (rawVIN*4.75)/1024.0;
и показания напряжения на Arduino были теперь правильными. Я сделал это не потому, что я понимаю, что я сделал, я сделал это, потому что у меня была догадка, это может изменить значение на правильное.
Ответы:
АЦП внутри Arduino не измеряет напряжение, а скорее напряжения соотношение . А именно отношение напряжения на аналоговом входе к напряжению на выводе Vref.
В конфигурации по умолчанию вывод Vref внутренне привязан к линии +5 В. Вы можете использовать вместо внутренней ссылки Vref :
Эта ссылка составляет около 1,1 V, и является достаточно невосприимчивы к колебаниям на +5 В. Проблема состоит в том, что вы не можете измерить напряжение выше, чем в качестве ссылки.
Для вашего тестера батареи, если вы хотите какое-то «абсолютное» измерение, вы можете использовать внутренний эталон и делитель напряжения, чтобы убедиться, что измеренное напряжение ниже 1,1 В.
Редактирование : Еще одна опция, которая не требует делителя напряжения, - это использование Vcc в качестве эталона для измерения как аналогового входа, так и внутреннего эталона с запрещенной зоной 1,1 В. Измерение 1,1 В против Vcc является косвенным способом измерения Vcc. Это не поддерживается базовой библиотекой Arduino, но вы можете сделать это, запрограммировав непосредственно управляющие регистры АЦП:
Помните, что самое первое чтение после загрузки может быть поддельным.
источник
USB-питанием Arduino Nano будет иметь опорное напряжение АЦП, который не может полагаться, в связи с +/- 5% допуском входного напряжения USB. Вдобавок к этому, у Nano есть диод Шоттки MBR0520 (D1), который будет падать между 0,1 и 0,5 В в зависимости от собственных производственных допусков, его температуры и потребляемой мощности вашей платы.
Что вы можете сделать по этому поводу?
MCU на борту Arduino Nano - это ATmega328P. АЦП Nano может масштабировать показания аналогового напряжения в соответствии с несколькими доступными ссылками (и вы можете выбрать тот, который вам больше подходит). Вы можете сделать это через
analogReference (type)
функцию и выбрать одну из следующих ссылокtype
:Источник: аналоговая ссылка
Это схема АЦП для того, что находится внутри ATmega328, чтобы вы могли видеть, что там происходит:
Источник: данные ATmega328
Таким образом, простое решение заключается в создании слабого делителя напряжения, чтобы получить напряжение, которое вы хотите измерить ниже эталона ВНУТРЕННЕГО В 1.1 В, а затем настроить
analogReference
соответствующим образом.Делитель напряжения должен быть слабым (высокие значения R), чтобы вы не потребляли слишком много тока от батареи, но не слишком слабым, чтобы быть нагруженным входным импедансом АЦП.
бонус
Тем не менее, если вам нужен источник опорного напряжения выше, внутренний 1,1 V зонного ссылка на ATmega328 вы все еще повезло. Можно было бы использовать выход регулятора LDO 3,3 В от встроенного FT232RL, который доступен для вас на выводе 14 разъема, но я не думаю, что он также надежен. Спецификация FT232RL определяет его при 3,0-3,6 В (номинальная 3,3 В).
Таким образом , универсальное решение было бы построить внешнее опорное напряжение , основываясь на дешевом TL431 . Это может дать вам надежную ссылку до 4,0 - 4,25 V с точностью в +/- 1%.
Внешний источник опорного напряжения схема будет что-то же просто, как это (и TL431 доступен в макете дружной TO-92 корпусе!):
источник
У меня есть страница о преобразователе АЦП на Atmega328P . Несколько ниже на странице я опишу ссылки на напряжение. Вы можете использовать микросхему TL431 для обеспечения различных опорных напряжений, например 4 В:
Изменяя резисторы, вы можете получить другие напряжения (похоже, что вы хотите около 4,2 В).
Выходное напряжение не зависит от входного напряжения (в данном случае 5 В).
Связанная страница описывает, как вы можете выбрать значения резистора.
источник
да и нет: модуль adc заботится о Vref, который может поставляться через Vdd, внутри или снаружи.
путем настройки модуля АЦП. таблица данных устройства должна иметь регистры / биты, которые должны быть установлены для этого.
источник