Level converter arduino схема

Обновлено: 01.07.2024

В настоящий момент все больше и больше производителей микросхем осуществляют перевод их на питание от 1.8В до 3.3В. В связи с этим возникает задача согласования логических уровней устройств с различными питающими напряжениями. Наиболее часто производится подключение 3.3В устройств к 5В устройствам. Методы согласования для этого случая и рассмотрим в данной статье. Однако общие принципы приведенных методов справедливы и для согласования устройств с другими питающими напряжениями при соответствующей адаптации.

Не все методы согласования могут использоваться во всех ситуациях, поэтому необходимо разобраться в механизмах работы каждого из них. Не важно какие устройства соединяются между собой, важно направление сигнала. Направление определяет необходимость применения защиты. Например, при подключении выхода устройства с 5В питанием ко входу устройства с 3.3В питанием необходимо предусмотреть защиту по входу для второго устройства. Однако выход 3.3В устройства можно напрямую подключить ко входу 5В устройства и при этом есть вероятность, что второму устройству для нормальной работы будет достаточно уровня сигналов первого, так как они находятся в допустимых пределах. Для выхода с открытым коллектором (стоком) необходимо не забывать предусматривать подтягивающий резистор.
Существуют также устройства с питанием 3.3В, которые могут напрямую подключаться к 5В устройствам. У данных устройств в описании входных интерфейсов присутствует параметр "5V Tolerant Input", т.е. возможно прямое подключение к 5В выходу.
Если не указано иное, то при описании способов согласования уровней предполагается, что 5В и 3.3В устройства имеют общую "землю". Для упрощения при моделировании за логический "0" будем принимать нулевой уровень напряжения, за логическую "1" будем принимать +5В. Стрелочками будем указывать направление тока в цепи.

Последовательно включенный резистор

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


Эта схема требует наличия встроенной защиты входных портов от перенапряжения на стороне 3.3В устройства. Защита представляет собой два диода, включенных по схеме ограничения уровня (clamping diodes). Эти диоды довольно надежны, но они не предназначены для длительного пропускания больших токов, поэтому и используется ограничительный резистор. Он ограничивает ток, протекающий через диоды тем самым предотвращая их повреждение. Желательно чтобы этот ток был как можно меньше (микроамперы). При больших токах возможно повреждение диодов и, кроме того, микросхема может "защелкнуться" — выражается в быстром, сильном разогреве корпуса последней.
Номинал резистора R1 зависит от максимально возможного тока через диод D1. 10 кОм резистор будет безопасным для большинства устройств. Необходимо помнить, что большой номинал резистора будет ограничивать максимально возможную скорость передачи сигнала. Для высокоскоростных сигналов необходимо уменьшать резистор, но для большинства устройств его значение должно быть не менее 1 кОм.
Если 3.3В устройство не содержит защитных диодов по входу, то использовать данную схему сопряжения нельзя — это может привести к выходу устройства из строя.
Если известен максимально допустимый ток защитных диодов, то можно рассчитать минимальное сопротивление резистора. Например, для микросхем Propeller максимальный ток защитных диодов составляет +-500 мкА:
R = U/I = (5 — 3.3 — 0.6)/500E-6 = 2.2 кОм
где 0.6В — падение напряжения на защитном диоде.
Для безопасности выбираем резистор с большим номиналом из стандартного ряда — 2.7 кОм.
В случае отсутствия защитных диодов можно использовать один внешний диод:

Но более разумно в этом случае подумать о возможности использования других схем сопряжения.

Достоинством схемы с последовательным резистором является ее простота. Существенным недостатком является инжекция дополнительного тока в источник питания 3.3В. При мощном 5В выходе и маломощном источнике питания 3.3В эта инжекция тока может привести к флуктуациям трехвольтового питания вокруг 3.3В.

Делитель напряжения

Данная схема используется для согласования уровней 5В выхода с 3.3В входом. Наиболее часто встречаемая у радиолюбителей схема. Схема является односторонней.


Для приведения уровня используется обычный делитель напряжения — резисторы R1 и R2. Как правило, выходное сопротивление RS очень мало (менее 10 Ом), поэтому для того, чтобы его влиянием на резистор R1 можно было пренебречь необходимо выбирать резистор R1 много больше RS. На приемной стороне значение резистора RL очень велико (более 500 кОм), поэтому для того, чтобы его влиянием на резистор R2 можно было пренебречь необходимо выбирать резистор R2 много меньше RL.
При выборе номиналов резисторов необходимо учитывать компромисс между рассеиваемой мощностью и временем нарастания/спада сигнала. Для минимального потребления суммарное сопротивление резисторов R1 и R2 должно быть как можно больше. Однако, емкость нагрузки, состоящая из паразитной емкости CS и входной емкости 3.3 В устройства CL, может сильно повлиять на время нарастания/спада входного сигнала. При слишком больших R1 и R2 время нарастания/спада может выйти за допустимые пределы.
Пренебрегая значением RS и RL получим формулы для расчета значений R1 и R2:

