내 신호 중 일부가 '떨림'(지터가 있음) 인 이유는 무엇입니까?


9

나는 2 MHz SPI 버스를 가지고 있지만 한 가지 주목할 점은 내 신호 중 일부가 종종 '떨다'는 것입니다. 예, 트리거가 올바르게 설정되어 있으므로 문제가 있다고 생각하지 않습니다.

여기에서 내가 의미하는 바를 볼 수 있습니다 (지속성 모드가 켜져 있음). 이것은 내 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가 8Mhz에서 실행되는 것을 고려할 때 소프트웨어로 인해 지터하지 않는 것은 나노 초가 아니라 마이크로 초이기 때문입니다. 그러나 두 번째 그림에서는 평평한 선이 보입니다. 이것은 전체 파형이 시간이 바뀌고 화면에 보이지 않는 아주 짧은 시간 동안 발생합니다. 나는 이것이 루프 때문이며 첫 번째 그림의 지터는 RC 발진기 때문이라고 생각합니다.


2
당신의 방아쇠는 무엇입니까?
markrages

@markrages 트리거는 CH1에서 1.48V로 설정되어 상승 ​​에지입니다.
Saad

2
한 가지 추측은 SPI 클록 신호를 생성하는 uC (내 가정)가 PLL을 사용하여 일부 클록 사이클을 단축 또는 연장하여 참조에 고정되도록하는 것입니다. 짧거나 긴 클럭 사이클이 발생하면보고있는 에지가 트리거 된 에지에 비해 더 일찍 / 나중에 오기 때문에 스코프 트레이스에 지터가 발생합니다.
광자

1
또는 SPI가 메인 루프에서 생성되지만 때때로 메인 루프 실행을 지연시키는 인터럽트가 있으므로 루프주기의 차이가 다시 나타납니다.
광자

2
단어는 "지터"이지만 "떨다"라고 말할 있습니다 ;-)
stevenvh

답변:


6

스코프가 보여주는 것은 지터 의 전형적인 예이며 , 신호에 전압 노이즈가 있는지 여부에 관계없이 이벤트 타이밍 (상승 또는 하강 에지)에 오류가 있음을 의미합니다.

그러나 시스템에서 지터를 유발할 수있는 것은 무엇입니까?

  • uC 메인 클럭이 불안하면 지터가 SPI 주변기기의 클럭 출력으로 직접 전송 될 가능성이 높습니다.

    부적절한 바이 패스 (귀하가 뽑은 두 개의 100nF 커패시터 외에 보드에 추가 벌크 바이 패스가 있어야 함) uC 클록 회로에 지터가 발생할 수 있습니다.

    보드의 다른 회로에서 발생하는 전원 공급 장치 노이즈도이 영향을 줄 수 있지만 더 우회하면 감소됩니다.

  • 지터는 uC의 SPI 주변 장치 성능에 내재되어있을 수 있습니다. 시스템 클럭을 참조하여 SPI 클럭을 생성해야합니다. 간단한 디바이더 (8MHz 시스템 클록 및 2MHz SPI 클록의 경우 4 대 1)를 사용하는 경우 시스템 클록 지터가 제대로 통과하더라도 더 많은 지터가 발생하지 않을 것으로 예상됩니다. 그러나 PLL과 같이보다 복잡한 체계를 사용하는 경우 해당 회로는 시스템 클록과 동기화하기 위해 SPI 클록 펄스 폭을 변경하여 지터로 볼 수 있습니다. PLL 회로는 특히 전원 노이즈에 민감 할 수 있습니다.

지터 진폭이 여기에있는 것처럼 클럭주기의 작은 부분으로 제한되는 경우이 지터가 SPI 버스에서 오류를 유발할 이유가 없습니다 (SPI 버스가 예상대로 작동하는 것으로 관찰 됨) .


100nF 바이 패스 캡이 있습니다. 모든 칩의 모든 vcc / gnd 쌍에서. 아직도 더 제안 하시겠습니까? 그렇다면 추가 100nF 또는 1uF 캡?
Saad

이 지터가 보드에서 최악의 성능 문제인 경우 아무 것도 변경할 필요가 없습니다. 시스템에 몇 개의 다른 회로가 있고 회로에 따라 보드에 퍼져있는 1, 10 및 / 또는 100 uF 바이 패스 캡 몇 개가 일반적인 설계 방식입니다. 이들은 특정 칩에 국한되지 않고 전체 보드에 대해 "대량"우회를 제공합니다.
광자

예,이 목적을 위해 보드에 2 개의 47u 탄탈륨이 있습니다. 우회 부분에 대해서는 괜찮을 것입니다.
Saad

