当前位置: 首页 > news >正文

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 实际应用中的常见噪声问题

在工业环境或高频干扰较强的环境下,编码器的信号抖动可能非常明显。例如,在高频电机或焊接设备附近使用编码器时,信号噪声会显著增加,容易造成计数器频繁跳变、方向误判等问题。针对这种情况,除去滤波器和去抖动外,还可以使用以下两种方法:

  1. 硬件隔离措施:可以通过使用屏蔽线缆或光电隔离器来减少电磁干扰对编码器信号的影响。使用屏蔽线缆能够有效屏蔽外界噪声,保证信号的传输质量。

  2. 软件多次采样确认:在软件中加入信号多次采样确认机制,即在每次读取编码器信号时,不仅依赖单次采样结果,而是对信号进行多次采样,只有当多次读取的信号一致时才认为有效。这种方法可以减少偶发的噪声引起的错误计数。

举个实际例子,如果你在机器人项目中使用编码器来检测机械臂的位置,由于机械臂周围有较多的电磁干扰源,信号的稳定性可能会受到影响。通过使用多次采样技术,你可以减少偶发错误,提高系统的可靠性。

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.位操作符 // &----按&#xff08;2进制…...

showdoc二次开发

showdoc用的vue版本老&#xff0c;需要安装老版本nodejs&#xff0c;比如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&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 双指针法&#xff0c;和15题差不多&#xff0c;就是要排除了&#xff0c;如果total<target则排除了更小的&#xff08;left右移&#xff09;&#xff0c;如果total>target则排除了更大的&#xff08;rig…...

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示&#xff1b; 2、不管是正确的输入&#xff0c;还是错误的输入&#xff0c;都只显示两种情况&#xff0c;true or false&#xff1b; 3、在正确的输入下&#xff0c;输入and 1 1/and 1 2发现可以判断&#xff1b; 布尔盲注常用函数&…...

最后30天,你的系统集成项目管理工程师备考进度到哪儿了?

十一长假归来好&#xff01; 此次归来之后&#xff0c;2024年下半年软考倒计时就从4字头切换到了3字头&#xff0c;今天距离考试还有32天&#xff01; 那么问题来了&#xff0c;临近考试还有30天左右的时候&#xff0c;你的备考进度到哪里了呢&#xff1f; 其实无论目前你的实际…...

网络安全事件的发生,主要原因是什么

网络安全事件的发生&#xff0c;主要原因涉及多个方面&#xff0c;包括技术漏洞、人为因素、经济利益驱动、恶意软件和病毒威胁、社会工程学攻击、内部人员恶意行为、供应链安全问题以及法律法规的不完善等。以下是对这些原因的详细分析&#xff1a; 技术漏洞&#xff1a; 软件…...

【leetcode】274.H指数

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

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)

一、字面量 1、基本介绍 在代码中&#xff0c;被写直接下来的、不需要通过变量存储的值&#xff0c;称之为字面量 2、常用值类型 类型说明数字&#xff08;Number&#xff09;整数&#xff08;int&#xff09;&#xff0c;例如&#xff1a;10、-10浮点数&#xff08;float&…...

【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)

梯度消失&#xff08;Vanishing Gradient&#xff09; 和梯度爆炸&#xff08;Exploding Gradient&#xff09; 是神经网络训练中的常见问题&#xff0c;特别是在深层神经网络&#xff08;DNN&#xff09;或递归神经网络&#xff08;RNN&#xff09;中。这两者主要与反向传播算…...

在 ArkTS 网络请求中,重新封装一下 http 模块

在ArkTS中&#xff0c;重新封装http模块可以提供一个更简洁、更易于使用的API&#xff0c;同时隐藏底层细节&#xff0c;使开发者能够更专注于业务逻辑。以下是一个简单的示例&#xff0c;展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块&#xff1a; // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

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

系统架构设计师-论文题(2021年下半年)

1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题&#xff0c;面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序&#xff0c;通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块&#xff0c;在pycharm中跳转webdriver模块的__init__.py文件&#xff0c;内容如图所示&#xff1a;从selenium包的子目录中导入了很多模块并做了重命名&#xff0c;用于支持如下 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中数据不会被持久化&#xff0c;它会随着Pod的结束而销…...

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事&#xff1a;设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算&#xff0c;而 ImVec2 没有这个运算符的定义&#xff0c;只有 glm::vec2 有这个运算…...

helm 测试卸载或删除(redis)

作者&#xff1a;程序那点事儿 日期&#xff1a;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编写音乐播放器的时候&#xff0c;进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候&#xff0c;可能会报错如下&#xff1a; 然后音乐就卡着不动了。。。 connect(ui->volume_toolButton,&VolumeToolBtn::…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...