Связь между платами на коротком расстоянии

Мой MCU использует шину SPI примерно с 4 устройствами. Я хотел бы расширить эту шину, чтобы она также была вне платы, т.е. чтобы некоторые печатные платы подключались к «основной» плате и расширяли функциональность. Расстояние «от площадки до площадки» будет:

длина дорожки основной платы + длина кабеля + длина дорожки на плате расширения

3 дюйма + 6 дюймов + 3 дюйма = около 12 дюймов

По моему опыту, даже сигнал частотой 1 МГц с временем нарастания около 7 нс на этом расстоянии по ленточному кабелю зашкаливал более чем на 1 В (но чрезмерного звона не было). Платы будут питаться от одного блока питания.

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

Примечание. Здесь не видно времени нарастания, но видно чрезмерное превышение — это сигнал 3,3 В. И да, это было правильно измерено с очень коротким проводом от щупа к земле. Как это часто рекомендуют на этом сайте. Я не думаю, что это ошибка измерения.

Я бы хотел, чтобы система работала на частоте 4 МГц, но 2 МГц также допустимы. Макс. количество плат, которые я хотел бы подключить, будет около 4, и это расширит шину SPI до 12 устройств. Я не думаю, что это будет слишком сложно управлять с помощью кода, поскольку у меня уже есть что-то подобное. Наличие дополнительных линий выбора подчиненного устройства также не является проблемой.

Однако меня беспокоит, как отправить данные SPI с одной платы на другую. Должен ли я просто отправить прямой SPI или преобразовать его в LVDS на одном конце, а затем преобразовать его обратно в SPI на другом конце?

Каково ваше время подъема?
@Kortuk Совсем забыл это указать, извините. Обновил вопрос.
Время нарастания 7 нс, это очень быстро.
Извините за два неуместных вопроса..1. какой осциллограф вы использовали? 2. Почему кольца так важны?

Ответы (4)

Эмпирическое правило говорит, что вы должны рассчитать влияние линии передачи, если длина вашего соединения превышает 1/10 длины волны сигнала.

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

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

Длина провода 12 дюймов (30 см) составляет 1/10 длины волны 3 м, или 100 МГц. 1 МГц и даже 4 МГц не должны создавать здесь особых проблем. Тем не менее, терминация линии, как говорит Воутер, может быть первой мерой. Вход, вероятно, имеет высокое сопротивление, и это никогда не будет хорошим согласованием. Поскольку у вас есть три разных элемента в вашем соединении (печатная плата, провод, печатная плата), определение волнового сопротивления будет затруднено (он также будет отличаться для печатной платы и провода, поэтому на очень высоких частотах вы также получите отражения на соединениях кабеля.) Учитывая небольшую длину и низкую частоту, значение вашего согласующего резистора не критично. Ом может быть слишком низким для микроконтроллера, большинство из них не могут обеспечить 33 мА (или даже 50 мА при 5 В). я бы попробовал 1к Ом резистор для начала, и посмотрим, как далеко это нас продвинет.

редактировать (по поводу обновления вопроса)
Время нарастания, кажется, 7 нс. Это быстро, как говорит Кортук, это означает, что у вас есть спектр по крайней мере до 400 МГц, и эти гармоники действительно будут страдать от эффектов линии передачи, даже если ваша тактовая частота составляет всего 1 МГц. Попробуйте отфильтровать их, полоса пропускания 20 МГц (80 МГц для тактовой частоты 4 МГц) дает вам более чем достаточное время нарастания. Это прямоугольная волна с частотой 1 МГц, отфильтрованная фильтром LPF кирпичной стены на частоте 20 МГц:

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

Размещение последовательного резистора сформирует LPF первого порядка с емкостью линии. Если мы оценим это в 50 пФ, то

р знак равно 1 2 π 100 М ЧАС г 50 п Ф знак равно 32 Ом

дает вам частоту среза 100 МГц. Итак, 33 Ом последовательный резистор должен уменьшить время нарастания, но оставить более чем достаточно, чтобы иметь хороший сигнал на частоте 4 МГц.

Частота 1МГц значения не имеет. Важно время подъема.
@stevenvh, попытался добавить резистор 1 кОм на землю в месте назначения. Это помогло с шипами, но также немного снизило уровень сигнала. Это нормально? Когда я говорю уровень, на котором сигнал оседает. Также пробовал 500 Ом, 220 Ом тот же эффект, но более выраженный.
@Saad - Сколько это бит? 3,3 В в 1k - это всего 3 мА, драйвер должен быть в состоянии обеспечить это. У него может быть некоторое внутреннее сопротивление, но оно составляет несколько десятков Ом, поэтому уровень должен снизиться только на 2-3%.
@stevenvh Я забыл, что я последовательно подключаю резистор, поэтому, очевидно, я сброшу напряжение. Дурак я! Впрочем, даже резистор на 180 Ом мало помогал. Это довело перерегулирование до 4,5 В. Я предполагаю, что мне понадобится гораздо более низкое сопротивление, но тогда мне придется беспокоиться о потреблении тока.
Кроме того, следует ли мне рассматривать активное завершение? Использование низкого сопротивления увеличивает требования к питанию всей платы, а поскольку шина работает постоянно, это увеличивает энергопотребление. Будет ли хорошо использовать диоды Шоттки в качестве зажимов?
@stevenvh, как вы достигаете 400 МГц? Насколько я знаю, из Википедии BW = 0,34/трисе. Это дает полосу пропускания 48 МГц. Что мне не хватает?

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

Я пробовал этот подход, Олин. Я использовал резистор на 100 Ом, и он уменьшил перерегулирование примерно на 500 мВ и снизил его до 4,3 В с 4,7 В. Это все еще вольт выше 3,3 В! Тогда время нарастания составило 12 нс по сравнению с первоначальными 7.
Похоже, я рассчитывал свой резистор, пока ты публиковал свой ответ, Олин. Прости за это
@OlinLathrop Я увеличил последовательное сопротивление до 330 Ом, и это увеличило выброс до 3,7 В. Я очень доволен этим. Время нарастания составляло 10 нс. Должен ли я просто придерживаться этого или поставить согласующие резисторы на следующей версии платы? Я спрашиваю, потому что вы рекомендовали не превышать 120 Ом.
@Saad: меня беспокоило влияние других нагрузок на линию и ее восприимчивость к шуму. Если сигналы чистые и на линиях нет нагрузки по постоянному току (например, только высокоимпедансные входы CMOS), тогда используйте 300 Ом.

Насколько мне известно, перерегулирование может быть устранено правильным завершением, если ваш драйвер может управлять нагрузкой. В противном случае подойдет какая-нибудь выделенная пара драйвер/приемник, такая как LVDS или, может быть, даже RS485.

+1: мы часто используем LVDS для передачи сигналов SPI.

В прошлом у меня были серьезные проблемы с использованием SPI по ленточным кабелям, хотя они были намного длиннее, чем вы описываете. Настоящей проблемой стала помехозащищенность, а на мои периферийные устройства попадали испорченные команды. Этого было достаточно, чтобы провалить испытания на помехозащищенность CE. Если позже у вас возникнут проблемы с этим, я бы порекомендовал поставить отдельный MCU на каждую плату и соединить их через CANbus.