STM32 TIM(四)编码器接口

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.rhkb.cn/news/173176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中级面试题记录(四)

一面面试题 1.Innodb的行数据存储模式 https://baijiahao.baidu.com/s?id1775090633458928876&wfrspider&forpc 2.行数据包含哪些信息? https://baijiahao.baidu.com/s?id1775090633458928876&wfrspider&forpc 3.MySQL在进行存储VARCHAR的时…

python:使用Scikit-image对遥感影像进行尺度空间特征提取(scale-space)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行尺度空间特征提取,并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 尺度空间特征提取是一种处理图像的方法,旨在检测不同尺度下的特征和结构。这对于处理遥感图像非常有用,因为…

Hexo + NexT 博客评论系统(Valine)配置小记

这几天刚配置了船新的 Hexo 博客,然后看到使用的 NexT 主题支持很多评论系统。我尝试配置了一下,发现里面坑太多了,真的挺费周章。于是想水一篇分享一下~ 1. 为什么不是…… NexT 主题一共支持如下的几个评论系统: 其中我觉得最…

2023年第四届MathorCup大数据竞赛(A题)|坑洼道路检测和识别|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 希望这些想法对大家的做题有一定的启发和借鉴意义。 让我们来…

UE VaRest 从本地读取写入JSON(蓝图)

写入简单JSON到本地项目目录 写入位置:项目根目录 文件名:writjson.Json 写入内容:{“ke1”:“key1value”,“ke2”:“ke2value”} 从本地项目目录加载json 加载位置:项目根目录 文件名:writjson.Json 加载内容&…

React-快速搭建开发环境

1.安装 说明:react-excise-01是创建的文件名 npx create-react-app react-excise-01 2. 打开文件 说明:we suggest that you begin by typing:下面即是步骤。 cd react-excise-01 npm start 3.显示

python—openpyxl操作excel详解

前言 openpyxl属于第三方模块,在python中用来处理excel文件。 可以对excel进行的操作有:读写、修改、调整样式及插入图片等。 但只能用来处理【 .xlsx】 后缀的excel文件。 使用前需要先安装,安装方法: pip install openpyxl…

RabbitMQ (4)

RabbitMQ (4) 文章目录 1. 死信的概念2. 死信的来源3. 死信代码案例3.1 TTL 过期时间3.2 超过队列最大长度3.3 拒绝消息 前言   上文我们已经学习完 交换机 ,知道了几个交换机的使用 ,下面我们来学习一下 死信队列 1. 死信的概念 先从概念解释上搞清楚这…

Wpf 使用 Prism 实战开发Day01

一.开发环境准备 1. VisualStudio 2022 2. .NET SDK 7.0 3. Prism 版本 8.1.97 以上环境,如有新的版本,可自行选择安装新的版本为主 二.创建Wpf项目 1.项目的名称:MyToDo 项目名称:这里只是记录学习,所以随便命名都无所谓,只要觉得合理就…

数据清洗与规范化详解

数据处理流程,也称数据处理管道,是将原始数据转化为有意义的信息和知识的一系列操作步骤。它包括数据采集、清洗、转换、分析和可视化等环节,旨在提供有用的见解和决策支持。在数据可视化中数据处理是可视化展示前非常重要的一步,…

CN考研真题知识点二轮归纳(1)

本轮开始更新真题中涉及过的知识点,总共不到20年的真题,大致会出5-10期,尽可能详细的讲解并罗列不重复的知识点~ 目录 1.三类IP地址网络号的取值范围 2.Socket的内容 3.邮件系统中向服务器获取邮件所用到的协议 4.RIP 5.DNS 6.CSMA/CD…

python随手小练8(南农作业题)

题目1: 输入3 门课程 a,b,c 的成绩,求 3 门成绩的总和平均值(整数,四舍五人)以及最高和最低值。如果3门课程考试成绩分别以权重 0.50.3 和0.2计人总评成绩(整数先求总和再四舍五入),则最终总评成绩是多少? 具体操作: a float(input("a:")) b float(in…

Element 多个Form表单 同时验证

一、背景 在一个页面中需要实现两个Form表单,并在页面提交时需要对两个Form表单进行校验,两个表单都校验成功时才能提交 所用技术栈:Vue2Element UI 二、实现效果 三、多个表单验证 注意项: 两个form表单,每个表单上…

2017年亚太杯APMCM数学建模大赛B题喷雾轨迹规划问题求解全过程文档及程序

2017年亚太杯APMCM数学建模大赛 B题 喷雾轨迹规划问题 原题再现 喷釉工艺用喷釉枪或喷釉机在压缩空气下将釉喷入雾中,使釉附着在泥体上。这是陶瓷生产过程中一个容易实现自动化的过程。由于不均匀的釉料在烧制过程中会产生裂纹,导致工件报废&#xff0…

https下载图片

OpenSSL用法示例 OpenSSL源码安装 对于ubuntu,懒得编译源码可以直接安装 sudo apt-get install libssl–dev /usr/include/openssl/ssl.h CMakeLists中添加 link_libraries(ssl crypto) apt-get安装不需要再制定libssl.a, libcrypto.a的路径了, 就像用libc标…

【算法|动态规划 | 01背包问题No.1】AcWing 426. 开心的金明

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…

node模块导出引入两种方式和npm包管理

模块化的好处 在 Node.js 中每个文件都被当做是一个独立的模块,模块内定义的变量和函数都是独立作用域的,因为 Node.js 在执行模块代码时,将使用如下所示的函数封装器对其进行封装 (function(exports,require,module,__filename,_dirname){//…

C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点

Chaikin算法——计算折线对应的平滑曲线坐标点 本文将介绍一种计算折线对应的平滑曲线坐标点的算法。该算法使用Chaikin曲线平滑处理的方法,通过控制张力因子和迭代次数来调整曲线的平滑程度和精度。通过对原始点集合进行切割和插值操作,得到平滑的曲线坐…

CNN 网络结构简介

本文通过整理李宏毅老师的机器学习教程的内容,介绍 CNN(卷积神经网络)的网络结构。 CNN 网络结构, 李宏毅 CNN 主要应用在图像识别(image classification, 图像分类)领域。 通常,输入的图片大小相同&am…

【开源】基于SpringBoot的计算机机房作业管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课时管理模块2.4 学生作业模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程表3.2.2 课时表3.2.3 学生作业表 四、系统展示五、核心代码5.1 查询课程数据5.2 新增课时5.3 提交作…