STM32学习笔记(6_7)- TIM定时器的编码器接口原理

news2024/11/16 2:23:16

无人问津也好,技不如人也罢,都应静下心来,去做该做的事。

最近在学STM32,所以也开贴记录一下主要内容,省的过目即忘。视频教程为江科大(改名江协科技),网站jiangxiekeji.com

现在开始上难度,STM32功能最强大、结构最复杂的外设——定时器,分四期介绍。

第一期介绍最基础的定时功能理论、定时器中断和定时器内外时钟源选择的代码。

第二期介绍定时器输出比较功能的代码,输出比较功能常用产生PWM波驱动电机。

上期介绍定时器输入捕获功能代码,常用测量方波频率。

最后介绍定时器的编码器接口,更方便读取正交编码器的输出波形,常用编码电机测速。

编码器接口简介

本质上也是旋转编码器计次,只不过是通过定时器的编码器接口,来自动计次。而之前是通过触发外部中断,然后在中断函数里手动进行计次。使用编码器接口的好处就是节约钦件资源,如果使用外部中断来计次,那当电机高速旋转时,编码器每秒产生成干上万个脉冲,程序就得频繁进中断。然后进中断之后,完成的任务又只是简单的加一减一。所以,对于这种需要频繁执行,操作又比校简单的任务,一般都会设计一个硬件结构来完成,本期的编码器接口就是用来自动给编码器进行计次的电路。如果我们每隔一段时间取一下计次值,就能得到编码器旋转的速度了。

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

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

比如初始化之后,CNT初始值为0,然后编码器右转,CNT就++,右转产生一个脉冲, CNT就加一次。比如右转产生10个脉冲后, 停下来。那么这个过程CNT就由0自增到10,停下来;编码器左转,CNT就--,左转产生一个脉冲, CNT减一次。比如编码器再左转产生5个脉冲,那CNT就在原来10的基础上自减5,停下来。这个编码器接口,其实就相当于是一个带有方向控制的外部时钟,它同时控制着CNT的计数时钟和计数方向。这样的话,CNT的值就表示了编码器的位置。如果我们每隔一段时间取一次CNT的值,再把CNT清零,每次取出来的值就表示编码器速度。

这个编码器测速实际上就是测频法测正交脉冲的频率,只不过这个编码器接口更高级,它能根据旋转方向,不仅能自增计次,还能自减计次,是带方向的测速

一个定时器只有一个编码器接口,如果一个定时器配置成了编码器接口模式,那它就干不了其他活。我们这个C8T6芯片只有TIM1、2、3、4这4个定时器,所以最多配置四个编码器接口,而且配置完后,定时器就干不了其他活。如果编码器接口还是不够用,还可以用外部中断接编码器。

 编码器接口框图

这里编码器接口有两个输入端:分别要接到编码器的A相和B相,就是TI1FP1和TI2FP2。编码器接口两个引脚借用了输入捕获单元的前两个通道,所以编码器接口的两个引脚最终就是定时器的CH1和CH2这两个引脚。其中CH1和CH2的输入捕获滤波器和边沿检测,编码器接口也有使用。

以上是编码器接口的输入部分,那编码器接口的输出部分,其实就相当于从模式控制器,去控制CNT的计数时钟和计数方向。简单来说,这里的输出执行流程是:按照我们下面总结的那个正交编码器的表,如果出现了边沿信号并且对应另一相的状态为正转,则控制CNT自增;否则控制CNT自减。当然这时我们TIM定时器使用的72M内部时钟和在时基单元初始化时设置的计数方向,并不会使用,因为此时计数时钟和计数方向都处于编码器接口托管的状态。

编码器接口基本结构

输入捕获的前两个通道,通过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等等,根据补码的定义,65535=-1,65534=-2

工作模式

一般用第三种,在TI1和TI2上计数,这个模式精度最高,而且该模式下,正转的状态都向上计数,反转的状态都向下计数

正交编码器

就是像这样,输出的两个方波信号,相位相差90度,超前90度或者滞后90度,分别代表正转和反转。

正交编码器如何计次和分辨方向?

先看正转波形,第一个时刻,A相上升沿,对应B相此时是低电平,也就是表里的第一行。继续第二个时刻,B相上升沿,对应A相高电平,是表里的第三行。继续第三个时刻,A相下降沿,对应B相高电平,是表里的第二行。最后是,B相下降沿,对应A相低电平,是表里第四行。所以在正转的时候,我们总结了右边这个表。出现这些边沿时,对应另一相的状态是这4种。反转时状态刚好都相反。

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

实例(TI1和TI2均不反相)

