STM32定时器的编码器接口模式
MCU为STM32L431,通用定时器框图:

编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下计数;模式3计数器同时在TI1FP1和TI2FP2的边沿根据另外一条线的电平来判断向上/下计数。
计数方向与编码器信号的关系:

使用编码器模式3,假如使用如下配置时,

IC1FP1和IC2FP2不反相,IC1FP1=TI1,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,对应关系如下:
| 向前 | 点位 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
|---|---|---|---|---|---|
| 1 | 上升 | TI2(低) | 向上 | ||
| 2 | 上升 | TI1(高) | 向上 | ||
| 3 | 下降 | TI2(高) | 向上 | ||
| 4 | 下降 | TI1(低) | 向上 | ||
| 5 | 上升 | TI2(低) | 向上 | ||
| 6 | 上升 | TI1(高) | 向上 | ||
| 向后 | 点位 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
| 1 | 上升 | TI2(高) | 向下 | ||
| 2 | 下降 | TI1(高) | 向下 | ||
| 3 | 下降 | TI2(低) | 向下 | ||
| 4 | 上升 | TI1(低) | 向下 | ||
| 5 | 上升 | TI2(高) | 向下 | ||
| 6 | 下降 | TI1(高) | 向下 |

同样使用编码器模式3,当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同),TI1极性相反,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,对应关系如下:
| 向前 | 点位 | TI1原信号 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
|---|---|---|---|---|---|---|
| 1 | 上升 | 下降 | TI2(低) | 向下 | ||
| 2 | 上升 | TI1(低) | 向下 | |||
| 3 | 下降 | 上升 | TI2(高) | 向下 | ||
| 4 | 下降 | TI1(高) | 向下 | |||
| 5 | 上升 | 下降 | TI2(低) | 向下 | ||
| 6 | 上升 | TI1(低) | 向下 | |||
| 向前 | 点位 | TI1原信号 | TI1FP1信号 | TI2FP2信号 | 相对信号及电平 | 计数器方向 |
| 1 | 上升 | 下降 | TI2(高) | 向上 | ||
| 2 | 下降 | TI1(低) | 向上 | |||
| 3 | 下降 | 上升 | TI2(低) | 向上 | ||
| 4 | 上升 | TI1(高) | 向上 | |||
| 5 | 上升 | 下降 | TI2(高) | 向上 | ||
| 6 | 下降 | TI1(低) | 向上 |

如果使用编码器模式1,IC1FP1和IC2FP2不反相,IC1FP1=TI1,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,计数器在TI1FP1的边沿根据IC2FP2的电平来计数。
| 向前 | 点位 | TI1FP1信号 | 相对信号及电平 | 计数器方向 |
|---|---|---|---|---|
| 1 | 上升 | TI2(低) | 向上 | |
| 2 | 下降 | TI2(高) | 向上 | |
| 3 | 上升 | TI2(低) | 向上 | |
| 4 | 下降 | TI2(高) | 向上 | |
| 向后 | 点位 | TI1FP1信号 | 相对信号及电平 | 计数器方向 |
| 1 | 上升 | TI2(高) | 向下 | |
| 2 | 下降 | TI2(低) | 向下 | |
| 3 | 上升 | TI2(高) | 向下 | |
| 4 | 下降 | TI2(低) | 向下 |

定时器编码器模式配置:
void Encoder_TIM2_Init(void)
{TIM_Encoder_InitTypeDef sConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim2.Instance = TIM2;htim2.Init.Prescaler = 0;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = (ENCODER_RELOAD_NUM - 1);htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;sConfig.EncoderMode = TIM_ENCODERMODE_TI1;sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;sConfig.IC1Prescaler = TIM_ICPSC_DIV1;sConfig.IC1Filter = 0;sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;sConfig.IC2Prescaler = TIM_ICPSC_DIV1;sConfig.IC2Filter = 0;if (HAL_TIM_Encoder_Init(&htim2, &sConfig) != HAL_OK){PRINT_ERR("Encoder Tim Init Err\r\n");}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){PRINT_ERR("Encoder Init Mode Err\r\n");}HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);
}
其中htim2.Init.Period的值为重装载值,计数器的计数值在0(包含)至Period(包含)之间向上或向下计数,可以通过计数值的变化根据编码器接口的模式来判断编码器的方向,也可以TIMx_CR1寄存器的DIR位来判断方向。如果不需要判断编码器转过的圈数,那么重装载值可以顺便设置,比如65535;如果需要判断转过的圈数,假定使用模式3,编码器旋转一周产生的脉冲数是X,那么重装载值可以设置为(X-1)*4,因为模式3在TI1和TI2的边沿都计数,此时可以通过定时器的溢出中断来判断是不是旋转一周。
如果只需要判断旋转方向,并且编码器旋转一周的产生的脉冲数很小的话,那就使用模式1或者模式2比较好,如果使用模式3的话仅通过TIMx_CNT寄存器的值来计算转过角度的话误差比较大。
另外配置的时候编码器模式IC1Polarity和IC2Polarity的极性只能选择上升沿或者下降沿,不能设置为所有边沿,这样的话会导致计数器计数失败,并且方向判断也会有问题。

相关文章:
STM32定时器的编码器接口模式
MCU为STM32L431,通用定时器框图: 编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下…...
Java方法的使用
目录 一、方法的概念及使用 1、什么是方法(method) 2、方法定义 3、方法调用的执行过程 4、实参和形参的关系 二、方法重载 1、为什么需要方法重载 2、方法重载概念 3、方法签名 三、递归 1、递归的概念 2、递归执行过程分析 一、方法的概念及使用 1、什么是方法(met…...
Linux命令·nl
nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。 1.命令格式:nl [选项…...
排序模型:DIN、DINE、DSIN
目录 DIN 输入 输出: 与transformer注意力机制的区别与联系: DINE 改善DIN 输入: DSIN 动机: DIN 适用与精排,论文: Deep Interest Network for Click-Through Rate Prediction DIN模型提出的动…...
【C++】Clang-Format:代码自动格式化(看这一篇就够了)
文章目录Clang-format格式化C代码1.引言&安装1.1引言1.2 安装2. 配置字解释2.1 language 编程语言2.2 BaseOnStyle 基础风格2.3 AccessModifierOffset 访问性修饰符偏移2.4 AlignAfterOpenBracket 开括号后的对齐2.5 AlignArrayOfStructures 对齐结构体数组2.6 AlignConsec…...
Linux命令·more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back&…...
为什么 SaaS 公司依靠知识库来做对客户服务?
信不信由你,客户服务是您在软件行业赚钱的核心。不仅仅是拥有出色的产品,不仅仅是拥有出色的营销,更重要的是让人们回到您家门口的客户服务。 这是因为从长远来看,留住现有客户比获得新客户更重要,而留住客户时间更长的…...
后端必备之VUE基础【黑马程序员】
黑马程序员4小时入门VUE传送门 1. 简介 Vue是一个操作JavaScript的框架,类似于jQuery,但比jQuery好用,是现在的主流 2. 测试例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…...
现代HYUNDAI EDI需求分析
现代集团(HYUNDAI)是韩国一家以建筑、造船、汽车行业为主,兼营钢铁、机械、贸易、运输、水泥生产、冶金、金融、电子工业等几十个行业的综合性企业集团。本文主要介绍HYUNDAI 的EDI需求,带大家快速理清思路,明确EDI项目的推进流程。 通信标准…...
数据库基本功之SQL的基本函数
1. 单行函数与多行函数 1.1 单行函数 指单行数据输入,返回一个值的函数. 所以查询一个表时,对选择的每一行数据都返回一个结果.[oracleoracle-db-19c ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 7 07:59:44 2023 Version 19.3.0.0.0Copyri…...
配置主机名与ip的映射关系
本次进行简单的小实验 通过在windows上配置主机名与IP地址的映射关系,达到我们在xshell或其他远程连接设备上,不用IP地址登陆,只需要用主机名就能实现登陆的效果 配置 首先 需要查看自己虚拟机的IP地址,找到ens33或者ens160…...
Spring Cache简单介绍和使用
目录 一、简介 二、使用默认ConcurrentMapManager (一)创建数据库和表 (二)创建boot项目 (三)使用Api 1、EnableCaching 2、CachePut 3、cacheable 4、CacheEvict 三、使用redis作为cache 一、简…...
ECCV 2022|面向精确的主动相机定位算法
标题:ECCV 2022,山东大学、北大、腾讯AILab、斯坦福和三维家联合提出,面向精确的主动相机定位算法项目地址:https://github.com/qhFang/AccurateACL.文章:Towards Accurate Active Camera Localization(ECCV 2022&…...
web实现环形旋转、圆形、弧形、querySelectorAll、querySelector、clientWidth、sin、cos、PI
文章目录1、HTML部分2、css部分3、JavaScript部分4、微信小程序演示1、HTML部分 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…...
PyCharm+Python+Selenium自动化测试动态验证码识别
driver.find_element(byBy.ID,valueUSERID).send_keys("admin")driver.find_element(byBy.ID,valuePASSWORD_VIEW).send_keys("123456")#ocr识别原理:先根据验证码的class dl_yzm定位到验证码图片,然后将验证码截图保存,…...
git版本回退简单记录
简单记录git版本回退的命令,参考的是这篇文章1 首先查看以前存档的版本: git log1. 知道要回退的版本和现在的版本差了多少代 回退上一代版本(1个以前) git reset –hard HEAD^回退上上一代版本(2个以前࿰…...
QT入门Display Widgets之QLine、QLcdNumber、QTextBrowser
目录 一、QLine界面相关 1、布局介绍 2、界面基本属性 二、QLCDNumber的介绍 1、界面布局 2、定时器代码测试 三、QTextBrowser 此文为作者原创,创作不易,转载请标明出处! 一、QLine界面相关 1、布局介绍 先看下界面中创建个Q…...
Spring学习笔记
目录1 IOC容器1.1 概念1.2 IOC的底层原理1.3 Spring中IOC容器的两种实现方式(两个接口)1.3.1 BeanFactory接口1.3.2 ApplicationContext接口1.3.3 为什么开发中使用ApplicationContext接口1.3.4 ApplicationContext接口的两个实现类1.4 IOC操作之bean管理1.4.0 bean是什么&…...
数据的标准化处理
假设各个指标之间的水平相差很大,此时直接使用原始指标进行分析时,数值较大的指标,在评价模型中的绝对作用就会显得较为突出和重要,而数值较小的指标,其作用则可能就会显得微不足道。 因此,为了统一比较的标…...
性能优化|记一次线上OOM问题处理
概述最近线上监控发现 OOM 涨幅较大,因此去尝试定位和修复这个问题,在修复了一些内存泄漏和大对象占用问题后, OOM 依旧未达到正常标准,在这些新上报的 hprof 文件中,发现几乎所有 case 中都有个叫 FinalizerReference 的对象&…...
告别繁琐操作:一键下载国家中小学智慧教育平台电子课本的智能解决方案
告别繁琐操作:一键下载国家中小学智慧教育平台电子课本的智能解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内…...
Baetyl开源社区贡献指南:如何参与边缘计算框架的代码与文档开发
Baetyl开源社区贡献指南:如何参与边缘计算框架的代码与文档开发 【免费下载链接】baetyl Extend cloud computing, data and service seamlessly to edge devices. 项目地址: https://gitcode.com/gh_mirrors/ba/baetyl 欢迎来到Baetyl开源边缘计算框架的贡献…...
龙为权,凰为心:凰标守住文化最柔软的底线@凤凰标志
龙为权凰为心 中国文艺生态的双轨平衡宣言秩序权力与创作初心,一刚一柔, 如日月轮值,缺一不可。 龙标掌「权」,凰标守「心」, 双轨并行,方可让文化既筋骨强健,又血肉温润。一、龙标:…...
用OpenMV4 H7 PLUS做个智能分拣小车:颜色识别实战项目从硬件选型到代码集成
智能分拣小车实战:OpenMV4 H7 PLUS颜色识别与嵌入式系统集成 在创客竞赛和毕业设计中,智能分拣系统一直是热门选题。传统方案往往面临识别精度不足、响应延迟高或硬件兼容性差等问题。OpenMV4 H7 PLUS凭借其强大的图像处理能力和丰富的硬件接口ÿ…...
论文降AI率通关指南:7个实用技巧+高效工具一次讲清
为什么你的论文总被判定为AIGC疑似? 随着AI写作工具的广泛普及,不少科研人员和学生都碰到了同一个头疼的问题:论文AIGC疑似率超标。现在大多数高校都出台了明确规定,AIGC率超过30%就可能被判定为AI代写,直接取消答辩资…...
跨越版本鸿沟:Matlab 2020b与VS2022混合编译环境搭建实战
1. 环境准备:当Matlab 2020b遇上VS2022 第一次尝试在Matlab 2020b里调用VS2022编译器时,命令行弹出的红色报错让我愣了半天。官方文档明确写着Matlab 2020b最高只支持VS2019,这就像让Windows XP运行最新版Photoshop——理论上不可能ÿ…...
Unitree Go2 ROS2 SDK架构设计指南:实现企业级机器人性能优化的5大策略
Unitree Go2 ROS2 SDK架构设计指南:实现企业级机器人性能优化的5大策略 【免费下载链接】go2_ros2_sdk Unofficial ROS2 SDK support for Unitree GO2 AIR/PRO/EDU 项目地址: https://gitcode.com/gh_mirrors/go/go2_ros2_sdk Unitree Go2 ROS2 SDK是一个为宇…...
数字音频抖动抑制技术与DSS™同步方案解析
1. 数字音频系统中的抖动现象解析抖动(Jitter)是数字音频领域最令人头痛的问题之一,它就像一位不守时的乐队指挥——当每个音符的演奏时机出现微秒级的偏差时,整首乐曲就会失去原有的韵律和质感。在技术层面,抖动被定义…...
CTF出题人视角:我是如何设计ctfshow F5杯那些“脑洞大开”的MISC题的
CTF出题人视角:如何设计令人拍案叫绝的MISC赛题 在CTF竞赛中,MISC(杂项)题目往往是最能体现创意与思维碰撞的领域。作为F5杯的核心出题人之一,我想分享几个设计"脑洞题"的底层逻辑——这些题目后来被参赛选手…...
Data Storage and Computation
Data Storage and Computation 数据存储与计算假设一张表有 3 个字段:id BIGINT(8 字节 / 条) name VARCHAR(20)(实际平均 10 字节 / 条) age TINYINT(1 字节 / 条)单行实际数据占用࿱…...
