Arduino питается через аналоговые входы
- Войдите на сайт для отправки комментариев
Пнд, 27/02/2012 - 05:52
Подключил Arduino к автомобилю. Снимаю данные с аналогового порта (к нему подключен через делитель блок питания на LM7805).
Теперь вопрос. Я когда USB отключаю от ардуино, лампочка на ней продолжает гореть, то есть как понимаю ардуино начинает питаться от ангалогового порта. Это нормально?
Схему я думаю не нужно прилагать, она довольно простая. LM7805 и два конденсатора в качестве источника 5В, обшая земля с ардуино. 5в через небольшой делитель (без него ситуация аналогичная) подключены к А0.
Подключил Arduino к автомобилю. Снимаю данные с аналогового порта (к нему подключен через делитель блок питания на LM7805).
Теперь вопрос. Я когда USB отключаю от ардуино, лампочка на ней продолжает гореть, то есть как понимаю ардуино начинает питаться от ангалогового порта. Это нормально?
Схему я думаю не нужно прилагать, она довольно простая. LM7805 и два конденсатора в качестве источника 5В, обшая земля с ардуино. 5в через небольшой делитель (без него ситуация аналогичная) подключены к А0.
Схему прилагать нужно - даже простую. Или хотя бы перечислить все проводочки, воткнутые в Arduino. Судя по написанному, вы проводок не только в один из аналоговых входов воткнули, но и, как минимум, в GND. Так может быть у вас и третий проводок есть - воткнутый в Vin, 5v или 3v3?
Схему вечером закину, сейчас с телефона попробую текстом объяснить.
Блок питания состоит ил двух кондеров 10мкФ и LM7805. Выходы соответственно есть земля и 5в.
+5В подключаем через сопротивление 1К на вход А0 у Ардуино. Землю у БП и Ардуино объединил. Питается Ардуино от USB.
На всякий случай укажите еще какая у вас арудина (вдруг ее схематику нужно будет посмотреть) и главное покажите ваш скетч!
Очень большую рояль играет как именно сконфигурирован порт. Читаем на http://arduino.ru/Reference/AnalogReference
В стандартной конфигурации платформ Arduino вывод AREF (вывод 21 Atmega) не задействован. В этом случае при настройке DEFAULT к выводу подключается внутреннее напряжение AVCC. Соединение является низко-импедансным и любое напряжение подведенное к выводу в этот момент может повредить микросхему ATMEGA.
Хотя, лично мне кажется что боле понятно написано в оригинале
If you're using an external reference on the AREF pin, you must set the analog reference to EXTERNAL before calling analogRead(). Otherwise, you will short together the active reference voltage (internally generated) and the AREF pin, possibly damaging the microcontroller on your Arduino board.
Что я я вольно перевел бы так:
Если вы используете внешнее напряжение на AREF пине, вы должны установить режим в EXTERNAL перед вызовом analogRead(). Иначе вы получите короткое замыкание (соединение, связь) между текущим опорным напряжением (сгенерированное внутри) и напряжением подведенным к AREF пину. Это может навернуть микроконтроллер в вашей Ардуино.
Если вообще по простому: по дефолту, к AREF пину уже подключен, сквозь микроконтроллер, пин +5V самой ардуины. Потом вы завели питание на AREF, ну и получили что "внешние питание" -> AREF PIN -> контроллер -> +5V ардуины.
А так как это соедининие AREF PIN <-> +5V дуины не расчитан на серьезные токи - остается только либо надеятся на удачу, либо "убрать" это соединение, вызвав analogReference(EXTERNAL) в setup().
У меня Arduino nano.
По теме: то есть подключая к аналоговому порту какой то источник напряжения, мне нужно с того же источника еще и AREF подключить?
А как тогда измерить напряжение, например, с аккумуляторы авто (там +12В - +15В)? Относительно чего его мерить?
Извиняюсь за, возможно, дилетантские вопросы, но с аналоговыми сигналами дел толком не имел.
Э... кажись я лопухнулся. Что-то мне показалось, что вы блок питания на AREF завели, а не на A0 (просто на A0 тогда непонятно "зачем").
Но скетч, все равно, покажите. С A0 тоже может быть похожая проблема. Например случайно включили подтягивающий вверх резистор. Лучше лишний раз убедится что порт правильно сконфигурен.
По теме: то есть подключая к аналоговому порту какой то источник напряжения, мне нужно с того же источника еще и AREF подключить?
Нет конечно. Это не имеет смысла. Тогда они всегда будут равны.
А как тогда измерить напряжение, например, с аккумуляторы авто (там +12В - +15В)? Относительно чего его мерить?
Измерения всегда происходят относительно напряжение на пине AREF. Оно и называется "опорным". "Появится" на этом пине оно может двумя путями - либо из "питания самой ардуины", либо завести снаружи на AREF PIN (и не забыть отключить внутреннюю заводку). Но.... "относительно AREF" не подразумевает что "он принимается как ноль". AREF показыает "какое максимальное напряжение" ожидается на аналоговом пине.
То есть, если на аналоговом пине у вас имеется 2.5v, а на aref +5v (по дефолту). То analogRead вернет 512, а если на A0 у вас +2.5v и на aref +2.5v, то analogRead вернет 1023 (максимально возможное значение). То есть он фактически возвращает "насколько близко A0 подобрался к AREF".
Плохая новость: максимум который можно подать на AREF это +5v. Так что "в лоб" померять +12V не получится. Нужно городить какой-то делитель напряжения, если токи не большие. Причем один из резисторов, из двух нужных для делителя, уже есть в самом кристале http://arduino.cc/en/Reference/AnalogReference.
Alternatively, you can connect the external reference voltage to the AREF pin through a 5K resistor, allowing you to switch between external and internal reference voltages. Note that the resistor will alter the voltage that gets used as the reference because there is an internal 32K resistor on the AREF pin. The two act as a voltage divider, so, for example, 2.5V applied through the resistor will yield 2.5 * 32 / (32 + 5) = ~2.2V at the AREF pin.
На arduino.ru/Reference/AnalogReference это переведено так (как по мне, то более мутно):
Внешнее напряжение рекомендуется подключать к выводу AREF через резистор 5 кОм.
Таким образом уменьшается риск повреждения микросхемы Atmega если настройки analogReference не совпадают с возможностями платформы. Однако при этом произойдет небольшая просадка напряжения, вследствие того, что имеется встроенный резистор 32 кОм, подключенный к выводу AREF. В этом случае оба резистора работают как делитель напряжения. Подсоединение внешнего резистора позволяет быстро переключаться на напряжение 3.3 В вывода AREF с напряжения 5 В DEFAULT без конфигурации аппаратной части и АЦП.
Если же там предполагаются большие токи, то нужно что-то мудрить с токовыми шунтами и т.п. Поищите, похоже уже поднимался на форме вопрос как мерять большие напряжения. В крайней случае посмотрите в сторону carduino. Никогда не поверю что там никому не пришло в голову померять бортовой аккамулятор :)
Спасибо за ответы, все оказалось проще. На монтажке, в которой собирал, оказалось бракованные контакты. И по случаю мой вывод +5в был связан с +5в ардуины. Поэтому то она и брала ток с моего Бп.
"Дело было не в бобине ..." ;)
А ведь приходится иногда убеждать (и чаще всего - безрезультатно), что Arduino - это не то решение, которое можно порекомендовать к использованию где-нибудь кроме письменного стола и других столь же райских условий.
>>А ведь приходится иногда убеждать (и чаще всего - безрезультатно), что Arduino - это не то решение, которое можно порекомендовать к использованию где-нибудь кроме письменного стола и других столь же райских условий.<<
Совершенно верно . Лично я отладку произвожу на дуине заводской , а в устройство ставлю самодельную
(максимально упрощенную).
Я, кстати, тоже так поступаю. Только не из соображений "райских условий" (вообщем-то куча нынешних "китайско-заводских" решений, которые используются в быту, ничем не лучше-защищенней, чем дуина, а часто и хуже), а из соображений "жлобства". Жаба давит отдавать мегу в конечное устройство.