比如你接一个编码器,发现它数据的加减方向反了,你想要正转的方向,结果它自减了,这时,就可以调整一下极性,把任意一个引脚(TI1或TI2)反相,就能反转计数方向了或者直接把A、B相引脚交换。

这个图展示了,什么时候向上计数,什么时候向下计数,以及正交编码器抗噪声的原理。

旋转编码器简介

第一个是只有一个光栅加红外对管的编码器,这只能输出一个方波信号,并不是正交编码器,只能测速度。

第二、三个就是套件使用的编码器,里面靠两个金属触点交替导通。可以输出A相和B相两个正交信号,是正交编码器。这里有4个引脚,上面两个是供电的正极和负极,下面两个是A相和B相的输出。

第四个图是电机后面自带的一个编码器,电机旋转带动中间的磁铁旋转,两个霍尔传感器90度放置,最终输出A相和B相两个正交信号,是正交编码器。下面一般都六根线,最左和最右是直接接到电机的,然后是靠里一些的两根是编码器电源,最中间的两根就是A相和B相的输出了。

最后一个图是单独的编码器元件,一般都是正交编码器,当然也有的不是,需看商品说明,一般有六根线,两个是编码器电源,两个是A、B相,一般还有个编码器0位置的输出,也就是Z相。0位置就是编码器每转到一个固定位置时,输出一个脉冲。一般应用于位置测量,校淮0位置用的。最后还有一个NC脚。

编码器接口程序测速现象

 在这里接了一个旋转编码器模块,这个代码和之前我们写的旋转编码器计次的代码,实现的功能基本都是一样的。OLED显示的是Speed速度,向右慢速旋转,数值为正,计次比较小。向右快速旋转,计次就会增大;然后向左慢速旋转,数值为负,计次比较小;然后停下来,速度就是0。

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

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

相关文章

“Linux 三剑客”,通常指的是三个经典的命令行工具:grep、sed 和 awk

1、grep: 简介:grep 是一个强大的文本搜索工具,可以用于在文件中查找匹配特定模式的行。示例: 搜索包含特定关键词的行: grep "keyword" filename 递归搜索目录下所有文件: grep -r define zj…

聊聊多模态大模型处理的思考

多模态:文本、音频、视频、图像等多形态的展现形式。目前部门内业务要求领域大模型需要是多模态——支持音频/文本。从个人思考的角度来审视下,审视下多模态大模型的实现方式。首先就要区分输入与输出,即输入的模态与输出的模态。从目前来看&…

专项测试之「 性能测试」总结

1、性能测试概念 虚拟用户】模拟真实业务逻辑步骤的虚拟用户,其模拟的操作步骤都被记录再虚拟用户脚本中。 【事务】事务是性能测试脚本的一个重要特性,按照最小的http请求打包而成。 【TPS】每秒中系统处理的交易或者事务的数量。 【PV】用户浏览器…

SQLynx发布3.0.0版本:带来更流畅便捷的SQL开发体验

作为新一代的一站式数据库管理开发工具, SQLynx自发布上线以来,一直受到广大用户的好评与鼓励。 为了给用户提供更高效、更便捷、更可靠的数据库管理开发体验,SQLynx今日正式发布3.0.0版本,同步在麦聪软件官网上线,全…

大型网络游戏设计与AI赋能-3

接上文!!!! 先和大家互动一下 大家觉得架构设计包含了哪些东西? 大家可能会提起一些名词,比如框架、不同功能、工具集、软件体系结构、设计思想等。其实引擎是一种软件。我们说传统的软件设计的这个体系里…

搭建机器人产业发展重要展示平台“2024南京国际机器人展览会”

2024南京国际智能机器人展览会 2024 Nanjing Intelligent Robot Expo 时间:2024年11月22-24日 地点:南京国际博览中心 南京,这座历史悠久的文化名城,如今正站在机器人产业发展的前沿。随着全球科技的飞速进步,机器人产业已经成为推动经济社…

数据结构·二叉树(2)

目录 1 堆的概念 2 堆的实现 2.1 堆的初始化和销毁 2.2 获取堆顶数据和堆的判空 2.3 堆的向上调整算法 2.4 堆的向下调整算法 2.4 堆的插入 2.5 删除堆顶数据 2.6 建堆 3 建堆的时间复杂度 3.1 向上建堆的时间复杂度 3.2向下建堆的时间复杂度 4 堆的排序 前言&…

【C++语言】冲突-C语言:命名冲突(输入输出、缺省参数、引用、内联函数)

文章目录 前言正文2. C的输入与输出:3.缺省参数3.1 缺省参数的概念:3.2 缺省参数的分类:全缺省参数:半缺省参数: 4.函数重载4.1 函数重载的概念: 5.引用5.1 引用的基本概念:5.2 引用的特性&…

后端代码1

