STM32 定时器编码器模式时,如何理解编码器计数

编码器的使用
增量式编码器倍频技术

增量式编码器输出的脉冲波形信号形式常见的有两种:

  1. 一种是占空比 50% 的方波,通道 A 和 B 相位差为 90°;
  2. 另一种则是正弦波这类模拟信号,通道 A 和 B 相位差同样为 90°。

对于第 1 种形式的方波信号,如果把两个通道组合起来看的话,可以发现 A 和 B 各自的上升沿和下降沿都能计数,至少在 1/2 个原始方波周期内就可以计数一次,最多 1/4 个原始方波周期。这样计数频率就是原始方波信号的 2 倍或 4 倍,换句话说就是,将编码器的分辨率提高了 2 到 4倍,具体如下图所示。方波

图中的方波信号如果只看其中一个通道的上升沿,那计数频率就等于这个通道信号的频率。如果在通道 A 的上升沿和下降沿都进行计数,计数频率就是通道 A 的两倍,即 2 倍频。如果同时对两个通道的上升沿和下降沿都计数,那计数频率就变成了原始信号的 4 倍,即 4 倍频。

假设有个增量式编码器它的分辨率是 600PPR,能分辨的最小角度是 0.6°,对它进行 4 倍频之后就相当于把分辨率提高到了 600*4=2400PPR,此时编码器能够分辨的最小角度为 0.15°。

常用测速方法简介
• M 法:又叫做频率测量法
这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间的编码器脉冲数,计算速度值。设编码器单圈总脉冲数为 C,在时间 T0 内,统计到的编码器脉冲数为 M0,则转速 n 的计算公式为:在这里插入图片描述

公式中的编码器单圈总脉冲数 C 是常数,所以转速 n 跟 M0 成正比。这就使得在高速测量时 M0变大,可以获得较好的测量精度和平稳性,但是如果速度很低,低到每个 T0 内只有少数几个脉冲,此时算出的速度误差就会比较大,并且很不稳定。也有一些方法可以改善 M 法在低速测量的准确性,上一节提到的增量式编码器倍频技术就是其中一种,比如原本捕获到的脉冲 M0 只有4 个,经过 4 倍频后,相同电机状态 M0 变成了 16 个,也就提升了低速下的测量精度。

• T 法:又叫做周期测量法
这种方法是建立一个已知频率的高频脉冲并对其计数,计数时间由捕获到的编码器相邻两个脉冲的间隔时间 TE 决定,计数值为 M1。设编码器单圈总脉冲数为 C,高频脉冲的频率为 F0,则转速 n 的计算公式为:在这里插入图片描述

公式中的编码器单圈总脉冲数 C 和高频脉冲频率 F0 是常数,所以转速 n 跟 M1 成反比。从公式可以看出,在电机高转速的时候,编码器脉冲间隔时间 TE 很小,使得测量周期内的高频脉冲计数值 M1 也变得很少,导致测量误差变大,而在低转速时, TE 足够大,测量周期内的 M1 也足够多,所以 T 法和 M 法刚好相反,更适合测量低速。

• M/T 法:这种方法综合了 M 法和 T 法各自的优势,既测量编码器脉冲数又测量一定时间内的高频脉冲数。
在一个相对固定的时间内,计数编码器脉冲数 M0,并计数一个已知频率为F0 的高频脉冲,计数值为 M1,计算速度值。设编码器单圈总脉冲数为 C,则转速 n 的计算公式为:在这里插入图片描述

由于 M/T 法公式中的 F0 和 C 是常数,所以转速 n 就只受 M0 和 M1 的影响。电机高速时, M0 增大, M1 减小,相当于 M 法,低速时, M1 增大, M0 减小,相当于 T 法。

STM32 的编码器接口简介
STM32 芯片内部有专门用来采集增量式编码器方波信号的接口,这些接口实际上是 STM32 定时器的其中一种功能。不过编码器接口功能只有高级定时器 TIM1、 TIM8 和通用定时器 TIM2 到TIM5 才有。编码器接口用到了定时器的输入捕获部分,功能框图如下图所示。

我们重点关注编码器接口是如何实现信号采集和倍频的。

STM32使用的是定时器的编码器模式,定时器TIMx->CNT寄存器接收到的是编码器方波的数量。这里怎么处理是由STM32硬件来完成,大家理解的时候不需要太过纠结。

通过读取CNT的值,可以知道单位时间内接收到多少方波,进而可以得出电机的转速、方向和转动的圈数。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值