2
SPI는 완전히 동기화됩니다. 지터의 양이 없으면 SPI가 실패합니다.
markrages

OP의 상황에서 @markrages는 사실입니다. 그러나 원칙적으로 매우 극단적 인 기간의 지터는 예를 들어 슬레이브 부분의 설정 시간을 위반하기에 충분한 상승 에지와 하강 에지 사이의 간격을 줄이고 인터페이스의 장애를 유발할 수 있습니다. 그러나 지터가 발생하려면 클럭주기의 거의 절반과 같아야합니다.
광자

6

이것은 나에게 신호 지터처럼 보인다. 클록주기는 미세하게 변하기 때문에 스코프의 지속성이 에지를 '번져'보이게합니다.

당신의 Rigol 스코프가 통계를 측정 할 수있는 능력이 있는지는 모르겠습니다. 만약 그렇다면, 트리거 에지가 화면의 왼쪽 가장자리에 나타나도록 트리거 포인트를 조정하고, 타임베이스를 조정하여 완전한주기를 표시하고 시간에 따른 주파수 변화를 측정하여 변화에 대한 느낌을 얻을 수 있습니다. (트리거 에지가 화면을 벗어날 때보 다 지터가 나빠질 수 있습니다.)

지터의 소스를 좁히려면 RC 오실레이터부터 시작하겠습니다. 크리스탈과 같은 다른 클록 방법을 사용하고이를 구현 한 후 지터를 재 측정 할 수있는 옵션이 있는지 확인하십시오.


작업이 시작되는 즉시 외부 오실레이터로 시도해보십시오!
Saad

6

스코프 이미지가 잘못 될 수 있으므로 데이터를 올바르게 해석하려면 모든 매개 변수를 확인해야합니다. 첫 번째 이미지는 10ns 지터를 보여 주며 트리거가 화면 왼쪽에 있으면 좋지 않습니다. 그러나 오른쪽 하단에는 트리거 + 1.78 µs가 표시되어 10ns는 실제로 시간 간격의 0.5 %에 불과합니다. 그 지터 레벨은 RC 발진기로 인한 것일 수 있습니다. 수정 발진기로 지터가 최소 1 배 이상 감소 할 것으로 예상합니다.

SPI 데이터 전송에서 아직 문제가 발생하지 않았다고 말합니다. 0.5 %의 상대성 덕분입니다. CLK 펄스 전에 MOSI 1 µs 전에 0.5 % 지터가 5ns 지터를 유발하면 설정 및 유지 시간을 위반하지 않습니다.

재 확보가 필요한 경우 MOSI 및 CLK 채널 모두에서 완전한 비트 시간을 볼 수 있도록 타임베이스를 설정하기 만하면됩니다. 지터가 거의 보이지 않으며 연속적인 가장자리가 잘 분리되어 있음을 알 수 있습니다.


스티븐, 방아쇠 위치가 왜 중요한지 설명해 줄 수있어? 0.5 % 수치는 어떻게 얻었습니까?
Saad

2
@Saad-트리거 포인트는 시간 = 0입니다. 디스플레이에 표시되는 것은 1.78 us = 1780 ns 후에 발생합니다. 그리고 10ns 지터 (더 많거나 적은)는 1780ns의 변화이므로 10ns / 1780ns = 0.56 %입니다. 하강 에지에서 확대 되었기 때문에 너무 나빠 보이지만 기준 에지 (트리거)는 왼쪽으로 수십 미터가됩니다. 따라서 전체 펄스를 볼 수 있도록 축소하면 지터가 훨씬 작아 보입니다. 트리거 포인트가 디스플레이에서 방치 된 경우 (예 : -100ns) 10ns 지터는 10 %입니다.
stevenvh

1

지터는 잡음의 한 형태입니다. 펄스 에지 사이의 도착 간 시간을 일종의 신호로 간주하면 에지가 지 터링되지 않으면 시스템에 노이즈가없는 신호가 나타납니다!

구형파는 종종 히스테리시스 동작을 갖는 일부 슈미트 트리거 유형 회로를 사용하여보다 연속적인 웨이브에서 임계 값을 지정하여 생성됩니다. 크리스털 또는 RC 발진기는 구형파를 "기본적으로"내 보내지 않습니다.

따라서 입력 파에 전압 노이즈가있는 경우, 전압에 도달 할 때 전압이 임계 값에 더 빨리 도달하거나 나중에 도달 할 때 노이즈가 트리거링에서 약간 이동합니다.

따라서 한 종류의 노이즈 (전압 노이즈)는 다른 종류의 노이즈 (타이밍 노이즈)로 바뀝니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.