STM32 TIM(四)编码器接口

news2024/11/19 17:24:03

STM32 TIM(四)编码器接口

编码器接口简介

  • Encoder Interface 编码器接口

  • 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度,

    • 正交编码器,输出的两个方波信号,相位相差90度,超前90度或者滞后90度,分别代表正转和反转。
    • 编码器接口工作流程,接收正交信号,自动执行CNT的自增或自减
    • 最终的实验现象,编码器有两个输出,一个是A相,一个是B相,然后接入到STM32,定时器的编码器接口,编码器的接口自动控制定时器时基单元中的CNT计数器,进行自增或自减。比如初始化之后,CNT初始值为0,然后编码器右转,CNT就++,右转产生一个脉冲,CNT就加一次,比如右转产生10个脉冲后,停下来,那么这个过程CNT就由0自增到10,停下来,编码器左转,CNT就–,左转产生一个脉冲,CNT就自减一次, 比如编码器再左转产生5个脉冲,那CNT就在原来10的基础上自减5,停下来。
    • 编码器接口,其实就相当于是一个带有方向控制的外部时钟,同时控制着CNT的计数时钟和计数方向,这样CNT的值就表示了编码器的位置。如果我们每隔一段时间取一次编码器的值,再把CNT清零,那么每次取出来的值就表示了编码器的速度。
    • 编码器测速实际上就是测频法测正交脉冲的频率,CNT计次,然后每隔一段时间取一次计次,这就是测频法的思路。编码器计次能根据旋转方向,不仅能自增计次还能自减计次,是一个带方向的测速。
  • 每个高级定时器和通用定时器都拥有1个编码器接口

  • 两个输入引脚借用了输入捕获的通道1和通道2

    • 编码器的两个输入引脚,就是每个定时器的CH1和CH2引脚,CH3和CH4不能接编码器。

正交编码器

  • 正交编码器一般可以测量位置,或者带有方向的速度值,一般有两个信号输出引脚,一个是A相,一个是B相。
  • 当编码器的旋转轴转动时,A相和B相就会输出这样的方波信号,转的越快,方波信号的频率就越高,所以方波的频率就代表了速度,去除任意一相的信号来测频率,就能知道旋转速度了,但是只有一相的信号,无法测量旋转方向,因为无论是正传还是反转,都是这样的方波信号。想要测量方向还必须要有另一根线的辅助。
    • 正转时,A相提前B相90度,反转时,A相滞后B相90度,当然正转时是A相提前还是A相滞后,并不是绝对的,这只是一个极性问题,毕竟正转和反转的定义也是相对的,总之就是朝一个方向转是A相提前,另一个方向是A相滞后。
    • 正交信号精度更高,A、B相都可以计次,相当于计次频率提高了一倍,其次,正交信号可以抗噪声,因为正交信号,两个信号必须是交替跳变的,所以可以设计一个抗噪声电路,如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,那这时计次值是不会变化的。
  • 编码器接口的设计逻辑
    • 首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减,具体是自增还是自减,有另一相的状态来决定。
    • 当出现某个边沿时,我们判断另一相的高低电平,从而判断是正转还是反转,继而确定是自增还是自减。

在这里插入图片描述

边沿另一相状态
A相↑B相低电平
A相↓B相高电平
B相↑A相高电平
B相↓A相低电平

在这里插入图片描述

边沿另一相状态
A相↑B相高电平
A相↓B相低电平
B相↑A相低电平
B相↓A相高电平

编码器接口框图

  • 编码器接口有两个输入端TI1FP1和TI2FP2,分别要接到编码器的A相和B相,可以看出,编码器接口的两个引脚,借用了输入捕获单元的前两个通道,所以最终编码器的输入引脚,就是定时器的CH1和CH2这两个引脚。

    • 信号的通路是,CH1经过输入滤波器和边沿检测电路,通过TF1FP1,通向编码器接口;CH2经过输入滤波器和边沿检测电路,通过TF2FP2,通向编码器接口。CH3和CH4和编码器接口无关。后面的是否交叉、预分频器和CCR寄存器与编码器接口无关。
  • 编码器接口的输出部分,相当于从模式控制器,去控制CNT的计数时钟和计数方向,例如,如果出现了边沿信号,并且对应另一相的状态为正转,则控制CNT自增,否则控制CNT自减。

    • 在这里,之前在使用的72MHz内部时钟和我们在时基单元初始化时设置的计数方向并不会使用,因为此时计数时钟和计数方向都处于编码器接口托管的状态,计数器的自增和自减,受编码器控制。

