ESP32 读取编码器数字

关于ESP32系列芯片对旋转编码器硬件加速支持的概述。以下是针对您所提及的各款芯片的具体分析:

ESP32

  • 支持情况:ESP32支持旋转编码器的硬件加速功能,通过其内置的PCNT(Pulse Counter)模块实现。
  • 特点:ESP32的PCNT模块拥有8个可编程的计数器通道,每个通道都可以独立配置和管理,支持多种编码器模式,如全正交、半正交和单边计数模式。
  • 应用:适用于需要处理多个编码器信号的应用场景。

ESP32-C2

  • 支持情况:ESP32-C2同样支持旋转编码器的硬件加速功能。
  • 特点:虽然ESP32-C2在性能和功能上可能与ESP32有所不同,但它也集成了PCNT模块,支持旋转编码器的读取。
  • 应用:适合用于对成本敏感且需要简单无线连接功能的物联网设备,如无线控制器等。

ESP32-C3

  • 支持情况:ESP32-C3不支持旋转编码器的硬件加速功能,因为它没有PCNT模块。
  • 替代方案:如果需要使用旋转编码器,ESP32-C3可能需要依赖软件计数方法,这可能会增加CPU的负担并降低计数的精度和效率。
  • 应用:尽管不支持硬件加速的编码器读取,但ESP32-C3的低功耗和低成本特性使其在其他物联网应用场景中仍然具有吸引力。

ESP32-S3

  • 支持情况:ESP32-S3支持旋转编码器的硬件加速功能,但仅有两个PCNT模块。
  • 特点:这意味着ESP32-S3可以同时硬件加速两个编码器的读取,但无法支持更多数量的编码器。
  • 应用:适合需要处理少量编码器信号且对功耗和性能有要求的物联网设备。

总结

  • ESP32和ESP32-C2:支持旋转编码器的硬件加速功能,适用于需要处理多个编码器信号的应用场景。
  • ESP32-C3:不支持旋转编码器的硬件加速功能,可能需要依赖软件计数方法。
  • ESP32-S3:支持两个旋转编码器的硬件加速功能,适用于需要处理少量编码器信号的应用场景。

在选择芯片时,需要根据具体的应用需求来决定。如果需要处理多个编码器信号,ESP32或ESP32-C2可能是更好的选择;如果仅需要处理少量编码器信号且对功耗和成本有较高要求,ESP32-S3可能是一个不错的选择;而如果无法接受软件计数的精度和效率损失,则应避免选择ESP32-C3。

 

 

ESP32-C3:不支持旋转编码器的硬件加速功能,可能需要依赖软件计数方法。

 

#include <Arduino.h>// 定义编码器的A相和B相引脚
const int pinA = 2;
const int pinB = 4;// 变量用于存储上一个状态
volatile int lastA = HIGH;
volatile int lastB = HIGH;
volatile int encoderPos = 0; // 编码器位置// 中断服务函数
void readEncoder() {int newA = digitalRead(pinA);int newB = digitalRead(pinB);int encoded = (newA << 1) | newB; // 将A和B的状态组合成一个二进制值int sum = (lastA << 2) | encoded; // 将前一个状态和当前状态组合// 判断旋转方向if (sum == 0b1101 || sum == 0b0110 || sum == 0b1011 || sum == 0b0100) {int temp = encoderPos;temp += 1;encoderPos = temp; // 顺时针旋转Serial.println("顺时针旋转");} else if (sum == 0b1110 || sum == 0b0001 || sum == 0b1000 || sum == 0b0111) {int temp = encoderPos;temp -= 1;encoderPos = temp; // 逆时针旋转Serial.println("逆时针旋转");}lastA = newA; // 更新上一个A相状态lastB = newB; // 更新上一个B相状态
}void setup() {Serial.begin(115200);pinMode(pinA, INPUT_PULLUP); // 设置A相引脚为上拉输入pinMode(pinB, INPUT_PULLUP); // 设置B相引脚为上拉输入// 启用中断
    attachInterrupt(digitalPinToInterrupt(pinA), readEncoder, CHANGE);attachInterrupt(digitalPinToInterrupt(pinB), readEncoder, CHANGE);
}void loop() {// 在这里可以添加其他代码,例如处理编码器位置Serial.print("编码器位置: ");Serial.println(encoderPos);delay(100); // 延时,减少串口输出频率
}

 

支持旋转编码器的硬件加速功能

