15-STM32旋转编码器
最常见的类型:
增量型旋转编码器
-
一般有A、B两相输出信号,没有旋转时,A、B两相均没有电平产生
-
根据A、B相信号的先后次序所导致的规律,A相上升沿(下降沿)触发中断后读取B相此时的电平状态,若B相是低电平(高电平)则为顺时针(逆时针)。
这样我们不仅可以通过计数A相或者B相上升沿或者下降沿的数量,来获得旋转编码器旋转的角度,而且还能根据A相边沿时B相的电平情况,得知当前的旋转方向,元件不同可能相反
每个脉冲代表一定角度。有些电机自带旋转编码器,向单片机反馈当前电机的旋转角度与旋转方向。
具体步骤设想一:
- 我们将A、B相信号接入到GPIO口后,将A相GPIO口设置为上升沿(下降沿)触发中断
- 在中断回调中读取B相GPIO口的电平状态来判断旋转方向,并且根据旋转方向对计数值加1或者减1,来记录脉冲数量
若某旋转编码器的手册上 每360度输出20个脉冲,也就是每个脉冲代表18度,所以用脉冲数量乘以18度就可以得出真实的旋转角度。我们一般只需要知道用户向哪个方向旋转了多大程度就好,倒也不必计算真实的旋转角度
总结:
通过外部中断的方式处理编码器信号固然可以,而且任意两个GPIO口都可以进行,不过这中方式处理向我们学习版上这中转的慢的旋钮还不错,如果是处理转得非常快的电机的旋转编码器就会因为频繁触发中断,占用太多cpu软件计算资源,导致其他任务无法正常执行,而且太快了的话,还有可能软件处理跟不上,导致丢步问题
具体步骤设想二:
使用计数器
让顺时针旋转计数器自增,逆时针旋转时计数器自减,具体如何实现?
触发控制器为A相和B相准备了一个编码器接口
在参数设置中,选择计算的编码器,每个脉冲计数2次, TI1 and TI2 则会计数4次。
734188718269)]
[外链图片转存中…(img-uuU49kij-1734188718269)]