SPI с преобразователем уровня на другом конце соединения

У меня есть Arduino MEGA, подключенная к NRF24L01, и она прекрасно работает, взаимодействуя с другим Arduino Uno. Он работает, как описано, питание 3,3 В, а линии SPI (MISO,MOSI,CLK) подключены напрямую к Arduino;

Однако, когда я в конце подключаю преобразователь уровней (от 5 В до 3 В, двунаправленный) (делая модуль NRF посередине, как при Т-образном соединении), модуль перестает работать, и я не знаю, почему . Каким образом модуль преобразователя уровней мешает подключению? Могу ли я как-нибудь предотвратить это и использовать?

Я планирую добавить в будущем модули, работающие через SPI 3,3 В;

Я использую конвертер уровней:

Четырехканальный модуль преобразования JY-MCU 5–3 В
(источник: at-the.space)

Я подозреваю, что это из-за подтягиваний (5 думаю, что эти резисторы 10 кОм; являются подтягивающими, но я нуб в этой части), но я действительно не знаю, в этом ли проблема, так как продавец рекламирует его как совместимый с SPI, I2C и UART. Я успешно использовал их для UART.

Я проверил подключение нескольких Arduino через SPI и попробовал использовать внешний источник питания 5 В и источник питания 3,3 В, но безрезультатно. Однако Сторона 3В не имеет к ней никаких подключений; Но, будучи двунаправленным, я не думаю, что в этом есть проблема...

Я обнаружил, что 74HCT245D очень хорошо для этого подходит, но хотелось бы знать, почему с преобразователем уровней от JY-MCU это не сработает.

Предоставление библиотеки и подключений на всякий случай (модуль работает без преобразователя уровней):

  • Библиотека и amp; скетч взят из Документации по классу оптимизированного высокоскоростного драйвера NRF24L01+.

  • Соединение:

    • Распиновка NRF2401: NRF24l01 http://ralphfox.at-the.space/imglink/nrf24l01.jpg

    • Мое соединение: Arduino с NRF24l01 и преобразователем уровней http://ralphfox.at-the.space/imglink/nrf_bb.png

, 👍3

Обсуждение

«сделать модуль NRF посередине, как при Т-образном соединении» — что вы под этим подразумеваете? Можете ли вы опубликовать схему того, что именно вы сделали?, @Nick Gammon

Как подключено заземление? Ардуино, преобразователь, модуль?, @Mikael Patel

@NickGammon Извините, я добавил соединение для Arduino, спасибо., @RalphFox

@MikaelPatel Добавлено соединение, проверьте его, спасибо., @RalphFox

Вы установили NRF24 на преобразователь неправильного размера., @Mikael Patel

@MikaelPatel Хм, я почти уверен, что пробовал обе стороны ... но в любом случае я подумал подключить сторону преобразователя 5 В, потому что Arduino отправляет и получает данные через цифровые контакты 5 В; Я попробую переподключить их на сторону 3В, а Ардуино на сторону 5В., @RalphFox

@MikaelPatel Да, без проблем: / я только что вернулся домой, подключив NRF24 к стороне 3,3 В, я получил тот же результат, что и к 5 В. Я думаю, что проблема может быть электрической, а не логической; может лучше эту тему перенести в электронику?, @RalphFox

Я не совсем понимаю на представленной схеме, как ваш преобразователь уровня связан с другими компонентами, но я бы посоветовал дважды проверить направления 4-битного сигнала SPI. Я предполагаю, что контакты преобразователя, подключенные к одному из MOSI/MISO, следует поменять местами., @soerium

@soerium пока ничего не подключено; Я попытался подключить одну сторону MISO/MOSI к 3,3 В, но это привело к повышению напряжения той же линии до 5 В; модуль, не допускающий напряжения 5 В на этой линии, пострадает... Помните, что nRF24 находится на стороне 5 В преобразователя уровня вместе с Arduino (та же шина 5 В); Спасибо за ответ, подумал!, @RalphFox


2 ответа


1

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

Кроме того, вам на самом деле не нужен переключатель уровня для модулей nRF24: напряжение на выводе питания должно быть ограничено до 3,3 В, но сигнальные контакты устойчивы к 5 В. Это означает, что вам нужен только источник напряжения 3,3 В, а все остальные соединения могут быть подключены непосредственно (и безопасно) к вашей плате Arduino.

