一片伟大的净土

灵魂的归处,肉体的坟墓。

外部中断和定时器捕获旋转编码器

现有方案:使用PA6和PA7的上升沿外部中断(EXTI9_5_IRQn)检测编码器信号
主要问题:外部中断方式在高速旋转时会产生大量中断,占用CPU资源

定时器理论上可以达到晶振检测幅度(CPU占用0,硬件自动计数),外部中断有限

如果不能直接生成定时器捕获旋转编码器的代码(有误等等问题),可以先实现外部中断,让他改成定时器捕获

外部中断进出捕获数量会少于定时器捕获看代码里的Encoder_TIM_Init函数,TIM3被设置为编码器模式,使用两个通道(PA6和PA7)来捕获正交编码器的信号。定时器在这种模式下会自动处理脉冲的边沿,根据两个通道的相位差来计数,这种方式效率很高,不会丢失脉冲,因为硬件直接处理,无需软件中断。 而如果用户之前尝试过用外部中断(比如EXTI)来处理每个脉冲的上升沿或下降沿,那么在高速旋转时,中断响应时间可能成为瓶颈。比如,每次中断都需要进入中断服务例程,保存现场,处理计数,恢复现场,这些步骤需要一定的时间。如果编码器的脉冲频率超过了中断处理的速度,就会导致丢失部分脉冲,从而计数比定时器方式少。