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