使用编码器接口的好处就是节约软件资源,如果使用外部中断来计次,那当电机高速旋转时,编码器每秒产生成千上万个脉冲,程序就需要频繁进入中断,然后进中断之后,完成的任务又只是简单的加一减一,软件资源就被这种简单而又低级的工作给占用了,所以, 对于这种需要频繁执行,操作又比较简单的任务,般我们都会设计一个硬件电路模块,来自动完成,所以本节中的编码器接口就是自动给编码器进行计次的电路,如果我们每隔一段时间取一下计次值,能得到编码器旋转的速度。
1.编码器接口
1.1 正交编码器
编码器接口接受编码器的正交信号,根据编码器产生的正交信号脉冲控制CNT的自增和自减,从而指示编码器的旋转方向和旋转速度。
每个高级定时器和通用定时器都有一个编码器接口,同时正交编码器产生的正交信号分为正转和反转,通过两个GPIO口产生的正交信号来决定是正转还是反转。
1.2 应用场景
-
电机控制:在电机控制系统中,编码器接口可以用于测量电机的转速和位置,实现闭环控制。通过实时监测电机的运行状态,可以根据需要调整电机的驱动信号,提高电机的控制精度和稳定性。
-
自动化设备:在自动化生产设备中,编码器接口可以用于精确测量物体的位置和运动速度,实现自动化控制。例如,在流水线生产中,可以通过编码器接口实时监测产品的位置,实现精确的定位和分拣。
-
机器人:在机器人领域,编码器接口可以用于测量机器人关节的位置和速度,实现精确的运动控制。通过编码器反馈的信息,可以使机器人更加准确地执行各种动作,提高机器人的运动精度和稳定性。
-
数控机床:在数控机床中,编码器接口可以用于测量刀具的位置和运动速度,实现精确的加工控制。通过编码器反馈的信息,可以使数控机床更加准确地加工零件,提高加工精度和质量。
2.编码器接口基本结构
CNT的自增还是自减受编码器控制,输入捕获的前两个通道通过GPIO口连接编码器的A相和B相,再通过滤波器和边沿极性选择,产生TI1FP1和TI2FP2信号通向编码器接口,同时编码器接口根据编码器的旋转方向控制CNT的计数方向,编码器正转,CNT自增,编码器翻转,CNT自减。编码器接口相当于使用了一个带有方向选择的外部时钟。
PSW:
-
用于调整计数时钟的频率。通过设置不同的 PSC 值,可以控制计数器的计数速度,从而满足不同应用场景下对计数分辨率和速度的要求。
-
比如在高速旋转的设备中,可以适当增大 PSC 值以降低计数频率,防止计数器溢出过快;而在需要高精度测量的场合,可以减小 PSC 值以提高计数分辨率
-
编码器接口通过预分频器控制CNT计数器的时钟。
CNT:
-
根据输入的编码器信号进行计数操作。编码器的旋转会产生 A 相和 B 相的脉冲信号,这些信号经过处理后驱动计数器进行计数,从而反映编码器的位置变化。
-
计数器的值可以实时读取,用于计算编码器的当前位置、速度等信息
-
编码器接口还根据编码器的旋转方向,控制CNT的计数方向,编码器正转时,CNT自增,编码器反转时,CNT自减。
ARR:
-
作用是设定计数器的计数上限。当计数器(CNT)的值达到 ARR 设定的值时,可以触发特定的事件,比如产生中断。在实际应用中,这使得系统能够定期对编码器的位置信息进行读取或执行特定的操作。
-
例如在一些需要精确控制的电机系统中,当编码器旋转一定角度使得计数器达到 ARR 值时,触发中断来调整电机的控制信号,以实现精确的位置控制。
-
一般会设置ARR为65535,最大量程,这样的话,利用补码的特性,很容易得到负数。
滤波功能:
-
对输入的编码器信号进行滤波处理,去除信号中的噪声和干扰。编码器在工作过程中可能会受到外部电磁干扰等因素的影响,滤波功能可以提高信号的质量,确保后续处理的准确性。
-
可能采用硬件滤波器(如电容、电感等组成的滤波电路)或软件滤波算法来实现。
边沿检测:
-
负责检测编码器信号的上升沿和下降沿。通过精确检测边沿变化,可以确定编码器的旋转方向和位置变化的速度。
-
例如,根据 A 相和 B 相信号的边沿变化顺序,可以判断编码器是正转还是反转。
3.代码编写
- 开启RCC时钟,包括GPIO和定时器3的时钟。
//1.开启时钟TIM3的时钟线是APB1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE