Tại sao một số tín hiệu của tôi 'rùng mình' (có jitter)?


9

Tôi có bus SPI 2 MHz nhưng có một điều tôi nhận thấy đó là một số tín hiệu của tôi thường 'rùng mình'. Có kích hoạt của tôi được thiết lập đúng vì vậy tôi không nghĩ rằng vấn đề nằm ở đó.

Bạn có thể thấy những gì tôi muốn nói ở đây: (đây là với chế độ kiên trì bật). Đây là đồng hồ của xe buýt SPI của tôi.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

SPI hoạt động tốt. Tôi đã chuyển hàng trăm megabyte trên nhiều bảng và cho đến nay vẫn chưa thấy vấn đề gì. Nhưng tôi vẫn quan tâm đến việc biết những gì có thể là vấn đề ở đây. Ngoài ra, tôi có nên sửa nó ngay cả khi nó hoạt động?

Các phép đo được thực hiện ngay tại nguồn với một clip mặt đất RẤT nhỏ.

Đây là một sơ đồ đơn giản hóa mạch của tôi. Tất nhiên, hội đồng quản trị có nhiều thiết bị SPI hơn nhưng với mục đích của câu hỏi này thì điều này là chính xác bởi vì bảng chưa có gì được hàn vào nó ngoại trừ uC và Thẻ SD.

nhập mô tả hình ảnh ở đây

Bậc thầy (AVR Mega 128) đang chạy bộ tạo dao động RC bên trong - Tôi không biết điều này có liên quan hay không nhưng vì các tín hiệu thay đổi theo thời gian nên có thể jitter của bộ tạo dao động RC cũng kết thúc trong bus SPI. Chỉ cần nghĩ rằng tôi sẽ đề cập đến nó. Tôi cũng nhận thấy rằng trong các phép đo này, tôi đã chạy bộ điều khiển trong một vòng lặp vô hạn. Đây là mã:

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

Sự giật / run có thể xảy ra khi nội bộ chạy trong 72 lần và sau đó thoát ra. Vì phải mất thêm một thời gian để thực hiện ba dòng đầu tiên, có thể là mỗi dạng sóng thứ 73 đến vào một thời điểm hơi khác nhau do thời gian xử lý bổ sung. Nếu tôi phải đặt cược, tôi đoán đây là nguyên nhân của vấn đề của tôi (nếu tôi có thể, tôi sẽ xác nhận ngay lập tức nhưng bảng của tôi tại nơi làm việc và tuần sau sẽ tắt!) Nhưng tôi vẫn thích ý kiến ​​/ câu trả lời của SE về vấn đề này.

Nhưng khi xem xét uC đang chạy ở tốc độ 8 Mhz thì tôi không bị giật vì phần mềm sẽ là do tính bằng nano giây mà là micro giây. Nhưng trong hình thứ 2 có thể nhìn thấy một đường thẳng. Điều này xảy ra trong một giây rất ngắn trong đó toàn bộ dạng sóng dịch chuyển theo thời gian và vô hình trên màn hình. Tôi đoán rằng điều này là do vòng lặp và jitter trong hình đầu tiên là do bộ dao động RC.


2
kích hoạt của bạn là gì?
đánh dấu

@markrages kích hoạt được đặt ở mức 1.48V trên CH1 - cạnh tăng.
Saad

2
Một dự đoán là uC (giả định của tôi) tạo ra tín hiệu đồng hồ SPI đang sử dụng PLL hoạt động bằng cách rút ngắn hoặc kéo dài một số chu kỳ đồng hồ để giữ cho khóa được tham chiếu. Khi các chu kỳ đồng hồ ngắn hoặc dài đó xuất hiện, nó sẽ tạo ra sự biến động trên dấu vết phạm vi của bạn bởi vì các cạnh bạn đang nhìn đến sớm hơn / muộn hơn so với cạnh bạn đã kích hoạt.
Photon

1
Hoặc SPI được tạo trong vòng lặp chính của bạn, nhưng đôi khi có một ngắt làm trì hoãn việc thực hiện vòng lặp chính, vì vậy một lần nữa bạn lại thấy sự khác biệt trong chu kỳ của vòng lặp.
Photon

2
Từ này là "jitter", nhưng bạn có thể nói "rùng mình" ;-)
stevenvh

