带编码器的直流减速电机——基于STM32F407

首先,什么是编码器?

编码器是将信号或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。在这里,编码器就是能够将电机的转动信息(比如转速、转动角度等)转换为脉冲信号的设备。按照原理可分为(常见的)光电编码器(光学式)和霍尔编码器(磁式)。

接着,编码器的作用以及为什么要用编码器?

如上所述,编码器能够将电机的机械几何位移转化为脉冲信号或数字量。也就是说,有了编码器,我们通过检测编码器输出的脉冲信号,就能获取电机转动角度、转速等相关信息。这样我们不但能定性的控制电机的转向、转速,还能定量的测量。

那么,编码器的原理是什么以及怎么运用呢?

简单来说,就是电机带动码盘转动,码盘的结构使得当电机在转动时会产生A、B两相的脉冲信号,且这两路脉冲信号的相位差为90度(即正交)。如下图:
(图源自网络)
由于A、B信号正交,因此可以根据两个信号哪个先哪个后来判断方向,根据每个信号脉冲数量的多少及每圈电机产生多少脉冲数就可以算出当前行走的距离,如果再加上定时器的话还可以计算出速度。

好了,现在我们的处境是,我们有一个带编码器的直流减速电机,我们知道当电机转动的时候,它会产生A、B两相正交脉冲信号,通过检测脉冲信号我们就可以获取电机的运动状况。
那么,我们通过什么手段来检测脉冲数呢?
其中一种思路是,我们通过定时器的输入捕获或者GPIO引脚的外部中断来检测边沿变化,以此来检测脉冲数。这方法好像没毛病,当电机正常运转时行得通。但是如果电机输出的脉冲信号出现了毛刺呢?这样误差就来了,怎么办?通过软件编写算法来滤去毛刺似乎有点困难,于是我们想到通过硬件来处理这个毛刺。(而STM32正好有硬件编码器,nice!)
这里的脉冲输入是一种特殊的输入捕获情况,因此stm32专门在定时器中提供了编码器模式,可大大简化解析过程。

STM32的编码器接口模式
在该模式下能计算电机输出脉冲信号的个数,且stm32根据其内部机制能够消除毛刺的干扰。

配置过程:
由于编码器接口模式是一种特殊的输入捕获,所以要先配置一下输入捕获(毕竟你要通过捕获边沿来检测脉冲)。在输入捕获过程中,我们把A6、A7复用为TIM3,作为输入捕获的引脚,对电机的A、B相脉冲进行输入捕获。
输入捕获配置完成之后再配置一下编码器模式就可以开始工作了。

于是紧接着我们来看看编码器模式的配置函数TIM_EncoderInterfaceConfig:
STM32官方库函数
其输入参数中,TIMx就是输入捕获时设置的TIM3,polarity就分别是TI1和TI2的捕获极性(TI1是定时器输入通道1,TI2同理),即A、B两相信号的捕获极性(上升沿捕获或者下降沿捕获),重点来说说编码器的模式TIM_EncoderMode:
当模式选为TIM_EncoderMode_TI1时,计数器仅在TI1的边沿处计数
当模式选为TIM_EncoderMode_TI2时,计数器仅在TI2的边沿处计数
当模式选为TIM_EncoderMode_TI12时,计数器在TI1和TI2边沿处均计数
也就是说,模式1,我只以A相的脉冲信号为我的检测信号,TI2我就

评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值