我为我的套件示波器的正交旋转编码器制定了一个新的维修程序,完成了这项工作后 ,我决定写下 新的程序并将 其发布到Github上。 包括用于定期轮询和引脚中断服务的例程。 不需要硬件开关跳闸。 这些例程是通用的,但我为安装在Launchpad上的MSP430G2231编写了测试代码,因此它们在这里是相关的。 示波器人员使用了大多数人目前使用的"查找表"状态转换例程,但它在示波器上的工作效果不是很好,而且我发现它在一般情况下不能很好地工作。 我的例程旨在避免交换机弹跳的所有影响,似乎工作良好且高效,并且不需要为反弹引起的Interrrupts提供服务。
在repo的PDF文件中对所有内容都进行了说明。 所有测试代码也包括在内,包括源代码和可刷新的十六进制文件, 我担心所有这些都包含在汇编程序中。 但我希望如果 有人感兴趣,创建C版本不会太困难。 程序很短。 我已经为两种类型的编码器提供了十六进制文件-这些编码器的脉冲数与每转的棘爪相同,而脉冲数与棘爪的一半。 在 这两种情况下,该故障码在每个制动器上都产生一个“嘀嗒”声。
新的程序是基于我所说的移动目标柱。 例如,在pin-interrupt例程中,一次只能在一个pin上启用中断。 当发生中断时,使能立即切换到另一个稳定的引脚。 因此,在触发中断的引脚上发生的任何弹跳都将不起作用,因为该引脚上不再启用中断。 因此,对于两个交换机的完整打开/关闭/打开循环,该例程 仅处理四个中断,一个用于 任一引脚上的每个合法过渡,而不用于退回。 轮询例程使用类似的逻辑来缓解反弹。
希望这对他人有用。
https://github.com/gbhug5a/Rotary-Encoder-Servicing-Routines