Câu trả lời:


6

Phạm vi của bạn hiển thị là một ví dụ cổ điển về jitter , có nghĩa là lỗi trong thời gian của sự kiện (cạnh tăng hoặc giảm), không phụ thuộc vào việc có bất kỳ nhiễu điện áp nào trên tín hiệu hay không.

Nhưng những gì có thể gây ra jitter trong hệ thống của bạn?

  • Như bạn suy đoán, nếu đồng hồ chính của uC bị xáo trộn thì rất có thể jitter sẽ chuyển trực tiếp đến đầu ra của đồng hồ từ thiết bị ngoại vi SPI.

    Bỏ qua không đầy đủ (bạn nên bỏ qua hàng loạt bổ sung trên bo mạch của mình ngoài hai tụ 100 nF bạn đã vẽ) có thể dẫn đến hiện tượng giật trong mạch đồng hồ uC.

    Tiếng ồn cung cấp điện được giới thiệu bởi các mạch khác trên bảng của bạn cũng có thể có hiệu ứng này (nhưng sẽ được giảm bằng cách bỏ qua nhiều hơn).

  • Các jitter có thể là cố hữu trong hiệu suất của thiết bị ngoại vi SPI của uC. Nó phải tạo ra đồng hồ SPI có tham chiếu đến đồng hồ hệ thống. Nếu nó sử dụng một bộ chia đơn giản (4 trên 1 trong trường hợp đồng hồ hệ thống 8 MHz và đồng hồ SPI 2 MHz), bạn sẽ không thấy jitter được thêm vào nhiều (mặc dù jitter đồng hồ hệ thống sẽ đi qua). Nhưng nếu nó sử dụng sơ đồ phức tạp hơn, như PLL, thì mạch đó có thể thay đổi độ rộng xung của xung nhịp SPI để giữ đồng bộ với đồng hồ hệ thống và bạn sẽ thấy đó là jitter. Một mạch PLL cũng có thể đặc biệt nhạy cảm với nhiễu cung cấp điện.

Nếu biên độ jitter bị giới hạn trong một phần nhỏ của chu kỳ đồng hồ, vì dường như ở đây, không có lý do gì jitter này sẽ gây ra lỗi trên bus SPI (phù hợp với quan sát của bạn rằng bus SPI dường như hoạt động như mong đợi) .


Tôi có một nắp bỏ qua 100nF. trên mỗi cặp vcc / gnd trên mỗi chip. Bạn vẫn sẽ đề nghị nhiều hơn? Nếu vậy, thêm 100nF hoặc 1uF mũ?
Saad

Nếu jitter này là "vấn đề" hiệu suất tồi tệ nhất trên bảng của bạn, không cần phải thay đổi bất cứ điều gì. Tùy thuộc vào có bao nhiêu mạch khác trong hệ thống của bạn và những gì chúng đang làm, một vài mũ bỏ qua 1, 10 và / hoặc 100 uF bổ sung trải khắp bảng là một cách thiết kế phổ biến. Chúng không được bản địa hóa cho một chip cụ thể, chúng cung cấp bỏ qua "số lượng lớn" cho toàn bộ bảng.
Photon

Vâng, tôi có hai tantalums 47u trên bảng cho mục đích này. Vì vậy, tôi sẽ ổn về phần bỏ qua.
Saad

2
SPI hoàn toàn đồng bộ. Không có số lượng jitter sẽ khiến SPI thất bại.
đánh dấu

@markrages, trong tình huống của OP, điều đó đúng. Tuy nhiên, về nguyên tắc, một lượng jitter thực sự cực kỳ có thể, ví dụ, có thể giảm khoảng cách giữa cạnh tăng và cạnh giảm đủ để vi phạm thời gian thiết lập của phần nô lệ và khiến giao diện bị lỗi. Tuy nhiên, jitter sẽ phải bằng gần một nửa thời gian để điều này xảy ra.
Photon

6

Điều này trông giống như tín hiệu jitter cho tôi. Thời gian của đồng hồ rất khác nhau, đủ để sự bền bỉ của phạm vi đang làm cho cạnh trông 'bị nhòe'.

