Вопрос по analogReference()
- Войдите на сайт для отправки комментариев
Вс, 29/05/2016 - 16:59
Можно ли в Ардуино на 3.3В при analogReference(EXTERNAL) подавать на вывод AREF напряжение выше 3.3В ?
Цель - отследить когда напряжение на аккумуляторе, от которого питается ардуино через встроенный линейник, приблизится до уровня на выхда линейника.
При понижении напряжения RAW питания Ардуины, рассчитанной на 3.3В, напряжение на VCC "немного меньше" входного. Думаю, организовать отслеживание разряда аккумулятора и самоотключение. Если это правильно делать по-другому, подскажите, как.
В даташите прямо написано: "Voltage on any Pin except RESET with respect to Ground -0.5V to VCC+0.5V".
nkk, напряжение на ноге AREF не должно быть менее 1 вольта и более, чем AVCC. Т.е. если у вас ноги М.К. AVCC и VCC соединены вместе, и на них подано 3,3в -то не более, чем 3.3 вольта.
Чё-то я совсем не понимаю. Сложно )))
Проще забить на проблему и пользовать более мощный аккумулятор, заблаговременно его отключая.
Устройство потребляет до 200 мА, ёмкости 2.4 Ач на день точно должно хватить
Ничто не мешает подать напряжение через резистивный делитель.
axill,
я вот так всегда и делаю, но не могли бы Вы прояснить для меня одну вещь.
В даташите на стр. 244 написано: "The ADC is optimized for analog signals with an output impedance of approximately 10 k or less". Т.е. 10кОм или меньше. Но с другой стороны, чем меньше, тем больше ток через делитель.
Посчитать выходной импеданс делителя точно не так просто (т.к. нужно знать сопротивление его истоника), но в принципе оно всегда меньше сопротивлений самих резисторов делителя. Поэтому на практике я делаю так: в верхнее плечо делителя ставлю 10К, а в нижнее (которое параллельно нагрузке) ставлю что нужно по напряжению. И подаю это хозяйство на аналоговый вход.
Правильно ли я поступаю?
ЕвгенийП, по-моему товарищи из Атмела просто забыли уточнить, что всё это желательно только если идёт оцифровка высокочастотных сигналов. Дабы паразитная ёмкость входа АЦП успевала перезаряжаться. Для измерения постоянного напряжения или низкочастотных источников сигнала занижать импенданс уже не нужно.
Ага, т.е. можно поставить резисторы и побольше, чтобы батарейка на нагрев резисторов поменьше расходовалась, правильно?
ЕвгенийП, ну да. До единиц МОм проблем не должно быть. Правда коль уж об этом заострилась речь -существуют и другие мнения, что тот конденсатор подключается к входной цепи только на момент измерения, и наоборот не успевает заряжаться. Если это так, то нужно дополнительно поставить ёмкость на аналоговом входе. Она "даст току" той ёмкости, и все всё успеют. Переменку с ней уже не измерить, зато с постоянкой точно не помешает, будет дополнительным фильтром. Так что высокоомный делитель + кондюк по входу удовлетворит любым теориям :)
Есть такая схема и NPN-транзистор, похожий на BC817:
Она призвана отключить Ардуино от аккумулятора тогда, когда напряжение на аккумуляторе не будет хватать для нормальной работы Ардуино и она сама отключится, но возникает ряд вопросов.
1. Если Ардуино рассчитана на 3.3В, на каком напряжении аккумулятора на выводе, который соединён с базой транзистора, будет такой ток и напряжение, что транзистор "закроется"? Какой нужен резистор?
2. Нужно ли перенастраивать ШИМ на выводе, который соединён с базой транзистора, и нужно ли туда добавить конденсатор для сглаживания колебаний?
3. Ардуино "сама отключится", или всё-таки нужно строить делитель, проверять напряжение и отключать программно, но тогда же не получится отключить ровно ари 3.3В так как реверенстное напряжение (питания) тоже будет падать - получится только отсделить состояние, когда разниув напряжения на аккумуляторе и после стабилизатора Ардуино будет составлять некую минимальную величину (3.5В)?
Не надо транзистор
во первых если ставить то полевик, ибо на npn падает до 0.6в
во вторых сам МК достаточно усыпить, чтобы практически ничего не жрал, достаточно позаботиться о переферии
а еще есть устройства защиты лиона от глубокого разряда, или встроенные или можно внешние
Ну, так как аккумулятор конкретно в моём случае - от телефона (Nokia BL-5CB), то там есть встроенная защита. А периферия: SD-карта и GPS-модуль, запитаны от VCC Ардуино.
Встроенная зазита должна сама все отключить
nkk, вы городите чудовищный колхоз. Вообще ничего не нужно, всё время об этом пишу, но опять и опять народ тычет литий в стабилизатор. Измеряете напругу методом из ссылки, и если ниже 3х вольт то отправляете дуню в сон. Вот и всё.
Кстати кроме сна еще есть вариант активировать BOD. Тогда ничего замерять не нужно. Это плюс. Еще плюс в том, что потребление МК в состоянии ресет не зависит от ошибок программы и меньше, чем потребление в режиме power-down. Минус тоже есть - BOD кушает свои 5-10мкА
Понял, спасибо, прикльно оно выводит напряжение на VCC!
Но sd-карта и gps-модуль смогут нормально работать при напряжении 3.5-4.2В?
Может, лучше на RAW подавать и так же отслеживать, когда напряжение ниже 3.15В опустится?
^- так разряжался у меня 18650, но, думаю, с телефонным li-po будет похожий график,
то есть, при 3.15 или при 3.0 отключать разница не большая, но при 3.3 может еще минут 10 поработать.
А при напряжении на стабилизаторе ниже 3.3В, напряжение на VCC будет где-то на 0.15 В меньше (кажется)
Включил сейчас модуль этот http://www.aliexpress.com/item/Free-Shipping-Pro-Mini-168-Mini-ATMEGA168-5V-16MHz-For-Arduino-Compatible-With-Nano/32551909986.html
5V подал на RAW - получил ~3.677
Получается, он не на 5В? или это из-за того, что напряжение 5V, а не 7? У Ардуино на 3.3 не такая большая разница!
RAW - это вход линейного стабилизатора напряжения. С него нельзя снять на выходе столько же, сколько подано на вход. Потому что у линейного стабилизатора есть некоторое падение напряжения, обычно около 1-2В. Поэтому на 5В стабилизатор надо подавать минимум 7В.
Здравствуйте.
Ардуино нано питается от 4 Вольт, нужно измерять напряжение 0-20Вольт
использую резисторный делитель 1к/20k (при 20 Вольтах на входе ардуино будет ~952мВ)
В протеусе получаю 11,96 Вольт (батарейка 12 Вольт)
Это верно?
Еще, R2/(R1+R2) или (R1+R2)/R2 и почему?
И ещё вопрос, если при использовании analogReference(INTERNAL) на аналоговый вход попадет напряжение более 1,1 Вольт но менее 5 вольт я получу только неверные показания, со входом ничего не случится?
Со входом ничего не случиться, выходное значение в интервале 1.1-5 В будет 1023.
Точность всех элементов не велика. 11.96 вполне нормально.
Напряжение на нижнем резисторе равно ток цепи (напряжение делённое на сумму резисторов) умноженный на номинал резистора. Поэтому R2/(R1+R2)
Спасибо. Как быстро ответ получила.))))
Вот видите, как важно вопрошать глядя в глаза:)
Вот видите, как важно вопрошать глядя в глаза:)
Правильней
float
Vbat = ((analogRead(A1) + 0.5) * 1.1) / 1024.0;
А 0.5 объяснить можешь?
не стоит, опять будет флейм на 2 страницы
не стоит, опять будет флейм на 2 страницы
да ладно уж, пусть объяснит
Округляем до ближайшей линии сетки V/1024 или округляем вниз. Статистический анализ из очень старого срача с моим участием показал, что +0.5 чуть-чуть адекватнее! ;)))))
Округляем до ближайшей линии сетки V/1024 или округляем вниз. Статистический анализ из очень старого срача с моим участием показал, что +0.5 чуть-чуть адекватнее! ;)))))
тогда наверное
analogRead(A1) * 1.1 +0.5?
Не знаю что там со статистикой, но при нуле на входе нуля на выходе не получим. Это не правильно. Да и делить на 1024 тоже как то через чур. Но у каждого свои тараканы.
Впервые это увидел у Ника Гаммона. Но он не объяснял почему так, насколько помню.
При опорном 5 В analogRead() возвращает целое количество "кусочков" напряжения по 4.8828мВ. При входном 4.8 В этих кусочков будет ноль. Это не совсем правильно.
При входном 5 В analogRead() возвращает 1023. 1023 * 5 / 1024 = 4.995 В. Опять не хватает этих 4.88 мВ.
Прибавляя к analogRead() 0.5, расчетные напряжения будут приходиться на середину этих кусочков.
Также, при оверсемплинге, читая например четыре раза analogRead() значением по 1023, получим 4092, а не 4095. А прибавляя к analogRead() 0.5, получим 4094, что ближе к максимальному 12-битному значению.
Если мутно написал, то берем однобитный АЦП - digitalRead() и измеряем напряжение на пине (0-5 В). Это даст либо 0 В, либо 2.5 В.
А вот digitalRead()+0.5 даст 1.25 или 3.75 В, что ближе к истине. Это и есть середина одного из двух кусочков по 2.5 В.
Подели на 1023 и не будет необходимости 0.5 вставлять. Но если взять есп32 то все эти рассуждения вообще далеко от реалий оцифровки.
Значений 1024, а делить на 1023? Выше мой пост точно читали?))
я ж говорил что будет срач :)
Честно говоря, мне кажется разница +0,5 и наоборот настолько несущественна, что не стоит обсуждения. Надо просто выбрать любую из двух систем и всегда ее придерживаться.
У меня есть четкая точка зрения на этот счет и другие мнения меня просто не интересуют. Я даже готов допустить, что оппоненты более правы, лишь бы они не указывали мне, что делать :)
Намеренно не пишу, какой из двух вариантов выбрал, ибо на суть это не влияет.
тогда наверное
analogRead(A1) * 1.1 +0.5?
а вот это бред :)
Надеюсь с этим согласны все и срача не будет:)
Исключительно для размышления. Точек 1024 а интервалов между точками, которые собственно и являются теми ячейками, куда АЦП во время работы складывает результат 1023. То есть если АЦП залито по полной, значение 1023. Или 4095 для 12 битного. Что соответствует референсному напряжению.
Отвечать на этот пост можно не надо. Я уже писал, что как то всё это перешло в раздел веры. Вот только обидно когда адепты 1024 агитируют молодёжь в свои ряды, закрывая глаза на явные ляпы.
Мнение это руками обеими поддерживаю я...
я ж говорил что будет срач :)
Честно говоря, мне кажется разница +0,5 и наоборот настолько несущественна, что не стоит обсуждения. Надо просто выбрать любую из двух систем и всегда ее придерживаться.
У меня есть четкая точка зрения на этот счет и другие мнения меня просто не интересуют. Я даже готов допустить, что оппоненты более правы, лишь бы они не указывали мне, что делать :)
Намеренно не пишу, какой из двух вариантов выбрал, ибо на суть это не влияет.
тогда наверное
analogRead(A1) * 1.1 +0.5?
а вот это бред :)
Надеюсь с этим согласны все и срача не будет:)
цитирую - Напряжение поданное на аналоговый вход, обычно от 0 до 5 вольт будет преобразовано в значение от 0 до 1023... видим - целочисленные значения и как к ним добавить 0,5? А вот когда переведём во float - видимо можно округлить до целых в большую сторону, если напряжение попадает в диапазон выше чем ххх.5 до ххх.9
Тсссс! Это новая традиция рождается! На 31-ое января. Как баня у Лукашина.
так пятница жеж, их никто не отменял, да и время есть до НГ )))
Тсссс! Это новая традиция рождается! На 31-ое января. Как баня у Лукашина.
Влад, или у тебя часы малость спешат, или ты уже проводил старый год)))
Я утром смешал песто "лайт" заменив кедровые орехи арахисом. Потом подмазку в тарталетки под икру, масло пополам с макарпоне плюс петрушка и чеснока зубок. Тарталетки имеют вкус подмазки, а икра, матьеё не чуствуется вааще, какое-то говно с рынка! Аж зло берет! Потом я нашпиговал кусман лопатки на 4 кг в духовку в качестве буженины и натер её кучей всего (если интересно, то: уцхо сунели. паприка, паприка копченая, черный перец, эстрагон, кайенский перец, соль). Потом сел и стал провожать Старый Год под "Бонда" У меня на диске полна коллекция, выбрал "Завтра не умрет никогда", про газетного магната.
Еще трезвый почти! Гости только к 21 приедут.
Ну если можно)))
первый интервал 0-4.88 мВ. Возвращаемое значение АЦП = 0.
1024-й интервал 4.995-5В. АЦП=1023.
Точек 1025 аж целых штук)))
Пойду добавлю еще 0.7
С надвигающимся ++!
первый интервал 0-4.88 мВ. Возвращаемое значение АЦП = 0.
1024-й интервал 4.995-5В. АЦП=1023.
Точек 1025 аж целых штук)))
Вот из таких заблуждений и возникают споры. Пока интервал не наполнится значение АЦП не перещёлкнется. Первый интервал верно. До 4.88мВ будет выдавать 0. А вот 1024-го интервала нет. Есть 1023-й. И пока он не наполнен значение АЦП 1022. Соответвенно 1023 случится от 5В и выше.
Про наполнен исключительно ассоциация наливания заряда в ёмкости АЦП STMок.
А был ответ что документация Атмеги328 советует делить на 1024 ? )
А давайте переведём разговор из холиварного в научное русло.
Округление до целого прибавлением 0,5 с последующим отбрасыванием дробной части, это т.н. «привязка к бесконечности» - одно из пяти правил округления, предусмотренных стандартом IEEE 754 (IEC 60559).
Но там есть и другое правило – «привязка к чётному». Разница в том, что делать, когда округляемое число содержит ровно пять десятых.
У кого-нибудь есть идеи для чего эту «привязку к чётному» придумали? Что она даёт и чем так хороша, что даже в стандарт попала? Так-то вроде – она гораздо сложнее и затратнее.
P.S. Виноват, бес попутал (вроде, и не отмечал пока ещё). Прибавление 0,5 и отбрасывание - это привязка к плюс бесконечности (а не просто к бесконечности). А дальше в п. 1 и 2 я описал именно привязку к бесконечности. Извиняйте. Но суть дела не меняется - все эти способы стандартом предусмотрены.
Еврейские фокусы, не иначе.
Граф, тут в твой огород чёта полетело. Признавайся, ты придумал?
Осваивал АЦП МК на MSP430. До сих пор считаю у TI лучшая документация. Например из https://www.ti.com/lit/ug/slau406f/slau406f.pdf . Это параграф про АЦП. 12 бит. Результат оцифровки (1.2.1) N=4095*Vin/Vref . Совсем не 4096.