Подключение к Arduino UNO/Nano устройств с логическими уровнями 3.3 вольта.
- Войдите на сайт для отправки комментариев
Как то получилось, что исследуя вопрос согласования логических уровней 5 и 3.3 вольта, у меня сложилась вполне законченная картина данного вопроса касательно Arduino. Поэтому и решил поделиться результатами.
Хочу сразу предупредить, что варианты, рассчитывающие на использование защитного диода в 3.3 вольтовой ИС и мощный 3.3 вольтовый стабилизатор, не чуствительный к помехам от сливания на него 5 вольт через диод, я тут не рассматриваю вообще. Будем считать, что такие подключения (через резисторы) - исключительно на любителя.
Первый вариант согласования самый простой, самый дорогой и, увы, не универсальный. Это применение готовой платы согласования уровней типа подобной:
https://ru.aliexpress.com/item/Free-shipping-4-channel-IIC-I2C-Logic-Lev...
Цена модуля около 20 рублей (5 рублей на канал). Не универсальность модуля выявляется при попытке подключить выход 3.3 вольтовой ИС к входу RX (пин 0 Arduino UNO/Nano). Дело в том, что данный вход через резистор 1К соединен с выходом TX ATMega8U2, обеспечивающей нам коммуникацию с компьютером через USB. В пассивном состоянии выход TX ATMega8U2 находится вовсе не в высокоимпедасном состоянии, а выдает высокий логический уровень. Можно сказать, стабильные 5 вольт с током до 5ма (1К резистор помните?). А значит и на вход 3.3 вольтовой ИС, при ее попытке выдать низкий уровень сигнала, отправятся эти 5 ма. С совсем не нулевыми шансами убить выход данной ИС.
Таким образом, использование данного модуля для согласования уровней безопасно и не требует дополнительной обвязки если мы не подключаем выход 3.3 вольтовой ИС к входу RX Arduino UNO или Nano.
Если же нам все же необходимо подключить выход 3.3 вольтовой ИС к входу RX, например, в случае использования мастер SPI режима USART, то нам понадобится дополнительная обвязка из любого маломощного NPN транзистора и резистора на 1К:
Второй вариант согласования уровней разумно использовать, если требуется двунаправленный обмен, а готового модуля нет, или его не целесообразно использовать. Например, требуется согласовать 5 сигнальных шин и ставить второй четрыехканальный модуль ради одной шины не кажется разумным.
Для данного варианта нам потребуется на каждый канал два резистора 10К, один резистор 1К и любой маломощный NPN транзистор. Цена вопроса при текущих ценах на aliexpress, не более полутора рублей (2Т3904 50-60 коп., резисторы по 25-30 коп.)
Данная схема имеет точно такой же недостаток, как и готовый модуль. Подключить через нее выход 3.3 вольтовой ИС непосредственно к входу RX Arduino UNO или Nano без дополнительной обвязки не получится.
Третий вариант предназначен для однонаправленного согласования входа 3.3 вольтовой ИС с 5 вольтовым выходом. Для него нам потребуется диод с небольшим падением напряжения на нем и резистор 10К. Цена вопроса ~70 копеек (1N4007 ~45 коп., резистор ~25 коп.).
Несмотря на то, что многие рекомендуют в данной ситуации использовать диоды Шоттки, данная схема отлично работает с дешевым диодом 1N4007. Во-первых, на токе до 10ма падение напряжение на нем составляет всего 0.7 вольт, что вполне достаточно для надежного определения логического низкого уровня 3.3 вольтовой ИС. Во-вторых, его максимальная емкость составляет всего 8 пикофарад. Это дает время нарастания фронта не более 10 наносекунд, что достаточно для частот до 25МГц. Я, практически, проверял работоспособность этой схемы на частоте 18МГц. Больше пока не понадобилось.
Ну и, наконец, четвертый вариант, самый простой, но применимый только для подключения выхода 3.3 вольтовой ИС к 5 вольтовому входу. Просто подключайте напрямую. Все будет работать без проблем. Только не включайте программно подтягивающий резистор на входе Arduino. Он в этой ситуации способен только навредить.
5V logic <-> 3.3V logic
5V logic <-> 3.3V logic
Про этот вариант я знаю, но не стал его описывать из-за нестабильности его работы на частотах 1МГц и выше. Емкость низковольтных стабилитронов, обычно, сотни пикофарад или вообще не нормируется. Может быть и есть в природе стабилитроны на 3.6 вольт с емкостью порядка 10 пикофарад, но я таких ни разу в жизни не встречал.
Вполне рабочий вариант двустороннего согласования логических уровней 3.3 и 5 вольт, но для для частот в десятки килогерц (сотни килогерц, для стабилитронов у которых емкость нормируется) и когда скорости нарастания и спада фронтов не критичны.