STM32 TIM编码器接口

单片机学习!

目录

文章目录

前言

一、编码器接口简介

1.1 编码器接口作用

1.2 编码器接口工作流程

1.3 编码器接口资源分布

1.4 编码器接口输入引脚

二、正交编码器

2.1 正交编码器功能

2.2 引脚作用

2.3 如何测量方向

2.4 正交信号优势

2.5 执行逻辑

三、编码器定时器框图

3.1 编码器接口分布情况

3.2 编码器接口设计

四、编码器接口基本结构

4.1 电路执行逻辑

4.2 反转得负数逻辑

五、工作模式

5.1 编码器接口工作逻辑

5.2 三种工作模式

六、实例

6.1 TI1和TI2均不反相

6.2 TI1反相

6.3 实例总结

总结


前言

        本文介绍通过定时器的编码器接口来自动计次。之前博文介绍过通过触发外部中断,在中断函数里手动进行计次。编码器接口自动计次与触发外部中断手动计次相比较而言,使用编码器接口的好处就是节约软件资源。如果使用外部中断计次,当电机高速旋转时,编码器每秒产生上千上万个脉冲,程序就得频繁进中断。进中断之后,完成的任务又只是简单的加一减一,软件资源就被这种简单而又低级的工作给占用了。所以对于这种需要频繁执行且操作又简单的任务,一般都会设计一个硬件电路模块来自动完成。编码器接口就是用来自动给编码器进行计次的电路,每隔一段时间取一下计次值,就能得到编码器旋转的速度了。


一、编码器接口简介

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

1.1 编码器接口作用

        使用定时器的编码接口,再配合编码器,就可以测量旋转速度和旋转方向。这里编码器测速一般应用在电机控制的项目上,使用PWM驱动电机,再使用编码器测量电机的速度,再用PID算法进行闭环控制。一般电机旋转速度比较高,会使用无接触式的霍尔传感器或者光栅进行测速。

        编码器接口可以自动给编码器进行计次的电路,每隔一段时间计次值,就能得到编码器旋转的速度了。

1.2 编码器接口工作流程

        编码器接口的工作流程就是接收正交信号,自动执行CNT自增或自减。

        正交编码器可输出两个方波信号也就是正交信号,相位相差90°,超前90°或者滞后90°,分别代表正转和反转。

        一个编码器,有两个输出,一个是A相,一个是B相。然后接入到STM32的定时器的编码器接口,编码器接口自动控制定时器时基单元中的CNT计数器,进行自增或自减。

        工作逻辑:如初始化之后,CNT初始值为0,然后编码器右转,CNT就++,右转产生一个脉冲,CNT就加一次。比如右转产生10个脉冲后停下来,那么这个过程CNT就由0自增到10,停下来。编码器左转,CNT就--,左转产生一个脉冲,CNT减一次。比如编码器再左转产生5个脉冲,那CNT就在原来10的基础上自减5,停下来。

        这个编码器接口其实就相当于是一个带有方向控制的外部时钟。它同时控制着CNT的计数时钟和计数方向。这样CNT的值就表示了编码器的位置。

        方向测速:如果每隔一次取一次CNT的值,再把CNT清零。每次取出来的值就表示了编码器的速度。用测周法和测频法的方法来看,这个编码器测速实际上就是测频法测正交脉冲的频率。CNT计次,然后每隔一段时间取一次计次,就是测频法的方法。但是这个编码器接口计次更高级,它可以根据旋转方向,不仅能自增计次,还能自减计次,是一个带方向的测速。

1.3 编码器接口资源分布

        编码器接口资源比较紧张,如果一个定时器配置成了编码器接口模式,那它基本上就干不了其他活了,如CT86芯片只有TIM1、2、3、4,一共四个定时器,所以最多只能接4个编码器,而且接完4个编码器就没有定时器可以用了。如果编码器需求比较多的话,要考虑一下这个资源够不够用。当然,还是可以用外部中断代码来接编码器,这样就是用软件资源来弥补硬件资源。硬件资源和软件资源是互补的。一般在有硬件资源的情况下优先使用硬件资源。

