Преобразование I2C от 3,3 до 5,0 В

35

Я пытаюсь подключить 3.3VI 2 C устройства к 5V Arduino.

У меня нет проблем с линией SCL. Я могу использовать простой делитель напряжения, но у меня есть проблема с линией SDA, так как она двунаправленная.

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

Есть ли другие решения?

JohnC
источник
Будущие читатели должны знать, что, хотя OP может использовать SCL только в одном направлении, I2C обычно позволяет SCL быть двунаправленным.
Фотон

Ответы:

25

Хорошим документом на эту тему является двунаправленный переключатель уровня для шины I2C и других систем, в которых в качестве двунаправленного переключателя уровня используется один mosfet.

Сива
источник
Мне нравится схема Philips. Умная. В некоторых случаях может быть лучше, если выходы I2C не должны потреблять весь ток от всех подтягиваний, но проектирование активного повторителя I2C затруднительно; Я не думаю, что это можно сделать с помощью обычной логики, поскольку ретранслятор должен уметь обнаруживать нарастающий фронт и реагировать на него раньше, чем это смогут сделать любые устройства I2C.
суперкат
2
Ссылка мертва!
Зимано
14

Чтобы расширить ответ sivu, это обычное использование для так называемых «шинных переключателей», которые в основном являются логически управляемыми MOSFET. Использование дискретных МОП-транзисторов имеет некоторые недостатки (паразитная емкость / емкостная связь - один), и может быть сложно выбрать хороший МОП-транзистор. Шинные переключатели оптимизированы для использования в высокоскоростных логических схемах.

Их делают несколько производителей, в том числе Fairchild, TI, IDT и Pericom. Посмотрите на NC7SZ384 .

Смотрите следующие приложения, среди прочего:

Джейсон С
источник
8

Многие Arduino имеют встроенную поддержку для работы от 3,3 В. На самом деле, все могут работать от 3,3 В, и схема микросхемы FTDI объясняет, как на примере. Пол, который сделал Teensy USB Arduino , предложил мне соединить USB-кабель и подать напряжение 3,3 В вместо линии V CC кабеля. Вы можете попробовать это. Но есть и другие варианты.

  1. Проверьте логические уровни для Arduino. Я считаю, что они поддерживают 3,3 В как логическую ВЫСОКУ даже на 5 В источнике Atmel. Статья SparkFun гласит: «* Подключение цифрового выходного контакта 3,3 В к входному контакту 5 В часто бывает простым. Большинство устройств достаточно терпимы к минимальному напряжению, которое они примут в качестве цифрового высокого значения. Большинство микроконтроллеров Atmel, например, принимайте значения выше 0,6 * В CC , поэтому устройство 3,3 В должно выдавать уровень выше 3 В (0,6 * 5 В). * "
  2. Приобретите один из клонов Arduino, который имеет переключатели 3,3 В и 5 В. Я использую RBBB Cloan, для которого я установил чип FTDI кабелей питания на 3,3 В. Но есть много других, у которых есть фактические параметры конфигурации 3,3 В, включая один из недавних официальных Arduinos, если я правильно помню. Вы также можете использовать USB крохотный с его Arduino плагин и следуйте инструкциям на своем сайте , чтобы установить регулятор 3,3 V .
  3. Соедините кабель USB и обеспечьте лабораторный источник питания 3,3 В вместо линии V CC кабеля USB. Это должен быть низкий ток, как предположил Пол. Отсюда либо источник напряжения хорошего качества. Вы также можете просто поставить пару батарей в ряд, чтобы получить желаемое напряжение.
  4. Если вам интересно, я могу попытаться изучить схему вашего Arduino и, возможно, можно внести изменения в конфигурацию FTDI, которые позволят получить напряжение 3,3 В.

Наконец, у нас есть дискуссия, которая может заинтересовать вас здесь на Chiphacker о однонаправленных и двунаправленных решениях для снижения напряжения. Эта статья о SparkFun, упомянутая todbot, полезна, как и обсуждение статьи о двунаправленном MOSFET, связанной с SparkFun. Подводя итог статье SparkFun:

  • Встроенный резистор. Однонаправленный. Только понижающий - уменьшает ток, ограничивающие диоды ввода / вывода микросхем могут ограничивать максимальный вход.
  • Серийные резисторы. Однонаправленный. Только понижение, но гранулированное.
  • Диод. Однонаправленный. Шаг вниз. Безопаснее. Высоко от 5 В блокирует диод; сторона 3.3 В тогда связывается с высокой. Но если вы измените конфигурацию диода, не могли бы вы также увеличить?
  • МОП-транзистор. Двунаправленный. Понижение или повышение.
  • В комментариях: Пример оптической изоляции: 4N25. Сильный ток.
  • В комментариях: пример стабилитрона: 1N4728A
  • В комментариях: 74HC244 / 125 однонаправленный
cyphunk
источник
6

Есть специальные микросхемы, доступные для I2C со сдвигом уровня:

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

Вайнит
источник