STM32 TIM编码器接口

news2024/12/22 23:37:18

单片机学习!

目录

文章目录

前言

一、编码器接口简介

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.coloradmin.cn/o/1489624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端+php:实现提示框(自动消失)

效果 php部分&#xff1a;只展示插入过程 <?php//插入注册表中$sql_insert "INSERT INTO regist_user(userid,password,phone,email)VALUES (" . $_POST[UserID] . "," . CryptPass($_POST[Password]) . "," . $_POST[Phone] . ",&qu…

“而且,再加上”可以用哪个语法来表示,柯桥考级韩语学习

语法 --는/은/ㄴ 데다가 1.语法&#xff1a;는/은/ㄴ 데다가 2.表示&#xff1a;用于谓词词干和体词谓词形后, 表示在原有的状况上再加上其他情况。 3.添加&#xff1a; 4.例句&#xff1a; 当然&#xff0c;与这个语法含义相近的还有不少语法&#xff0c;有一部分是初级暂时…

【AI视野·今日NLP 自然语言处理论文速览 第八十期】Fri, 1 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 1 Mar 2024 Totally 67 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Loose LIPS Sink Ships: Asking Questions in Battleship with Language-Informed Program Sampling Authors G…

Libevent的使用及reactor模型

Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&#xff1b;源代码相当精炼、易读…

HTTP常用状态码详解

目录 1xx - 信息性状态码 2xx - 成功状态码 3xx - 重定向状态码 4xx - 客户端错误状态码 5xx - 服务器错误状态码 总结 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本的应用层协议。在HTTP通信中&#xff0c;服务器和客户端之间会通过状态…

Chrome禁止自动升级

一、关闭计划任务 1、首先我们需要右键点击我的电脑&#xff0c;在打开的选项里选择管理。   2、在打开的对话框中选择任务计划程序。   3、在任务计划程序库中找到两个和chrome自动更新相关的任务计划GoogleUpdateTaskMachineCore与GoogleUpdateTaskMachineUA。     4…

C++模拟揭秘刘谦魔术,领略数学的魅力

新的一年又开始了&#xff0c;大家新年好呀~。在这我想问大家一个问题&#xff0c;有没有同学看了联欢晚会上刘谦的魔术呢&#xff1f; 这个节目还挺有意思的&#xff0c;它最出彩的不是魔术本身&#xff0c;而是小尼老师“念错咒语”而导致他手里的排没有拼在一起&#xff0c;…

Python数据可视化库之bashplotlib使用详解

概要 在数据可视化领域,Python拥有许多优秀的库,如Matplotlib、Seaborn等,它们可以创建漂亮而复杂的图形。但是,有时候我们可能需要在终端中绘制简单的图形,这时候Bashplotlib就派上了用场。Bashplotlib是一个Python库,可以在终端中绘制基本的图形,如条形图、散点图等。…

用Python爬取古诗文网的各类古诗

fetch-gushiwen 用途 可以拿去用于个人知识库、知识图谱的创建等其他学习用途。 使用 输入古诗文网的链接&#xff0c;即可爬取该页面所有诗歌的诗名&#xff0c;作者&#xff0c;朝代&#xff0c;内容&#xff0c;译文&#xff0c;注释&#xff0c;赏析&#xff0c;创作背…

文心一言 VS 讯飞星火 VS chatgpt (208)-- 算法导论15.4 5题

五、设计一个 O( n 2 n^2 n2) 时间的算法&#xff0c;求一个 n 个数的序列的最长单调递增子序列。要写代码的时候&#xff0c;请用go语言。 文心一言&#xff0c;抛panic&#xff1a; 在 Go 语言中设计一个 O(n^2) 时间复杂度的算法来求一个 n 个数的序列的最长单调递增子序列…

【数据结构】20 树的应用(堆及其操作)

堆的定义 堆是一种优先队列&#xff0c;从堆中取出元素时按照元素的优先级大小&#xff0c;而不是元素进入队列的先后顺序。 堆的最常用结构是二叉树&#xff0c;一般为完全二叉树。通常使用数组来实现堆的存储。 最大堆&#xff1a;任一结点的值大于或等于其子节点的值。这一…

【论文阅读】Mamba:选择状态空间模型的线性时间序列建模(一)

文章目录 Mamba:选择状态空间模型的线性时间序列建模介绍状态序列模型选择性状态空间模型动机&#xff1a;选择作为一种压缩手段用选择性提升SSM 选择性SSM的高效实现先前模型的动机选择扫描总览&#xff1a;硬件感知状态扩展 Mamba论文 Mamba:选择状态空间模型的线性时间序列建…

【.NET Core】深入理解IO - 读取器和编写器

【.NET Core】深入理解IO - 读取器和编写器 文章目录 【.NET Core】深入理解IO - 读取器和编写器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader类2.2 BinaryWriter类 三、StreamReader和StreamWriter3.1 StreamReader类3.1 StreamWriter类StreamWriter类构造函数Str…

AI大语言模型【成像光谱遥感技术】ChatGPT应用指南

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

想学习FPGA,建议购买哪一款开发板呢?

FPGA项目&#xff1a; 多通道信号采集呈像系统 该系统是以Artix-7系列的FPGA为主控芯片&#xff0c;设计并实现了一款基于A7系列开发板的多通道信号采集呈像系统&#xff0c;该设计采用DAC芯片&#xff08;数模转换芯片&#xff09;将数字信号转换成模拟信号&#xff0c;通过…

LLM春招,搜广推,nlp(2)

Encoder和Decoder怎么交互的 decoder里面的K&#xff0c;V输入用的是encoder的输出&#xff0c;并不是共享了K, V参数&#xff0c;decoder每层的参数都是独立的。Decoder每层是有两块Attention的&#xff1a;一块是正常的Self-Attention&#xff0c;QKV的输入都来自Decoder上一…

ArcGIS学习(九)选址分析

ArcGIS学习(九)选址分析 本任务给大家带来的案例是租房选址分析。选址分析是我们平时经常接触到的分析场景。概括起来说,选址分析就是根据选址条件来确定哪些区域满足我们的选址要求。首先,先来看看我们这个案例的场景和基础数据。我们以某个城市某一租客的租房选址为例。…

STM32CubeMX学习笔记8 -ADC

1. ADC简介 ADC 是Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。简单地说就是将模拟电压值&#xff0c;转换成对应的肉眼…

完结撒花~Matlab论文插图绘制模板第139期—罗盘图

2021年2月2日&#xff0c;Matlab论文插图绘制模板第1期&#xff0c;启动。 三年后…… 2024年3月4日&#xff0c;Matlab论文插图绘制模板第139期&#xff0c;完结。 别的也不多说了&#xff0c;《Matlab论文插图绘制模板》1-139期精修合集&#xff0c;正加速整理制作中&…

7款炫酷的前端动画特效分享(三)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 CSS3模仿四季交替动画 基于HTML5CSS3实现的卡通风格一年四季交替动画特效 以下效果图只能体现框架的…