STM32-HAL-定时器-编码器实验
什么是编码器
如下图所示就是定时器从模式控制器中的从机的编码器模式总共有三种

编码器就是一种传感器,一般用在电机上一般用来测量电机的角度和转速

编码器原理
如下图是一种增量式AB编码器

如下图中这种编码器有五个引脚
其中A、B这两个引脚负责向外输出测量结果

如果将编码器拆开会发现其内部结构如下图所示:
其中A、B两个引脚各自连接一个触点,引脚C连接着金属片,当旋转编码器时中间的金属片会跟着旋转,所以会看到A、B连接的触电在金属片上不断地接触脱离。

并且编码器的旋转柄是可以向下按,而引脚D、E就是连接着这枚按钮,当按下按钮时引脚E、D导通,松开按钮时,引脚D、E断开。

如下图所示编码器上的排针如下图所示:
引脚A连接到CLK引脚上 ; 引脚B连接到DT上 ; 并且这两个引脚上有接有上拉电阻

当触点和金属片接触时,通过金属片接地,所以对外输出的是低电平
当触点和金属片分开时,通过上拉电阻拉高电平,所以对外输出的是高电平

编码器在旋转是输出的波形是如下图所示的

如下图所示当编码器顺时针旋转式,触点A在前,触点B在后,所以输出的波形如下图A略微领先B
同理当编码器逆时针旋转式,触点B在前,触点A在后,所以输出的波形如下图B略微领先A
之后就可以通过数脉冲的个数来计算编码器转过的圈数,通过比较A和B的先后顺序来判断编码器的旋转方向


实验步骤
首先将编码器的A和B分别接到定时器的通道1和通道2,由通道1产生TI1FP1,由通道2产生TI2FP2,之后将这两个信号分别输入到编码器接口当中,这里的编码器接口会将左边输入的信号转换为时钟信号然后输入给时基单元的,之后输入到时基单元的信号会进一步的驱动时计单元使其递增或者递减。

编码器的三种模式
编码器的三种模式都是A相在前表示正转CNT递增,B相在前表示反转CNT递减。

不同的点在于如果选择的是模式1,那么其只会在A相的边沿计数
如果选择的是模式2,那么其只会在B相的边沿计数
如果选择的是模式1,那么其在A相和B相的边沿都会计数

如下图所示编码器模式1只会在A相边沿计数

如下图所示编码器模式2只会在B相边沿计数

如下图所示编码器模式3,在A相和B相的边沿都会计数

连接接线
接下来使用定时器3的通道1和通道2来连接编码器的A、B相

接线图如下图所示


从机编码器模式选择

接下来设置时基单元的参数,选择了编码起的参数之后,实际上时基单元的时钟是由编码器提供的,所以PSC就是对编码器的分频系数。
比如当PSC=0时,每拧一次编码器CNT的值就会增加1,而当PSC的值=1时,拧两次编码器CNT的值才会增加1。
自动重装寄存器则决定了计数的周期,比如设置ARR的值为9,那么计数周期就是10,当拧动编码器使CNT的值不断增加时增加到10之后就会溢出变为0。
所以本次实验将PSC的值设置为0,将ARR的值设置为9


在编码其模式下,通道1负责产生TI1FP1,通道2负责产生TI2FP2,这两路信号会被作为编码器接口的输出信号,所以这条线右边的部分就不需要去设置了。输入滤波器也不需要设置。
那么需要设置的就是通道的极性,再编码器模式下如果选择的是上升沿那么就是输入的正常信号;如果选择的是下降沿那就相当于将输入的信号取反再输出

比如下图让编码器顺时针旋转就是A相在前,B相在后,接下来让通道1捕获上升沿,让通道2捕获下降沿,那么A相输入的信号就还是正常的,B相输入的信号就会取反。
此时信号就是B相在前、A相在后,计数器CNT的值就会递减

参数设置
如下图对编码器的参数进行设置

Polarity用来选择通道的极性(上升沿或者下降沿)

IC Selection用来选择信号的来源(直接或者间接)

再之后Prescaler用来设置预分频器PSC的值

最后的参数Input Filter用来设置前面的输入滤波器的值

代码编写
如下图中的两个编程接口是用来以编码器的模式来启动定时器(都是通过控制时基单元和输入捕获的通道的开关来控制定时器的开关)

编码器还有两路输出这里先启动A相在启动B相

读取计数器CNT的值

使用下图中的函数来向串口输出打印相应的值


之后调用此函数将值打印出来

更多推荐


所有评论(0)