一、 简介
本章讲解旋转编码器驱动方式,一种为普通GPIO边沿检测方式,一种为定时器编码器方式,各有优缺点,当资源不足时可以选择第一种但是精度不如定时器编码器方式,资源充足时建议时间定时器方式较优且可靠。
二、旋转编码器原理
2.1 介绍:
相信很多都知道旋转编码器这个东西,但是也不免新人见过但是没听过此名词故而不了解,因此请看下图!!! 这就是常见的旋转编码器,和电位器很像,但是原理和应用不一样,它一般用于音响系统、数控机床、机器人、自动化设备、伺服控制系统等。
2.2 模块电路原理:
可见外围电路还是相当简单,SW1引出的TRIM_A/B是编码器的AB相脉冲,PUSH是按下的按键电平翻转,这三个通道空闲都是上拉。
2.3 正反转检测原理:
编码器给出两相方波,可见下图的波形A/B相位差90°,我们就叫A/B通道,其中的一个通道给出与转速有关的信息,同时与另外一个通道对比,就能知道旋转的方向。
可见下图编码器盘上有两个通道(A 和 B),每个通道在不同位置有通断的状态,可见图中间的S1标识,如果 S1向右转动那么A 通道的信号先于 B 通道发生变化,则表示顺时针旋转,如果S1向左转动 B 通道的信号先于 A 通道发生变化,则表示逆时针旋转。
三、驱动方式一
3.1 简介:
此驱动方式以普通GPIO边沿检测方式,优点是不占用定时器资源,普通的GPIO配置成外部中断即可使用,缺点是响应慢、精度低、抗噪声能力差。
3.2 原理:
当脉冲来临时,触发外部中断进入服务函数,通过检测旋转编码器A通道和B通道的电平变化来确定编码器的旋转方向,并相应地增加或减少计数。当中断触发时,它检查当前通道的状态与之前保存的状态是否不同,以判断是否有旋转发生。然后,通过比较A通道和B通道的相对状态(即是否相同),来决定是正转还是反转:如果两个通道状态不同则认为是正转,增加计数;如果相同则认为是反转,减少计数。最后,更新上次的状态并清除中断标志位,以便处理下一次中断。
3.3 代码:
/**
**************************************************************************
** -------------------------------------------------------------------- **
** @name : Xz_scan
** @brief : 用于初始化外部中断以及中断向量控制器
** @param : None
** @retval : None
** @author data : 轩哥 2023-03-18
** @version : v1.0