// 新增 public JsonResultVo<?> create(ApiIgnore RequestAttribute(ConstVal.REQ_USER) BaseUser baseUser,RequestBody IUTradeBuyPreserveVo iuTradeBuyPreserveVo) {//权限判断if (!baseCompanyService.dataPermission(baseUser, iuTradeBuyPreserveVo.getCompanyi…

Kimi和ChatGPT做古诗词阅读理解,谁更胜一筹?

前几天发过一篇Kimi整理会议的体验教程&#xff0c;没想到大家很感兴趣&#xff0c;这次再来拿Kimi做古诗词阅读理解看看&#xff0c;同时也对比下ChatGPT的效果。 ChatGPT是几乎家喻户晓的AI大模型&#xff0c;Kimi和它对比有哪些异同点呢&#xff1f; 首先它们都是基于对话…

【小沐学AI】智谱AI大模型的一点点学习(Python)

文章目录 1、简介1.1 大模型排行榜 2、智谱AI2.1 GLM2.1.1 模型简介2.1.2 开源代码2.1.2.1 GLM-130B 2.2 ChatGLM2.2.1 模型简介2.2.2 开源代码2.2.2.1 ChatGLM2.2.2.2 ChatGLM22.2.2.3 ChatGLM3 2.3 CodeGeeX2.3.1 模型简介2.3.2 开源代码 2.4 CogView2.4.1 模型简介2.4.2 开源…

【项目技术介绍篇】如何在本地运行若依项目

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

Error: Cannot find module ‘@rollup/rollup-win32-x64-msvc‘

1.背景 新项目需要使用vite搭建一个v3项目,之前也弄过,但项目创建后却一直无法跑起来,大聪明的我一直没有注意到这个问题 2.解决步骤 方案1:删除node_modules和package-lock.json文件重新npm install下包,部分码农通过这个步骤可解决 方案2:node版本或者npm版本不对,或者没…

Redission 分布式锁原理分析

一、前言 我们先来说说分布式锁&#xff0c;为啥要有分布式锁呢? 像 JDK 提供的 synchronized、Lock 等实现锁不香吗&#xff1f;这是因为在单进程情况下&#xff0c;多个线程访问同一资源&#xff0c;可以使用 synchronized 和 Lock 实现&#xff1b;在多进程情况下&#xff…

SpringBoot 文件上传(二)

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件&#xff1a; SpringBoot 文件上传&#xff08;一)-CSDN博客 这节讲解服务器端如何将文件保存到本地目录下&#xff0c;下节讲解服务端如何将文件保存在阿里云上。 本节需要解决两个难点&#xff1a; 文件重名问题…

力扣---最长回文子串---二维动态规划

二维动态规划思路&#xff1a; 首先&#xff0c;刚做完这道题&#xff1a;力扣---最长有效括号---动态规划&#xff0c;栈-CSDN博客&#xff0c;所以会有一种冲动&#xff0c;设立g[i]&#xff0c;表示以第i位为结尾的最长回文子串长度&#xff0c;然后再遍历一遍取最大长度即可…

【PLC】PROFIBUS(二):总线协议DP、PA、FMS

1、总线访问协议 (FDL) 1.1、多主通信 多个主设备间&#xff0c;使用逻辑令牌环依次向从设备发送命令。 特征&#xff1a; 主站间使用逻辑令牌环、主从站间使用主从协议主站在一个限定时间内 (Token Hold Time) 对总线有控制权从站只是响应一个主站的请求它们对总线没有控制…

三轴工作台激光焊接机:实现高精度、高效率焊接的新选择

三轴工作台激光焊接机是一种先进的焊接设备&#xff0c;结合了激光焊接技术与三轴工作台的运动控制&#xff0c;实现了焊接过程的高效、精准与自动化。这种设备主要利用激光束的高能量密度和高速度特性&#xff0c;使工件在熔化的同时快速冷却凝固&#xff0c;从而达到高质量的…

n-皇后问题(DFS深搜两种解法)

题目描述&#xff1a; 思路&#xff1a; 根据题目要求&#xff1a;即任意两个皇后都不能处于同一行、同一列或同一斜线上。我们可以画图去看一下。对角线之间有什么规律可以发掘出来。接下来请看图解 根据上述图片&#xff0c;我们可以把正对角线看成撇对角线&#xff0c;也就…

分享300套常用的多行业商城模板和电商模板

小程序商城模板平台&#xff01;免费用多行业商城模板和电商模板&#xff0c;含小程序商城模板&#xff0c;多款精美高端电商模板免费使用&#xff0c;注册即用免费电商模板开发在线商城。 https://www.erdangjiade.com/templates/4-0-0-0-0-0 实现微信小程序携程首页顶部的界…