Чому деякі мої сигнали «тремтять» (мають тремтіння)?


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-й сигнал хвилі надходить у дещо інший час через додатковий час обробки. Якби мені довелося зробити ставку, я здогадуюсь, що це причина моєї проблеми (якби я міг би, я підтвердив би це миттєво, але мої дошки на роботі та наступний тиждень не працює!) Але я все одно хотів би думки / відповіді ДП з цього питання.

Але враховуючи, що UC працює на швидкості 8 МГц, я не тремтаю через програмне забезпечення, тому що це в наносекундах, а швидше мікросекундах. Але на 2-му малюнку видно рівну лінію. Це відбувається на дуже коротку секунду, коли всі форми хвилі зміщуються в часі і невидимі на екрані. Я здогадуюсь, що це пов'язано з циклом, і тремтіння на першому малюнку відбувається через RC-генератор.


2
який твій курок?
відбитки

@markrages тригер встановлений на 1,48 В на CH1 - піднімається кромка.
Саад

2
Одне здогадування полягає в тому, що uC (моє припущення), що генерує сигнал тактової частоти SPI, використовує PLL, який працює за рахунок скорочення або подовження деяких тактових циклів, щоб утримувати себе в блоці. Коли ці короткі та довгі цикли годин синхронізуються, це генерує тремтіння у вашому сліді діапазону, тому що краї, на які ви дивитесь, з’являються раніше / пізніше відносно краю, з якого ви запускалися.
The Photon

1
Або SPI генерується у вашому головному циклі, але іноді виникає перерив, який затримує виконання основного циклу, тож ви знову бачите відмінності в періоді циклу.
The Photon

2
Слово "тремтіння", але ви можете сказати "тремтіння" ;-)
stevenvh

Відповіді:


6

Те, що показує ваш обсяг, - це класичний приклад тремтіння , що означає помилку в часі події (піднімається чи падає грань), незалежно від того, чи є сигнал сигналу напруги.

Але що може викликати тремтіння у вашій системі?

  • Як ви міркуєте, якщо головний годинник uC невдалий, цей тремтіння, швидше за все, перенесеться безпосередньо на тактовий вихід із периферійного інтерфейсу SPI.

    Неадекватний обхід (у вас має бути додатковий об’ємний обхід на вашій платі на додаток до двох намальованих конденсаторів 100 нФ), що може призвести до тремтіння в тактовій схемі UC.

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

  • Тремтіння може бути притаманне продуктивності периферійних пристроїв SPI. Він повинен генерувати годинник SPI з посиланням на системний такт. Якщо він використовує простий подільник (4-на-1 у випадку системного тактового сигналу 8 МГц та 2-МГц SPI-годинник), ви не сподіваєтесь побачити багато доданого тремтіння (хоча тремтіння системного тактового годинника пройде прямо через). Але якщо він використовує більш складну схему, як, наприклад, PLL, ця схема може змінювати ширину імпульсу тактового сигналу SPI, щоб вона була синхронізована з системним годинником, і ви б бачили це як тремтіння. Схема PLL також може бути особливо чутливою до шуму живлення.

Якщо амплітуда тремтіння обмежена невеликою частиною періоду годин, як це здається, тут немає жодної причини, що це тремтіння не спричинить помилок на шині SPI (у відповідності з вашим спостереженням, що шина SPI працює як слід) .


У мене є 100-фунтовий байпас. на кожній парі vcc / gnd на кожному чіпі. Ви б ще запропонували більше? Якщо так, додаткові шапки 100nF або 1uF?
Саад

Якщо цей тремтіння - найгірша "проблема" на вашій дошці, не потрібно нічого змінювати. Залежно від того, скільки інших схем у вашій системі та що вони роблять, кілька додаткових 1, 10 та / або 100 об'ємних байпасів, що обходять навколо плати, є звичайною практикою дизайну. Вони не локалізовані на певному чіпі, вони забезпечують об'ємний обхід для всієї плати.
The Photon

Так, у мене на дошці є два таталі 47u для цієї мети. Так що я повинен бути в порядку на обхідній частині.
Саад

2
SPI повністю синхронний. Жодна кількість тремтіння не спричинить збій SPI.
відбитки

@markrages, в ситуації з ОП, це правда. У принципі, однак, дійсно екстремальна кількість тремтіння періоду може, наприклад, зменшити інтервал між піднімаючим і падаючим краєм достатньо, щоб порушити час налаштування веденої частини і призвести до збою інтерфейсу. Однак це може бути рівним майже половині годинного періоду.
The Photon

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 us = 1780 ns пізніше. І тремтіння 10 нс (більше або менше) - це зміна 1780 нс, тому 10 нс / 1780 нс = 0,56%. Це виглядає так погано, оскільки він збільшується на цьому падаючому краї, але опорний край (тригер) буде на десятки метрів ліворуч. Тож якщо ви зменшите масштаб, щоб отримати повний імпульс, вигляд тремтіння буде виглядати набагато менше. Якби точка тригера була лише зліва від дисплея, скажімо, при -100 нс, тоді тремтіння 10 нс було б 10%.
stevenvh

1

Джиттер - це форма шуму. Якщо ви вважаєте час заходу між краями імпульсів своєрідним сигналом, то якщо ці краї взагалі не тремтять, це означає, що ваша система видає безшумний сигнал!

Квадратні хвилі часто породжуються порогом на більш безперервній хвилі, з деякою ланцюгом типу Шмідта, що має гістерезисну поведінку. Кристалічні або RC осцилятори не «споконвічно» гасять квадратні хвилі.

Отже, якщо ця вхідна хвиля має якийсь шум напруги на ній, цей шум буде перетворюватися на невеликі зрушення в спрацюванні, оскільки напруга досягає іноді будь-якого порогу раніше, а іноді пізніше.

Таким чином, шум одного виду (шум напруги) перетворюється на шум іншого виду (шум синхронізації).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.