我将尽可能准确地测量非常短的时间。该设备将获得第一个脉冲,并在150微秒内再得到六个脉冲,每个脉冲都通过自己的电线传输。第一个信号与六个其他信号中的每个信号之间的时间必须尽可能精确地测量。精度应至少为100纳秒,但更好。
哪个微控制器最适合?我发现了这个。他们似乎有一个周期为4纳秒的计时器。对我来说足够准确了。
其他一些微控制器会更好吗?可以用AVR完成吗?
我将尽可能准确地测量非常短的时间。该设备将获得第一个脉冲,并在150微秒内再得到六个脉冲,每个脉冲都通过自己的电线传输。第一个信号与六个其他信号中的每个信号之间的时间必须尽可能精确地测量。精度应至少为100纳秒,但更好。
哪个微控制器最适合?我发现了这个。他们似乎有一个周期为4纳秒的计时器。对我来说足够准确了。
其他一些微控制器会更好吗?可以用AVR完成吗?
Answers:
微控制器的速度并不总是限制因素。MSP430可能是一个合适的解决方案,不是因为它只能在最高25MHz的频率下运行,而是因为一些MSP430器件都具有Timer D外设,该外设可以实现高达4ns的时间段(256MHz)。这比那里的几乎所有微控制器都快。即使是最新版本的STM32(F4)也只能运行180MHz。
定时器D在MSP430F51x1和MSP43051x2器件(例如MSP430F5131)上可用。
但是,这只能解决捕获时间的问题。最大的问题是您如何处理它,因为处理本身会变慢。您可以采样两个脉冲之间的时间,但是如果这就是您的意思,则将无法在两个脉冲之间进行任何处理。
要达到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
问题在于重置计时器需要有限的时间。这导致两个问题:
取决于您的实现,所测量的时间可能错了几百ns。但是,它们应该始终是错误的。IE每次错误的数量完全相同。这意味着您可以通过在每次测量中添加少量来轻松补偿。
您将需要最少的时间进行测量。如果任何脉冲在前一个脉冲之后100ns到达,那么您可能会错过它。我不知道您是否可以在软件中对此进行任何处理。您将必须找到一个可以处理硬件中多个脉冲的微控制器。
哪个微控制器可以处理硬件中的多个脉冲?在赛普拉斯的PSoC!这是一个微控制器,其中还包含可配置的数字模块,这意味着您可以轻松地运行6个独立的定时器,每个定时器的工作频率均为60MHz,分辨率高于20ns。
这是我迅速提出的一个示例,向您展示了您可以使用它进行的操作。我有6个单独的计时器,所有计时器都在总线时钟上运行,最高可达到67MHz。有一个触发引脚可启动所有计时器的运行,还有一个其他6个引脚,每个引脚都会导致定时器发生捕获事件。状态寄存器使您的代码可以监视哪些定时器捕获了脉冲。该代码可以从计时器中读取值。
修改后的答案:快速数字存储示波器或可能的频率计数器设备。
旧答案:
简而言之,“您可以找到最快的微控制器”,理由是您的时钟/采样越快,您就可以越精确。MSP430不是快速设备。
STM32是32位的,运行速度更快,另外还提供类似的廉价开发板和工具,但与某些更强大的功能(Raspberry Pi @ 800MHz-1GHz(超频))相比,这仍然相当慢。通常,速度越快,处理器就越复杂,因此学习曲线可能会有所取舍。
补充: Benji是正确的,如果您想进行非常精确的测量,您(可能)还需要一个用于微型的精确振荡器(您实际上没有在问题中指定误差范围)。