1.4 编码器接口输入引脚

        编码器接口的两个输入引脚借用了输入捕获的通道1和通道2,这个可以从下文通用定时器结构框图来看。编码器的两个输入引脚就是每个定时器的CH1和CH2引脚。另外两个CH3和CH4不能接编码器。

二、正交编码器

2.1 正交编码器功能

        正交编码器一般可以测量位置,或者带有方向的速度值。

2.2 引脚作用

        正交编码器一般有两个信号输出引脚,一个是A相,一个是B相。编码器的旋转轴转起来时,A相和B相就会输出上图中的方波信号。转的越快,这个方波的频率就越高,所以方波的频率就代表了速度,可以取出任意一相的信号来测频率,就能知道旋转速度了。

2.3 如何测量方向

        但是只有一相的信号无法测量旋转方向。因为无论正转还是反转,他都是这样的方波。想要测量方向,还必须要有另一根线的辅助。

  • 一种方案是不用B相,再定义一个方向输出引脚,正转置高电平,反转置低电平。这也是一种解决方案,但这样的信号并不是正交信号。
  • 另一种解决方案就是正交信号,当正转时,A相提前B相90°,反转时,A相滞后B相90°,这里的正转反转都是极性问题,是相对的。       

2.4 正交信号优势

        使用正交信号相比较单独定义一个方向引脚,有什么优势?

  • 正交信号精度更高:因为A、B相都可以计次,相当于计次频率提高了一倍。
  • 正交信号可以抗噪声:因为正交信号,两个信号必须是交替跳变的,所以可以设计一个抗噪声电路。如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,那这时计次值是不会变化的。

2.5 执行逻辑

        分析一下正交信号如何计次和区分旋转方向,从上图波形中分析。

正转的时候:

  • 第一个时刻,A上升沿,对应B低电平。是表里的第一行;
  • 第二个时刻,B上升沿,对应A高电平,是表里的第三行;
  • 第三个时刻,A下降沿,对应B高电平,是表里的第二行;
  • 第四的时刻,B下降沿,对应A低电平,是表里的第四行。

可对应上图正转波形和表格。

反转的时候:

  • 第一个时刻,B上升沿,对应A低电平。是表里的第一行;
  • 第二个时刻,A上升沿,对应B高电平,是表里的第三行;
  • 第三个时刻,B下降沿,对应A高电平,是表里的第二行;
  • 第四的时刻,A下降沿,对应B低电平,是表里的第四行。

可对应上图反转波形和表格。

        不难发现,当A相,B相出现两个表中的边沿时,一相对应另一相的状态,正传和反转正好是反相的。如A相上升沿,正转,B相就是低电平;反转,B像就是高电平。对比其他也都是相反的。

        编码器接口的设计逻辑:首先,把A相和B相的所有边沿作为计数器的计数时钟。出现边沿信号时,就计数自增或自减。计数的增减也就是计数的方向,由另一相的状态来确定,当出现某个边沿时,判断另一相的高低电平,如果对应另一相的状态出现在上图表中,那么正转计数自增;反转计数自减,这样就能实现编码器接口的功能,这也是STM32定时器编码器接口的执行逻辑。

        

三、编码器定时器框图

3.1 编码器接口分布情况

        高级定时器和通用定时器的编码器接口都是一样的,这两个定时器都只有一个编码器接口。基本定时器没有编码器接口。

3.2 编码器接口设计

