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

旋转编码器原理与应用详解:从结构到实战 | 零基础入门STM32第四十七步

主题内容教学目的/扩展视频
旋转编码器电路原理,跳线设置,结构分析。驱动程序与调用。熟悉电路和驱动程序。

师从洋桃电子,杜洋老师


📑文章目录

    • 一、旋转编码器是什么?
    • 二、内部结构揭秘
      • 2.1 机械组件解剖
      • 2.2 核心部件说明
    • 三、电路工作原理
      • 3.1 信号生成机制
      • 3.2 硬件连接方案
    • 四、关键技术解析
      • 4.1 消抖处理
      • 4.2 方向识别算法
    • 五、典型应用场景
    • 六、开发板实战演示
    • 七、选型注意事项
    • 八、相关资源


(图1:开发板与旋转编码器连接示意图)
(图2:旋转编码器结构示意图)

一、旋转编码器是什么?

旋转编码器是一种通过机械旋转产生数字信号的传感器设备,核心功能包括:

  • 360°无限位旋转检测
  • 实时方向识别(左/右)
  • 按压触发功能
  • 高精度位置感知(20位格/圈)

▲ 🔍 旋转编码器介绍(中文)

二、内部结构揭秘

2.1 机械组件解剖

       ┌───────┐
       │ 轴体  │
       └───┬───┘
           │
┌──────────▼──────────┐
│  弹性接触片         │
│  ┌─◆─K1───────┐     │
│  │    ┌───◆─K2│     │
│  │    │ ┌─◆─K3│     │
└──┼────┼─┼─────┘
  公共端  A  B  (三个引脚)

2.2 核心部件说明

部件功能说明
K1按压开关(垂直方向触发)
K2/K3旋转检测开关(相位差90°)
弹片提供机械反馈和定位

三、电路工作原理

3.1 信号生成机制

旋转时K2/K3产生正交波形:

右旋时序:       左旋时序:
A相: _┌─┐_┌─┐     A相: ┌─┐_┌─┐_
B相: ┌─┐_┌─┐_     B相: _┌─┐_┌─┐

通过检测两个信号的相位差顺序判断旋转方向

3.2 硬件连接方案

        +3.3V
         ▲
         │10KΩ
ENCODER─┼─◆─→ PA6 (A相)
    │    │10KΩ
    ├───◆─→ PB2 (B相)
    │    │10KΩ
    └───◆─→ PA7 (按压)

四、关键技术解析

4.1 消抖处理

  • 机械抖动时间:≤2ms
  • 软件消抖方案:
    if(检测到电平变化){
        delay_ms(20);      // 超时等待抖动
        if(状态仍有效)确认动作
    }
    

4.2 方向识别算法

Created with Raphaël 2.3.0 检测A相变化 读取B相状态 B相==高电平? 标记为右旋 标记为左旋 yes no

五、典型应用场景

  1. 智能家居:空调温度调节旋钮
  2. 工业控制:数控机床参数设置
  3. 车载系统:多媒体音量控制
  4. 医疗设备:监护仪参数调整
  5. 物联网终端:智能中控面板

六、开发板实战演示

(图3:TM1640显示效果)

核心功能实现逻辑:

while(1){
  读取编码器状态();
  if(左旋转){
    计数器--;
    更新数码管显示();
  }
  if(右旋转){
    计数器++;
    更新数码管显示();
  }
  if(按压动作){
    计数器归零;
  }
}

▲ 完整工程代码示例⏬旋转编码器数码管显示程序

七、选型注意事项

参数推荐值
分辨率20脉冲/转
工作电压3.3V-5V DC
机械寿命>10万次旋转
按压力度200±50gf
工作温度-25℃~+85℃

八、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32F103xx官方数据手册
[3] STM32F103X8-B数据手册(中文)
[4] STM32F103固件函数库用户手册(中文)
[5] 旋转编码器数码管显示程序
[6] 旋转编码器介绍(中文)


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨旋转编码器驱动程序分析,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-03-05)

http://www.kler.cn/a/577533.html

相关文章:

  • 单链表基本操作的实现与解析(补充)
  • 笔记:在Git中.gitmodules文件的功能和作用和如何使用
  • 模型微调-基于LLaMA-Factory进行微调的一个简单案例
  • 纷享销客vs销售易:制造行业CRM选型深度解析
  • 《基于锂离子电池放电时间常数的自动化电量评估系统设计》k开题报告
  • 算法系列之广度优先搜索解决妖怪和尚过河问题
  • java调用c++
  • 深入剖析淘宝商品详情 API 接口 item_get
  • 【机器学习案列】基于随机森林的运动能量消耗预测分析实战
  • 【网络协议详解】——isis技术(学习笔记)
  • 2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题2)-网络部分解析-附详细代码
  • Qt的QDateTimeEdit控件的使用
  • 【SpringMVC】SpringMVC的启动过程与原理分析:从源码到实战
  • 模型微调——模型性能提升方法及注意事项(自用)
  • TK协议强私——TK采集器
  • 躲藏博弈:概率论与博弈论视角下的最优策略选择
  • 【Find My功能科普】防盗黑科技如何改变生活?
  • 在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD
  • 大白话如何利用 CSS 实现一个三角形?原理是什么?
  • DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)