由于最近干活遇到需要获取正交编码的功能,所以返回来研究一下STM32CubeMX的编码器功能,之前也更新过STM32的定时器功能,但是因为之前搞平衡车的正交编码器没有搞清楚原理,就直接用了脉冲输入功能草草了事,现在也算是为之前的年轻买单了,不过看到现有的Encoder说明都比较简单,所以就当是为开发者做贡献了,我研究清楚之后来一篇博客。
书归正传,正交编码器通常是安装在电机上的,与电机转子的主轴同轴,有一些是通过主轴连接减速或加速齿轮组再接入编码器的,编码器一般有光栅编码器和磁极编码器两种,正转反转输出的脉冲都是下图这个样子

STM32本身带有处理正交脉冲的功能,也就是定时器中的Encoder模式
具体操作:
STM32CubeMX配置
1.打开STM32CubeMX,选择自己使用的芯片,此处我以STM32F429IGT6为例进行;
2.设置系统、时钟基本操作
SYS

RCC
3.定时器设置
此处我选用的是TIM3,TIM3位通用定时器,一般芯片通用定时器比较多
Combined Channels采用Encoder Mode(编码器模式)
选用此模式后TIM3的CH1和CH2就变为编码器接口了,记住对应的两个接口,之后要把编码器信号接到这两个口上,我的是PA6和PA7

下方参数设定根据需求进行设定,由于我需要记录编码器的上升沿和下降沿,所以此处选择的是Encoder Mode TI1 and TI2,这个模式将AB两组脉冲的上升下降沿都计数了,就是计数4次,不需要那么精确的同学可以把预分频系数(Prescaler)修改为4-1,那么脉冲检测到4个脉冲就会计数1次了,滤波器看个人,我用杜邦线直连的,距离10cm不到所以我设的是0,具体怎么选可以看STM32中文参考手册,懒人看下面的图


4.串口设置
为了方便观察,需要通过串口发送对应的旋转方向,旋转计数值到串口调试助手。
由于芯片只用于发送数据,就不搞中断了,直接选择异步串口即可

5.最后配置时钟树
这个大家自行处理,每块芯片都不同,最终让中间HCLK(MHz)为72即可

6.项目配置
我用的开发环境是Keil5,所以在Toolchain/IDE中选择了MDK-ARM

代码生成的时候把Generated files中的第一项选中,不然h文件和c文件混着,看着都难受


本文详细介绍了如何使用STM32CubeMX配置STM32F429IGT6芯片的正交编码器功能,并提供了代码实现及接线指导。

9467

被折叠的 条评论
为什么被折叠?



