使用微控制器计算来自编码器的脉冲的简单方法是什么?

What is an easy way to count pulses from an Encoder with a Microcontroller?

早上好!

对不起,如果我的问题是世界上最多的"asked",但我希望你能理清我的思绪!

我有这个项目要做:以某种方式计算来自编码器的脉冲。该程序将保留一个用户可以更改 "on run" 的值 "limit" 作为输入(例如,该程序读取线程中的输入并存储线程的下一个循环的变量 "counter" ).频率应该高达 100KHz,50Khz 就足够了,但你永远不知道......性能更高会更好......每次线程计数器达到限制时都会在输出中给出一个数字。

单片机上的程序应该是C语言;计数器不应该丢失任何脉冲(可靠性是必须的)。

这就是我目前对该项目的全部了解,但我认为我不会有太多其他具体...

真正的问题是: 广告中应该使用什么微控制器?阿杜诺?覆盆子?如果我使用 Raspberry,我会冒着在背景丢失脉冲中做一些事情的风险吗?那么 Beaglebone 呢? 关于这个问题是否有任何解决方法(一些关于特定微控制器的文档和教程)?

我再说一遍,除了可靠性之外,我没有令人难以置信的细节! 抱歉,如果我问的问题已经讨论过了,但我真的对最好和最简单的解决方案感到困惑!请把我当成最差的新手,因为我可能就是!

非常感谢你们的好意!

Arduino Due 中有两个正交编码器 (QDEC) 通道,但原始通道是 "out of stock"。关于它的一些问题在 Arduino SE 中:How to configure 2nd Quadrature Decoder IO pins in Arduino IDE and Reading Two Quadrature Encoder using a single Arduino Due

没有它你必须使用中断。然而,对于大约 100kHz 的频率,您可能需要一些更快的 arduino(基于 ARM)或外部硬件解码器。

某事like:

例如双向计数器...

您肯定不想使用任何具有 Linux 或 Windows 操作系统的东西(即 Raspberry、Beaglebone 等),因为它们不是实时的,您不能确定你不会错过任何脉搏。

几乎任何用裸 C 语言编程的现代微控制器都应该足够了。如果您采用时钟频率为 8MHz 的 AVR(例如 Atmega8 或 Atmega16 甚至 Attiny2313),并且您的目标分辨率为 100kHz,则一个脉冲将有 80 CPU 个周期。如果您使用硬件中断来检测脉冲,这绝对应该足够了。可以肯定的是 - 两种方式:

  1. 编译后分析代码(汇编)。您将看到中断服务例程中有多少指令。然后用你的微控制器数据表你可以计算它需要的详细周期数
  2. 连接信号发生器,将其设置为方波并查看您在哪个频率开始失去脉冲。如果您的目标频率小 2-3 倍,您就在安全范围内。

完成计数部分后,您可以发送脉冲数,例如。每秒到一些高级 computer/software,例如使用 UART 或 SPI。不过这个当然要看你的设计要求了。

可以使用单片机(如AVR)或Arduino(其中大部分也使用avr单片机)。要读取脉冲,您可以使用外部中断功能和定时器功能。外部中断用于提高由编码器触发的 rps 计数,定时器功能用于在计算 "x" 时间(即:1 秒)

的总旋转后重置 rps 计数