Vout / (R1 + R2) = Vin / R2, следовательно, R1 = (Vout — Vin) * R2 / Vin = (5 — 3.3) * R2 / 3.3 = 0.515 * R2

Формула для вычисления времени нарастания/спада сигнала имеет вид:

где
R = 0.66 * R1 — эквивалентное сопротивление,
С = СS + CL — эквивалентная емкость,
Vi = начальное напряжение на конденсаторе C,
Vf = конечное напряжение на конденсаторе С,
Va = напряжение эквивалентного источника напряжения (0.66 * Vout).
Из этой формулы получаем выражение для эквивалентного сопротивления:

В качестве примера произведем расчет резисторов делителя при следующих условиях:
CS = 1 пФ,
CL = 5 пФ,
Максимальное время нарастания напряжения от 0.3В до 3В <= 1 мкс.

Получаем максимальное эквивалентное сопротивление:

R = -[1E-6/(6E-12*ln((3-0.66*5)/(0.3 — 0.66*5))] = 72382 Ом.

Находим значения резисторов R1 и R2:

R1 = R/0.66 = 72382/0.66 = 109.7 кОм,
R2 = R1 / 0.515 = 110 / 0.515 = 213 кОм.

Из стандартного ряда выбираем: R1 = 110 кОм (ближайший больший номинал), R2 = 200 кОм (ближайший меньший номинал).

Достоинством схемы также является простота. Недостаток — дополнительное потребление тока делителем (поэтому в не активном состоянии оптимальным, если
это возможно, будет установить 5В выход в "0" — ток потребления будет минимальным).

Диодный интерфейс

Также как и предыдущий вариант данная схема используется для согласования уровней 5В выхода с 3.3В входом. Схема является односторонней.


Использование диода для изоляции 5В устройства от 3.3В устройства является экономичным и безопасным методом и не требует наличия защитных диодов со стороны 3.3В устройства. При наличии на выходе Vout логической "1" на входе Vin будет примерно 3.3В, при наличии на выходе логического "0" на входе Vin будет напряжение, соответствующее прямому падению напряжения на диоде D1. Поэтому для данной схемы желательно применять диоды Шоттки, так как они имеют низкое прямое падение напряжения (около 0.2В).
Подтягивающий резистор R1 необходим для подачи на вход 3.3В устройства логической "1", так как 5В устройство не может передать этот сигнал из-за наличия диода. Номинал данного резистора обычно выбирается равным 10 кОм, при этом, при указанных на схеме значениях емкостей, время нарастания сигнала от 0.2В (прямое падение напряжения на диоде) до 2.3В (минимальное напряжение логической "1" для 3.3В устройства) составит примерно 68 нс, что вполне достаточно для большинства приложений.

Достоинством схемы является ее простота и надежность работы. Недостатком можно считать желательное применения диодов Шоттки, хотя и при применении обычных диодов схема сохраняет работоспособность (напряжение "0" будет составлять примерно 0.7В, что меньше максимального значения уровня напряжения для 3.3В устройств, равного 1В).

Интерфейс на транзисторе

Также как и предыдущий вариант данная схема используется для согласования уровней 5В выхода с 3.3В входом. Схема является односторонней.

Преобразование уровня производится с помощью NPN транзистора. Сигнал инвертируется, в устройствах на микроконтроллерах это легко учесть простым инвертированием управляющего сигнала. Каких либо преимуществ перед предыдущей схемой не имеет.
Возможно также применение n-канального полевого транзистора:

Резистор R2 необходим для надежного запирания транзистора при плавающем уровне на затворе, например, при старте системы. В данной схеме необходимо использовать транзисторы с малым пороговым напряжением затвора. Идеальным будет использование так называемых "цифровых" транзисторов. Обратите
внимание, что для сохранения времени нарастания сигнала необходимо уменьшить номинал подтягивающего резистора R5 до 4.7 кОм.

Достоинства данной схемы по сравнению с предыдущей отсутствуют. Недостатком является увеличенная стоимость и сложность. Более разумно использовать MOSFET транзистор в другом включении, которое рассмотрим ниже.

Интерфейс с оптической изоляцией

В условиях повышенных электромагнитных помех или, например, при разработке медицинских устройств, необходимо гальванически изолировать устройство с 5В питанием от устройства с питанием 3.3В. Сделать это можно применив транзисторную оптопару. Схема является односторонней.


При включении светодиода по схеме представленной на рисунке схема не инвертирует сигнал. Если катод подключить к земляному проводу, а анод подключить к Vout, то схема будет инвертировать сигнал. Номиналы резисторов R2 и R3 выбираются в зависимости от применяемой оптопары.

Достоинством данной схемы является гальваническая развязка устройств, что предотвращает взаимовлияние устройств, улучшает шумовые характеристики системы. Оптическая изоляция позволяет подключать микроконтроллер к устройствам со значительно большим напряжением питания, таким как 12В в автомобильных устройствах и 24В в промышленных устройствах. Недостатком схемы является повышенная стоимость и ограничение по скорости нарастания/спада сигнала, вызванное инерционностью оптопар.

Интерфейс с последовательно включенным MOSFET транзистором

Немного изменив подключение MOSFET транзистора мы можем получить двунаправленную схему согласования уровней идеально подходящую для применения в шинных системах с открытым коллектором (стоком) таких как 1-Wire, I2C. Принцип работы преобразователя проще всего описать в виде трех состояний.

В исходном состоянии ни одно из устройств не подтягивает линию связи к "0", на стороне 3.3В устройства линия подтянута к "1" резистором R1, на стороне 5В устройства линия подтянута к "1" резистором R2. Затвор и исток транзистора имеют одинаковый потенциал 3.3В, транзистор закрыт. Таким образом, на входе обоих устройств присутствует логическая "1", для каждого со своим уровнем напряжения.

3.3В устройство устанавливает на своем выходе "0". Исток транзистора принимает низкий
потенциал, в то время как на затворе остается 3.3В. Транзистор открывается, вход 5В устройства подтягивается к низкому уровню через открытый транзистор, на входе 5В устройства устанавливается логический "0".

5В устройство устанавливает на своем выходе "0". Через диодный переход исток-подложка транзистора напряжение на истоке снижается до тех пор, пока напряжение на затворе не перейдет пороговый уровень, затем транзистор открывается и вход 3.3В устройства подтягивается к "0" открывшимся транзистором.

Рассмотренные состояния свидетельствуют, что логические уровни передаются в обоих направлениях.
Приведем требования к наиболее важным характеристикам транзисторов, используемых в качестве преобразователей уровней для работы с I2C:

Номиналы подтягивающих резисторов зависят от наихудших уровней напряжения питания и логических уровней, протяженности линии связи, а также от требований к времени нарастания/спада сигнала.

Данная схема согласования уровней может также использоваться для обеспечения защиты схемы от выбросов повышенного напряжения, но при условии, что характеристики используемого транзистора позволят работать с данными выбросами. Каскад пониженного напряжения является защищенной частью, а каскад повышенного напряжения должен подключаться к внешнему устройству. Если преобразование уровней не требуется, то на резистор R2 можно подать то же напряжение, что и на каскад пониженного напряжения.
Дополнительной особенностью данной схемы является изоляция каскада пониженного напряжения при снятии с него напряжения питания. В данном случае напряжение питания этой части схемы близко к нулю и транзистор закрыт так как напряжение на затворе меньше порогового значения. Работа каскада повышенного напряжения не блокируется, он сохраняет полную работоспособность. Для гарантии запаса помехоустойчивости напряжение питания каскада должно упасть ниже минимального порогового напряжения на затворе транзистора. Функция изоляции сохраняет работоспособность даже если преобразование уровня не требуется, т. е. одинакового напряжения питания обоих частей схемы.
В случае необходимости применения одновременной изоляции и каскада с повышенным напряжением схему преобразователя уровней необходимо изменить:

Если отключится напряжение питания 5В части схемы, то закроется транзистор Q3, тем самым изолировав эту часть схемы от 3.3В части. Наличие резистора R7 (можно использовать резистор с высоким сопротивлением) не является обязательным, он может использоваться для предотвращения плавания потенциала на стоках транзисторов при установлении высоко уровня. Данная схема согласования является симметричной, поэтому в качестве каскада пониженного или повышенного напряжения может использоваться как левая, так и правая часть схемы.

MOSFET транзистор можно заменить биполярным NPN транзистором:

Исходное состояние. На входах обоих устройств — "1".

3.3В устройство устанавливает на своем выходе "0". Эмиттер транзистора принимает низкий потенциал, напряжение база-эмиттер превышает пороговое, транзистор открывается, вход 5В устройства подтягивается к "0".

5В устройство устанавливает на своем выходе "0". Транзистор оказывается включенным в инверсном режиме, напряжение база-эмиттер превышает пороговое, транзистор открывается, вход 3.3В устройства подтягивается к "0".

Достоинствами схемы является двунаправленность, защита от выбросов напряжения, изоляция частей схемы при отключении питания, возможность использования в шинных системах, таких как I2С и 1-Wire. Недостатком, пожалуй, можно считать некоторую усложненность схемы, но достоинства полностью перекрывают этот недостаток.

Интерфейс на буферных элементах

Буферные микросхемы обычно используются для буферизации тока на сигнальных шинах. Однако, они также могут использоваться для организации преобразования уровней. Для этого необходимо использовать специальное семейство буферов — LVC (Low Voltage CMOS). Это семейство разработано для применения в 3.3В устройствах и имеет толерантные к 5 В входы.
Для наших целей можно использовать, например, микросхему 74LVC244A, которая представляет собой 8 буферов, сгруппированных в две группы по 4 элемента:

74LVC244A обеспечивает неинвертирующий
буфер с 3.3В выходами, который может принимать по входу как 3.3В, так и 5В сигналы. Выходы микросхемы могут обеспечивать ток до 50 мА, питание микросхемы может быть от 1.65В до 3.6В, что позволяет использовать ее для 1.8В устройств.
Схема включения:

Для уменьшения шумов и потребляемой мощности все неиспользуемые входы необходимо подключить к общему проводу. Подав на управляющий вход /OE логическую "1" можно перевести все выходы в группе в Z состояние, тем самым изолировав 3.3В устройство от 5В устройства.

Достоинствами данной схемы являются простота реализации, надежность работы и доступность компонентов. Недостатком можно считать однонаправленность.

Интерфейс с использованием специализированной микросхемы транслятора уровней

Ну и, наконец, согласование уровней можно провести с помощью специализированных микросхем трансляторов уровней, которые специально разработаны для решения проблем согласования уровней. Например, микросхема TXB0108PWR представляет собой не инвертирующий, двунаправленный восьми портовый преобразователь уровней с индивидуальными напряжениями питания Vcca и Vccb. Порт A может работать в диапазоне 1.2В. 3.6В, порт B в диапазоне 1.65В. 5.5В. Однако напряжение питания порта A обязательно должно быть меньше либо равно напряжения питания порта B. Одна из возможных схем включения:

В данной схеме 3.3В устройство является контролером преобразователя уровней — подачей на вход OE логической "1" разрешает работу преобразователя. Если данная функция не требуется, то следует подтянуть вход OE к плюсу питания. Устройства, подобные TXB0108PWR реализуют также и защитные функции такие как отключение выходов при пропадании любого из питающих напряжений (z состояние). Для уменьшения времени нарастания/спада импульсов TXB0108PWR содержит также детекторы фронтов импульсов, которые принудительно открывают выходные драйверы.
Как и все специфические устройства, TXB0108PWR требует для своей корректной работы специфических условий (ничто в мире не бывает бесплатным, даже сыр в мышеловке — он достается бесплатно только второй мышке). Например, TXB0108PWR требует, чтобы выходные каскады, подключенные к ней, могли обеспечивать протекание тока силой как минимум +-2 мА. Также емкостная нагрузка не должна превышать 70 пФ. Резистивная нагрузка должна быть больше 50 кОм, что делает не возможным использование данной микросхемы для преобразования уровней в I2C и 1-Wire, а точнее в любых конструкциях с открытым коллектором/стоком. Для этих целей можно использовать специализированные микросхемы, например, серии TXS01xx фирмы "TEXAS INSTRUMENTS" или аналогичные.

Достоинствами данной схемы являются простота реализации и хорошие скоростные параметры. Недостатками можно считать немного увеличенную стоимость и малую доступность данных преобразователей на рынке.

Пример согласования уровней

В качестве реального примера согласования уровней рассмотрим схему подключения широко используемого LCD индикатора от сотового телефона NOKIA3310 к микроконтроллеру с 5В питанием:

Благодарности

Выражаю большую благодарность Chris Savage за его статью и любезное разрешение на использование ее материалов для создания данной статьи.

Логический сигнал (бинарный сигнал) – это сигнал, принимающий два возможных значения — «истина» или «ложь», «высокое» или «низкое» состояние, «0» или «1».

Логический уровень это напряжение которое однозначно будет воспринимается как «0» или «1» и о нем подробнее будет ниже.

ТТЛ Транзисторно-транзисторная логика ( TTL )

Это разновидность цифровых логических микросхем, построенных на основе биполярных транзисторов и резисторов.

Из определение нам важно, что используется биполярные транзисторы, они могут обеспечить уровень логического сигнала до 24 вольт, но это теоретический максимум на котором уже много помех и вообще так никто не делает! А хорошо они работают при напряжении 5 вольт, это напряжение для них стандартно, можно даже сказать оно для них классическое. И вот отсюда пошел стандарт логического уровня 0-5 вольт.

  • Идеальное (классическое) напряжение для работы микросхем на Транзисторно-транзисторной логике (ТТЛ, TTL) 0-5 вольт.

На затем для повышение быстродействие и снижение энергопотребления стали выпускать логических элементов с уменьшенным напряжение питания ( LVTTL ) в 3,3 Вольт и они как правило совместимы с классическими TTL

Представители это линейки, микросхемы серии:

Отечественные

  • К155
  • К555 (но тут еще и ТТЛШ, что это см. ниже)
  • К1533, К153
  • Серия SN74 (SN74ALS, SN74F) и SN54
  • SN74ALB - это как раз представитель LVTTL питание 3 вольта

А какие еще бывают логические элементы?

Вот перечень который я нашел

Логика микросхем (в порядке появление на свет, но это не точно)

  • Резисторно-транзисторная логика (РТЛ)
  • Резисторно-емкостная транзисторная логика (РЕТЛ)
  • Диодно-транзисторная логика (ДТЛ)
  • Транзисторно-транзисторной логике (ТТЛ, TTL)
  • Транзисторно-транзисторной логике со сниженным напряжением (LVTTL)
  • Транзисторно-транзисторная логика с диодами Шоттки (ТТЛШ)
  • Комплементарная логика на КМОП (CMOS) технологиях

На сегодняшний момент активно используется две технологии

  • Транзисторно-транзисторной логике (ТТЛ, TTL)
  • Транзисторно-транзисторной логике со сниженным напряжением (LVTTL), это как все то же самое что TTL только питание понижено.
  • Комплементарная логика на КМОП (CMOS) технологиях (наиболее распространённая)

Ну с значениями напряжение для "0" и "1" определились, она бывает самое разное, но распространенных три:

  • 0-5 вольт
  • 0-3.3 вольта
  • 0-1.8 вольт (1,6 вольта?)

А теперь поехали дальше.

Где начинается ноль и заканчивается единица?

Говоря о логическом сигнале нуле или единице мы утверждали что 0 вольт это логический "0", а +5 вольт это логическая "1". А теперь вопрос, а +2,5 вольта это "0" или "1"? А +1вольт, 2 вольта и так далее? Дело в том, что для каждой логике ответ на этот вопрос будет разным. Так для РТЛ и РЕТЛ уровень сигнала логической "1" от 0,9 вольт до напряжение питания этой самой логики, а с технологиями TTL (LVTTL) и CMOS (КМОП) мы разберем подробнее ниже так как именно они активно используются в сегодняшней микроэлектронике и задают стандарты.

Уровни напряжение для входов и выходов "0" и "1" для логики TTL (LVTTL)

Для напряжения 5.0вольт (4,5-5,5вольт) TTL

  • Для единицы ,"1": не ниже 2,0 В
  • Для нуля, "0": не больше 0,8 В
  • Для единицы ,"1": не ниже 2 В (В сети я нахожу постоянно разные значения от 2,4;2,7)
  • Для нуля, "0": не больше 0,8 В (В сети я нахожу постоянно разные значения от 0.4V; 0.5V)

Для напряжения 3.3вольт (2,7-3,6вольт) LVTTL

  • Для единицы ,"1": не ниже 2,0В
  • Для нуля, "0": не больше 0,8 В
  • Для единицы ,"1": не ниже 2,4 В
  • Для нуля, "0": не больше 0,4 В

Комплементарная логика на КМОП (КМДП, CMOS) технологиях

КМОП или МОП (Комплиментарный Металл-Оксид-Полупроводник) или КМДП (Комплиментарный Металл- Диэлектрик-Полупроводник) или по другому, по иностранному CMOS (complementary metal-oxide-semiconductor)

Для этой логике используются транзисторы, но другие, полевые.

Для напряжения 5.0 вольт (4,5-5,5вольт) CMOS

  • Для единицы ,"1": не меньше 0,7В
  • Для нуля, "0": не больше 0,3В
  • Для единицы ,"1": не меньше 4,44 В
  • Для нуля, "0": не больше 0,5 В

Для напряжения 1.8 вольт CMOS

  • Для единицы ,"1": не меньше 0,65В
  • Для нуля, "0": не больше 0,35В
  • Для единицы ,"1": не меньше 0,45 В
  • Для нуля, "0": не больше 0,45 В

Хочу напомнить что все современные процессоры и микросхемы изготавливаются по технологии МОП (Металл-Оксид-Полупроводник) ну так дешевле в массовом производстве и выгоднее по электрически параметрам.

А вот сводная информация та которая была выше в виде табличек.

Какие логические уровни обеспечивает конкретная микросхема это огромный вопрос, все что выше была теория, но она иногда совершенно не сходится с практикой. Поэтому, ниже логические уровни для конкретных микросхем. Ардуина совсем не совпадает с теорией, смотрите сами.

Логические уровни Ардуины и ESP8266 (Arduino and ESP8266 Logic Levels)

Это табличка позволяет наглядно понять, что передать логический нолик и единичку ESP8266 Ардуине сможет, а вот принять единичку ESPшка уже не сможет, сгорит от высокого напряжения либо сама микросхема либо порт. Так должно быть в теории, а на практике, пишут, что все работает без всяких согласований и ничего не горит! Но лучше, по фен шую, применять конвертер уровней, что бы банально опустить максимальное напряжение с 5 вольт до приемлемых 3,3 вольта, а можно и до 2 вольт.

Или например с помощью этой таблички мы сможем подключить фоторезистор который будет выдавать аналоговый сигнал к цифровому ПИНу ESP8266 и понять когда этот самый ПИН перейдет в высокое состояние (единицу) (это произойдет с 2,0 вольт) и упадет в низкий уровень (нолик), произойдет это с 0,8 вольт.

И вот, наконец то мы плавно переходим к преобразователям логических уровней.

Конвертеры логических уровней

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

Мы наблюдаем продолжающуюся тенденцию перехода производителей микросхем на все более пониженное питание, ну это и понятно, требования по скорости и энергоэффективной растут и остается только уменьшать размеры и понижать питание микросхем. С 5 вольтового питание мы переходим на 3,3 вольтовое и на 1,8 вольтовое и еще ниже. В связи с этим возникает задача согласования логических уровней устройств с различными питающими напряжениями. Наиболее часто такая проблема возникает при подключение 3.3В устройств к 5В устройствам. Для этого мы и должны согласовать логические уровни, там где надо понизить напряжение, а там где надо повысить напряжение.

Конвертер логических уровней делятся

- По направлению передачи:

Ну тут и объяснять нечего, все и так понятно.

- По конвертируемому напряжению:

Бывают самые разные, но чаще всего 5,0 вольта в 3,3 вольт

По строению (на каких электронных компонентах собраны)

  • Резисторный, однонаправленный
  • Диодный, однонаправленный
  • Транзисторный (имеется в виду NPN транзистор), однонаправленный
  • Оптронный, однонаправленный
  • На полевых (MOSFET) транзисторах, двунаправленный
  • На базе микросхем, двунаправленный

Первые четыре это однонаправленные схемы, две последние - двунаправленные.

Последовательно включенный резистор

Самый простой вариант, нужен всего то один резистор! Но это не самый лучший вариант! Резистор обычно берут около 10кОм. Помните (!) не все устройства можно подключать таким образом, может наблюдаться нестабильное питание 3,3 вольта, а можно вообще спалить порт! Схема является двухсторонней.

Резистивный делитель напряжения

Про делитель мы говорили в статье: " Резистивный делитель напряжения и детекция напряжения " . Тут все то же самое, просто это частный случай, схема является однонаправленная, но это и понятно. Можно уменьшить напряжение - разделив его с помощью делителя напряжение, но вот увеличить напряжение с помощью резистора не получиться, это точно. Поэтому схема позволяет получить из 5 вольт 3,3 вольта для большинства применений это подойдет.

В сети я нашел следующие номиналы резисторов, но сам я не проверял. В этих ваших интернетах пишут что резисторный делитель не работает при связи ESP8266 и Ардуино, но все спокойно работает и без него.

1 Назначение и описание преобразователя уровня сигнала

Для коммуникации с цифровыми устройствами (датчиками, контроллерами и т.д.) и управления ими используется цифровой сигнал. Цифровой сигнал – это такой сигнал, в котором вся необходимая информация кодируется двумя уровнями напряжения, т.н. логическим нулём и логической единицей. За логический "0" обычно (но не обязательно) принимают напряжение 0 В, за логическую "1" – высокий уровень напряжения. Высокий он называется только относительно логического нуля. По факту это обычно довольно слабые напряжения. Самые распространённые на сегодня напряжения для передачи цифрового сигнала это 5 В и 3.3 В. Техника развивается, технологии изготовления цифровых устройств не стоят на месте. Поэтому в последнее время также встречаются более низкие напряжения 2.4 и 1.2 В. Подробнее о напряжениях, применяемых в цифровой технике, можно почитать здесь.

Если ваш микроконтроллер использует 5-вольтовую логику (как, например, Arduino), то нельзя просто взять и подключить к нему напрямую устройство, в котором применяется другой логический уровень. Для согласования уровней применяются специальные преобразователи напряжения.

В англоязычной литературе их могут называть по-разному: logic shifter, level shifter, level converter.

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

Пример 4-канального двунаправленного преобразователя уровня показан на фотографии. Его основной элемент – четыре транзистора BSS138, которые обеспечивают быструю коммутацию сигналов.

4-канальный преобразователь логического уровня на транзисторах BSS138

Иногда каналы обозначаются не HV и LV, а по-другому. Например, A и B.

Как не сложно догадаться, сигналы необходимо подключать к соответствующим выводам. Например, если вы подключаете линию тактовой частоты контроллера к высоковольтному каналу HV3, то с другой стороны она будет выходить из канала LV3.

Ещё один пример преобразователя напряжения уровня – модуль HW-221 на основе микросхемы TXS0108E.

Здесь уже имеются 8 вводов-выводов. Причём к выводам со стороны порта A (A1…A8) должна подключаться низковольтовая логика, а к выводам B1…B8 – высоковольтная. Соответственно, питание VCCA должно быть от 1.4 до 3.6 В, а питание VCCB – от 1.65 до 5.5 В. Напряжение VCCA должно быть не больше, чем VCCB. Также на данном модуле присутствует вход разрешения работы OE. Работа разрешена при подключении его к питанию VCCA. При подключении OE к земле, все вводы-выводы переходят в третье состояние.

2 Пример подключения преобразователя логического уровня

Давайте посмотрим на практическом примере, как работает преобразователь уровня.

Для этого подключимся к какому-нибудь 3-вольтовому датчику, например, датчику температуры и влажности HTU21D. Этот датчик управляется по интерфейсу I2C, и ему необходим 3-вольтовый сигнал управления. В то же время Arduino генерирует 5-вольтовый сигнал. Тут нам и придёт на помощь преобразователь логического уровня. Соединим устройства по такой схеме:

Схема подключения датчика HTU21D к Arduino через преобразователь логического уровня

Схема подключения датчика HTU21D к Arduino через преобразователь логического уровня

Для того чтобы использовать датчик, скачаем библиотеку HTU21D (она также приложена внизу статьи). Установим библиотеку как обычно. Загрузим пример SparkFun_HTU21D_Demo (File Examples SparkFun HTU21D humidity and temperature sensor breakout). В мониторе порта побегут измеренные значения температуры и влажности. Вживую это выглядит так:

Работа с датчиком HTU21D посредством Arduino и преобразователя логического уровня

Работа с датчиком HTU21D посредством Arduino и преобразователя

Сгорит ли датчик HTU21D, если его подключить напрямую к Arduino без преобразователя уровня? Вряд ли. Но он будет работать на повышенном напряжении, что сократит срок его службы на неопределённое время. Кроме того, датчик может греться, а значит, будет искажать показания и температуры, и влажности. Также возможны «глюки» в управлении. Поэтому лучше всё же подключать датчик HTU21D к Arduino через конвертер уровня. На крайний случай, если его нет, можно подключить линии SDA и SCL датчика через ограничительные резисторы сопротивлением

Более подробно о работе с сенсором HTU21D рассказывается в следующей статье.

Сегодня мы займёмся подключением радиомодуля, а точнее, двух модулей – приёмника XY-MK-5V и передатчика FS1000A – к Arduino. Тоже к двум.

Нам понадобится:

  • компьютер с установленной Arduino IDE или другой средой разработки;
  • 2 платы Arduino UNO или другой модификации (недорого купить можно на этом сайте);
  • радиопередатчик FS1000A и радиоприёмник XY-MK-5V, приобретаются здесь;
  • соединительные провода (рекомендую вот такой набор, в котором есть все комбинации «мама-мама», «папа-папа», «папа-мама»).

1 Описание радиопередатчика FS1000A и приёмника XY-MK-5V

Внешний вид приёмника XY-MK-5V и передатчика FS1000A

Внешний вид приёмника XY-MK-5V и передатчика FS1000A

2 Подключение к Arduino радиопередатчика FS1000A и приёмника XY-MK-5V

Прежде чем подключать передатчик FS1000A к Arduino, необходимо к контактной площадке, обозначенной на плате ANT, припаять отрезок провода сечением примерно 0,25…0,5 мм и длиной 17,3 см. Это будет антенной.

Частоте 433 МГц соответствует длина волны, равная примерно 69 см. При длине антенны, равной 1/4 от длины волны, волновой вибратор (антенна) находится в резонансе с длиной волны, и её эффективность максимальна. Отсюда число 17,3 см (= 69 / 4).

Передатчик FS1000A можно запитать напряжением от 3,3 до 12 В. В зависимости от поданного напряжения дальность передачи может несколько меняться: при большем напряжении – большая дальность. Мы подадим на передатчик напряжение 5 В, и остальные выводы подключим согласно схеме.

Схема подключения передатчика FS1000A к Arduino

Схема подключения передатчика FS1000A к Arduino

Приёмник XY-MK-5V подключается тоже просто. Вывод "DATA" на модуле сдвоен, можно подключаться к любой из двух ножек. Питание также подадим 5 В от платы Arduino.

Схема подключения приёмника XY-MK-5V к Arduino

Схема подключения приёмника XY-MK-5V к Arduino

3 Пример простейшей передачи данных по радиоканалу с помощью Arduino

Особенностью радиопередачи является то, что длительные сигналы одного уровня передавать невозможно, передача будет срываться. Для более-менее устойчивой передачи необходимо передавать переменный сигнал. Причём необходимо каким-то образом выделять полезный сигнал из шума, который всегда присутствует в радиоэфире.

Для первого эксперимента возьмём стандартный скетч мигания светодиодом Blink и немного модифицируем его: каждые 5 секунд будем посылать команду с одного Arduino (передатчика) к другому (приёмнику). По принятии команды приёмник будет либо зажигать светодиод, если он погашен, либо гасить. То есть каждые 5 секунд приёмник будет менять своё состояние по принятой команде. Сделать это немного сложнее, чем кажется, ведь нам нужно выделить команду из постоянно присутствующего в эфире шума.

Первый скетч – для передатчика. Он довольно простой.

Временная диаграмма команды приведена на рисунке:

Передаваемая в радиоэфир команда Временная диаграмма двух идущих подряд команд

Скетч для приёмника, ввиду описанных выше причин, сложнее. Поэтому для начала давайте просто периодически читать данные на входе приёмника и выводить то, что принимаем, в последовательный порт.

В мониторе последовательного порта мы увидим череду из быстро сменяющихся единиц и нулей. Если полученные за примерно 17 секунд данные отобразить графически, то увидим следующее:

Данные+шум на входе приёмника

Данные+шум на входе приёмника

Как видно, на входе приёмника постоянно присутствует шумовой сигнал. Моменты, когда излучает передатчик, легко отслеживаются на глаз (на рисунке они выделены синими пунктирными рамками). После окончания передачи ненадолго устанавливается нулевой уровень, но затем система автоматической регулировки усиления снова усиливает шумы, и на входе приёмника появляется хаотичная смена логических уровней.

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

Существует т.н. теорема Котельникова, которая говорит о том, что при дискретизации аналогового сигнала потерь информации не будет только в том случае, если частота полезного сигнала равна половине или меньше частоты дискретизации (т.н. «частоты Найквиста»).

Для простоты возьмём период опроса данных (период дискретизации) со входа приёмника 50 мс – это число равно длительности самой короткой части команды, которую мы каждые 5 секунд отправляем передатчиком в радиоэфир. Снимая по одному отсчёту за 50 мс мы, конечно же, нарушаем теорему Котельникова (период дискретизации надо брать хотя бы 25 мс или меньше). Но для максимального упрощения примера оставим так и посмотрим, сможем ли выделить из шума в радиоэфире нашу команду.

Длительность логических уровней передаваемой команды

Длительность логических уровней передаваемой команды

Опрашивая данные с приёмника каждые 50 мс (зелёные вертикальные штрихи на рисунке – моменты опроса приёмника), мы должны увидеть последовательность "110101100". При этом вероятность ложных срабатываний нашего детектора будет достаточно высока, т.к. есть немалый шанс, что в моменты считывания данных с приёмника случайный шумовой сигнал будут иметь точно такие же значения. К счастью, в конце последовательности имеется большое число нулей. Так что будем искать последовательность, скажем, "11010110000000".

Если взять больше нулей, то вероятность ложных срабатываний уменьшится. Но надо понимать, что поиск совпадения большего по размерности массива будет занимать больше времени, и 50 мс станут уже не 50-тью, а несколько больше. Из-за этого постепенно будут сдвигаться моменты, в которые мы опрашиваем приёмник («убегание» частоты). Кроме того, мы не можем гарантировать, что в моменты, когда мы ожидаем прихода нулей, на входе приёмника не возникнет какой-то случайный всплеск, и мы не распознаем пришедшую команду. То есть, получим пропуск искомой последовательности. Здесь надо добиться компромисса между числом ложных срабатываний и числом пропусков – оба эти условия нас не устраивают.

Функция ShiftReg() получает на вход два аргумента: текущее содержимое тестового регистра и последнее полученное со входа приёмника значение. Она сдвигает все значения в регистре на 1 позицию, а в младший разряд регистра помещает текущее принятое значение. Таким образом, в регистре постоянно хранятся 16 (в данном конкретном случае) последних считанных с приёмника значений. Если мы посмотрим как меняется содержимое регистра, которое формируется функцией ShiftReg(), то увидим примерно следующее:

Функция IsCommandDetected() почленно сравнивает два массива – эталонный массив (искомая последовательность) и содержимое тестового регистра (массив полученных с приёмника значений), и если массивы одинаковы, значит мы «поймали» команду. В таком случае меняем состояние встроенного светодиода.

Выводы

На практике, полученный детектор довольно хорошо справляется с поставленной задачей. Светодиод на плате Arduino, к которой подсоединён приёмник, каждые 5 секунд ожидаемо меняет своё состояние. Это от него и требовалось.

Однако в реальности, как правило, возникают более сложные задачи, а именно – передавать какие-то осмысленные данные. В следующей статье, посвящённой работе с модулями XY-MK-5V и FS1000A, я детально рассмотрел возможность передачи данных по радиоканалу. Идея ориентирована на передачу между двумя компьютерами с помощью модулей UART. Но Arduino также имеет линии Rx и Tx, относящиеся к UART. Так что адаптировать идею к использованию с Arduino, уверен, не составит большого труда.

Читайте также: