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

【经验分享】STM32学习笔记:编码器接口模式及应用

[复制链接]
STMCU小助手 发布时间:2022-1-11 23:00
Ⅰ 关于编码器$ S7 c( [- R1 X$ {* Y
编码器的种类有很多,什么增量式编码器、绝对值编码器,有轴或者无轴编码器,电压输出、推拉输出、集电极开路输出等等。但不管什么类型的编码器,其目的都类似,得到转动的角度,角速度、位移等。3 B0 [% t0 c7 k' s# u0 {, J
本文讲述常见的增量式编码器,增量式编码器也可以叫正交编码器,也就是说可以通过其A、B的相位知道编码器是正转,还是反转,还可以根据编码器参数得出旋转了多少角度等。7 R7 a2 h0 U, I. O9 B
常见的增量式编码器A、B、Z三根线代表什么意思呢?使用过编码器的人不难理解,这里简单给初学者讲述一下:: }, d; e/ x! ]9 {% j% p+ C( _
A、B两线提供相位相差90度的脉冲信号,用其来计算旋转的角度;Z线为过零点线,也就是说每转一转,经过某一点都会输出一个脉冲信号,主要用于“过零校正”,三线的信号大致如下图(左边):
1 D/ M6 ]8 V' g9 I8 q- w' j( [
有些编码器出来的线有一个对应的“非”信号线(如上图右边),其实主要用于抗干扰的。
& ]8 F, v$ K" P; r' D更多关于编码器的描述,请网上搜索相关的知识进行了解,本文不再讲述。
3 n8 M$ q1 y+ V4 VSTM32编码器接口模式: `( H6 n( S, [% X
在STM32芯片中,都有这么一个定时器,叫通用定时器“General-purpose timers”,定时器里面存在这么一个模式,叫编码器接口模式“Encoder inteRFace mode”。当然,具体是哪一个TIM,可参看芯片对应的数据手册,可以一目了然。, [0 x) A! s6 o. E& M  G
STM32提供的编码器接口模式主要针对的就是“正交编码器”,它可以利用定时器的“计数”功能,得出编码器计了多少个脉冲;同时,它可以根据编码器AB的相位得出编码器是正转,还是反转。& x0 u7 [5 M2 k% P1 h
(图片来自STM32参考手册)
: g+ Y- ?  T- R" r, n" I" Y1.计算脉冲个数
8 t. d) r0 a# s. ^- Q有点类似TIM的捕获功能,捕获A相、B相的脉冲信号;只是编码器模式是捕获A(TI1)、B(TI2)相的边沿信号(如上图),相当于一个周期内,计4个脉冲信号的值。' Q2 z9 R. S# h! U* `; O: G
2.计数器的增减(方向)# r" P" ]6 p3 y
STM32的计数器会根据方向(+ 或者 -)来进行计数,TI1和TI2相位相差90,4个阶段的边沿,对应TI1和TI2不同电平信号,从这个不同的信号,硬件自身可以判断出其方向。在编码器模式下,有个寄存器(TIMx_CR1)中有一个方向位(DIR),会随着编码器旋转方向的改变而改变,我们可以通过读取该位来判断编码器的正转,还是反转。! y& a+ O: ]; h) {* @$ H
3.TIM时基, n& l" x9 r3 r/ H$ p9 ]; t
STM32编码器接口模式,其实是通过利用AB相位TIM时基提供时钟信号,使其计数。
# A5 G+ P" B( M
Ⅲ 应用编程0 a% o6 h+ Z0 U6 ~. }1 U/ E/ G
相信看了上面的一些描述,大家应该对编码器有所理解了。其实,在STM32中,可以通过配置编码器模式对应的函数,就能实现获取编码器传感器上面的信息了。
: j5 l; {+ O4 S: Q* E使用STM32提供的标准外设库,或者使用STM32CubeMX工具很容易将TIM配置成编码器模式。2 u2 v. z, F: z4 u
1.标准外设库配置编码器
( Z# q% j5 N' p, m) tTIM_EncoderInterfaceConfig,它就是编码器接口的配置函数。简单的只需要配置该函数,使能TIM,即可实现采集编码器上面的信息。(当然,需要复杂的操作,还需要做其他相应的配置). q& v* k/ p6 z( A9 S: `" b
void ENCODER_Configuration(void){  TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);  TIM_Cmd(TIM3, ENABLE);}3 t- Z. J& h/ J0 E' d. ^
2.STM32CubeMX配置) K* I, a' ^" ]* @
STM32CubeMX是一套快速开发的工具,让很多不了解STM32底层的朋友可以快速的在STM32上编写应用程序。
8 ]: X- U2 n4 ~2 `$ l2 y$ k本文说的配置编码器接口,在某些TIM上存在一个“Combined Channel”配置,可以理解为“连接通道”,也算是TIM的一种复用模式。选择里面的“Encoder Mode”即可。  S3 I1 `+ P- s, E1 y+ O# D# _" c
Ⅳ 实例代码
8 V6 W% W& Q8 w: U( {+ N7 s4 ^本文提供的代码为一个使用标准外设库编写的简单Demo工程,其中里面附带一个工程(用于模拟编码器AB相波形的工程),如下如:. b; Z  g$ r  W6 n8 X

- v& [* Z6 e+ ~1 d$ h* f& D该工程主要配置TIM的编码器模式,通过定时读取编码器的方向(DIR),和计数(CNT),并通过串口打印出来。

7 n0 l1 H- x' T
收藏 评论0 发布时间:2022-1-11 23:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版