Tôi không biết phạm vi Rigol của bạn có khả năng tính toán số liệu thống kê khi đo hay không. Nếu đúng như vậy, bạn có thể điều chỉnh điểm kích hoạt để cạnh kích hoạt của bạn xuất hiện ở cạnh trái của màn hình, điều chỉnh cơ sở thời gian để hiển thị một khoảng thời gian hoàn chỉnh và đo sự thay đổi tần số theo thời gian để cảm nhận sự thay đổi. (Jitter có thể trông tệ hơn so với khi kích hoạt cạnh ngoài màn hình.)

Nếu bạn muốn thu hẹp nguồn jitter, tôi sẽ bắt đầu với bộ tạo dao động RC. Xem nếu bạn có một tùy chọn để sử dụng một phương pháp đồng hồ khác (như tinh thể), thực hiện nó và làm hài lòng người hốt hoảng.


Sẽ thử nó với một bộ dao động bên ngoài ngay khi công việc mở ra!
Saad

6

Hình ảnh phạm vi có thể gây hiểu nhầm và bạn phải xem tất cả các tham số để diễn giải dữ liệu chính xác. Hình ảnh đầu tiên cho thấy độ giật 10 ns và sẽ không đẹp nếu kích hoạt chỉ ở màn hình bên trái. Nhưng dưới cùng bên phải, nó nói kích hoạt + 1.78, vì vậy 10 ns thực sự chỉ là 0,5% của khoảng thời gian. Mức jitter đó có thể là do bộ dao động RC. Yêu cầu jitter giảm ít nhất một bậc độ lớn với bộ dao động tinh thể.

Bạn nói rằng bạn chưa gặp bất kỳ vấn đề nào trong việc truyền dữ liệu SPI. Đó là nhờ sự tương đối của 0,5%. Nếu bạn muốn MOSI 1 Trước khi xung CLK, jitter 0,5% sẽ gây ra jitter 5 ns, điều này sẽ không vi phạm thời gian thiết lập và giữ.

Nếu bạn cần trấn an, chỉ cần đặt cơ sở thời gian sao cho bạn có thể thấy toàn bộ thời gian bit, cả kênh MOSI và CLK. Bạn sẽ nhận thấy rằng jitter sẽ khó nhìn thấy, và các cạnh liên tiếp vẫn được phân tách tốt.


Steven, bạn có thể giải thích tại sao vị trí của kích hoạt không? Làm thế nào bạn có được con số 0,5%?
Saad

2
@Saad - Điểm kích hoạt là time = 0. Những gì hiển thị trên màn hình xảy ra 1.78 us = 1780 ns sau đó. Và jitter 10 ns (nhiều hơn hoặc ít hơn) là biến thể của 1780 ns đó, vì vậy 10 ns / 1780 ns = 0,56%. Nó trông rất tệ bởi vì nó được phóng to ở cạnh rơi xuống, nhưng cạnh tham chiếu (bộ kích hoạt) sẽ cách hàng chục mét về bên trái. Vì vậy, nếu bạn thu nhỏ để bạn có được xung đầy đủ trong chế độ xem, jitter sẽ trông nhỏ hơn rất nhiều. Nếu điểm kích hoạt chỉ ở bên trái màn hình, giả sử ở mức 100 ns, thì độ giật 10 ns sẽ là 10%.
stevenvh

1

Jitter là một dạng của tiếng ồn. Nếu bạn coi thời gian đến giữa các cạnh của xung là một loại tín hiệu, thì nếu các cạnh đó không bị nhiễu gì, điều đó có nghĩa là hệ thống của bạn thể hiện tín hiệu không có tiếng ồn!

Sóng vuông thường được tạo ra bằng cách đập trên một sóng liên tục hơn, với một số loại mạch kích hoạt Schmidt có hành vi trễ. Các bộ dao động tinh thể hoặc RC không "tự nhiên" đưa ra sóng vuông.

Vì vậy, nếu sóng đầu vào đó có một số nhiễu điện áp trên nó, nhiễu đó sẽ chuyển thành những thay đổi nhỏ trong quá trình kích hoạt, vì điện áp đôi khi đạt đến ngưỡng sớm hơn và đôi khi muộn hơn.

Và do đó, nhiễu của một loại (nhiễu điện áp) biến thành nhiễu của một loại khác (nhiễu thời gian).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.