Mengapa beberapa sinyal saya menggigil?

9

Saya memiliki bus SPI 2 MHz tetapi satu hal yang saya perhatikan adalah bahwa beberapa sinyal saya sering 'menggigil'. Ya pemicu saya sudah diatur dengan benar sehingga saya tidak berpikir masalahnya ada di sana.

Anda dapat melihat apa yang saya maksud di sini: (ini dengan mode persistence aktif). Ini adalah jam bus SPI saya.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

SPI bekerja dengan baik. Saya telah mentransfer ratusan megabita pada banyak papan dan belum melihat masalah sejauh ini. Tapi saya masih tertarik untuk mengetahui apa yang bisa menjadi masalah di sini. Juga, haruskah saya repot-repot memperbaikinya bahkan berfungsi?

Pengukuran dilakukan tepat di sumber dengan klip tanah SANGAT kecil.

Ini adalah skema sederhana dari sirkuit saya. Tentu saja dewan memiliki lebih banyak perangkat SPI tetapi untuk keperluan pertanyaan ini hal ini akurat karena dewan belum menyoldernya kecuali UC dan Kartu SD.

masukkan deskripsi gambar di sini

Master (AVR Mega 128) menjalankan osilator RC internal - Saya tidak tahu apakah ini akan relevan tetapi karena sinyal berubah waktu mungkin saja bahwa jitter osilator RC juga berakhir di bus SPI. Kupikir aku akan menyebutkannya. Itu juga terjadi pada saya bahwa selama pengukuran ini saya menjalankan controller dalam loop yang tak terbatas. Berikut kodenya:

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.
    }
}

Jitter / shiver dapat terjadi ketika internal berjalan selama 72 kali dan kemudian keluar. Karena membutuhkan waktu tambahan untuk mengeksekusi tiga baris pertama, bisa jadi setiap gelombang ke-73 tiba pada waktu yang sedikit berbeda karena waktu pemrosesan tambahan. Jika saya harus bertaruh, saya kira ini adalah penyebab masalah saya (jika saya bisa, saya akan mengkonfirmasinya saat ini tetapi papan saya di tempat kerja dan minggu berikutnya mati!) Tapi saya masih ingin pendapat / jawaban SE tentang masalah ini.

Tetapi mengingat UC berjalan pada 8 Mhz saya tidak jitter karena perangkat lunak akan karena dalam nanodetik tetapi lebih mikrodetik. Tetapi pada gambar ke-2 garis datar terlihat. Ini terjadi selama sangat singkat di mana seluruh bentuk gelombang bergeser dalam waktu dan tidak terlihat di layar. Saya menduga bahwa ini disebabkan oleh loop dan jitter pada gambar pertama adalah karena osilator RC.

Saad
sumber
2
apa pemicunya?
markrages
@markrages, pemicu diatur pada 1,48V pada CH1 - sisi naik.
Saad
2
Satu tebakan adalah bahwa UC (asumsi saya) yang menghasilkan sinyal clock SPI menggunakan PLL yang bekerja dengan memperpendek atau memperpanjang beberapa siklus jam untuk menjaga dirinya terkunci pada referensi. Ketika siklus jam pendek atau panjang itu datang menghasilkan jitter pada jejak lingkup Anda karena tepi yang Anda lihat datang lebih awal / kemudian relatif terhadap tepi yang Anda picu.
The Photon
1
Atau SPI dihasilkan di loop utama Anda, tetapi kadang-kadang ada interupsi yang menunda mengeksekusi loop utama, jadi sekali lagi Anda melihat perbedaan dalam periode loop.
The Photon
2
Kata itu adalah "jitter", tetapi Anda dapat mengatakan "menggigil" ;-)
stevenvh

Jawaban:

6

Apa yang ditunjukkan oleh ruang lingkup Anda adalah contoh klasik jitter , yang berarti kesalahan dalam pengaturan waktu suatu peristiwa (naik atau turunnya tepi), terlepas dari apakah ada gangguan tegangan pada sinyal.

Tapi apa yang bisa menyebabkan jitter di sistem Anda?

  • Saat Anda berspekulasi, jika jam utama uC gelisah, kemungkinan besar jitter akan langsung ditransfer ke output jam dari perangkat SPI.

    Pemintas yang tidak memadai (Anda harus memiliki pemintas massal tambahan di papan Anda selain dua kapasitor 100 nF yang telah Anda gambar) dapat menyebabkan jitter di sirkuit clock UC.

    Kebisingan catu daya yang diperkenalkan oleh sirkuit lain di papan Anda juga dapat memiliki efek ini (tetapi akan dikurangi dengan lebih banyak memintas).

  • Jitter dapat melekat dalam kinerja perangkat SPI UC. Itu harus menghasilkan jam SPI dengan mengacu pada jam sistem. Jika menggunakan pembagi sederhana (4-ke-1 dalam kasus 8 MHz clock system dan 2 MHz SPI clock) Anda tidak akan berharap untuk melihat banyak menambahkan jitter sama sekali (meskipun jitter sistem jam akan melewati menembus). Tetapi jika menggunakan skema yang lebih kompleks, seperti PLL, sirkuit itu dapat memvariasikan lebar pulsa clock SPI untuk tetap sinkron dengan jam sistem, dan Anda akan melihatnya sebagai jitter. Sirkuit PLL juga bisa sangat sensitif terhadap kebisingan catu daya.

Jika amplitudo jitter terbatas pada sebagian kecil dari periode jam, seperti yang tampaknya ada di sini, tidak ada alasan jitter ini akan menyebabkan kesalahan pada bus SPI (sesuai dengan pengamatan Anda bahwa bus SPI tampaknya berfungsi seperti yang diharapkan) .