编码器接口输入部分:

        上图中可以看出编码器接口有两个输入端,分别要接到编码器的A相和B相。两个网络标号TI1FP1和TI2FP2,对应输入部分电路的TI1FP1和TI2FP2,这里编码器接口的两个引脚借用了输入捕获单元的前两个通道。所以最终编码器的输入引脚就是定时器的CH1和CH2两个引脚。信号的通路是,CH1通过输入滤波器和边沿检测器从TI1FP1通向编码器接口;CH2通过输入滤波器和边沿检测器从TI2FP2通向编码器接口。CH3和CH4与编码器接口无关。其中CH1和CH2的输入捕获滤波器和边沿检测器编码器接口也有使用,而电路后面部分是否交叉连接(TI1FP2和TI2FP1)、预分频器和CCR寄存器都与编码器接口无关。

编码器接口输出部分:

        编码器接口输出部分其实就相当于从模式控制器,控制CNT的计数时钟和计数方向。这里的输出执行流程按照上一部分图中相位和边沿对应的表格,若出现边沿信号,并且对应另一相的状态为正转,则控制CNT自增,否则控制CNT自减。这里72MHz内部时钟和时基单元初始化时设置的计数方向并不会使用,因为此时计数时钟和计数方向都是处于编码器接口托管的状态,计数器自增和自减受编码器控制。

四、编码器接口基本结构

4.1 电路执行逻辑

        输入捕获的前两个通道,通过GPIO口接入编码器的A、B相,然后通过滤波器和边沿检测极性选择,产生TI1FP1和TI2FP2通向编码器接口,编码器接口通过预分频器控制CNT计数器的时钟。同时编码器接口还根据编码器的旋转方向,控制CNT的计数方向。编码器正转时,CNT自增,编码器反转时,CNT自减。这里ARR也是有效的,一般会设置ARR为65535最大量程。这样可以利用补码的特性很容易得到负数。

4.2 反转得负数逻辑

        当CNT初始为0,正转,CNT自增:0、1、2、3、4、6等等。当CNT初始为0,反转,0下一个数就是65535,接着是65534、65533、65532等等。但是这里负数应该是-1、-2、-3。这里会有一个操作直接把16位的无符号数转换为16位的有符号数,根据补码的定义65535就对应-1;65534就对应-2;65533就对应-3.这样就可以直接得到负数。

五、工作模式

5.1 编码器接口工作逻辑

        上方表描述的就是编码器接口的工作逻辑,TI1FP1和TI2FP2接的就是编码器的A、B相,在A相和B相的上升沿或者下降沿触发计数。向上计数和向下计数取决于边沿信号发生的这个时刻,另一相的电平状态,对应表中相对信号的电平。TI1FP1对应TI2,TI2FP2对应TI1,就是另一相电平的意思。

       

5.2 三种工作模式

        表中第一列可以看到,编码器还分了3种工作模式,分别是仅在TI1计数;仅在TI2计数;在TI1和TI2都计数。

        上文中总结的表格:

        左表4种状态,都是正转,都可以计次自增;右表这四种状态,都是反转,都可以计次自减。这些状态都涉及了两个引脚,分别是A相上升沿、A相下降沿、B相上升沿、B相下降沿,如果这几种状态都执行自增或自减,就是A相和B相的边沿都计数。这就对应工作模式的第三种模式:TI1和TI2都计数。

        当然这里还可以忽略一些边沿:

  • 可以仅在A相的上升沿和下降沿自增或自减,而B相的这两个状态忽略掉,不执行计数;
  • 也可以仅在B相的上升沿和下降沿自增或自减,而A相的这两个状态忽略掉,不执行计数。

这样也可以实现功能,只不过是计次的精度低了一些。这两种仅在一个边沿计数的模式就对应了工作模式里的前两种模式:仅在TI1计数和仅在TI2计数。


        工作模式表中的自增自减也对应上文总结的表格,若TI1接A相、TI2接B相,当A、B相为下表这四个状态时,就是正转,计数器需要自增。

        

  1. 上表A相上升沿,B相低电平,对应工作模式表中TI1和TI2都计数,A相上升沿对应另一相低电平,执行向上计数;
  2. 上表A相下降沿,B相高电平,对应工作模式表中TI1和TI2都计数,A相下降沿对应另一相高电平,执行向上计数;
  3. 上表B相上升沿,A相高电平,对应工作模式表中TI1和TI2都计数,B相上升沿对应另一相高电平,执行向上计数;
  4. 上表B相下降沿,A相低电平,对应工作模式表中TI1和TI2都计数,B相下降沿对应另一相低电平,执行向上计数;

