У меня шина SPI 2 МГц, но я заметил одну вещь: некоторые из моих сигналов часто "дрожат". Да, мой триггер настроен правильно, поэтому я не думаю, что проблема заключается в этом.
Вы можете видеть, что я имею в виду здесь: (это с включенным режимом сохранения). Это часы моего SPI-автобуса.
SPI работает нормально. Я перенес сотни мегабайт на несколько плат и пока не видел проблем. Но мне все еще интересно знать, в чем здесь проблема. Кроме того, я должен беспокоиться, исправляя это, даже это работает?
Измерения были проведены прямо у источника с ОЧЕНЬ маленьким зажимом заземления.
Это упрощенная схема моей схемы. Конечно, на плате больше устройств SPI, но для целей этого вопроса это точно, потому что на плате еще ничего не припаяно, кроме uC и SD-карты.
Мастер (AVR Mega 128) работает на своем внутреннем RC-генераторе - я не знаю, будет ли это актуально, но, поскольку сигналы сдвигаются во времени, возможно, что джиттер RC-генератора также заканчивается в шине SPI. Просто подумал, что упомяну это. Мне также пришло в голову, что во время этих измерений я запускал контроллер в бесконечном цикле. Вот код:
while(1)
{
setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus.
GLCD_SetCursorAddress(40); // Change cursor position on the display.
GLCD_WriteText("LED: ");
for(wire=0;wire<72;wire++)
{
itoa(wire+1,str,10);
GLCD_WriteText(str);
GLCD_SetCursorAddress(44);
_delay_ms(10);
shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide.
}
}
Дрожание / дрожание могут произойти, когда внутренняя часть работает в течение 72 раз, а затем выходит. Поскольку для выполнения первых трех строк требуется дополнительное время, может случиться так, что каждый 73-й сигнал приходит в немного другое время из-за дополнительного времени обработки. Если бы мне пришлось делать ставку, я предполагаю, что это является причиной моей проблемы (если бы я мог, я бы подтвердил это в этот момент, но мои доски на работе и на следующей неделе не работает!) Но я все равно хотел бы мнения / ответы SE по этому вопросу.
Но, учитывая, что uC работает на 8 МГц, я не дрожу из-за программного обеспечения, потому что в наносекундах, а скорее в микросекундах. Но на втором рисунке видна плоская линия. Это происходит в течение очень короткой секунды, когда все осциллограммы сдвигаются во времени и не видны на экране. Я предполагаю, что это связано с петлей, а дрожание на первом изображении связано с генератором RC.
источник
Ответы:
То, что показывает ваша область, является классическим примером дрожания , которое означает ошибку во времени события (нарастающий или падающий фронт), независимо от того, есть ли какие-либо помехи напряжения на сигнале.
Но что может вызвать дрожание в вашей системе?
Как вы предполагаете, если основные тактовые импульсы в УК имеют дрожание, то этот джиттер, скорее всего, будет передаваться непосредственно на выход тактовой частоты от периферийного устройства SPI.
Недостаточный обход (у вас должен быть дополнительный обход на вашей плате в дополнение к двум конденсаторам на 100 нФ, которые вы нарисовали) может привести к дрожанию в цепи часов uC.
Шум источника питания, создаваемый другими цепями на вашей плате, также может иметь этот эффект (но он будет уменьшен путем большего количества обходов).
Дрожание может быть присуще производительности периферийного устройства SPI контроллера. Он должен генерировать тактовый сигнал SPI со ссылкой на системный тактовый генератор. Если он использует простой делитель (4-в-1 в случае системной тактовой частоты 8 МГц и тактовой частоты SPI 2 МГц), вы не ожидаете увидеть много добавленного джиттера вообще (хотя джиттер системной тактовой частоты будет проходить сразу). Но если он использует более сложную схему, такую как ФАПЧ, эта схема может варьировать ширину тактовых импульсов SPI для синхронизации с системными тактовыми импульсами, и вы увидите это как дрожание. Схема ФАПЧ также может быть особенно чувствительной к шуму источника питания.
Если амплитуда джиттера ограничена небольшой долей тактового периода, как это, по-видимому, здесь, то нет причины, по которой этот джиттер вызовет ошибки на шине SPI (в соответствии с вашими наблюдениями, что шина SPI, кажется, работает должным образом) ,
источник
Это похоже на дрожание сигнала для меня. Период такта незначительно меняется, достаточно того, что постоянство прицела делает границу «размытой».
Я не знаю, имеет ли ваша сфера Rigol возможность вычисления статистики, когда она измеряет. Если это так, вы можете отрегулировать точку запуска таким образом, чтобы фронт запуска отображался на левом краю экрана, настроить временную базу, чтобы показать полный период, и измерить изменение частоты во времени, чтобы почувствовать изменение. (Джиттер может выглядеть хуже, чем когда край триггера находится вне экрана.)
Если вы хотите сузить источники джиттера, я бы начал с RC-генератора. Посмотрите, есть ли у вас возможность использовать другой метод часов (например, кристалл), реализовать его и измерить дрожание.
источник
Изображения области видимости могут вводить в заблуждение, и вам нужно посмотреть на все параметры, чтобы правильно интерпретировать данные. Первое изображение показывает джиттер в 10 нс, и это было бы не очень хорошо, если бы триггер был только слева от экрана. Но справа внизу указано триггер + 1,78 мкс, так что 10 нс - это всего лишь 0,5% временного интервала. Этот уровень дрожания вполне может быть из-за RC генератора. Ожидайте, что дрожание будет уменьшено по крайней мере на один порядок с кварцевым генератором.
Вы говорите, что не столкнулись с какими-либо проблемами при передаче данных SPI. Это благодаря относительности 0,5%. Если вы будете MOSI за 1 мкс до импульса CLK, дрожание 0,5% вызовет дрожание 5 нс, это не приведет к нарушению времени установки и удержания.
Если вам нужна уверенность, просто установите временную базу так, чтобы вы могли видеть полное битовое время, как MOSI, так и CLK-канал. Вы заметите, что дрожание будет едва заметным, и что последовательные края остаются хорошо разделенными.
источник
Джиттер - это форма шума. Если вы считаете, что время между приходами между фронтами импульсов является своего рода сигналом, то если эти фронты не дрожат, это означает, что ваша система демонстрирует сигнал без помех!
Квадратные волны часто генерируются порогом на более непрерывной волне с некоторой схемой типа триггера Шмидта, которая имеет поведение гистерезиса. Кристаллические или RC генераторы не "излучают" прямоугольные волны.
Таким образом, если на этой входной волне присутствует некоторый шум напряжения, этот шум преобразуется в незначительные сдвиги в срабатывании, поскольку напряжение достигает порогового значения раньше или позже.
И, таким образом, шум одного вида (шум напряжения) превращается в шум другого вида (шум синхронизации).
источник