Почему некоторые из моих сигналов «дрожат» (имеют дрожание)?


9

У меня шина 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.


2
какой у тебя триггер?
markrages

@markrages триггер установлен на 1,48 В на CH1 - передний фронт.
Саад

2
Одно предположение состоит в том, что ОК (мое предположение), который генерирует тактовый сигнал SPI, использует PLL, который работает путем сокращения или удлинения некоторых тактовых циклов, чтобы держать себя привязанным к эталону. Когда появляются эти короткие или длинные тактовые циклы, это генерирует дрожание в вашей области видимости, потому что края, на которые вы смотрите, появляются раньше или позже относительно края, с которого вы сработали.
Фотон

1
Или SPI генерируется в вашем основном цикле, но иногда возникает прерывание, которое задерживает выполнение основного цикла, так что вы снова видите различия в периоде цикла.
Фотон

2
Слово «джиттер», но вы можете сказать «дрожь» ;-)
stevenvh

Ответы:


6

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

Но что может вызвать дрожание в вашей системе?

  • Как вы предполагаете, если основные тактовые импульсы в УК имеют дрожание, то этот джиттер, скорее всего, будет передаваться непосредственно на выход тактовой частоты от периферийного устройства SPI.

    Недостаточный обход (у вас должен быть дополнительный обход на вашей плате в дополнение к двум конденсаторам на 100 нФ, которые вы нарисовали) может привести к дрожанию в цепи часов uC.

    Шум источника питания, создаваемый другими цепями на вашей плате, также может иметь этот эффект (но он будет уменьшен путем большего количества обходов).

  • Дрожание может быть присуще производительности периферийного устройства SPI контроллера. Он должен генерировать тактовый сигнал SPI со ссылкой на системный тактовый генератор. Если он использует простой делитель (4-в-1 в случае системной тактовой частоты 8 МГц и тактовой частоты SPI 2 МГц), вы не ожидаете увидеть много добавленного джиттера вообще (хотя джиттер системной тактовой частоты будет проходить сразу). Но если он использует более сложную схему, такую ​​как ФАПЧ, эта схема может варьировать ширину тактовых импульсов SPI для синхронизации с системными тактовыми импульсами, и вы увидите это как дрожание. Схема ФАПЧ также может быть особенно чувствительной к шуму источника питания.

Если амплитуда джиттера ограничена небольшой долей тактового периода, как это, по-видимому, здесь, то нет причины, по которой этот джиттер вызовет ошибки на шине SPI (в соответствии с вашими наблюдениями, что шина SPI, кажется, работает должным образом) ,


У меня есть обходная крышка на 100 нФ. на каждой vcc / gnd паре на каждом чипе. Вы все еще предлагаете больше? Если так, дополнительные 100nF или 1uF заглавные буквы?
Саад

Если этот джиттер является худшей «проблемой» производительности на вашей плате, не нужно ничего менять. В зависимости от того, сколько других цепей в вашей системе и что они делают, несколько дополнительных обходных колпачков на 1, 10 и / или 100 мкФ вокруг платы являются обычной практикой проектирования. Они не локализованы для конкретного чипа, они обеспечивают «обход» для всей платы.
Фотон

Да, для этого у меня на доске два тантала 47u. Так что я должен быть в порядке на обходной части.
Саад

2
SPI полностью синхронный. Отсутствие дрожания приведет к сбою SPI.
markrages

@markrages, в ситуации ОП, это правда. В принципе, однако, очень сильное дрожание периода может, например, уменьшить интервал между передним фронтом и задним фронтом настолько, чтобы нарушить время установки подчиненной части и вызвать сбой интерфейса. Однако для этого джиттер должен быть равен почти половине такта.
Фотон

6

Это похоже на дрожание сигнала для меня. Период такта незначительно меняется, достаточно того, что постоянство прицела делает границу «размытой».

Я не знаю, имеет ли ваша сфера Rigol возможность вычисления статистики, когда она измеряет. Если это так, вы можете отрегулировать точку запуска таким образом, чтобы фронт запуска отображался на левом краю экрана, настроить временную базу, чтобы показать полный период, и измерить изменение частоты во времени, чтобы почувствовать изменение. (Джиттер может выглядеть хуже, чем когда край триггера находится вне экрана.)

Если вы хотите сузить источники джиттера, я бы начал с RC-генератора. Посмотрите, есть ли у вас возможность использовать другой метод часов (например, кристалл), реализовать его и измерить дрожание.


Попробую с внешним генератором, как только начнется работа!
Саад

6

Изображения области видимости могут вводить в заблуждение, и вам нужно посмотреть на все параметры, чтобы правильно интерпретировать данные. Первое изображение показывает джиттер в 10 нс, и это было бы не очень хорошо, если бы триггер был только слева от экрана. Но справа внизу указано триггер + 1,78 мкс, так что 10 нс - это всего лишь 0,5% временного интервала. Этот уровень дрожания вполне может быть из-за RC генератора. Ожидайте, что дрожание будет уменьшено по крайней мере на один порядок с кварцевым генератором.

Вы говорите, что не столкнулись с какими-либо проблемами при передаче данных SPI. Это благодаря относительности 0,5%. Если вы будете MOSI за 1 мкс до импульса CLK, дрожание 0,5% вызовет дрожание 5 нс, это не приведет к нарушению времени установки и удержания.

Если вам нужна уверенность, просто установите временную базу так, чтобы вы могли видеть полное битовое время, как MOSI, так и CLK-канал. Вы заметите, что дрожание будет едва заметным, и что последовательные края остаются хорошо разделенными.


Стивен, не могли бы вы объяснить, почему позиция спускового крючка имеет значение? Как вы получили показатель 0,5%?
Саад

2
@Saad - точка срабатывания - время = 0. То, что отображается на дисплее, происходит спустя 1,78 мкс = 1780 нс. И джиттер в 10 нс (более или менее) - это изменение 1780 нс, поэтому 10 нс / 1780 нс = 0,56%. Это выглядит так плохо, потому что оно увеличено на этом падающем фронте, но опорный край (триггер) будет на десятки метров влево. Так что, если вы уменьшите изображение, чтобы получить полный импульс, джиттер будет выглядеть намного меньше. Если бы точка запуска была только слева от дисплея, скажем, при -100 нс, то дрожание 10 нс составило бы 10%.
Стивенвх

1

Джиттер - это форма шума. Если вы считаете, что время между приходами между фронтами импульсов является своего рода сигналом, то если эти фронты не дрожат, это означает, что ваша система демонстрирует сигнал без помех!

Квадратные волны часто генерируются порогом на более непрерывной волне с некоторой схемой типа триггера Шмидта, которая имеет поведение гистерезиса. Кристаллические или RC генераторы не "излучают" прямоугольные волны.

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

И, таким образом, шум одного вида (шум напряжения) превращается в шум другого вида (шум синхронизации).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.