40 개의 시프트 레지스터를 체인으로 연결할 때 어떤 문제가 발생할 수 있습니까?


16

40 x 74HC595 시프트 레지스터를 함께 연결할 계획입니다 . 74HC595의 전체 체인은 5V 마이크로 컨트롤러에 의해 제어되며 SDI, CLOCK& LATCH신호를 생성합니다 .

아래 그림과 같이 각 시프트 레지스터와 마이크로 컨트롤러에는 자체 PCB가 있습니다.

도표

기계적 구속 때문에, 각 시프트 레지스터 사이의 거리는 약 30cm (12 인치)이므로 제어 신호는 앞쪽 거리를 따라 이동합니다. 12m (40 피트). 게다가, 전체 시스템은 매우 시끄러운 환경 (형광등, 주선 등)에 장착됩니다.

내 관심사는 제어 신호가 매우 시끄럽고 시프트 레지스터가 잘못된 것을 출력 할 수 있다는 것입니다. 나는 생각하고 있었다 :

  • 각 보드에서 버퍼 IC를 사용하여 제어 신호를 버퍼링합니다. 어느 것을 추천 하시겠습니까?
  • 신호를 위해 보드 사이에 차폐 케이블 사용
  • CLOCK주파수를 최대한 낮추십시오 . 하루에 몇 번만 레지스터 내용을 업데이트하면됩니다.

위의 해결책이 좋은 일입니까? 신호선의 (잠재적) 잡음을 최소화하기 위해 무엇을 할 수 있습니까?


3
이것은 40 개의 시프트 레지스터 대신 CPLD의 환상적인 후보처럼 들립니다.
Joel B

2
@JoelB CPLD에 적합한 것처럼 들릴 수 있지만 , 메인 보드 (CPLD)에서 모든 곳으로 320 (= 40 * 8) 개의 신호가 전달됩니다. 제 경우에는 그 환경에 설치하기가 매우 어려울 것입니다. 유지하기가 매우 어려울 것입니다. 또한 신호는 짧지 만 여전히 노이즈에 노출됩니다.
m.Alin

1
@Joel-Digikey는 320 개의 I / O를 가진 소수의 CPLD 만 나열하며 모두 BGA입니다. 40'595s보다 비싸고 m.Alin과 마찬가지로 분산 신호의 이점이 없다고 말합니다. 논리적 관점에서 볼 때 이것은 CPLD를위한 완벽한 작업입니다.
stevenvh

2
@ m.Alin-당신 말이 맞아요. 방금 40 개의 시프트 레지스터를 읽고 CPLD로 입력했습니다. 질문을 철저히 읽은 후에는 어떻게하고 있는지 이해하십시오.
Joel B

답변:


14

각 보드의 입력에서 슈미트 트리거 버퍼 를 사용하십시오 . 예를 들어 노이즈가 시계에 잘못된 펄스를 발생시키지 않도록 신호를 정리합니다. 74LVC3G17는 삼중 비 반전 버퍼이다.

또한 버퍼링 된 신호를 다음 보드로 전달하십시오. 그렇지 않으면 모든 입력이 병렬이되고 구동 마이크로 컨트롤러의 팬 아웃을 초과 할 수 있습니다 (특히 총 용량 성 부하를 고려하고 있습니다). 데이지 체인의 클록 및 래치 신호는 체인 전체에 리플 지연을 제공하지만 데이터도 마찬가지이므로 저속으로 갈 계획입니다.


1
@ m.Alin-예, 푸시-풀 단계가 좋습니다. 그러나 드라이브 기능뿐만 아니라 특히 Schmitt-trigger의 히스테리시스를 위해 버퍼를 강력하게 권장합니다 .
stevenvh

2
@Saad-버퍼가 신호를 케이블로 구동한다는 의미입니까? 좋은 점은 노이즈를 줄이는 낮은 임피던스를 제공한다는 것입니다. 그러나 수신기 측에 잡음 있으면 송신 측에서 아무것도 할 수 없습니다. 따라서 Schmitt-trigger가 제공하는 우수한 잡음 내성이 필요한 수신기입니다.
stevenvh

1
@Saad-예, 그러나이 경우에는 과도하게 보입니다. 전선의 길이는 30cm에 불과하며 각 보드에 이미 리피터 / 버퍼가 있습니다.
stevenvh

1
@ stevenvh 예, 나는 일반적으로 얘기했다. 귀하의 게시물에는 풍부한 정보가 있으며 거의 ​​항상 새로운 것을 배웁니다! 이 경우 컨트롤러 보드에 '딸 보드'에 연결되는 케이블에 연결하는 버퍼가 있습니다. 나는 많은 소음을 기대하지 않기 때문에 내 편에 머무를 수 있습니다. 소스가 8 개의 장치 (8pF 입력 커패시턴스 + 트레이스 및 케이블 커패시턴스)를 구동하지 않도록 버퍼 만 있습니다.
Saad

1
@Saad-꽃 주셔서 감사합니다! :-) 케이블의 커패시턴스, 특히 미터 이상인 경우에는주의하십시오. 대략적으로 : 100 pF / m, 이는 입력 커패시턴스보다 훨씬 더 큽니다.
stevenvh

9

발생할 수있는 문제는 다음 SR 클럭 전에 일부 SR 클럭이 발생하여 다음 SR이 잘못된 데이터를 클럭 할 수 있다는 것입니다. 이를위한 (표준?) 솔루션은 마지막 SR에서 시작하는 클럭을 연결하는 것입니다.

3 개 신호 라인 모두에 대해 각 보드에 (schmit-trigger?) 버퍼를 추가하는 것이 좋습니다.

(편집) 클럭 주파수를 낮추는 것은 도움이되지 않습니다 (시작하기에 너무 높지 않은 경우). 클럭 주파수를 얼마나 낮게 선택하더라도 클럭 에지에서 발생할 수있는 문제는 어쨌든 발생합니다.


8

시프트 레지스터를 체인으로 연결할 때 가장 큰 문제는 각 보드에서 사용하는 클럭 간의 타이밍 관계가 데이터 수신에 사용되며 이전 보드의 데이터 변경을 예측할 수 있도록하는 것입니다. 74HC595의 출력이 시계와 동일한 가장자리에서 변경된다는 사실은 그 점에서 약간 성가시다. 클럭 신호는 각 보드를 통과 할 때 버퍼링되어야하며 한 보드의 74HC595에서 나오는 데이터 신호는 클럭 버퍼보다 ​​약간 긴 시간 지연되는 버퍼를 통과해야한다고 제안합니다.

또는 하강 클록 에지에서 데이터 출력이 변경되는 74HC4094 와 같은 시프트 레지스터를 사용 하거나 보드의 마지막 74HC595 출력과 다음 보드 사이에 플립 플롭을 추가하고 해당 플립 플롭을 가질 수 있습니다 74HC595를 구동하는 클럭의 하강 에지에서 출력을 래치하십시오 (아마도 두 개의 인버터를 통해 클럭을 통과시켜 버퍼링하고 반전 된 클럭 신호를 플립 플롭에 공급합니다).

사용하는 74HC595 출력 수가 칩에서 제공하는 수보다 하나 이상인 경우 (예 : 2 개의 74HC595가있는 보드에서 실제로 15 개의 출력 만 필요) 마지막 74HC595를 보드에 공급할 수 있습니다. 다른 클럭으로부터 반전 된 클럭이지만, 신호가 비 반전 클럭 74HC595와 반전 클럭 74HC595 사이를 통과 할 때마다 하나의 74HC595 출력을 사용하는 비용이 발생합니다.

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