Как я могу использовать вход 12 В на цифровом выводе Arduino?

Я создаю контроллер для системы 12 В, используя микроконтроллер Arduino Uno. Для выходов я использую релейный щит для переключения компонентов 12 В. У меня есть тумблер на 12 В, который включает некоторые 12-вольтовые компоненты в системе, и я хочу использовать триггерный сигнал от этого же переключателя для отправки на цифровой вход Arduino. Я знаю, что Arduino может обрабатывать максимум 5 В. Что было бы лучшим способом понизить 12 В, выходящие из переключателя, до 5 В для входа?

РЕДАКТИРОВАТЬ: Система предназначена для использования в автомобиле. Нужно ли как-то снизить силу тока автомобильного аккумулятора, чтобы не взорвать компоненты?

сила тока автомобиля не имеет значения - компоненты потребляют ровно столько тока, сколько им нужно. Автомобильный аккумулятор способен подавать сотни ампер, например, необходимый для стартера. Это не означает, что всегда текут сотни ампер, которые могут повредить вещи. :)

Ответы (5)

Хорошие новости! Это будет дешево! :-)

Простой резистивный делитель снизит 12 В до 5 В, которые может переварить Arduino. Выходное напряжение можно рассчитать как

В О U Т знак равно р 2 р 1 + р 2 В я Н

Хорошим выбором являются номиналы резисторов в диапазоне 10 кОм. Если ваш R2 составляет 10 кОм, то R1 должен быть 14 кОм. Теперь 14 кОм не стандартное значение, а 15 кОм. Ваше входное напряжение будет 4,8 В вместо 5 В, но Arduino будет воспринимать это как высокий уровень. У вас также есть небольшой запас на случай, если 12 В окажется слишком высоким. Даже 18 кОм по-прежнему дадут вам достаточно высокие 4,3 В, но тогда вы должны начать думать о 12 В как о слишком низком уровне. Будет ли напряжение по-прежнему восприниматься как высокое? Я бы остановился на 15 кОм.

редактировать
Вы упомянули автомобильную среду, и тогда вам нужна дополнительная защита. 12 В автомобиля никогда не бывает 12 В, но в большинстве случаев выше, с пиками на несколько вольт выше номинальных 12 В. (На самом деле номинал больше похож на 12,9 В, по 2,15 В на ячейку.) диод параллельно R2, и это должно отсекать любое напряжение, превышающее 5 В стабилитрона. Но напряжение стабилитрона зависит от тока, и при низком входном токе, который дают резисторы, оно отключится при более низких напряжениях. Лучшим решением было бы установить диод Шоттки между входом Arduino и источником питания 5 В. Тогда любое входное напряжение выше примерно 5,2 В приведет к тому, что диод Шоттки будет работать, а входное напряжение будет ограничено 5,2 В. Для этого вам действительно нужен диод Шоттки, обычный PN-диод имеет 0.

Оптрон Better
Michael's - хорошая альтернатива, хотя и немного дороже. Вы часто будете использовать оптопару для изоляции входа от вывода, но вы также можете использовать ее для защиты входа, как здесь.

введите описание изображения здесь

Как это работает: входной ток зажигает внутренний инфракрасный светодиод, который вызывает выходной ток через фототранзистор. Соотношение между входным и выходным током называется CTR , что означает коэффициент передачи тока. CNY17 имеет минимальный CTR 40 %, что означает, что вам нужно 10 мА на входе для 4 мА на выходе. Перейдем к входу 10 мА. Тогда R1 должно быть (12 В - 1,5 В) / 10 мА = 1 кОм. Выходной резистор должен вызвать падение на 5 В при 4 мА, тогда это должно быть 5 В / 4 мА = 1250 Ом. Лучше чуть повыше, все равно больше 5В напряжение не упадет. 4,7 кОм ограничит ток примерно до 1 мА.

Vcc — это источник питания Arduino 5 В, Vout поступает на вход Arduino. Обратите внимание, что вход будет инвертирован: низкий уровень, если есть 12 В, и высокий, если его нет. Если вы этого не хотите, вы можете поменять местами выход оптопары и подтягивающий резистор.

edit 2
Как решение с оптопарой не решает проблему перенапряжения? Резисторный делитель логометрический: выходное напряжение является фиксированным отношением входного. Если вы рассчитали 5 В на выходе при 12 В на входе, то 24 В на входе дадут 10 В на выходе. Не в порядке, следовательно, защитный диод.

