最简单的方法是编写一个 Arduino 脚本并为自己做一些时间基准测试。
另一种方式——按规范执行——需要为每个涉及的级别提供更多输入。
最底层的是 ATmega328 芯片。ADC 部分的文档说:
默认情况下,逐次逼近电路需要 50 kHz 到 200 kHz 之间的输入时钟频率才能获得最大分辨率。如果需要低于 10 位的分辨率,则 ADC 的输入时钟频率可以高于 200 kHz 以获得更高的采样率。
假设 ATMega 的时钟为 16 MHz,ADC 时钟的唯一可用预分频器值为 128,即 125 kHz 用于 10 位分辨率。如果您可以使用 8 位分辨率,则可以使用预分频器值 64 (250kHz)。
下一个: 文档说:
正常转换需要 13 个 ADC 时钟周期。ADC 开启后的第一次转换(ADCSRA 中的 ADEN 置位)需要 25 个 ADC 时钟周期来初始化模拟电路。
因此,采用 125kHz ADC 时钟这意味着“单次转换”模式下的采样率约为 9600Hz。这是每个样本 104µs。这些是 Arduino 的默认设置。
与您要求的 160µs 相比,这似乎不错。
但是:到目前为止,仅考虑了转换。您必须将数据传输到某个地方。正如您在Arduino distanalogRead()
中的文件中所见,Arduino函数也有一些开销。wiring_analog.c
这个开销可能太多了 - 你必须自己测试它。
另一方面:没有人强迫你使用 ArduinoanalogRead
功能。一些可用的选择:
analogRead
你可以放弃和/或的开销
- 您可以根据需要重新配置 ADC(仅 8 位,更高的 ADC 时钟)和/或
- 您可以使用“高级”模式,如连续采样(ADC 的“自由运行模式”9 或
- 您甚至可以使用中断来触发转换。
当然,所有这些选择很大程度上取决于您的知识和时间预算。:-)