在这里插入图片描述

编码器接口基本结构

  • 输入捕获的前两个通道,通过GPIO口接入编码器的A、B相。
  • 然后通过滤波器和边沿极性检测,产生TI1FP1和TI2FP2,通向编码器接口。
  • 编码器接口通过预分频器控制CNT计数器的时钟,同时,编码器接口还根据编码器的旋转方向,控制CNT的计数方向,编码器正转时,CNT自增,编码器反转时,CNT自减
    • 这里ARR是有效的,一般设置ARR为65535,最大量程。这样,利用补码的特性,很容易得到负数,比如CNT初始为0,正转,CNT自增,0,1,2,3,4,5,6,7……,反转,CNT自减,0下一个数就是65535,接着是65534,65533,可以把这个16位的无符号数转换为16位的有符号数,根据补码的定义,65535就对应-1,65534就对应-2,65533就对应-3……这样就可以直接得到负数,十分方便。

在这里插入图片描述

工作模式

  • TI1FP1和TI2FP2界的就是编码器的A、B相,在A相和B相的上升沿或者下降沿触发计数,具体是向上计数还是向下计数,取决于边沿信号发生的这一时刻,另一相的电平状态,也就是相对信号的电平,TI1FP1对应TI2,TI2FP2对应TI1,就是另一相电平的意思。

  • 边沿另一相状态
    A相↑B相低电平
    A相↓B相高电平
    B相↑A相高电平
    B相↓A相低电平
    • 例如,假设TI1接A相,TI2接B相(在TI1和TI2上计数),当A、B相为上表这4个状态时,就是正转,计数器需要自增,上表第一个状态,A相上升沿,B相低电平,对应下表就是TI1FP1上升沿,TI2FP2低电平,执行的是向上计数;上表第二个状态,
      A相下降沿,B相高电平,对应下表就是TIFP1下降沿,TI2FP2高电平,执行的是向上计数,以此类推。

在这里插入图片描述

实例(均不反相)

  • 第一个状态,TI1上升沿,TI2低电平,由表可知,TI1FP1上升沿,TI2FP2低电平,对应向上计数,所以计数器变高了一级,接着后面的这几个状态,由查表可知,都是向上计数,正转。
  • 接着后面的毛刺,展示的就是正交编码器抗噪声的原理了,在这里TI2没有变化,TI1却跳变了多次,不符合正交编码器的信号规律,正交信号,两个信号交替变化,这里TI2没变化,但是TI1变化了多次,显然是一个毛刺信号,二通过下面这张表的逻辑,就可以不计数,把这种噪声过滤掉。
    • 比如毛刺部分开始,TI1上升沿,TI2低电平,查表得向上计数,自增;下一个状态,TI1下降沿,TI2还是低电平,查表得向下计数,自减;然后继续TI1上升沿,TI2低电平,自增,继续,TI1下降沿,TI2低电平,自减。所以如果出现了一个引脚不变,另一个引脚连续跳变的毛刺信号,计数器就会+,-,+,-,来回摆动,最终计数值还是原来那个数,并不受毛刺噪声的影响,这就是正交编码器抗噪声的原理。
  • 接着是反转的波形,都是向下计数,计数值下降,然后TI1不动,TI2多次跳变,计数值也是来回摆动,过滤噪声,最后是正转,向上计数。

在这里插入图片描述

在这里插入图片描述

