Neden bazı sinyallerim titriyor (titriyor)?


9

2 MHz SPI veriyolum var, ancak fark ettiğim bir şey, bazı sinyallerimin sık sık 'titremesi'. Evet, tetikleyicim doğru ayarlanmış, bu yüzden sorunun orada olduğunu düşünmüyorum.

Burada ne demek istediğimi görebilirsiniz: (bu kalıcılık modu açıkken). Bu benim SPI otobüsümün saati.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

SPI iyi çalışıyor. Birden fazla panoya yüzlerce megabayt aktardım ve şu ana kadar bir sorun görmedim. Ama yine de burada sorunun ne olabileceğini bilmekle ilgileniyorum. Ayrıca, çalışsa bile düzeltmeyi zahmet etmeli miyim?

Ölçümler, kaynakta ÇOK küçük bir zemin klipsiyle alınmıştır.

Bu benim devremin basitleştirilmiş bir şeması. Tabii ki kartta daha fazla SPI cihazı var, ancak bu sorunun amaçları için bu doğrudur, çünkü kartta henüz uC ve SD Kart dışında lehimlenmiş hiçbir şey yoktur.

resim açıklamasını buraya girin

Master (AVR Mega 128) dahili RC osilatöründen kaçıyor - bunun alakalı olup olmadığını bilmiyorum ama sinyaller zaman içinde değiştiğinden RC osilatörünün jitterinin de SPI veriyolunda bitmesi mümkündür. Sadece bundan söz edeceğimi düşündüm. Ayrıca, bu ölçümler sırasında kontrolörü sonsuz bir döngüde çalıştırdığım da ortaya çıktı. İşte kod:

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

Titreşim / titreme, dahili 72 kez çalışıp sonra çıktığında gerçekleşebilir. İlk üç satırı yürütmek için ek bir zaman gerektiğinden, her 73. dalga formunun ek işlem süresi nedeniyle biraz farklı bir zamanda gelmesi olabilir. Bahse girsem, bu konunun nedenini tahmin ediyorum (eğer yapabilirsem, bu anı onaylarım ama işyerinde tahtalarım ve gelecek hafta kapalı!) Ama yine de görüş almak istiyorum / SE'nin bu konudaki cevapları.

Ancak uC'nin 8 Mhz'de çalıştığı düşünüldüğünde, yazılım nedeniyle titremiyorum çünkü nanosaniye değil mikrosaniye. Ancak 2. şekilde düz bir çizgi görülebilir. Bu, tüm dalga formlarının zaman içinde değiştiği ve ekranda görünmez olduğu çok kısa bir saniye için gerçekleşir. Bunu tahmin ediyorum bu döngü ve ilk resimde titreme nedeniyle RC osilatör kaynaklanmaktadır.


2
tetikleyiciniz nedir
markrages

@ tetik, CH1 - yükselen kenarda 1.48V olarak ayarlanır.
Saad

2
Bir tahmin, SPI saat sinyalini üreten uC'nin (benim varsayımım) kendisini referansa kilitli tutmak için bazı saat döngülerini kısaltarak veya uzatarak çalışan bir PLL kullanmasıdır. Bu kısa veya uzun saat döngüleri ortaya çıktığında, baktığınız kenarlar tetiklediğiniz kenara göre daha erken / daha sonra geldiği için kapsam izlemenizde titremeye neden olur.
Photon

1
Veya SPI ana döngünüzde oluşturulur, ancak bazen ana döngünün yürütülmesini geciktiren bir kesinti vardır, bu nedenle döngü periyodundaki farklılıkları tekrar görürsünüz.
Photon

2
Kelime "jitter" olmakla sen "titreme" ;-) söyleyebiliriz
stevenvh

Yanıtlar:


6

Kapsamınızın gösterdiği klasik bir titreşim örneğidir , yani bir olayın zamanlamasında (yükselen veya düşen kenar), sinyalde herhangi bir voltaj gürültüsü olup olmadığından bağımsız olarak bir hata anlamına gelir.

Ancak sisteminizde titremeye ne sebep olabilir?

  • Tahmin edeceğiniz gibi, eğer uC ana saati gerginse, bu titreşim büyük olasılıkla doğrudan SPI çevre biriminden saat çıkışına aktarılır.

    Yetersiz baypas (çektiğiniz iki 100 nF kapasitöre ek olarak kartınızda ek toplu baypas yaptırmanız gerekir) UC saat devresinde titreşime neden olabilir.

    Kartınızdaki diğer devreler tarafından verilen güç kaynağı gürültüsü de bu etkiye sahip olabilir (ancak daha fazla baypas ile azaltılabilir).

  • Titreşim, UC'nin SPI çevre biriminin performansının doğasında olabilir. Sistem saatine referansla SPI saati üretmelidir. Basit bir ayırıcı kullanırsa (8 MHz sistem saati ve 2 MHz SPI saati durumunda 4'e 1), çok fazla eklenen titreşim görmeyi beklemezsiniz (ancak sistem saati titreşimi hemen geçecektir). Ancak, bir PLL gibi daha karmaşık bir şema kullanıyorsa, bu devre sistem saatiyle senkronize tutmak için SPI saat darbe genişliklerini değiştirebilir ve bunu titreşim olarak görürsünüz. Bir PLL devresi de güç kaynağı gürültüsüne karşı özellikle hassas olabilir.

Titreşim genliği, saat periyodunun küçük bir kısmı ile sınırlıysa, burada olduğu gibi, bu titreşimin SPI veriyolunda hatalara neden olmasının bir nedeni yoktur (SPI veri yolunun beklendiği gibi çalıştığını gözlemlemenize uygun olarak) .