ОБНОВЛЕНИЕ: концепция скорости по-прежнему актуальна, не имеет значения, какую сторону соединения вы используете. МОП-транзистор имеет небольшую емкость, которая замедляет передачу сигнала: чем выше емкость, тем медленнее максимальная скорость передачи данных. Дешевый китайский регулятор уровня не рассчитан на высокоскоростную связь, а устройство Texas Instrument явно рассчитано на высокую скорость. Если вы посмотрите на техническое описание SN74HCT245, вы заметите, что скорость переключения указана для емкости 50 пФ и варьируется от 8 нс до 16 нс: это время, необходимое для создания достаточного заряда в цепи переключения.

,

Для других устройств вы можете увеличить делитель тактовой частоты SPI, чтобы получить более медленные сигналы SPI. Или резисторы делителя напряжения (которые могут быть быстрее)., @Paul

@Paul Резисторы делителя напряжения определенно медленнее, чем сдвигатель уровня, рассмотрите обычный МОП-транзистор как делитель напряжения порядка миллиомов: эквивалентный делитель напряжения будет очень близок к короткому замыканию. Делитель тактовой частоты SPi, безусловно, является хорошим советом, даже если он не всегда применим., @Roberto Lo Giacco

Ах, я всегда считаю резисторы «мгновенными». Но это была бы моя ошибка (: хотя снижение частоты SPI должно быть применимо почти в каждом сценарии? Но да, не пытайтесь исправить это программно. ...особенно если это снижает вашу скорость (:, @Paul

@RobertoLoGiacco Извините за поздний ответ, кажется, я нахожусь в другом часовом поясе; Как указано в вопросе, я не использую переключатель уровня ** на ** nRF24, я собирался использовать переключатель уровня, чтобы добавить не 5 В толерантные модули (3,3 В) к одной и той же линии SPI; Извините, если я выразился недостаточно ясно. Я не вижу, как медленное переключение уровня влияет на nRF24, поскольку беспроводной модуль подключен к 5,5 В; не могли бы вы объяснить, пожалуйста? Я решил, используя 74HCT245D; но вопрос все еще остается: «Почему я не могу использовать переключатель уровня?» Спасибо за ваш ответ., @RalphFox

Ограничение на редактирование 5 минут... на 10 секунд, черт возьми :/ ; вопрос будет заключаться в следующем: «Почему я не могу подключить переключатель уровня к той же шине, что и nRF24?», @RalphFox

@RalphFox Надеюсь, мое обновление удовлетворит ваши комментарии, в этом случае... ну вы знаете... ;-), @Roberto Lo Giacco


0

У AVR, как и у всего цифрового, есть свои пределы. В этом случае вы имеете дело с сопротивлениями источника, которым необходимо заряжать несколько емкостей затвора через последовательные сопротивления (провода и металлические контактные соединения. В частности, Absolute MAX 40 мА/контакт, несколько миллиомов в медном проводе и дорожках печатной платы, а также от пико до нано-Фарад. емкости, плюс в зависимости от того, насколько высока скорость SPI (в спецификации не указан верхний предел), вы также будете иметь дело с паразитами, ограничивающими частоту. На частотах МГц ваши провода и дорожки печатной платы будут иметь более высокие сопротивления из-за «кожи» эффект, при котором электроны мигрируют к поверхности провода при передаче.В зависимости от частоты провода добавление всего лишь одного затвора может привести к ухудшению времени нарастания/спада настолько, что это приведет к повреждению данных, поскольку библиотека SPI (в зависимости от того, что вы выберете) и SPI Периферийное устройство внутри AVR, вероятно, не будет таким сложным, как на базе ПК. AVR и библиотеке SPI не хватает сложности, поскольку они не имеют средств для обнаружения и компенсации дополнительной емкости затвора на линии шины, и они не могут компенсировать китайскую емкость перемычки представляют собой довольно маленькие (9x40ga) провода. Существует множество факторов, которые могут испортить ваш проект SPI и ограничить производительность. Вероятно, вам следует провести небольшое интернет-исследование по анатомии высокоскоростной шины, если вы собираетесь довести шину SPI на Arduino до предела.

Я думаю, что емкости затвора сочетаются с сопротивлением источника и скин-эффектом, и ваши 40 мА/вывод на самом деле не 40 мА на вывод, а скорее 10-20 мА поражают все емкости затвора, если учитывать скин-эффект (это эффективно повышает сопротивление провода достаточно, чтобы стать фактором). Если подключение преобразователя JY-MCU И запуск SPI на минимальной скорости исправляет связь, то дополнительные емкости затвора являются тем фактором, который вам следует перейти на версии с более высокой производительностью. Есть серия 74AS со временем срабатывания до 1,7 нс и частотой fMAX до 40 МГц!

Надеюсь, это поможет.

,