Foton
sumber
Saya memiliki tutup bypass 100nF. pada setiap pasangan vcc / gnd pada setiap chip. Apakah Anda masih menyarankan lebih banyak? Jika demikian, tutup 100nF atau 1uF tambahan?
Saad
Jika jitter ini adalah "masalah" performa terburuk di papan Anda, tidak perlu mengubah apa pun. Bergantung pada berapa banyak sirkuit lain dalam sistem Anda dan apa yang mereka lakukan, beberapa tambahan 1, 10, dan / atau 100 uF bypass caps tersebar di sekitar board adalah praktik desain yang umum. Ini tidak terlokalisasi ke chip tertentu, mereka memberikan bypass "massal" untuk seluruh papan.
The Photon
Ya, saya punya dua tantalum 47u di papan untuk tujuan ini. Jadi saya harus baik-baik saja pada bagian bypass.
Saad
2
SPI sepenuhnya sinkron. Tidak ada jumlah jitter yang akan menyebabkan SPI gagal.
markrages
@markrages, dalam situasi OP, itu benar. Namun pada prinsipnya, jumlah periode jitter yang sangat ekstrem dapat, misalnya, mengurangi interval antara sisi naik dan tepi jatuh cukup untuk melanggar waktu pengaturan bagian slave, dan menyebabkan antarmuka gagal. Jitter harus sama dengan hampir setengah periode waktu agar hal ini terjadi.
The Photon
6

Ini seperti sinyal jitter bagi saya. Periode jam sangat bervariasi, cukup bahwa ketekunan ruang lingkup membuat tepi terlihat 'berlumuran'.

Saya tidak tahu apakah ruang lingkup Rigol Anda memiliki kemampuan menghitung statistik ketika mengukur. Jika ya, Anda dapat menyesuaikan titik pemicu Anda sehingga tepi pemicu Anda muncul di tepi kiri layar, sesuaikan basis waktu untuk menampilkan periode lengkap dan mengukur variasi frekuensi dari waktu ke waktu untuk merasakan variasi. (Jitter dapat terlihat lebih buruk daripada saat tepi pemicunya adalah offscreen.)

Jika Anda ingin mempersempit sumber jitter, saya akan mulai dengan osilator RC. Lihat apakah Anda memiliki opsi untuk menggunakan metode jam yang berbeda (seperti kristal), menerapkannya dan mengukur ulang jitter.

Adam Lawrence
sumber
Akan mencobanya dengan osilator eksternal segera setelah pekerjaan dibuka!
Saad
6

Gambar cakupan dapat menyesatkan, dan Anda harus melihat semua parameter untuk menginterpretasikan data dengan benar. Gambar pertama menunjukkan jitter 10 ns, dan itu tidak akan baik jika pemicunya hanya di sebelah kiri layar. Tetapi kanan bawah dikatakan memicu + 1,78 μs, sehingga 10 ns sebenarnya hanya 0,5% dari interval waktu. Level jitter itu mungkin disebabkan oleh osilator RC. Harapkan jitter akan dikurangi setidaknya satu urutan besarnya dengan osilator kristal.

Anda mengatakan Anda belum menemukan masalah apa pun dalam transfer data SPI. Itu berkat relativitas 0,5%. Jika Anda akan MOSI 1 μs sebelum pulsa CLK, jitter 0,5% akan menyebabkan jitter 5 ns, ini tidak akan melanggar pengaturan dan tahan waktu.

Jika Anda perlu diyakinkan cukup atur basis waktu sehingga Anda dapat melihat waktu bit yang lengkap, baik saluran MOSI dan CLK. Anda akan melihat bahwa jitter akan sulit terlihat, dan bahwa ujung-ujungnya tetap terpisah dengan baik.

stevenvh
sumber
Steven, dapatkah Anda menjelaskan mengapa posisi pemicu penting? Bagaimana Anda mendapatkan angka 0,5%?
Saad
2
@ Saad - Titik pemicu adalah waktu = 0. Apa yang ditampilkan pada layar terjadi 1,78 kita = 1780 ns kemudian. Dan 10 ns jitter (kurang lebih) adalah variasi dari 1780 ns, jadi 10 ns / 1780 ns = 0,56%. Terlihat sangat buruk karena diperbesar di tepi jatuh itu, tetapi tepi referensi (pemicu) akan puluhan meter ke kiri. Jadi jika Anda ingin memperkecil sehingga Anda mendapatkan pulsa penuh dalam pandangan jitter akan terlihat jauh lebih kecil. Jika titik pemicu hanya tersisa dari tampilan, katakan pada -100 ns, maka 10 ns jitter akan menjadi 10%.
stevenvh
1

Jitter adalah bentuk kebisingan. Jika Anda menganggap waktu antar kedatangan antara tepi pulsa sebagai semacam sinyal, maka jika tepi tersebut tidak jitter sama sekali, itu berarti bahwa sistem Anda menunjukkan sinyal bebas noise!

Gelombang persegi sering dihasilkan oleh penguraian pada gelombang yang lebih berkelanjutan, dengan beberapa rangkaian tipe pemicu Schmidt yang memiliki perilaku histeresis. Osilator kristal atau RC tidak "secara native" mengeluarkan gelombang persegi.

Jadi, jika gelombang input memiliki beberapa noise tegangan di dalamnya, noise itu akan diterjemahkan ke sedikit pergeseran dalam pemicu, karena tegangan mencapai kadang-kadang mencapai ambang batas lebih cepat dan kadang-kadang nanti.

Dan dengan demikian, kebisingan dari satu jenis (noise tegangan) berubah menjadi kebisingan dari jenis lain (timing noise).

Kaz
sumber