#include <ESP32Encoder.h> // https://github.com/madhephaestus/ESP32Encoder.git #define CLK 13 // CLK ENCODER 
#define DT 15 // DT ENCODER ESP32Encoder encoder;void setup () { encoder.attachHalfQuad ( DT, CLK );encoder.setCount ( 0 );Serial.begin ( 115200 );
}void loop () {    long newPosition = encoder.getCount() / 2;Serial.println(newPosition);
} 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kettle插件-git/svn版本管理插件

场景:大家都知道我们平时使用spoon客户端的时候时无法直接使用git的,给我们团队协作带来了一些小问题,需要我们本机单独安装git客户端进行手动上传trans或者job。 我们团队成员倪老师开发了一款kettle的git插件,帮我们解决了这个大难题,大大方便了我们团队协作,今天一起来…

自我介绍,软工五问

作业相关信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13325这个作业的目标 学习博客的使用自我介绍 我是软工2班的彭颂华…

HTTPS,TLS原理分析

简单介绍 Tansport Layer Security TLS 已经逐渐取代 SSL 可以简单理解:HTTPS = HTTP + SSL/TLS TLS运行在TCP之上,HTTP之下,传输层协议,负责HTTP内容的安全传输 TLS流程在TCP三次握手建立连接后开始 TLS协议结构wireshark中TLS主要分为两层,底层的是TLS记录协议,主要负责…

训练ai生成代码效果展示

训练ai生成代码效果展示 在本次实验中试图使用命令的形式来训练ai,达到成功获取需要的web开发页码的效果 起初 本来我打算让ai生成一个整体的项目,但是ai不可以直接生成一整块的项目,他也没办法把得到的结果以文件的形式传给你,得到的还是文本,第一实验的结果并不理想 以下是训…

公交线路(迪杰斯特拉)

这道题就是一道迪杰斯特拉的板子,没想到的是我想到了重载小于符号,没想到要定义优先队列 #include<iostream> #include<vector> #include<queue> #include<cstring> using namespace std; const int N=1000+5; struct node{int id,dis; }; vector<…

HDFS中数据目录的挂载在根目录下至磁盘爆满问题解决

1、查看hdfs-size.xml文件 获取数据目录位置vim /opt/hadoop/etc/hadoop/hdfs-site.xml<property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop-data/data-node-data,/home/hadoop-data/data-node-data-2,/data-3</value> </pro…

下载及安装

进入官网https://www.docker.com/ 直接在浏览器下载会比较慢,我习惯复制下载链接后到迅雷去下载,更快一些 双击安装后会有个选项是add....什么什么,意思是添加桌面快捷方式 后有个选项是退出并重启,这个重启是重启电脑(所以截图没有了),记得保存好自己的文档 问卷调查 …

修理牛棚

思路: 有的牛棚住牛,有的是空的,从反过来的思路来想,先用一块木板盖住所有有猪住的猪棚,减去空牛棚数,最终得到最多被木板挡住门的牛棚的数量。 代码展示: #include<bits/stdc++.h> using namespace std; const int N=210; int m,s,c;int a[N],b[N];int main() {c…

写了个 CasaOS/ZimaOS 内网穿透的远程访问插件(不是 frp 或者 nps),欢迎大家测试使用

插件正在提交,应该过几天就会进入市场了。 插件访问效果大概如下: casaOS 远程界面 如果大家想先行测试可以手动下载 pr 的文件进行测试。使用 插件会提供一个二维码,使用OpenIoThub 开源 APP扫码添加插件网关,然后在客户端上添加要访问的主机,然后在主机下面添加端口,然…

20241904 2024-2025-2 《网络攻防实践》第一周作业

​ 一、知识点梳理与总结 1、 实验介绍 1) VM操作系统的三种网络连接方式的适用情况 (1)桥接(Bridged)模式 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一…

从cURL到GraphQL:不同API类型概述

从cURL到GraphQL:不同API类型概述 API(应用程序编程接口)是现代软件开发的支柱,能够使不同的应用程序进行通信、共享数据并无缝执行任务。了解各种API类型及其实际应用可以为开发人员提供宝贵的见解。本文将探讨不同的API类型、它们的重要性,并通过实际示例说明它们的应用…

【H2O】--【HybrIK】关于RGB2SMPL算法工程HybrIK的安装记录

1. 前言 主要记录关于RGB2SMPL算法工程HybrIK的安装记录。 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。 如有不对之处,欢迎评论区指出错误,你我共同进步学习! 2. 正文 2.0 torch_tricks model.train()的作用是启用 Batch Normalization 和 Dropout。 m…