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
問題は、タイマーをリセットするのに有限の時間がかかることです。これにより、2つの問題が発生します。
実装に応じて、測定される時間は数100ns間違っています。ただし、それらは常に間違っているはずです。毎回まったく同じ量のIEが間違っています。これは、各測定に少量を追加することで簡単に補正できることを意味します。
測定できる最小時間があるでしょう。いずれかのパルスが前のパルスの100ns後に到着した場合、おそらくそれを逃すことになります。ソフトウェアでそれについて何かできることがあるかどうかはわかりません。ハードウェアで複数のパルスを処理できるマイクロコントローラーを見つける必要があります。
ハードウェアで複数のパルスを処理できるマイクロコントローラーはどれですか?サイプレスのPSoC!これは、構成可能なデジタルブロックも含むマイクロコントローラーです。つまり、それぞれが60MHzで動作する6つの独立したタイマーを簡単に実行でき、20nsを超える分解能を実現できます。
これを使ってできることを示すために、すぐにノックアップした例を示します。私は6個の個別のタイマーを持っています。それらはすべてバスクロックで動作し、最大67MHzになります。実行中のすべてのタイマーを開始するトリガーピンと、タイマーでキャプチャイベントを発生させる他の6つのピンがあります。ステータスレジスタを使用すると、コードでパルスをキャプチャしたタイマーを監視できます。コードはタイマーから値を読み取ることができます。