В схеме оптопары видно, что правая сторона, которая подключается к входному контакту Arduino, вообще не имеет напряжения выше 5 В. Если оптопара включена, транзистор будет потреблять ток, я использовал 4 мА в приведенном выше примере. 1,2 кОм вызовет падение напряжения на 4,8 В в соответствии с законом Ома (ток, умноженный на сопротивление = напряжению). Тогда выходное напряжение будет 5 В (Vcc) - 4,8 В на резисторе = 0,2 В, это низкий уровень. Если ток будет ниже, падение напряжения также будет меньше, а выходное напряжение возрастет. Ток 1 мА, например, вызовет падение на 1,2 В, а выходное напряжение будет 5 В - 1,2 В = 3,8 В. Минимальный ток равен нулю. Тогда у вас не будет напряжения на резисторе, и на выходе будет 5 В. Это максимум, вот.

Что, если входное напряжение станет слишком высоким? Вы случайно подключили аккумулятор на 24 В вместо 12 В. Тогда ток светодиода удвоится, с 10 мА до 20 мА. CTR 40 % вызовет выходной ток 8 мА вместо расчетных 4 мА. 8 мА через резистор 1,2 кОм будет падением 9,6 В. Но от источника питания 5 В это было бы отрицательным, а это невозможно; здесь нельзя опускаться ниже 0 В. Таким образом, в то время как оптопара очень хотела бы потреблять 8 мА, резистор будет ограничивать это. Максимальный ток через него - это когда на него подаются полные 5 В. Тогда на выходе действительно будет 0 В, а ток 5 В / 1,2 кОм = 4,2 мА. Таким образом, какой бы источник питания вы ни подключили, выходной ток не превысит этого значения, а напряжение останется в диапазоне от 0 до 5 В. Дополнительная защита не требуется.

Если вы ожидаете перенапряжения, вам придется проверить, может ли светодиод оптопары выдержать повышенный ток, но 20 мА не будут проблемой для большинства оптопары (они часто рассчитаны на максимум 50 мА), и, кроме того, это для двойного входное напряжение, чего, вероятно, не произойдет в реальной жизни.

Система предназначена для использования в автомобиле. Нужно ли как-то снизить силу тока автомобильного аккумулятора, чтобы не взорвать компоненты? Я новичок в этом. Спасибо
@DW О, машина! :-(. Я обновлю свой ответ.
@DW - Нет, емкость автомобильного аккумулятора не имеет значения. Ток будет определяться напряжением (12 В) и сопротивлением (всего 25 кОм). Тогда по закону Ома ток будет 12 В/25 кОм = 0,5 мА. Неважно, какой тип батареи — 40 Ач или 400 Ач; резисторы не позволяют больше.
Замечательно. Спасибо за вашу помощь. Просто любопытно, а будет ли что-то подобное работать? robotshop.com/ca/productinfo.aspx?pc=RB-Spa-750&lang=en-US
@DW: с помощью оптопары вы можете отделить батарею от Arduino, но если она питается от батареи, обе земли будут подключены.
@DW - Да, вроде нормально. Этот же продукт можно найти на сайте Sparkfun , где есть больше информации, вроде ссылки на техпаспорт оптопары. Вы получаете 2 канала, вы можете использовать другой для определения другого коммутируемого напряжения, если это необходимо.
@DW - Пожалуйста. Я просто подумал: мне нужно добавить к моему ответу, почему оптопара в порядке с более высоким напряжением, где делителю нужна дополнительная защита, или это ясно? Просто спросите, нужна ли вам дополнительная информация. (Только денег не проси ;-))
@stevenvh Может быть, если вы не возражаете, я совершенно новичок в этом удивительном мире электроники. Я технолог-механик, и мы почти ничего не касались электрики в колледже, не говоря уже об электронике. Спасибо
@stevenvh Также небольшой вопрос: в руководстве Arduino Uno говорится, что рекомендуемое входное напряжение составляет 7–12 В, а пределы — 6–20 В. Означает ли это, что я могу запустить его прямо от автомобильного аккумулятора? Спасибо
@DW - 12 В автомобиля может быть очень шумным и может иметь высокие пики. Чтобы защитить регулятор напряжения Arduino от них, вы можете поместить TVS (диод подавления переходного напряжения) на вход питания Arduino.
@stevenvh Спасибо, Стив. Я с нетерпением жду возвращения в пользу кого-то, кто новичок в электронике, как только я буду уверен в этом. Спасибо
Еще одно замечание: входное логическое значение HIGH многих 5-вольтовых устройств намного ниже, чем 5 В — PIC, который я использую, требует всего 2 В для считывания логической 1. Таким образом, используя простой делитель напряжения, скажем, с резисторами 4,7K и 1,8K 12В упадет до 3,3В. Если вы случайно получите напряжение до 18 В, входное напряжение на вашем выводе все равно будет чуть ниже 5 В.
@stevenvh спасибо за этот обширный ответ. Мне было интересно, могу ли я использовать следующую схему, если мне нужен ВЫСОКИЙ выход для ВЫСОКОГО входа (здесь также 12 В, но не автомобиль :)). X1 подключается к GND при нажатии кнопки, Y1 - к контакту Arduino.
Лол, электроника... делает программирование очень простым!
Поскольку вы собрали здесь все варианты, есть мнение , что вы можете просто ограничить ток и позволить фиксирующему защитному диоду AVR удерживать напряжение в страхе. Предполагается, что для этого подойдет простой последовательно соединенный резистор номиналом 47–100 кОм. Похоже на ваш вариант шоттки, но без внешнего шоттки. Или не? Считаете ли вы это допустимым вариантом?
также ваш собственный пост здесь :) electronics.stackexchange.com/a/35817/180863 , так что я думаю, что это отвечает на вопрос.