实例(TI1反相)

  • TI1和TI2都会经过边沿检测和极性选择的部分,在输入捕获模式下,这个极性选择是选择上升沿有效还是下降沿有效的,但是在编码器接口模式下,显然上升沿和下降沿都是有效的,上升沿和下降沿都需要计次。

    • 所以在编码器接口模式下,不再是边沿的极性选择,而是高低电平的极性选择,如果我们选择上升沿的参数,就是信号直通过来,高低电平极性不反转,如果选择下降沿的参数,就是信号通过一个非门过来,高低电平极性反转,所以就会有两个控制极性的参数,选择要不要加一个非门,反转一下极性。
  • 把TI1高低电平反转一下,就是这里的TI1反相,需要先将TI1高低电平取反,才是反相后实际给编码器接口的电平,然后在查表,第一个状态,应该是TI1下降沿,TI2低电平,查表得到是向下计数,与下图对应。后续也一一对应。

  • TI1反相的作用,比如你接一个编码器,发现它数据的加减方向反了,想要正转的方向,结果却自减了,想要反转的方向,结果却自增了,这时就可以调整一下极性,把任意一个引脚反相,就能反转计数方向了,当然也可以通过直接把A、B相两个引脚换一下。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

取Dataset子集(pytorch)

取Dataset子集--pytorch 1. why2. how3. example 1. why 我们在调试深度学习代码时,常常会遇到数据集太大,导致调试浪费时间的情况,这种情况下,将数据集中的一个子集拿出来用于调试代码,调试成功在用完整的数据集运行…

elementUI el-table实现鼠标悬浮某一行,在鼠标右侧展示提示信息

背景 el-table组件中,可以通过勾选某条数据来创建单据,但是有些数据没有权限使用,就需要禁用掉勾选的功能,然后当鼠标悬浮在这一行的时候,展示类似于toolTip的提示框。 除了当鼠标悬浮在某一行,展示类似于…

离散数学速成视频推荐(讲的不错)

【拯救者】离散数学速成(期末考研专升本) 适合人群 期末 考研 复试 转升本 月考都可以用 课程大纲 适用课本 适用于所有离散数学课本 按课本章节来, 抽取重点,翻译为人话 学习步骤: 每一章,都会【讲会考的基础💻】&a…

跨平台Markdown编辑软件Typora mac中文版功能介绍

Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…

通俗易懂的理解 解耦 概念

解耦(Decoupling)是计算机科学和软件工程中的一个概念,指的是降低系统中不同部分之间的依赖性,使系统的各个组件能够相对独立地进行开发、维护和演化。解耦的主要目标是减少组件之间的紧密耦合,以提高系统的灵活性、可…

Tomcat的动静分离

一、动态负载均衡 3、台虚拟机模拟&#xff1a; 代理服务器&#xff1a;51 tomcat动态页面&#xff1a;53,54 关闭防火墙和安全机制 配置代理服务器&#xff0c;由于做的是七层代理&#xff0c;所以要在http模块配置 配置前端页面 <!DOCTYPE html> <html> <…

AutoEncoding与AutoRegressive:区别,联系和应用

关于AutoEncoding&#xff08;AE&#xff09;和AutoRegressive&#xff08;AR&#xff09; 前几天看了Ilya在Simons上做的关于Generative Model的演讲&#xff0c;介绍了OpenAI现在做的一些AutoRegressive的工作&#xff0c;昨天又看到LeCun宣称Auto-Regressive LLMs are doom…

ES6新特性:变量的解构赋值

文章目录 1 数组的解构赋值1.1 基本用法1.2 交换变量的值1.3 注意事项 2 对象的解构赋值2.1 基本用法2.2 属性重命名2.3 注意事项 ES6允许按照一定模式&#xff0c;从数组和对象中提取值&#xff0c;对变量进行赋值&#xff0c;这被称为解构&#xff08;Destructuring&#xff…

【Flutter】自定义分段选择器Slider

【Flutter】ZFJ自定义分段选择器Slider 前言 在开发一个APP的时候&#xff0c;需要用到一个分段选择器&#xff0c;系统的不满足就自己自定义了一个&#xff1b; 可以自定义节点的数量、自定义节点的大小、自定义滑竿的粗细&#xff0c;自定义气泡的有无等等… 基本上满足你…

Docker实战之二

一、前言 前一篇 Docker实战之一 我们介绍了Dokcer 镜像和容器基本概念&#xff0c;这一节我们来具体制作一个镜像文件并进行快速部署&#xff0c;这个镜像文件是我们的测试环境&#xff0c;主要包含JDK1.8、Nginx、Git、Node、Gradle&#xff0c;基础镜像为CentOS&#xff0c…

进击的零跑:拿巨头的钱,把中国车打进欧洲市场

作者 | 张祥威 编辑 | 德新 造车新势力中&#xff0c;零跑属于不惹事&#xff0c;独自在角落低调发育的这一类。偶尔高调门喊一声要干掉特斯拉&#xff0c;围观的人也是笑一笑不当回事儿&#xff0c;于是又回去默默卖车。 声量一般&#xff0c;卖车还行。 行业里每次晒数据&…

开发实践|三步搞定爆款直播间小游戏

直播间小游戏引爆社交新潮流 近年来&#xff0c;直播行业迅速发展&#xff0c;特别是在抖音平台&#xff0c;直播间的吸引力已远超传统的短视频内容。而在这波直播风潮中&#xff0c;有一种玩法让我格外留意——直播间小游戏。经常刷抖音的朋友应该在直播间看到过这样的场景&a…

SIT3491ISO具有隔离功能,256 节点,全双工 RS422/RS485 芯片

SIT3491ISO 是一款电容隔离的全双工 RS-422/485 收发器&#xff0c;总线端口 ESD 保护能力 HBM 达到 15kV 以上&#xff0c;功能完全满足 EIA-422 以及 TIA/EIA-485 标准要求的 RS-422/485 收发器。 SIT3491ISO 包括一个驱动器和一个接收器&#xff0c;两者均…

为什么 Python 适合初学者?如何开始学习 Python?

与其他编程语言相比较&#xff0c;Python有着更为简单的语法&#xff0c;所以学习Python对于很多刚进入编程领域的初学者来说是一个很好的选择。 Python还是一门应用领域很广的编程语言&#xff0c;这也就意味着你可以在各种各样的工作和领域中使用它。 跟很多刚进入技术领域…

C++in/out输入输出流[IO流]

文章目录 1. C语言的输入与输出2.C的IO流2.1流的概念2.2CIO流2.3刷题常见while(cin >> str)重载强制类型转换运算符模拟while(cin >> str) 2.4C标准IO流2.5C文件IO流1.ifstream 1. C语言的输入与输出 C语言用到最频繁的输入输出方式就是scanf ()与printf()。 scanf…

jquery中定义的动态生成的标签元素,点击事件该方法未定义Uncaught ReferenceError: goHere is not defined

如下图: 在点击动态生成的弹窗里的html中的企业列表标签时(该标签绑定了点击事件-goHere), 会提示:Uncaught ReferenceError: goHere is not defined 生成的html代码: // 自定义content function showContent(a) {if (a != undefined) {return `<div class="…

Centos7 安装和配置 Redis 5 教程

在Centos上安装Redis 5&#xff0c;如果是 Centos8&#xff0c;那么 yum 仓库中默认的 redis 版本就是 5&#xff0c;直接 yum install 即可。但如果是 Centos7&#xff0c;yum 仓库中默认的 redis 版本是 3 系列&#xff0c;比较老&#xff1a; 通过 yum list | grep redis 命…

全民拼购模式:无论成败皆有所得

什么是全民拼购模式&#xff1f; 全民拼购模式是一种基于社交电商的新型模式&#xff0c;它通过拼团、拼购等方式&#xff0c;让消费者享受更优惠的价格和更便捷的购物体验。这种模式的出现&#xff0c;不仅为电商平台注入了新的活力&#xff0c;也成为了消费者追求高性价比商…

物联网AI MicroPython传感器学习 之 LCD1602液晶屏

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 LCD1602 字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5x7点阵游标的显示模式。提供显示数据缓冲区 DDRAM、字符发生器CGROM和字符…

双十一某宝、某东活动脚本

一、前言 双十一马上就快开始了&#xff0c;各大网购平台的优惠活动开展的如火如荼&#xff0c;羊毛党们也是摩拳擦掌&#xff0c;蠢蠢欲动。为了提高效率&#xff0c;自动化脚本应运而生&#xff0c;今天&#xff0c;小编为大家带来的就是这么三款自动化点击软件。主要是针对…