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

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

最近在学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。

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

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

相关文章

如何在数字化转型中确保数据安全

随着科技的飞速发展,数字化转型已成为企业发展的必然趋势。数字化转型是指企业利用数字技术对业务流程、组织结构和商业模式进行全面创新和变革,以提高企业的竞争力和创新能力。然而,在数字化转型过程中,数据安全问题日益凸显&…

【C语言_函数_复习篇】

目录 一、C语言中函数的概念 二、库函数 2.1 库函数的概念 2.2 怎样自己学习库函数_以sqrt函数为例 三、自定义函数 3.1 自定义函数的语法形式 3.2 自定义函数的举例 3.3 自定义函数的实参 3.4 自定义函数的形参 3.5 自定义函数的实参和形参的关系 3.6 自定义函数中的return…

javaweb-配置优先级、bean管理和SpringBoot原理

javaweb原理! 配置优先级 命令行参数的优先级要高于java系统属性 Bean管理 第三方bean SpringBoot原理 起步依赖的原理就是依赖传递 后端开发总结 原来SSM是这三个!!! Maven高级 maven构建和管理ja…

浅谈电商网络爬虫技术

摘 要 目前网络上存在着海量的数据资料,将这些数据爬取保存下来,并进行进一步操作,即可挖掘出数据的潜在价值。如今的互联网存在的缺陷是用户很难获得有用的数据资料,虽然传统的搜索引擎可以为用户返回大量信息,但是…

会话式AI定制化营销的力量

智能革命:如何用会话式AI提高品牌影响力? 在人工智能时代,营销活动计划应充分利用AI技术,比如数据分析、个性化推荐、智能客服等,以提高营销活动的针对性和效率。同时,创意和用户体验依然是吸引用户的关键&…

【Linux实践室】Linux用户管理实战指南:用户密码管理操作详解

🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔用户密码存放地及方式2.2 🔔使用…

【数据分享】1929-2023年全球站点的逐日平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

solr-lucene的解释

什么是solr-lucene Solr是一个基于Apache Lucene的开源搜索平台。Lucene是一个开源的全文搜索引擎库,它提供了一个简单而强大的API,用于索引和搜索文档。Solr通过在Lucene的基础上构建一个更高级的搜索平台,为用户提供了更丰富的功能和易于使…

代码随想录——在排序数组中查找元素的第一个和最后一个位置(Leetcode34)需要回顾

题目链接 class Solution {public int[] searchRange(int[] nums, int target) {// count记录数组中与target相等的个数int count 0;// index记录最后一个与target相等的数组下标,先赋值-1证明没有与之相等的数组元素int index -1;// 返回数组arrint[] arr new…

行业分析:2024年全球CRM九大发展趋势预测,洞悉未来!

2024年全球CRM行业发展九大预测:以客户为中心、重视CRM采用率、与业务深度融合的AI、一体化平台、行业垂类解决方案CRM、集中数据,驱动业务、低代码PaaS、在客户服务中寻求人机平衡、不同规模企业应用特点区别明显。 每到年初,作为Gartner魔力…

Netty学习——源码篇7 Pipeline的事件传播机制1 备份

上篇:Netty学习——源码篇6 Pipeline设计原理 已经知道AbstractChannelHandlerContext中有Inbound和Outbound两个boolean变量,分别用于识别Context所对应的Handler的类型。 1、Inbound为true时,表示其对应的ChannelHandler是ChannelInboundHa…

考了PMP证后工资大概是多少 ?

PMP自1999年引入国内以来,大家对这个证书的了解并不深,每年考试的人数也不多。但随着越来越多的企业认可PMP认证,目前考证的人数不断增加,几乎所有与项目管理相关的人都知道这个证书的重要性。这个证书在招聘要求中出现频率较高&a…

小红的炸砖块

题目描述 小红正在玩一个“炸砖块”游戏,游戏的规则如下: 初始有一个n∗m的砖块矩阵。小红会炸k次,每次会向一个位置投炸弹,如果这个位置有一个砖块,则砖块消失,上方的砖块向下落。 小红希望你画出最终砖块…

StringBuffer和大数值

读取 import java.util.Scanner;public class index{public static void main(String[] args){Scanner in new Scanner(System.in);System.out.println("Whats your name?");String name in.nextLine();Scanner inage new Scanner(System.in);System.out.printl…

Linux虚拟机环境搭建spark

Linux环境搭建Spark分为两个版本,分别是Scala版本和Python版本。 一、 安装Pyspark 本环境以 Python 环境为例。 1、下载spark 下载网址:https://archive.apache.org/dist/spark 下载安装包:根据自己环境选择合适版本,本环境…

详细分析Linux中的core dump异常(附 Demo排查)

目录 1. 基本知识2. 进阶知识3. Demo4. 彩蛋 1. 基本知识 Core dump 是指在程序异常终止时,操作系统将程序的内存映像保存到磁盘上的一种机制。 在 Linux 系统中,core dump 提供了一种调试程序错误的重要方式,它记录了程序在崩溃时的内存状态…

同城双活:交易链路的稳定性与可靠性探索

知易行难,双活过程中遇到了非常多的问题,但是回过头看很难完美的表述出来,之所以这么久才行文也是这个原因,总是希望可以尽可能的复现当时的思考、问题细节及解决方案,但是写出来才发现能给出的都是多次打磨、摸索之后…

大数据开发(日志离线分析项目)

大数据开发(日志离线分析项目) 一、项目需求1、使用jqueryecharts的方式调用程序后台提供的rest api接口,获取json数据,然后通过jquerycss的方式进行数据展示。工作流程如下:2、七大角度1、用户基本信息分析模块2、浏览…

秋招刷题2

1.字符串分割 public static void main(String[] args) {Scanner scnew Scanner(System.in);while(sc.hasNext()){String strsc.nextLine();StringBuilder sbnew StringBuilder();sb.append(str);int sizestr.length();int addZero8-size%8;while((addZero>0&&(addZ…

【数据结构】受限制的线性表——队列

🧧🧧🧧🧧🧧个人主页🎈🎈🎈🎈🎈 🧧🧧🧧🧧🧧数据结构专栏🎈🎈🎈&…