유한 또는 연속 버퍼 모드 카운팅에서 버퍼가 어떻게 동작합니까?



하드웨어: Multifunction DAQ (MIO)>>E Series

문제점:
유한 버퍼 카운팅을 하고 있습니다. 그런데 카운터 버터가 어떻게 카운팅을 하는지를 알고 싶습니다. 특히 "time limit", "number to read", "buffer mode and size" , 그리고 동작에 영향을 미치는 다른 파라미터들에 대하여 알고 싶습니다.

솔루션:
먼저 버퍼 동작에 대한 짧은 소개를 하기 위해 버퍼 이벤트 카운팅을 예로 들겠습니다. 이벤트 카운팅은 입력 라인의 소스로 들어오는 rising (혹은 falling) edge를 카운트합니다. 또 이 카운트 결과를 보드의 하드웨어 레지스터에 저장합니다. 그리고 게이트로 rising(혹은 falling) edge가 들어오면 이 레지스터에 저장된 값이 PC 메모리로 래칭됩니다. "Counter Buffer Config.vi"에서 설정된 버퍼로 래칭되는 것입니다.

유한 : 만약 버퍼를 유한으로 설정하였다면, 카운팅은 게이트가 정해진 버퍼만큼의 rising edge를 받을 때까지 지속됩니다. 만약 "number to read"를 수정하지 않으셨다면(혹은 -1로 하셨다면) 카운터의 읽기 버퍼는 전체 버퍼가 가득 차거나 타임아웃 기한이 지나기 전에는 데이터를 반환하지 않습니다. 기본 타임아웃 기한은 1초입니다. 타임아웃 기한이 지나면, 데이터는 타임아웃이 일어나기 전으로 되돌려집니다. 만약 "number to read"에 무언가 연결하셨다면, 정확히 그 수만큼을 읽어들입니다. 카운터 읽기 버퍼는 버퍼에 있는 모든 값이 읽혀질 때 까지 루프 안에서 반복적으로 호출될 수 있습니다.

연속 : 버퍼를 연속으로 설정하셨다면, "end of the buffer"가 없기 때문에 카운트 읽기 버퍼가 멈추지 않는다는 것을 제외하면 유한 동작과 동일하게 동작합니다. 즉 여기에서 버퍼는 환형(circular) 버퍼입니다. "number to read"에 "-1"을 연결하면 한번에 버퍼 안의 전체 데이터가 읽힙니다. 카운터 읽기 버퍼가 루프 안에서 반복적으로 호출되어야만 버퍼 오버플로우 에러(-10846)가 나지 않습니다. 루프가 충분히 빠르게 돌아가지 않아도 같은 에러(-10846)가 날 것입니다.

주의: 유한과 연속 모드 둘 다에서 -10920에러가 날 수 있습니다. 이는 게이트로 들어오는 rising edge가 너무 빠르게 들어와서 생기는 에러입니다. 즉 카운터 장비의 카운터 레지스터에서 PC 메모리로 전해지는 DMA 전송이 정해진 속도로 수행될 수 없을 때 나는 에러입니다. 이 에러는 시스템에 의존적이지만, 일반적으로 높은 kHx에서 낮은 MHz 범위에서 발생합니다. 더 많은 정보를 원하시면 KnowledgeBase 2007H8PQ를 참조하세요.

카운터를 사용한 예제들을 원하시면 아래 Developer Zone의 링크를 이용하세요.

관련 링크:
KnowledgeBase 2007H8PQ: What Is the Maximum Gate Frequency for a Buffered Operation Using the 6602?

KnowledgeBase 2C69GDQO: What Signal Rates Can the Data Acquisition DAQ-STC Counter Chip Acquire?
Developer Zone: Counter/Timer Examples

첨부:





리포트 날짜: 03/13/2002
마지막 업데이트: 12/20/2007
문서 번호: 2JCD04EW