Сдвиг цифрового сигнала 2,7 В на логические уровни Arduino?

Я в значительной степени новичок в электронике, и в настоящее время я работаю над личным проектом, где у меня есть устройство, которое выдает цифровой сигнал (прямоугольную волну), который идет от 0 В до 2,7 В, и мне нужно прочитать это сигнал с моим Arduino. Этого, к сожалению, недостаточно для Arduino Mega 2560, поскольку минимальное напряжение для включения цифрового вывода составляет не менее 3 В.

Я провел некоторое «исследование» и наткнулся на шестнадцатеричный переключатель уровня MC14504B, который показался идеальным решением моей проблемы. Однако... У меня возникли проблемы с интерпретацией таблицы данных...

TL;DR: мне нужно сдвинуть уровень моего сигнала 2,7 В как минимум до 3 В или более.

Это логическая схема переключателя уровня:

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

А это характеристики:

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

Я не совсем уверен, как интерпретировать эти цифры. Планирую использовать режим TTL-CMOS.

Из того, что я могу сказать, пока вход считается 1 (высоким), мое напряжение на выходе будет ~ 5 В, если Vdd равно 5 В, что идеально. Подойдет ли 3,3 В Vdd, поскольку Arduino требуется не менее 3 В для включения высокого уровня на выводе?

Теперь к моему реальному вопросу... Я не понимаю часть Vcc и Vin (Vol, Voh).

Из таблицы видно, что если Vcc равно 5 В, а Vdd равно 10 В, то Vin будет логическим 0, если напряжение, подаваемое на вход <= 0,8 В, то же самое происходит, если Vcc равно 5 В, а Vdd равно 15 В.

Теперь, насколько я могу судить, вход будет считаться высоким, если на вход подается не менее 2 В или более, когда Vcc = 5 В и Vdd = 10 В/15 В, но и Voh, и Vol изменяются в зависимости от Vdd? Что это означает для моего варианта использования?

Что, если я использую 5 В для Vcc и Vdd? Что, если я использую 3,3 В для Vcc и Vdd? Что, если я использую 3,3 В для Vcc и 5 В для Vdd и наоборот. Что происходит в этих сценариях? Может ли кто-нибудь объяснить это очень простым способом, пожалуйста? Кажется, я что-то упускаю здесь, поскольку моя интерпретация не имеет для меня смысла.

Спасибо!

Есть ли причина, по которой вы не хотите запускать Mega на 2,7 В?
Можете ли вы подтвердить, что Arduino работает на 5 В?
Почему бы ему не работать на 5V? И что именно вы имеете в виду, почему я не хочу запускать Mega на 2,7 В? Mega использует логику 5V?
Просто хотел быть полностью уверенным :) Обычно вы должны использовать одни и те же рельсы для каждой стороны переключателя уровня, что и логические микросхемы, которые подключаются к каждой стороне.
Кажется, я что-то упускаю здесь, я новичок. :) Что заставило вас подумать, что Arduino не работает при напряжении 5 В, и по какой причине это может быть не так? В вашем последнем комментарии вы имеете в виду, что Vcc и Vdd на переключателе уровня должны быть подключены к контакту 5V на Arduino? :)
Какой частоты эта прямоугольная волна?

Ответы (4)

TL; DR: используйте Vcc = 5 В, Vdd = 5 В, режим TTL-CMOS, и все будет в порядке.

«Из того, что я могу сказать, пока вход считается 1 (высокий), мое напряжение на выходе будет ~ 5 В, если Vdd равно 5 В, что идеально. Будет ли 3,3 В Vdd приемлемым, поскольку Arduino требуется не менее 3 В, чтобы превратить булавка высоко?"

Правильно, вы получите выход ~ 5 В, если используете Vdd = 5 В. Однако в режиме TTL-CMOS напряжение Vdd и Vcc должно быть не менее 5 В (рис. 4 таблицы данных). Поскольку точка переключения входной логики составляет 1,5 В для Vcc = Vdd = 5 В, это будет отлично работать с вашим логическим входом 2,7 В.

«Теперь к моему реальному вопросу… Я не понимаю часть Vcc и Vin (Vol, Voh)».

В этой таблице данные перечислены довольно странным образом, и на самом деле не совсем понятно, что это значит. Моя интерпретация заключается в том, что «VOL = 1,0 В постоянного тока» означает, что при работе в этом состоянии выходное напряжение гарантированно будет меньше 1 В постоянного тока. К счастью, я не думаю, что это действительно проблема для вашего приложения.

«Вход будет считаться высоким, если на вход подается не менее 2 В или более, когда Vcc = 5 В и Vdd = 10 В/15 В, но и Voh, и Vol изменяются в зависимости от Vdd? Что это означает для моего варианта использования?»