100nF'lik bir baypas kapağım var. her çipte her vcc / gnd çiftinde. Yine de daha fazlasını önerir misiniz? Öyleyse, ek 100nF veya 1uF kapaklar?
Saad

Bu titreşim panonuzdaki en kötü performans "sorunu" ise, hiçbir şeyi değiştirmenize gerek yoktur. Sisteminizde başka kaç devre olduğuna ve yaptıklarına bağlı olarak, kartın etrafına yayılmış birkaç ek 1, 10 ve / veya 100 uF baypas kapağı ortak bir tasarım uygulamasıdır. Bunlar belirli bir çipte yerelleştirilmez, tüm pano için "toplu" bypass sağlarlar.
Photon

Evet, bu amaçla tahtada iki adet 47u tantal var. Bu yüzden bypass yapan kısımda iyi olmalıyım.
Saad

2
SPI tamamen eşzamanlıdır. Hiçbir miktarda titreme SPI'nin başarısız olmasına neden olmaz.
markrages

@markrages, OP'nin durumunda, bu doğru. Prensip olarak, gerçekten aşırı miktarda bir dönem titreşimi, örneğin, yükselen kenar ile düşen kenar arasındaki aralığı, köle parçasının kurulum süresini ihlal edecek ve arayüzün bozulmasına neden olacak kadar azaltabilir. Gerçi bunun gerçekleşmesi için titreşimin saat süresinin neredeyse yarısına eşit olması gerekir.
Photon

6

Bu bana sinyal titremesi gibi geliyor. Saat periyodu, kapsamın kalıcılığının kenarı 'bulaşmış' hale getirecek kadar küçüktür.

Rigol kapsamınızın ölçüm yaparken istatistikleri hesaplama yeteneğine sahip olup olmadığını bilmiyorum. Varsa, tetikleme noktanızı tetik kenarınız ekranın sol kenarında görünecek şekilde ayarlayabilir, tam bir süre göstermek için zaman tabanını ayarlayabilir ve varyasyon hakkında fikir edinmek için zaman içindeki frekans değişimini ölçebilirsiniz. (Titreşim, tetikleme kenarı ekran dışındayken olduğundan daha kötü görünebilir.)

Titreşim kaynaklarını daraltmak istiyorsanız, RC osilatörü ile başlardım. Farklı bir saat yöntemi (kristal gibi) kullanma seçeneğiniz olup olmadığına bakın, uygulayın ve titreşimi yeniden ölçün.


Çalışma açılır açılmaz harici bir osilatör ile deneyecek!
Saad

6

Kapsam görüntüleri yanıltıcı olabilir ve verileri doğru şekilde yorumlamak için tüm parametrelere bakmanız gerekir. İlk görüntü 10 ns'lik bir titreme gösterir ve tetik sadece sol ekrandaysa bu pek hoş olmaz. Ancak sağ altta tetikleyici + 1,78 µs diyor, böylece 10 ns aslında zaman aralığının sadece% 0,5'i. Bu titreşim seviyesi RC osilatörüne bağlı olabilir. Kristal osilatör ile titreşimin en az bir büyüklükte küçülmesini bekleyin.

SPI veri aktarımında henüz herhangi bir sorunla karşılaşmadığınızı söylüyorsunuz. Bu% 0.5'in göreliliği sayesinde. CLK darbesinden önce 1 µs MOSI yaparsanız,% 0,5 titreşim 5 ns'lik bir titreşime neden olur, bu kurulum ve bekleme sürelerini ihlal etmez.

Güvenceye ihtiyacınız varsa, zaman tabanını hem tam bir bit zamanı, hem MOSI hem de CLK kanalı görebilecek şekilde ayarlayın. Titremenin neredeyse hiç görünmeyeceğini ve birbirini takip eden kenarların iyi ayrıldığını göreceksiniz.


Steven, tetiğin pozisyonunun neden önemli olduğunu açıklayabilir misin? % 0.5 rakamını nasıl aldınız?
Saad

2
@Saad - Tetik noktası zaman = 0. Ekranda gösterilenler 1.78 us = 1780 ns sonra olur. Ve 10 ns titreşim (az ya da çok) bu 1780 ns'ın varyasyonu, yani 10 ns / 1780 ns =% 0.56. O kadar kötü görünüyor çünkü o düşen kenara yakınlaştırılmış, ancak referans kenarı (tetikleyici) onlarca metre sola doğru olacak. Böylece görüntüyü tam olarak almak için uzaklaştırırsanız titreşim çok daha küçük görünecektir. Tetikleme noktası ekranın hemen dışında kalsaydı, örneğin -100 ns'de, 10 ns titreşim% 10 olurdu.
stevenvh

1

Titreşim bir tür gürültüdür. Darbelerin kenarları arasındaki varış zamanlarının bir tür sinyal olduğunu düşünüyorsanız, bu kenarlar herhangi bir şekilde titremiyorsa, sisteminizin gürültüsüz bir sinyal gösterdiği anlamına gelir!

Kare dalgalar genellikle histerezis davranışına sahip bazı Schmidt tetikli tip devre ile daha sürekli bir dalga üzerinde eşikleme ile üretilir. Kristal veya RC osilatörleri kare dalgaları "doğal olarak" ortaya koymazlar.

Bu nedenle, bu giriş dalgasının üzerinde bir miktar voltaj gürültüsü varsa, voltaj ulaşıldığında bazen her iki eşiğe daha erken ve daha sonra eşik değere ulaştığında, bu gürültü tetiklemede hafif değişimlere dönüşecektir.

Ve böylece, bir tür gürültü (voltaj gürültüsü) başka bir tür gürültüye dönüşür (zamanlama gürültüsü).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.