STM32—编码器接口

1. 编码器接口简介

  • Encoder Interface 编码器接口
  • 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
  • 每个高级定时器和通用定时器都拥有1个编码器接口
  • 两个输入引脚借用了输入捕获的通道1和通道2

1.1 正交编码器

正交信号精度更高,因为A、B相都可以计次,相当于计次频率提高了一倍,其次就是正交信号可以抗噪声,因为正交信号,两个信号必须是交替跳变的,所以可以设计一个抗噪声电路,

如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,那这时计次值是不会变化的,

1.2 编码器接口

高级定时器和通用定时器具有一个编码器接口

1.2.1 编码器接口的输入部分

这里编码器接回有两个输入端,分别要接到编码器的A相和B相,然后这里是两个网络标号,分别写的是TI1FP1和TI2FP2,对应的就是这里,TI1FP1,TI2FP2,电路是这样连接的。 

可以看出,这个编码器接口的两个引脚,借用了输入捕获单元的前两个通道,所以最终编码器的输入引脚,就是定时器的CI1和CH2这两个引脚

信号的通路是,CH1通过这里,通向编码器接口,CH2通过这里,通向编码器接回,CH3和CH4…与编码器接回无关,其中CH1和CH2的输入捕获滤波器和边沿检测也有使用,但是后面的是否交叉、预分频器和QCR寄存器,与编码器接口无关,这就是编码器接口的输入部分

1.2.2 编码器接口的输出部分

那编码器接口的输出部分,其实就相当于从模式控制器了,去控制CNT的计数时钟和计数方向,简单来说,这里的输出执行流程是,按照我们之前总结的那个表,如果出现了边沿信号,并且对应另一相的状态为正转,则控制CNT自增,否则,控制CNT自减,

注意在这里,我们之前一直在使用的72MHz内部时钟,和我们在时基单元初始化时设置的计数方向,并不会使用,因为此时计数时钟和计数方问都处于编码器接口托管的状态,计数器的自增和自减,受编码器控制,这就是编码器接口的电路结构

1.3 基本结构

输入捕获的前两个通道,通过GPIO口接入编码器的A、B相,然后通过滤波器和边沿检测极性选择,产生TI1FP1和TI2FP2,通向编码器接口,编码器接口通过预分频器控制CNT计数器的时钟,同时,编码器接口还根据编码器的旋转方向,控制CNT的计数方向,编码器正转时,CNT自增,编码器反转时,CNT自减

另外这里ARR也是有效的。一般我们会设置ARR为65535,最大量程,这样的话,利用补码的特性,很容易得到负数,比如CNT初始为0,我正转,CNT白增,0、1、2、3、4、5、6、7等等,但是我反转呢,CNT自减,0下一个数就是65535,这里负数不应该是-1、-2吗,65535是不是就出问题了,但是没关系,我们做一个操作,直接把这个16位的无符号数转换为16位的有符号数,根据补码的定义,这个65535就对应-1,这样就可以直接得到负数,非常方便

1.4 工作模式

这里T1FP1和I2FP2接的就是编码器的A、B相,在A相和B相的上升沿或者下降沿触发计数,到底是向上计数还是向下计数,取决于边沿信号发生的这个时刻,另一相的电平状态,也就是这里的相对信号的电平,TI1FP1对应T12,T12FP2对应T11,就是另一相电平的意思,

然后在这里,这个编码器还分了3种工作模式,分别是仅在T1计数、仅在T2计数和T1 TI2都计数(精度比较高)

1.5 实例1,均不反向

1.6 实例2,TI1反向

这里T1和T12进来,都会经过这个极性选择的部分,在输入捕获模式下,这个极性选择是选择上升沿有效还是下降沿有效的,但是,编码器接口,显然始终都是上升沿和下降沿都有效的,上升沿和下降沿都需要计次,所以在编码器接口模式下,这里就不再是边沿的极性选择了,而是高低电平的极性选择

  • 如果我们选择上升沿的参数,就是信号直通过来,高低电平极性不反转
  • 如果我们选择下降沿的参数,就是信号通过一个非门过来,高低电平极性反转

所以这里就会有两个控制极性的参数,选择要不要在这里加一个非门,反转一下极性

显然,这与刚刚图的计数方向是相反的,这有什么用呢,比如你接一个编码器,发现它数据的加减方向反了,你想要正转的方向,结果它自减了,这时候把任意一个引脚反相,就能反转计数方向了这时,就可以调整一下极性,当然如果想改变计数方向的话,我们还可以直接把A、B相两个引脚换一下

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32编码器是一种用于计数和测量转动或线性运动的设备。它可以通过硬件编码器接口连接到STM32微控制器上。编码器通过测量脉冲信号来计数运动的次数。根据引用中所提到的,STM32的硬件编码器具有智能的特性,它能够容许抖动并在连续产生脉冲时进行计数。通过选择不同的定时器接口,可以实现编码器的正向/反向计数。例如,定时器3可以通过PC6和PC7引脚连接编码器。 使用STM32编码器的基本步骤与开发其他STM32部件的操作相似。首先,需要打开时钟并配置输入滤波和边沿检测以生成相应的脉冲信号。然后,根据需要配置编码器的工作模式,如正向计数、反向计数等。如果要使用中断功能,还需要打开相应的中断。具体的代码示例可以参考引用中提供的STM32编码器的示例代码。 另外,引用提供了一些关于使用STM32编码器的注意事项。例如,编码器有一个转速上限,超过这个上限将无法正常工作。此外,编码器的输出一般是开漏的,因此需要在单片机的IO上拉输入状态。在初始化定时器后,CNT寄存器的值将是编码器的位置信息,正转时CNT会增加,反转时CNT会减少。如果需要多圈计数,可以使用溢出中断来实现。此外,可以通过软件设置滤波来优化输入脚的信号。如果没有绝对位置信号,可以使用码盘的零位置信号结合定时器捕获输入来找到初始位置。 总之,STM32编码器是一种用于计数和测量运动的设备,通过选择不同的定时器接口和配置编码器的工作模式,可以实现所需的计数方式。在使用编码器时,需要注意一些硬件的限制和配置方面的注意事项。根据具体的应用需求,可以灵活选择编码器的功能和算法来满足需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值