你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32定时器编码器模式应用

[复制链接]
STMCU小助手 发布时间:2021-2-23 10:03
STM32定时器编码器模式应用
; Q" l) m0 ~, c2 a$ g+ V
0 U. H) N  Z& l7 h
1.正交编码器原理
/ z! a6 D3 \' K' l# T7 Z7 I
什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。如下图所示。编码器输出两个脉冲信号TI1和TI2,TI1超前TI2 90度时,向上计数;TI2超前TI1 90度时,向下计数。

2 T+ v0 {/ S* x1 _0 U
4.1.png
1 C' a1 Y5 E0 [( r
编码器的应用很多,最常用的就是电机测速,以及各种仪器上的旋钮等。
1 ?- x' e% I8 f# f7 I
2.STM32CubeMX配置

* `' Q) d8 y6 X2 ]5 Z5 a
以STM32F103C8T6为例,该单片机有4个定时器,每个定时器都可以配置为编码器模式,用于编码器计数。以TIM1为例,配置如下:

: H5 U/ Q4 X5 N* }% a& f8 k
4.2.png
- C$ n2 H. G1 h; @2 O( B* H
配置成定时器模式 Combined Channels为Encoder Mode,可以看到,配置后定时器的通道1和通道2已经被禁用,因为编码器模式使用的就是通道1和通道2,这个是固定的,通道3和通道4不可配置为编码器模式,硬件设计时要注意。

- E1 ^7 Y. Z' W0 }5 L
分频系数Prescaler为0,计数周期Counter Period为65535,下面的Encoder Mode 可以是TI1、TI2或者TI1 and TI2,TI1 and TI2 就是两个脉冲都计数,结果是前两种配置的两倍。
9 `- ]% k9 G4 R3 J
另外需要注意的是,有的编码器是OC/OD输出的,没有上拉电阻,因此硬件上外加上拉电阻,或者在软件上使能编码器引脚的内部上拉。

! x. Z) [9 C3 I" o: N* u" l
4.3.png

* i' z/ _+ A$ v* Y* m
3.程序编写

8 C* z. O% D7 Z6 q7 Y& b
配置完成后点击生成代码即可,编码器的使用方式也很简单,在初始化后开启编码器:
  1. HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);
复制代码

7 N) X, j4 @/ ]3 @( E
调用__HAL_TIM_IS_TIM_COUNTING_DOWN 函数可以获得编码器的转向 0为正、1为负
  1. Dir = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim1);
复制代码
& Y5 Z" ]7 u1 j; p1 m
调用 __HAL_TIM_GET
  1. Count1 = __HAL_TIM_GET_COUNTER(&htim1);
复制代码

) d. p: x/ U# X8 ~( {( Y
_COUNTER函数可获取编码器的脉冲数。
. _' N  G& L& N+ v* U/ D
如果是电机测速的应用,根据获取的脉冲数、编码器的参数以及两次脉冲数的时间差,即可判断出电机的转速。需要注意的是,定时器为16位,存在溢出的可能,用户要根据自己需求开启定时器溢出中断,在中断中再进行软件计数。
8 ^1 K) k. u9 R! a4 A
4.总结

+ ]) d( }' g0 Q" w# K
相比如没有编码器模式的单片机,需要自己编写程序,STM32定时器的编码器模式使用非常简单,唯一不足的是16位定时器,在某些要求高的应用时显得不是那么方便。

' D# D1 L# ~. g# P. |1 e' t
文章出处: 嵌入式技术开发

- d7 l2 G  P% O) J0 ~, H: J. i1 \- [* Y# }- o& ^- f& W9 Z$ \$ Q- y
赞 收藏 评论0 发布时间:2021-2-23 10:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版