观察发现这里正转的状态都是向上计数。


        若TI1接A相、TI2接B相,当A、B相为下表这四个状态时,就是反转转,计数器需要自减。

  1. 上表A相上升沿,B相高电平,对应工作模式表中TI1和TI2都计数,A相上升沿对应另一相高电平,执行向下计数;
  2. 上表A相下降沿,B相低电平,对应工作模式表中TI1和TI2都计数,A相下降沿对应另一相低电平,执行向下计数;
  3. 上表B相上升沿,A相低电平,对应工作模式表中TI1和TI2都计数,B相上升沿对应另一相低电平,执行向下计数;
  4. 上表B相下降沿,A相高电平,对应工作模式表中TI1和TI2都计数,B相下降沿对应另一相高电平,执行向下计数;

观察发现这里反转的状态都是向下计数。

总结:正转的状态都是向上计数,反转的状态都是向下计数。

六、实例

6.1 TI1和TI2均不反相

        上图为两个引脚的边沿都计数的模式,执行的逻辑对应图上方的表格。

图中上半部分为TI1和TI2的时序信号,下半部分为计数器值的变化情况。

第一个状态,TI1上升沿,TI2低电平,表格中上升沿、低电平对应向上计数,所以图中计数器变高了一级。后面连着几个状态对应表格都是向上计数为正转。

第二个状态展示的是正交编码器抗噪声的原理,在这个状态中TI2没有变化,但是TI1却跳变了好几次,这不符合正交编码器的信号规律,正交信号,两个输出交替变化,就像人走路一样,先左腿迈一步,后右腿迈一步,左右腿交替向前迈,而这里的状态就相当于右腿没动,左腿连续走了好几步。显然这个相当于左腿的动作信号是一个毛刺信号。通过上表中正交信号的逻辑就可以把这种噪声滤掉。

从噪声的毛刺信号开始看:

  1. TI1上升沿,TI2低电平,对照表格向上计数,这里自增;
  2. TI1下降沿,TI2还是低电平,对照表格向下计数,这里自减;
  3. TI1上升沿,TI2低电平,对照表格向上计数,这里自增;
  4. TI1下降,TI2还是低电平,对照表格向下计数,这里自减;

所以这里如果出现了一个引脚不变,另一个引脚连续跳变多次的毛刺信号,计数器就会加、减、加、减来回摆动,最终计数值还是原来那个数,并不受毛刺噪声的影响。这就是正交编码器抗噪声的原理。

第三个状态是反转的波形,TI1下降沿,TI2低电平,表格中下降沿、低电平对应向下计数,所以图中计数器变低了一级。后面连着几个状态对应表格都是向下计数为反转。

第四个状态,TI1不动,TI2多次跳变,计数值也是来回摆动,过滤噪声。

第五个状态是正转,向上计数。

6.2 TI1反相

        上图展示的是极性的变化对计数的影响。前一个实例是两个引脚都不反向,这个实例是TI1反相、TI2不反相的图。

        TI1反相:TI1和TI2的信号进来都会经过极性选择的部分,(在输入捕获模式下,极性选择是选择上升沿有效还是下降沿有效),编码器接口是上升沿和下降沿均有效的,上升沿和下降沿都需要计次,所以编码器接口这里不在是边沿的极性选择,而是高低电平的极性选择。如果选择上升沿的参数,就是信号直通过来,高低电平极性不反转;如果选择下降沿的参数,就是信号通过一个非门过来,高低电平极性反转。所以在极性选择这里会有两个控制极性的参数,选择是否加一个非门反转极性。对应实例,如果两个信号TI1、TI2都不反转,就对应第一个实例均不反相;如果把TI1高低电平反转一下,就是这里TI1反相的实例。

        分析的时候,图中上半部分的TI1和TI2的时序信号是输入信号,若直接对照上表分析,得到的计次方向是错误的,这里TI1反向之后,先把图中TI1高低电平取反,取反后才是反相后实际给编码器接口的电平,再对照表格分析。

