STM32编码器接口解析及抗噪声措施探讨
1. 引言
在现代控制系统中,编码器扮演着非常重要的角色。它就像一个精密的测量工具,可以告诉我们机械部件的位置和运动状态。在STM32微控制器中,编码器接口可以轻松地与各种编码器连接,实现精确的控制。我将在这里探讨STM32编码器接口的电路结构、工作逻辑以及如何有效地抗噪声。
2. 编码器接口的电路结构
2.1 基本组成
STM32编码器接口主要由以下部分组成:
- 输入部分:接收来自编码器的A相和B相信号。
- 输出部分:将处理后的位置信息和状态反馈给主控系统。
- 定时器模块:负责计数和计算速度。
2.2 电路连接
将正交编码器的A相和B相信号分别连接到STM32的定时器输入引脚。编码器的VCC和GND分别连接到电源和地线。这样,编码器的信号就可以通过定时器被STM32读取。
可以把这个过程想象成一条高速公路,车辆的运动就像编码器的信号。车上的传感器(即编码器)通过监测车轮的转动(A相和B相信号)来确定位置,而STM32微控制器则是交通指挥中心,实时接收并处理这些信息。
3. 工作逻辑
3.1 输入部分
输入部分主要负责接收编码器信号。正交编码器通常输出两个信号(A相和B相),它们之间有90度的相位差。这样,STM32可以通过这两个信号判断旋转的方向和位置。
3.2 输出部分
输出部分将编码器的状态反馈给主控系统,通常是通过定时器的计数器值来实现。比如,可以读取当前计数值,得出旋转角度,并进一步控制电机的运动。
想象你在骑自行车,A相和B相信号就像你脚踏板的转动。每转动一次,你的车轮就会前进一定的距离(输出位置)。同时,你的身体会感知到车轮的转动(输出反馈),这样你就能调整踏板的速度,保持骑行的平稳。
4. 三种工作模式
STM32的编码器接口支持三种工作模式:
4.1 计数模式
在这个模式下,STM32会持续计数输入的A相信号脉冲。每次检测到脉冲,计数器就会加一。这种模式适合于需要精确位置跟踪的场合。
// 初始化定时器
void TIM_Encoder_Init(void) {// 选择定时器和通道TIMx->SMCR |= TIM_SMCR_SMS_2; // 设置为编码器模式TIMx->CCMR1 |= TIM_CCMR1_CC1S_0; // A相选择TIMx->CCMR1 |= TIM_CCMR1_CC2S_0; // B相选择TIMx->CR1 |= TIM_CR1_CEN; // 启动定时器
}// 获取计数值
uint32_t Get_Position(void) {return TIM_GetCounter(TIMx); // 获取编码器计数值
}
4.2 方向模式
该模式可以根据A相和B相的相位关系来判断旋转的方向。如果A相先于B相变化,表示顺时针旋转;反之则为逆时针旋转。这有助于系统对旋转方向做出反应。
// 判断旋转方向
void Check_Direction(void) {static uint32_t last_position = 0;uint32_t current_position = TIM_GetCounter(TIMx);if (current_position > last_position) {// 顺时针旋转} else {// 逆时针旋转}last_position = current_position; // 更新位置
}
4.3 增量模式
增量模式结合了计数和方向模式,能够同时提供旋转的增量信息。这种模式特别适合于动态系统中,例如机器人手臂的控制。
// 判断旋转方向
void Check_Direction(void) {static uint32_t last_position = 0;uint32_t current_position = TIM_GetCounter(TIMx);if (current_position > last_position) {// 顺时针旋转} else {// 逆时针旋转}last_position = current_position; // 更新位置
}
可以将三种模式想象成不同的行驶方式:
- 计数模式:就像在马路上计算过了多少个红绿灯(每个脉冲)。
- 方向模式:就像你骑车时判断前方是左转还是右转(顺时针或逆时针)。
- 增量模式:就像实时调整骑行的速度和方向,确保始终沿着理想的路径行驶。
5. 抗噪声原理
在实际应用中,编码器的信号可能会受到外部噪声的干扰,这可能导致错误的计数和判断。STM32通过以下几种方法来增强抗噪声能力:
5.1 滤波器
在硬件上,可以使用低通滤波器来滤除高频噪声,只保留编码器的有效信号。这就像在嘈杂的环境中听到朋友的声音,低通滤波器会帮助你过滤掉其他噪声,专注于重要信息。
5.2 软件去抖动
在软件中,可以实现去抖动算法。当检测到信号变化时,可以等待短暂的时间再确认状态,确保信号的可靠性。这就像在确认朋友发来的信息时,稍等片刻再回复,以确保信息准确。
5.3 实际应用中的常见噪声问题
在工业环境或高频干扰较强的环境下,编码器的信号抖动可能非常明显。例如,在高频电机或焊接设备附近使用编码器时,信号噪声会显著增加,容易造成计数器频繁跳变、方向误判等问题。针对这种情况,除去滤波器和去抖动外,还可以使用以下两种方法:
-
硬件隔离措施:可以通过使用屏蔽线缆或光电隔离器来减少电磁干扰对编码器信号的影响。使用屏蔽线缆能够有效屏蔽外界噪声,保证信号的传输质量。
-
软件多次采样确认:在软件中加入信号多次采样确认机制,即在每次读取编码器信号时,不仅依赖单次采样结果,而是对信号进行多次采样,只有当多次读取的信号一致时才认为有效。这种方法可以减少偶发的噪声引起的错误计数。
举个实际例子,如果你在机器人项目中使用编码器来检测机械臂的位置,由于机械臂周围有较多的电磁干扰源,信号的稳定性可能会受到影响。通过使用多次采样技术,你可以减少偶发错误,提高系统的可靠性。
6. 总结
STM32编码器接口为精确的旋转位置和速度控制提供了强大的支持。通过合理的电路连接、清晰的工作逻辑、适当的工作模式和抗噪声措施,可以方便地实现对编码器的读取和控制。就像骑自行车时,通过感知和调整,你可以顺畅地到达目的地,编码器同样为自动化系统的精确运行提供了保障。在您的项目中,编码器信号的噪声问题是如何处理的?您会采用何种硬件或软件技术来进一步优化
相关文章:

STM32编码器接口解析及抗噪声措施探讨
1. 引言 在现代控制系统中,编码器扮演着非常重要的角色。它就像一个精密的测量工具,可以告诉我们机械部件的位置和运动状态。在STM32微控制器中,编码器接口可以轻松地与各种编码器连接,实现精确的控制。我将在这里探讨STM32编码器…...

微软发布Windows 11 2024更新,新型Copilot+ AI PC功能亮相
前言 微软在Windows 11的2024更新中加强了对人工智能的应用,推出了新功能Copilot。 此次更新的版本号为26100.1742,Copilot将首先在Windows Insider中推出,计划于11月向特定设备和市场推广,用户需开启“尽快获取最新更新”选项以…...
鹏哥C语言68-70---位操作符+单目操作符+关系操作符
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <time.h> //--------------------------------------------------------------------------------------------------------4.位操作符 // &----按(2进制…...

showdoc二次开发
showdoc用的vue版本老,需要安装老版本nodejs,比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…...

力扣16~20题
题16(中等): 思路: 双指针法,和15题差不多,就是要排除了,如果total<target则排除了更小的(left右移),如果total>target则排除了更大的(rig…...

Pikachu-Sql-Inject -基于boolian的盲注
基于boolean的盲注: 1、没有报错信息显示; 2、不管是正确的输入,还是错误的输入,都只显示两种情况,true or false; 3、在正确的输入下,输入and 1 1/and 1 2发现可以判断; 布尔盲注常用函数&…...
最后30天,你的系统集成项目管理工程师备考进度到哪儿了?
十一长假归来好! 此次归来之后,2024年下半年软考倒计时就从4字头切换到了3字头,今天距离考试还有32天! 那么问题来了,临近考试还有30天左右的时候,你的备考进度到哪里了呢? 其实无论目前你的实际…...
网络安全事件的发生,主要原因是什么
网络安全事件的发生,主要原因涉及多个方面,包括技术漏洞、人为因素、经济利益驱动、恶意软件和病毒威胁、社会工程学攻击、内部人员恶意行为、供应链安全问题以及法律法规的不完善等。以下是对这些原因的详细分析: 技术漏洞: 软件…...

【leetcode】274.H指数
为了方便,将 citations 记为 cs。 所谓的 h 指数是指一个具体的数值,该数值为“最大”的满足「至少发表了 x 篇论文,且每篇论文至少被引用 x 次」定义的合法数,重点是“最大”。 用题面的实例 1 来举个 🌰࿰…...

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)
一、字面量 1、基本介绍 在代码中,被写直接下来的、不需要通过变量存储的值,称之为字面量 2、常用值类型 类型说明数字(Number)整数(int),例如:10、-10浮点数(float&…...
【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)
梯度消失(Vanishing Gradient) 和梯度爆炸(Exploding Gradient) 是神经网络训练中的常见问题,特别是在深层神经网络(DNN)或递归神经网络(RNN)中。这两者主要与反向传播算…...
在 ArkTS 网络请求中,重新封装一下 http 模块
在ArkTS中,重新封装http模块可以提供一个更简洁、更易于使用的API,同时隐藏底层细节,使开发者能够更专注于业务逻辑。以下是一个简单的示例,展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块: // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁
不過受到 Recall 事件的影響,更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面,並增加了一些新的功能,像是 Copilot Voice 能讓你與 AI 助手進行對話式…...

系统架构设计师-论文题(2021年下半年)
1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序,通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)
selenium的webdriver介绍 从selenium导入webdriver模块,在pycharm中跳转webdriver模块的__init__.py文件,内容如图所示:从selenium包的子目录中导入了很多模块并做了重命名,用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…...

73.【C语言】C/C++的内存区域划分
目录 1.内存里的几个区域 2.示意图 3.解释 1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射的含义: 如果看过李忠…...

k8s 中存储之 hostPath 卷
目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化,它会随着Pod的结束而销…...

Cherno游戏引擎笔记(73~90)
------- scene viewport ---------- 》》》》做了两件事:设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算,而 ImVec2 没有这个运算符的定义,只有 glm::vec2 有这个运算…...

helm 测试卸载或删除(redis)
作者:程序那点事儿 日期:2024/02/07 18:30 查看redis 集群实例 kubectl get all -n redis 卸载集群实例 helm uninstall redis -n redis 删除pvc kubectl get pvc -n redis kubectl delete pvc redis-data-redis-master-0 redis-data-redis-replicas…...

关于Qt音乐播放器进度条拖拽无用的问题解决方案
在使用Qt编写音乐播放器的时候,进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候,可能会报错如下: 然后音乐就卡着不动了。。。 connect(ui->volume_toolButton,&VolumeToolBtn::…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...