Хороший способ изолировать сигнал переключателя 12 В — пропустить его через оптопару. Схема будет настроена примерно так.

введите описание изображения здесь

Vi на диаграмме представляет 12 В в вашей цепи, которая переключается вашим переключателем (S1). Выберите R1, чтобы ограничить ток через часть D1 оптопары до уровня, который находится в пределах номинальных значений выбранного компонента.

Оптопары не являются самыми быстрыми компонентами в мире, особенно самыми дешевыми, но в случае медленного действия, такого как переключатель, управляемый человеком, скорость соединителя не имеет большого значения.

Для независимости от напряжения используйте резистор для регулирования тока и стабилитрон для регулирования напряжения, например:

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

С резистором 30 кОм это будет выдавать 4,99 В и потреблять всего около 234 мкА при 12 В.
В этом случае:
R1 потребляет 234 мкА x (12 В - 4,99 В) = 1,64 мВт.
D1 потребляет 234 мкА x 4,99 В = 1,17 мВт.

Общая потребляемая мощность: 2,81 мВт (при высоком входе)

Для чего-либо видимого я бы использовал светодиод + резисторный делитель последовательно, чтобы дать сигнал 5 В при 12 В, и поставил стабилитрон параллельно нижней половине делителя и светодиоду для защиты от перенапряжения. Таким образом, светодиод загорается, когда у вас есть входной сигнал, и дает визуальную обратную связь.
@GoswinvonBrederlow, не могли бы вы нарисовать схему светодиода / диода / резистора?
На приведенной выше схеме установите R1 на 770 Ом и добавьте 330 Ом и красный светодиод параллельно стабилитрону. Затем при входном напряжении 12 В через светодиод будет проходить ~ 9 мА, и вы получите выходной сигнал 5 В. Если входное напряжение повышается, стабилитрон ограничит выходной сигнал до 5,1 В и защитит как Arduino, так и светодиод.

Вы также можете использовать диод и резистор следующим образом:

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Я бы сделал резистор довольно жестким, иначе вы будете потреблять много энергии от этой схемы. Прелесть этой схемы (по сравнению с делителем напряжения) в том, что ее не волнует, составляет ли ваше исходное напряжение 12 В, 14 В или 15 В: оно будет 5 В (фактически 5,2-5,3 В в зависимости от диода) независимо от входное напряжение.

это довольно умно, +1 за независимость от напряжения!
Осторожнее с перенапряжением на выводе абсолютного максимального номинала. Например, таблица данных ATmega32u4: Напряжение на любом выводе относительно земли (8): от -0,5 В до VCC + 0,5 В. При использовании обычного диода напряжение будет больше, чем VCC + 0,5 В, если используется резистор менее 170 кОм. Я думаю, что диоды Шоттки являются наиболее безопасными для этого.
Вы должны делать это только с диодом Шоттки. В противном случае диод ESD на стороне высокого напряжения в uC может войти в проводимость раньше, чем D1. Они не предназначены для непрерывной работы.

Немного поздно, но в моей машине я использую LM7805. Отлично работает и стоит дешево.

Не так дешево, как 2 резистора или резистор и диод.
@TonNies Вы неправильно поняли вопрос. ОП не ищет напряжение питания для своего контроллера. Это больше касается обработки сигнала.
Нет ничего плохого в использовании LM7805 для сдвига уровня сигналов 12 В.
@chugadie: Но это очень необычный и относительно «дорогой» излишний подход, если все, что вам нужно, это снизить 12 В для одного контакта ввода-вывода.