STM32单片机(六)TIM定时器 -> 第七节:TIM编码器接口

news2024/11/27 7:41:49

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习TIM定时器的相关知识,包含八小节:
第一小节主要学习定时器基本定时的功能,第二小节是对第一小节的内容写两个程序进行练习,分别是定时器定时中断和定时器外部时钟;
第三小节主要学习定时器输出比较的功能,第四小节是对第三小节的内容写三个程序进行练习,分别是PWM驱动LED呼吸灯、PWM驱动舵机以及PWM驱动直流电机;
第五小节主要学习定时器输入捕获的功能,第六小节是对第五小节的内容写两个程序进行练习,分别是输入捕获模式测频率和PWMI模式测频率占空比;
第七小节主要学习定时器的编码器接口功能,第八小节是对第七小节的内容写一个程序进行练习,即编码器接口测速;
最终附上所有的源代码;

本小节主要是学习定时器的编码器接口,使用这个编码器接口,能够更加方便地读取正交编码器的输出波形,在编码电机测速中,应用也是非常广泛的;

文章目录

  • 一、编码器基础知识
    • 1.1 编码器接口简介
    • 1.2 正交编码器
    • 1.3 编码器基本结构
    • 1.4 工作模式
  • 二、编码器实例
    • 2.1 实例(均不反相)
    • 2.2 实例(TI1反相)

一、编码器基础知识

1.1 编码器接口简介

在这里插入图片描述

  • 这个编码器接口,其实就相当于是一个带有方向控制的外部时钟,它同时控制着CNT的计数时钟和计数方向;这样的话,CNT的值就表示了编码器的位置;如果我们每隔一段时间取一次CNT的值,再把CNT清零,则每次取出来的值就表示了编码器的速度;编码器测速其实就是测频法测正交脉冲的频率;

1.2 正交编码器

在这里插入图片描述

  • 正交编码器一般可以测量位置,或者带有方向的速度值;它一般有两个信号输出引脚,一个是A相,一个是B相;
  • 一般情况下,正转时A相提前B相90度,反转时A相滞后B相90度;通过这个可以用来测方向;
  • 测方向原理:首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减;然后到底是增还是减,这个计数的方向由另一相的状态来确定,当出现某个边沿时,判断另一相的高低电平,如果对应另一相出现的规律是按照上面的表格,那就是正转,如果对应下面的表格,那就是反转;

1.3 编码器基本结构

在这里插入图片描述

  • 输入捕获的前两个通道,通过GPIO口接入编码器的A、B相,然后通过滤波器和边沿检测极性选择,产生TI1FP1和TI2FP2,通向编码器接口,编码器接口通过预分频器控制CNT计数器的时钟;同时,编码器接口还根据编码器的旋转方向,控制CNT的计数方向;编码器正转时,CNT自增,编码器反转时,CNT自减;
  • 一般我们会设置ARR为65535,最大量程,这样利用补码的特性,很容易得到负数;

1.4 工作模式

在这里插入图片描述

二、编码器实例

2.1 实例(均不反相)

在这里插入图片描述

2.2 实例(TI1反相)

在这里插入图片描述

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

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

相关文章

vue引入jszip下载多个图片并压缩下载

vue引入jszip下载多个图片并压缩下载 jszip官网地址 先进行jszip下载 npm install jszip然后废话不多说直接上代码 <template><div><button click"downloadImages">下载图片</button></div> </template><script> impo…

shell内置命令

目录 内置命令介绍内置命令列表alisa内置命令alias别名定义语法unalias 别名删除语法alias演示 echo内置命令echo命令介绍echo输出语法echo输出转义字符 read内置命令介绍语法options支持的参数示例1&#xff1a;多个变量赋值 exit内置命令介绍语法示例&#xff1a;Shell脚本文…

OPC AE server服务的实现

OPC AE server的实现 日前实现了OPC AE server&#xff0c;特此记录备查。 1、事件分三类&#xff0c;从下图可知每类都包含啥内容了&#xff0c;CONDITION看起来主要是一些越限&#xff0c;熟悉其它协议的朋友应该对这个不陌生&#xff0c;一般这种事件产生时&#xff0c;会…

通过Selenium实现Web自动化测试的研究

目录 前言&#xff1a; 1 自动化测试概念 1.2 自动化测试发展阶段 2 自动化测试工具Selenium简介 3 具体测试过程 4 总结 前言&#xff1a; Web自动化测试是Web应用程序测试的重要组成部分&#xff0c;它通过模拟实际用户行为&#xff0c;对Web应用程序进行自动化测试并…

chatgpt赋能python:Python拆包:提高编程效率的神器

Python拆包&#xff1a;提高编程效率的神器 在Python编程中&#xff0c;拆包&#xff08;unpacking&#xff09;是一项非常有用的技巧。它可以让你将一个可迭代对象&#xff08;iterable&#xff09;中的元素分离开来&#xff0c;赋值给多个变量。这个过程一般称为“解包”&am…

小白到运维工程师自学之路 第三十八集 (redis高可用集群)

一、概述 Redis高可用集群是一种分布式系统&#xff0c;它由多个Redis节点组成&#xff0c;可以提供高可用性和容错性。在Redis高可用集群中&#xff0c;每个节点都可以处理客户端请求&#xff0c;并且数据会在多个节点之间进行复制和同步&#xff0c;以确保数据的可靠性和一致…

Day_51-53kNN分类器

目录 Day_51&#xff1a;kNN分类器 一. 前言 二. 机器学习基本术语 三. kNN算法的原理 1. kNN算法的思想 2. kNN算法的具体实现过程 四. 代码实现 1. 导包 2. 参数初始化 3. 数据的导入 4. 数据的抽取 5. 对于测试集进行预测 6. 核心代码 Day_52&#xff1a;knn分类器&am…

LabVIEW开发微控制器控制的并行机器人的实时视觉图像处理

LabVIEW开发微控制器控制的并行机器人的实时视觉图像处理 通过相机视觉&#xff0c;以对目标物体的不同颜色进行分类&#xff0c;并与平行机器人一起拾取和放置物体。通过使用MATLAB Simulink模拟合适的机器人工作空间来研究使用相机的效率和机器人的准确性。机械臂以使用运动学…

OpenMMLab-AI实战营第二期——5-2. MMSegmentation代码课

文章目录 1. 自定义数据集1.0 整理数据集为特定格式1.1 持久化运行&#xff08;用文件定义&#xff09;1.2 运行时生效&#xff08;直接运行时定义一个class&#xff09;1.3 注意事项 2. 配置文件3. 运行训练和测试X. 其他语义分割数据集 视频链接&#xff1a;MMSegmentation代…

ThreadPoolExecutor源码

介绍 ThreadPoolExecutor 是 Java 中实现线程池的一个类&#xff0c;它是 ExecutorService 接口的一个实现类。线程池可以用来优化线程的使用&#xff0c;避免频繁地创建和销毁线程&#xff0c;以及限制并发线程的数量&#xff0c;从而提高应用程序的性能。 public class Thr…

读发布!设计与部署稳定的分布式系统(第2版)笔记06_用户

1. 系统的人类用户天生就具备进行创造性破坏的本事 1.1. 用户会消耗内存 1.2. 用户会做奇怪和随机的事情 1.2.1. fuzzing工具箱、基于属性的测试或模拟测试 1.3. 恶意用户总是存在的 1.3.1. 灾祸总会发生&#xff0c;坏人肯定存在 1.4. 用户会合伙对付你 2. 难伺候的用户…

【linux】opencv修改摄像头分辨率

起因 发现linux系统下调用opencv修改摄像头分辨率&#xff0c;一直修改不成功。 原本 正常在window下面读取摄像头数据是如下代码&#xff1a; # capture from web camcap cv2.VideoCapture(0)# set widthcap.set(3, 1280)# set heightcap.set(4, 720)while self._run_flag…

武职302303笔记-day01

这里写自定义目录标题 开发永和小票开发步骤1、对页面进行需求分析 使用CSS的方式 Order.html问题&#xff1a;html代码和css样式代码交织 idea开发后端程序使用chatGPT给我们打工QRCreate.java 开发永和小票 开发步骤 1、对页面进行需求分析 页面是很多文字组成&#xff0c;…

虹科分享丨如何保证我们的数据安全?|数据保护

一、数据安全 你可能已经正在寻找加密服务来帮助保护你的组织的数据&#xff0c;但如果你是一个不熟悉实践或管理数据的人员&#xff0c;"数据加密 "这个短语可能会感觉像技术术语或只是像一个模糊的概念&#xff0c;没有具体的解决方案。 但事实上&#xff0c;数据…

git、axios、模块化导出引入、promise、webpack、

GIT总结 git config --global user.name "你的用户名" git config --global user.email "你的邮箱" git config -l 命令来查看配置信息 git init 仓库初始化 touch index.html 创建index.html文件 git add index.html 文件加入暂存区 git add -A 将全部文件…

车载以太网 - 网络层 - IPv4/IPv6

目录 一、网络层基本信息介绍 1、网络协议适用范围 2、IPv4和IPv6的地址 3、Ethernet Frames 的类型 二、两种类型IP地址的定义: ECU通信的几种方式 路由器(Router)和IP 地址的概念 路由实例介绍 三、IPv4地址介绍 地址分类&#xff1a; 各类型IP可支持的最大网络数…

C语言实现移位密码

一.移位密码 移位密码(Caesar Cipher)也叫凯撒密码是一种简单的加密技术&#xff0c;它通过将明文中的每个字母按照指定的位数进行移位&#xff0c;从而生成密文。例如&#xff0c;在一个"左移3位"的移位密码中&#xff0c;文中的每个字母都向左移动3个位置&#xff…

7.2 SpringBoot实现上传图片API + url映射本地路径registry.addResourceHandler

文章目录 前言一、url映射本地路径二、上传图片API2.1 接口UploadService2.2 实现类UploadServiceImpl2.3 上传图片Controller 三、测试最后 前言 在图书借阅系统里&#xff0c;有很多图片需要前端展示&#xff0c;这些图片大都是由用户上传&#xff0c;保存在服务端&#xff…

chatgpt赋能python:Python拆数程序:如何快速分解数字?

Python拆数程序&#xff1a;如何快速分解数字&#xff1f; 在计算机编程中&#xff0c;数字拆分是一个非常重要的概念。拆分数字可以让我们更好地理解数字格式&#xff0c;进行计算和分析。而Python作为一种功能强大的编程语言&#xff0c;提供了许多高效的工具来帮助我们快速…

【备战秋招】每日一题:华东师范大学保研机试-2022-罗马数字

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客罗马数字 题目内容 罗马数字是古罗马使用的记数系统&#xff0c;现今仍很常见。 罗马数字有七个基本符号: I,V,X,L,C,D,M。 罗马数字IVXLCDM对应的阿拉伯数字1510501005001000 需要注意的是罗马数字与十进位数字的…