首页 > 其他分享 >优雅的对旋转编码器消抖(EC11,正交)

优雅的对旋转编码器消抖(EC11,正交)

时间:2023-08-28 11:44:16浏览次数:45  
标签:编码器 EC11 消抖 flag Aio alv CW dir

环境:STM32

SDK: Arduino (烧录了Arduino的bootloader)

旋转编码器:EC11

此处只处理正交编码器的A,B。

在网上随意找的一个截图事宜,观看此图后,默认各位了解EC11的工作逻辑。

 

 

消抖的核心思路:

A脚设置为上升下降沿均会进中断,下降上升一个变换周期,判断这个周期的A脚,B脚的始末状态,来判断正反转一次。

优点:只需要一个管脚的外部触发,另一脚单纯获取电平状态即可。

以下为提供中断触发内容

 1 #define Aio PA3
 2 #define Bio PA4
 3 int flag = 0;  //标志位
 4 boolean CW_1 = 0;
 5 boolean CW_2 = 0;
 6 void Aio_inter() {
 7   // 只要处理一个脚的外部中断--上升沿&下降沿
 8   int alv = digitalRead(Aio);
 9   int blv = digitalRead(Bio);
10   if (flag == 0 && alv == LOW) {
11     CW_1 = blv;
12     flag = 1;
13   }
14   if (flag && alv) {
15     CW_2 = !blv;  //取反是因为 alv,blv必然异步,一高一低。
16     if (CW_1 && CW_2) {
17       dir++;
18     }
19     if (CW_1 == false && CW_2 == false) {
20       dir--;
21     }
22     flag = 0;
23   }
24 }
25 void setup(){
26   Serial.begin(115200);
27   pinMode(Aio, INPUT);
28   pinMode(Bio, INPUT);
29 //只要消耗一个外部中断资源
30   attachInterrupt(Aio, Aio_inter, CHANGE);
31 }
32 //变量dir在中断里处理,loop中随时调用
33 void loop(){
34   Serial.printf("dir : %d",dir);
35   delay(1000); 
36 }
37 // 觉得满意麻烦点个赞呗

以上及时完好的消除了跳帧的效果,还是要建议给AB脚各加上1颗103电容最好,避免频繁进入中断消耗资源。

筋膜枪上使用到的旋钮,非常适用。我们开发筋膜枪 都是用这种做法。

 

标签:编码器,EC11,消抖,flag,Aio,alv,CW,dir
From: https://www.cnblogs.com/fdd-lte/p/17661907.html

相关文章

  • 定时器之编码器接口
    实现对正交(相位相差90°)编码器自动计次 这个编码器接口。其实就相当于是一个带有方向控制的外部时钟它同时控制着CNT的计数时钟和计数方向每隔一段事件计数并清零,就可以得到其速度正交信号精度高,可以抗噪声(一个引脚不变,另外引脚毛刺的话,计数的值会+1-1循环,而保持不变) ......
  • 多摩川编码器协议理解与自做经历-(1)
    多摩川协议理解-(1)多摩川编码器有绝对值的和增量的两种,这边主要是我对多摩川绝对值的理解。前文,多摩川编码器其实是日本有一家公司叫多摩川的公司做出来的,其实他们家有很多种编码器,但是这里我只对他的们出的协议作出理解。 硬件接口方面,因为有单圈和多圈只分,多圈一般有电池,所......
  • 龙邱512正交编码器
    基本概念龙邱的512线正交编码器,工作电压在3.3v-5v。我们只需要关注该款编码器的LSB及DIR引脚。LSP:该引脚在编码器转动时,会输出步进脉冲,在不同的转速下,步进脉冲的数量是不同的。所以我们可以设置一个定时器,把定时器的时钟输入通道改为外部引脚输入,这样我们就可以把单片机时钟......
  • EC11编码器消抖
    前言之前在网上看到一篇文章优雅的对旋转编码器消抖(EC11,正交)-知乎(zhihu.com)感觉大佬用的方法挺不错的,这里在STM32上使用一下看下效果。消抖原理消抖的核心思路:A脚设置为上升下降沿均会进中断,下降上升一个变换周期,判断这个周期的A脚,B脚的始末状态,来判断正反转一次。......
  • FPGA按键消抖
    简介按键按键是输入设备,一般来说,按键在没有按下的时候是高电平;当按键按下的时候,为低电平。在DE2-70UserManual中Eachswitchprovidesahighlogiclevel(3.3volts)whenitisnotpressed,andprovidesalowlogiclevel(0volts)whendepressed.Sincethepush......
  • 按键消抖电路如何实现?
    请设计一个按键消抖电路?按键消抖:按键消抖_百度百科(baidu.com)modulekey_debounce(inputsys_clk,//20nsinputsys_rst_n,inputkey,//outputregkey_flag,//正点原子中将表示信号作为一路输出信号使......
  • Auto Encoder(自编码器)
    AutoEncoder(自编码器)SelfSupervisedLearning(自监督学习):用没有标注的资料训练模型,发明不需要标注资料上的任务,例如:做填空题、预测下一个token(符号);在BERT和GPT之前,有一种方法就是AutoEncoderAutoEncoder(自编码器):也是一种用没有标注的资料训练的模型AutoEncoder运作方式:......
  • 【雕爷学编程】Arduino动手做(40)---KY-040旋转编码器模块2
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • 240-960MHz带编码器的单片OOK 发射器CMT2157B
    CMT2157B是一款真正意义上的单芯片、高灵活性、超低功耗、带编码器的OOK射频发射芯片,非常适合于240至960MHz的无线应用场合。该芯片可实现完全兼容市面上最常用的527、1527、2262和2240等编码格式。此外,还支持用户各种自定义编码。该芯片支持4个独立按键或多达10个扫描按......
  • 多通道cPCI接口值编码器信号采集
    可同时实现与4路 ENDAT2.2值码盘数据通讯,读取25位或29位等精度的码盘位置信息。l  支持ENDAT2.2标准l  通讯距离达30米以上l  支持PCI和CPCI接口l  双V68接口l  支持常用25位或29位码盘及其它标准ENDAT2.2码盘l  支持由板卡向码盘供电l  支持定制化修改FPGA......