Да, вы правильно интерпретируете это. Для вашего варианта использования игнорируйте числа «Voh и Vol» в разделе «Входное напряжение» и вместо этого уделите больше внимания самому верхнему разделу с надписью «Выходное напряжение», в котором просто говорится, что если вы используете Vdd = 5 В, вы будете получить выход ~ 5 В.

«Что, если я использую 5 В для Vcc и Vdd для обоих? Что, если я использую 3,3 В для Vcc и Vdd для обоих? Что, если я использую 3,3 В для Vcc и 5 В для Vdd и наоборот».

Опять же, см. рис. 4. В режиме TTL-CMOS вам нужно использовать 5 В для Vcc и Vdd. Я бы сказал, что использование 5 В для обоих — правильное решение для вашего приложения.

Спасибо за ответ на мой первоначальный вопрос. :) Я попробую это завтра и посмотрю, как оно пойдет.
Разве " TL;DR: " не должно быть внизу?
И насколько это актуально?

Пока вы не возражаете против логической инверсии, вы можете использовать что-то простое, например, транзистор и два резистора.

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

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

Выходное напряжение датчика выше 0,8 В включает транзистор Q1. R2 подтягивает вход Arduino к шине питания, когда Q1 выключен. Если вы используете контакт ввода-вывода с программируемым подтягивающим резистором, вы можете опустить R2. Большинство слабосигнальных NPN BJT подойдет для Q1.

Я думал об этом раньше, однако вместо этого я решил использовать переключатель уровня, потому что он не инвертировал мой сигнал, ну, инвертированный сигнал не представлял бы проблемы. В любом случае, R2 беспокоил меня... Насколько я читал, выводы Arduino имеют импеданс 100 кОм, и подключение входного вывода к этой схеме вызовет падение напряжения на R2... разве внутреннее сопротивление вывода входа достаточно, чтобы вытащить штифт, зачем нужен R2? Спасибо. :)
@ 0xd4v3, пожалуйста, проверьте техническое описание своего устройства, а не пользуйтесь информацией из вторых рук». Входной ток утечки +/-10 мкА более типичен, поэтому значение R2 в порядке ... но проверяйте таблицу данных, а не «насколько я знаю». Отмечу, что можно использовать программируемую подтяжку, R2 просто сделал схему универсальной для не-Arduino MCU и т.д.

Входы Arduino должны соответствовать указанным логическим уровням для запаса.

VIL <= 0,3 В пост. тока макс.
VIH >= 0,7 В пост. тока мин.

Таким образом, входная прямоугольная волна должна быть> = 0,4 В куб. См и для 5 В или 0,4 * 5 = 2,0 В пик-пик, и у вас есть 2,7 В с запасом 0,7 В.

В качестве альтернативы вы можете использовать пару переменного тока для входа со смещением R на Vcc/2.

Существует множество решений для переключения уровней от 2,7 В до 5 В.

Преподобный Б.

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

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

  • при условии бесшумного питания и сигнала.
Спасибо за ответ, но как новичок, я не уверен, что понимаю то, что вы пытаетесь объяснить здесь. :) 0,3*5В = 1,5В и 0,7*5В = 3,5В. Как получается, что цифровой сигнал по-прежнему переводит вывод на высокий уровень, если для его включения требуется не менее 0,7 * Vcc? Mega использует логические уровни 5V, верно?
Логические уровни определяются с адекватным запасом по шуму в зависимости от температуры и допусков изготовителя, но номинально пороговое значение равно Vcc/2. Предполагается, что сигнал есть всегда. Для активного неинвертирующего транслятора буфера см. мою ссылку, выделенную синим цветом (?)
Спасибо, что выложили схему. :) Я проверил вашу ссылку, но она ведет на страницу, которая выдает ошибку.
Учитывая, что ОП не упомянул частоту прямоугольной волны, я бы рекомендовал не использовать этот подход.
извините за ссылку, попробуйте digikey.com/products/en/integrated-circuits-ics/… и используйте фильтры для самой дешевой детали, которая соответствует V1 = 2,7 V2 = 5
Сигнал в основном представляет собой сигнал данных со скоростью передачи 1200 бит/с. :) Я провел несколько симуляций, и, похоже, есть задержка до стабилизации напряжения, что может создать проблему при чтении сигнала, поскольку я могу пропустить несколько битов из-за задержки.
что вызывает задержку? длинный кабель? программная задержка?
Какова цель D1? В LTspice он предотвращает включение Q1 (всего 5 мкА через R4).

Уровни входного напряжения TTL составляют >=0,8 В низкого и >=2,0 В высокого. MC14504B принимает эти логические уровни в режиме TTL с Vcc = +5В. Ваши уровни сигнала 0В и 2,7В, так что все хорошо.

MC14504B имеет выходы CMOS, которые идут от 0 В до Vdd. Arduino работает при напряжении 5 В, поэтому вам также следует установить Vdd на +5 В.