6.3 实例总结

        TI1和TI2均不反相的实例图和TI1反相后的实例图对照来看,这两个图的计数方向是相反的,这里可以用于需要反转计数方向时,可以把任意一个引脚反相。当然反转计数方向时也可以直接把A、B相两个引脚换一下。


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了编码器接口的作用、电路结构、执行逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/430100.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebGIS开发0基础必看教程:地图瓦片在Canvas上的拼接显示

1.前言 在之前的五个章节中,我们在第一章节里介绍了WebGIS的基本框架和技术,第二章节里介绍了什么是瓦片行列号以及计算它的原因,第三章节里介绍了如何通过地理范围计算出这个范围内瓦片的行列号,第四和第五章节里介绍了在得到瓦…

如何让 JOIN 跑得更快?

JOIN 一直是数据库性能优化的老大难问题,本来挺快的查询,一旦涉及了几个 JOIN,性能就会陡降。而且,参与 JOIN 的表越大越多,性能就越难提上来。 其实,让 JOIN 跑得快的关键是要对 JOIN 分类,分…

C++max函数的使用案例20个

文章目录 1. **基本用法:**2. **比较浮点数:**3. **比较字符串:**4. **使用自定义比较函数:**5. **比较容器中的元素:**6. **使用std::initializer_list:**7. **变长参数版本(C11及以上&#xf…

c++的队列的用法

基本介绍 c的队列就是std::queue。 需要包含的头文件&#xff1a; #include<queue>queue就是先进先出队列 queue,就是队列&#xff0c;队列是一种容器适配器&#xff0c;专门设计用于在FIFO上下文中操作(先进先出)&#xff0c;其中将元素插入容器的一端并从另一端提…

广东Lenovo SR588服务器维修升级硬盘内存

本案例描述了对联想SR588服务器进行硬件升级的过程&#xff0c;包括更换固态硬盘作为系统盘&#xff0c;以及增加内存容量至128GB。升级后&#xff0c;服务器性能得到显著提升&#xff0c;同时通过重新配置RAID阵列和操作系统的重新安装&#xff0c;确保了系统的稳定性和数据的…

华为路由器 三层交换实现vlan通信 实验(附ensp实验源文件)

一、目标 通过三层交换实现vlan通信 二、网络配置 2.1 交换机1&#xff08;LSW1&#xff09;配置 # 创建两个vlan vlan 10 vlan 20# 配置g0/0/1端口 port link-type access port default vlan 10# 配置g0/0/2端口 port link-type access port default vlan 20# 配置g0/0/3端口…

STM32F1 - SPI读写Flash

Serial peripheral interface 1> 实验概述2> SPI硬件框图初始化程序 3> STM32的SPI通信时序3.1> 时序图3.2> 文字描述3.3> 注意事项3.4> 流程图表示3.5> 程序表示接收程序&#xff1a;发送程序&#xff1a; 4> SPI的4种模式5> W25Q128存储结构块…

开发知识点-Python-爬虫

爬虫 scrapybeautifulsoupfind_all find祖先/父节点兄弟节点nextpreviousCSS选择器属性值 attrsselect 后 class 正则使用字符串来描述、匹配一系列符合某个规则的字符串组成元字符使用grep匹配正则组与捕获断言与标记条件匹配正则表达式的标志 特定中文 匹配 scrapy scrapy内…

ssm+springboot音乐播放器网站mybatis+jsp

测试流程 &#xff08;1&#xff09; 登录系统、填写用户名、密码选择角色&#xff0c;主要内容&#xff1a;进行权限控制。 &#xff08;2&#xff09; 用户查看音乐信息、音乐资讯功能&#xff0c;主要是测试系统实用性、方便性。 &#xff08;3&#xff09; 信息修…

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka&#xff0c;然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…

在Java中处理JSON数据:Jackson与Gson库比较

引言 JSON&#xff0c;作为一种轻量级的数据交换格式&#xff0c;因其易于人阅读和编写&#xff0c;同时也易于机器解析和生成&#xff0c;而被广泛应用于网络通信和配置文件中。在Java中&#xff0c;有两个强大的工具帮助咱们处理JSON数据——Jackson和Gson。这两个库各有千秋…

Conda 快速入门,轻松拿捏 Python

一、简介 Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。Conda 是为 Python 程序创建的&#xff0c;适用于 Linux&#xff0c;OS X 和Windows&#xff0c;也可以打包和分发其他软件&…

teknoparrot命令行启动游戏

官方github cd 到teknoparrot解压目录 cd /d E:\mn\TeknoParrot2_cp1\GameProfiles启动游戏 TeknoParrotUi.exe --profile游戏配置文件游戏配置文件位置/UserProfiles,如果UserProfiles文件夹里没有那就在/GameProfiles,在配置文件里将游戏路径加入之间,或者打开模拟器设置 …

SpringCloud Alibaba 学习

一&#xff1a;SpringCloud Alibaba介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服 务的必需组件&#xff0c;方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba&…

mybatis不重复列插入例子详细说明

之前有做过不重复列插入的需求&#xff0c;当时是 在插入时判断 对应的列在数据库中有没有对应的数据 有则返回false 无则插入&#xff0c;但是这加大了数据库的查询负担 也增加了插入的时间&#xff0c;故今天研究一下 使用sql来简化了这一点 使用的知识点是 daul表 insert i…

提升效率的电脑定时工具,AutoOff软件推荐

今天最软库给大家带来一款非常实用的电脑定时关机软件在我们日常办公的时候有的时候需要上传一些资料由于我们下班了&#xff0c;我们想让他上传完成之后我们才离开这时候呢&#xff0c;就可以用到这款定时工具了。 我们可以设置中设置在几小时或者几分钟之后让电脑进行关机我们…

JDK、JRE、JVM的联系区别

在第一章中我们介绍了JDK的下载配置与IDEA开发环境的下载安装&#xff0c;以及分别在这两个&#xff08;电脑本机和IDEA&#xff09;环境上执行了我们的第一个源程序。通过直观的使用&#xff0c;我们可以感受到集成开发环境的便捷。 大家也更加对JDK有了直观的了解&#xff0c…

【千字总结】爬虫学习指南-2024最新版

介绍 如何自学爬虫&#xff1f;今天有一个兄弟这样问我&#xff0c;可以看到打了很多字&#xff0c;诚意肯定是很足的&#xff0c;也是对我的内容给予了肯定&#xff0c;让我非常的开心。既然难得有人问我&#xff0c;那我一定要好好做一个回答。 我下面将要说的内容没有任何话…

制作耳机壳的UV树脂和塑料材质相比优势有哪些?

制作耳机壳的UV树脂相比塑料材质有以下优势&#xff1a; 高强度与耐磨性&#xff1a;UV树脂具有高强度和耐磨性&#xff0c;能够更好地保护耳机内部零件&#xff0c;延长耳机使用寿命。相比之下&#xff0c;塑料材质可能较易磨损或刮伤。耐高温&#xff1a;UV树脂具有较好的耐…

探索Java开发面试笔记:以听为目的,助力编程技术提升与面试准备

文章目录 一、制作背景介绍二、 Java开发面试笔记&#xff1a;为你的编程之路加速2.1 公众号主题和目标读者群体2.2 为什么面试笔记对于提高编程视野和技术至关重要2.3 親測效率 三、形式案例3.1 文章形式3.2 手机案例3.3 电脑案例 一、制作背景介绍 做公众号的背景&#xff1a…
最新文章