100ns의 해상도로 타이밍하려면 10MHz에서 실행되는 타이머가 필요합니다. 많은 마이크로 컨트롤러가 타이머를 빠르게 실행할 수 있어야합니다.
6 개의 신호가 도착할 때 문제가 발생합니다. 이 신호들이 모두 같은 와이어에 있거나 각각 다른 와이어에 있습니까?
모두 동일한 와이어에 있으면 단일 10MHz 타이머가있는 모든 MCU에서이 작업을 정확하게 수행 할 수 있습니다. 순진 하게이 작업을 수행하는 코드는 다음과 같습니다.
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
문제는 타이머를 재설정하는 데 유한 한 시간이 걸린다는 것입니다. 이로 인해 두 가지 문제가 발생합니다.
구현 시간에 따라 측정 시간이 몇 100ns 정도 잘못 될 수 있습니다. 그러나 일관되게 잘못되어야합니다. 매번 정확히 같은 양으로 IE가 잘못되었습니다. 즉, 각 측정에 소량을 추가하여 쉽게 보상 할 수 있습니다.
측정 할 수있는 최소 시간이 있습니다. 이전 펄스 이후 100ns에 도달하면 놓칠 수 있습니다. 소프트웨어에서 할 수있는 일이 있는지 모르겠습니다. 하드웨어에서 여러 펄스를 처리 할 수있는 마이크로 컨트롤러를 찾아야합니다.
하드웨어에서 여러 펄스를 처리 할 수있는 마이크로 컨트롤러는 무엇입니까? 싸이프레스의 PSoC ! 이것은 구성 가능한 디지털 블록도 포함하는 마이크로 컨트롤러로, 각각 60MHz에서 6 개의 개별 타이머를 쉽게 실행할 수있어 20ns 이상의 해상도를 제공합니다.
여기 당신이 그것으로 할 수있는 것들을 보여주기 위해 빨리 넘어진 예가 있습니다. 나는 6 개의 개별 타이머를 가지고 있는데, 모두 버스 클럭에서 실행되며 최대 67MHz까지 올라갈 수있다. 실행중인 모든 타이머를 시작하는 트리거 핀과 6 개의 다른 핀이 있으며 각 핀은 타이머에서 캡처 이벤트를 발생시킵니다. 상태 레지스터를 사용하면 코드에서 펄스를 캡처하는 타이머를 모니터링 할 수 있습니다. 코드는 타이머에서 값을 읽을 수 있습니다.