Мой MCU использует шину SPI примерно с 4 устройствами. Я хотел бы расширить эту шину, чтобы она также была вне платы, т.е. чтобы некоторые печатные платы подключались к «основной» плате и расширяли функциональность. Расстояние «от площадки до площадки» будет:
длина дорожки основной платы + длина кабеля + длина дорожки на плате расширения
3 дюйма + 6 дюймов + 3 дюйма = около 12 дюймов
По моему опыту, даже сигнал частотой 1 МГц с временем нарастания около 7 нс на этом расстоянии по ленточному кабелю зашкаливал более чем на 1 В (но чрезмерного звона не было). Платы будут питаться от одного блока питания.
Примечание. Здесь не видно времени нарастания, но видно чрезмерное превышение — это сигнал 3,3 В. И да, это было правильно измерено с очень коротким проводом от щупа к земле. Как это часто рекомендуют на этом сайте. Я не думаю, что это ошибка измерения.
Я бы хотел, чтобы система работала на частоте 4 МГц, но 2 МГц также допустимы. Макс. количество плат, которые я хотел бы подключить, будет около 4, и это расширит шину SPI до 12 устройств. Я не думаю, что это будет слишком сложно управлять с помощью кода, поскольку у меня уже есть что-то подобное. Наличие дополнительных линий выбора подчиненного устройства также не является проблемой.
Однако меня беспокоит, как отправить данные SPI с одной платы на другую. Должен ли я просто отправить прямой SPI или преобразовать его в LVDS на одном конце, а затем преобразовать его обратно в SPI на другом конце?
Эмпирическое правило говорит, что вы должны рассчитать влияние линии передачи, если длина вашего соединения превышает 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 пФ, то
дает вам частоту среза 100 МГц. Итак, 33 последовательный резистор должен уменьшить время нарастания, но оставить более чем достаточно, чтобы иметь хороший сигнал на частоте 4 МГц.
Для такой короткой шины я бы попробовал включить небольшой резистор последовательно с чем-либо, управляющим линией. Это не идеальный теоретический способ, учитывающий теорию линий передачи, а прагматичный подход, который, я думаю, будет достаточно хорошо работать в вашем случае. Попробуйте для начала 47 Ом и посмотрите, что получится. Если это помогает, но недостаточно, вы можете увеличить сопротивление, но я бы не стал превышать 120 Ом. Скорее всего, где-то в этом диапазоне вы найдете значение, которое работает достаточно хорошо.
Насколько мне известно, перерегулирование может быть устранено правильным завершением, если ваш драйвер может управлять нагрузкой. В противном случае подойдет какая-нибудь выделенная пара драйвер/приемник, такая как LVDS или, может быть, даже RS485.
В прошлом у меня были серьезные проблемы с использованием SPI по ленточным кабелям, хотя они были намного длиннее, чем вы описываете. Настоящей проблемой стала помехозащищенность, а на мои периферийные устройства попадали испорченные команды. Этого было достаточно, чтобы провалить испытания на помехозащищенность CE. Если позже у вас возникнут проблемы с этим, я бы порекомендовал поставить отдельный MCU на каждую плату и соединить их через CANbus.
Кортук
Саад
Кортук
ричичианле