Измерение питания Arduino c помощью bandgap
- Войдите на сайт для отправки комментариев
Чт, 05/09/2013 - 17:14
Доброго времени суток!
Сразу сорри если не в ту ветку.
Есть необходимость мониторить ардуинку запитаную от 3-х элементов АА(4,5 В) по питанию и при падении напряжения до 3-х и меньше Вольт подавать сигнал(пищалку включать или мигать светиком). Наткнулся на статейку Как измерить Vcc?, с ходу получаю такие результаты:
3.79 v_bat
3.78 v_bat
3.74 v_bat
3.73 v_bat
3.73 v_bat
3.73 v_bat
3.73 v_bat
3.74 v_bat
3.77 v_bat
3.79 v_bat
3.79 v_bat
3.77 v_bat
3.74 v_bat
3.73 v_bat
Питание в данный момент от USB. Мультиметр показывает 5.02 В на ножках питания ATMega328P-PU.
Еще непонятен вопрос относительно замера:
V_BAT=(1.1*1024)/analogRead(14);
и
analogReference(DEFAULT); raw_bandgap = analogRead(14);
analogReference(DEFAULT) - говорит использовать питание Vcc как опорное.
Далее , поправьте если не прав, снимаем показания с 14 канала который подключен к Vcc?
Каким образом тогда тут притянуто 1.1 В ?
Прошу знатоков помочь в вопросе!
Заранее благодарен.
Читайте даташит 23. Analog-to-Digital Converter.
FreeManGH, http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-... функция readVcc
FreeManGH, http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-... функция readVcc
Сделал для себя перевод этой статейки, может кому еще пригодится http://blog.unlimite.net/?p=224
P.S.: не ругайте сильно если что не так!
Сделал для себя перевод этой статейки, может кому еще пригодится.
Полезно тексты гонять через спеллчекер, а то у Вас, например, слово "Мало известная" почему-то с пробелом пошло. Дальше там вообще порядок слов не по русски. Вобщем, перевод - штука тонкая.
:)
Перечитаю на выходных....
Отличная ссылка. А я все по старинке на аналоговом порту через делитель мерию :(
Отличная ссылка. А я все по старинке на аналоговом порту через делитель мерию :(
ну такая фишка bandgap была не всегда) поэтому раньше и измеряли "по старинке". Bandgap появился в какой-то момент в мегах. Мне очень полезным оказался совет - читать даташиты на те МК, которыми пользуешься. Если внимательно прочитать даташит то сделать такую вещь можно без всяких чужих статей. Там ничего сложного. В некоторых мегах кстати есть еще и встроенный датчик температуры ))
ну такая фишка bandgap была не всегда) поэтому раньше и измеряли "по старинке". Bandgap появился в какой-то момент в мегах. Мне очень полезным оказался совет - читать даташиты на те МК, которыми пользуешься. Если внимательно прочитать даташит то сделать такую вещь можно без всяких чужих статей. Там ничего сложного. В некоторых мегах кстати есть еще и встроенный датчик температуры ))
То есть это не аппаратная функция AVR а реализация платы Arduino Mega?
На других версиях Arduino и голых AVR работать не будет?
То есть это не аппаратная функция AVR а реализация платы Arduino Mega?
На других версиях Arduino и голых AVR работать не будет?
как раз наоборот - это аппаратная функция atmel МК. Все семейства не изучал, но начиная с mega8 bandgap есть в семействе мега, а вот в тиньках нет (или если есть то не во всех, за все не скажу) хотя и тиньки и мега это семество AVR. В МК atmega328p кроме возможности измерить напряжение питания используя bandgap можно еще воспользоваться встроенным в МК термоментром, в даташите это канал ADC8. Наверняка в более старших моделях есть еще какие-то фишки - этим и полезно читать даташиты на свой МК, чтобы максимально хорошо знать возможности и ограничения
Здравствуйте
Опять проблемка с функцией vccRead()
На голой Atmega328 сильно врет.
Причем чем выше напряжение, тем меньше врет:
Куда можно копать?
sav13, от чего питаете МК во время этих экспериментов? Хорошо бы попробовать что-то другое, или убедиться осциллографом (с пропускной полосой не менее тактовой частоты мк!) , что по шине питания шум не более 20-30mV. Ещё можно измерить фактическое напряжение ИОН, для этого дать команду analogReference(INTERNAL) в пустом скетче, и мультиметром измерить на ноге aRef.
sav13, от чего питаете МК во время этих экспериментов? Хорошо бы попробовать что-то другое, или убедиться осциллографом (с пропускной полосой не менее тактовой частоты мк!) , что по шине питания шум не более 20-30mV. Ещё можно измерить фактическое напряжение ИОН, для этого дать команду analogReference(INTERNAL) в пустом скетче, и мультиметром измерить на ноге aRef.
Спасибо. Направление поисков получено - разобрался
Питаю от разных источников.
analogReference(INTERNAL) на AREF показывает 1.1 В с погрешностью 1-2%
analogReference(DEFAULT) на AREF то самое непонятное напряжение, которое и показывает
Оказывается AVCC висел в воздухе. Подцепил его к питанию - все стало нормально
Осталось вывести процент разряда в зависимости от напряжения. Зависимость то явно нелинейная.
Думаю, подключу батарейный датчик к умному дому. Прогоню пару раз до полного разряда.