完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
材料清单
arduino nano(其他型号也可以)、旋转编码器、arduino下载数据线、杜邦线若干。 主要原理 旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。 在本篇文章中,我们使用的特定旋转编码器是增量式旋转编码器,它是测量旋转的最简单的位置传感器。该旋转编码器也称为正交编码器或相对旋转编码器,其输出是一系列方波脉冲。(如下图) 前两个引脚(接地和Vcc)用于为编码器供电,通常使用+ 5V电源。除了以顺时针方向和逆时针方向旋转旋钮外,编码器还有一个开关(低电平有效)编码器的按钮在未按下时为高电平,按下时则为低电平,对SW引脚进行电平检测即可判断按钮是否按下。最后它有两个输出引脚,产生脉冲波形。 要详细了解编码器,我们先看看它的工作原理。以下是方波脉冲的产生方式:编码器有一个带有均匀间隔的接触区的磁盘,它们连接到公共引脚C和另外两个独立的接触引脚A和B,如下图所示。 当磁盘逐步开始旋转时,引脚A和B将开始与公共引脚接触,并相应地产生两个方波输出信号。 如果我们只计算信号的脉冲,则可以使用两个输出中的任何一个来确定旋转位置。但是,如果我们想要确定旋转方向,我们需要同时考虑两个信号。 我们可以注意到,两个输出信号相位彼此之间相差90度。如果编码器顺时针旋转,则输出A将在输出B之前;如果编码器逆时针旋转,则输出A将在输出B之后。 进一步地,A信号从高到低或从低到高变化的时刻,我们注意到如果编码器顺时针旋转,那么两个输出信号的值相反;如果编码器逆时针旋转,则输出信号具有相等的值。因此,我们可以轻松地对控制器进行编程以读取编码器的位置和旋转方向。 Let’s get started 电路连接 程序代码 * 电路连接: * GND-G * + --5V * SW-D3:按钮检测 * DT-D4:B信号序列 * CLK-D5:A信号序列 * 参考:https://blog.csdn.net/weixin_42268054/article/details/104415067 */ #define CLK 5 #define DT 4 #define SW 3 int counter = 0; int aState; int aLastState; int bState; int bLastState; int SWState; int SWLastState; void setup() { pinMode(CLK,INPUT); pinMode(DT,INPUT); pinMode(SW,INPUT_PULLUP); Serial.begin (9600); // Reads the initial state of the CLK aLastState = digitalRead(CLK); bLastState = digitalRead(DT); SWLastState = digitalRead(SW); } void loop() { SWState = digitalRead(SW); // 按钮输出状态 aState = digitalRead(CLK); // CLK的输出状态0/1 bState = digitalRead(DT); // DT的输出状态0/1 if (aState != aLastState){ //变化检测 delay(50);//消抖 if (aState != bState) { // 如果A!=B,则表示编码器正在顺时针旋转 counter ++; } else{ // 如果A=B,则表示编码器正在逆时针旋转 counter --; } Serial.print("num: "); Serial.println(counter); } if (SWState == 0 and SWLastState == 1){ delay(50);//消抖 Serial.println("num: 0"); counter = 0; while (digitalRead(SW) == 0);//等待按钮抬起 delay(200); } // Serial.print("nowSW: "); // Serial.println(SWState); aLastState = aState; SWLastState = SWState; } 程序运行效果 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 22:57 , Processed in 0.982650 second(s), Total 48, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号