EC11、EC16、ECxx旋转编码器按钮软件滤波程序滤除干扰杂波51单片机C程序
前些日子在网上买了一些旋转编码器按钮,被奸商坑了,输出的正交脉冲,在发生边沿跳变的时候会产生干扰毛刺,毛刺通过硬件RC滤波能改善一些波形,但是还是会有杂波干扰程序。
正常正转波形如下图所示:
干扰正转波形如下图所示:
干扰反转波形如下图所示:
旋转编码器的原理,这里不做介绍了,由于之前使用的是1ms轮询查询IO口状态判别旋转方向,正常的正交脉冲式可以的,但是质量差一些的编码器旋转的时候有干扰,轮旋检测的方法会产生误动作,所以这里主要讨论滤波方法,滤出掉干扰。
由上图可知,干扰总是出现在脉冲信号边沿发生跳转时,而脉冲宽度一般都在1ms以上,所以可以认为,当检测到到脉冲发生跳变的时候,1ms之内不检测脉冲就可以了,通过上面的原理分析,程序可以这样设计,通过使用一个外部中断+定时器实现正交脉冲的滤波。用外部中断检测脉冲的下降沿,检测到下降沿后,关闭外部中断,判断当前旋转方向,打开定时器中断定时1ms,定时时间到了之后,关闭定时器中断,打开外部中断,开始接受下一个脉冲。通过测试之前不能用的渣编码器也可以正常使用了,嘎嘎嘎。
下面附上滤波程序仅供参考。
IT0 = 1; //使能INT0下降沿中断EX0 = 1; //使能INT0中断EA = 1;TMOD = 0x00;TL0 = 0x66; //22.1184MTH0 = 0xfc;TL0 = 0xCD; //设置定时初值TH0 = 0xF8; //设置定时初值TR0 = 0; //启动定时器ET0 = 1; //使能定时器中断
void TM0_Isr() interrupt 1
{EX0 = 1; //使能INT0中断TR0 = 0;
}
void INT0_Isr() interrupt 0
{TR0 = 1; EX0 = 0; enCoderValue = 0x80;if(EC11_B_Now ==1)// 只需要采集A的上升沿或下降沿的任意一个状态,若A下降沿时B为1,正转 {enCoderValue |= 0x01;} else //反转{}}
EC11、EC16、ECxx旋转编码器按钮软件滤波程序滤除干扰杂波51单片机C程序相关推荐
- 滑动平均滤波c语言_11种经典软件滤波算法及其波形效果图(附C语言程序)
(后页附带C语言程序) 注意注意注意:(图像中红线都是经过滤波的)1.限幅滤波法(又称程序判断滤波法) A.方法: 根据经验判断,确定两次采样允许的最大偏差值(设为 A) 每次检测到新值时判断: 如果 ...
- PCF8591 ---AD\DA转换器的使用(IIC通信的软件模拟与应用) (by 51单片机)
依旧是借着蓝桥杯的机会,来学习一些模块,和软件模拟一些通信方式. 今天学习的模块是PCF8591,一款AD\DA转换器,使用IIC通信方式. 芯片的内部框图如下所示: 各引脚作用如下表所示: 仍旧和之 ...
- 旋转编码器:如何在 Arduino 上使用 Keys KY-040 编码器
旋转编码器是一种输入设备,您可以在任一方向连续旋转.当您转动设备时,它会生成数字脉冲,以使用两个相控输出信号显示旋转方向.这两个输出还指示单个位置运动,因此您可以在控制面板中使用它们来增加或减少参数. ...
- EC11旋转编码器电路和程序
现在手里的项目使用到了旋转编码器,目前只使用了旋转功能,按钮功能没用到,电路图如下: 说一下为什么这么画,原因很简单,旋钮并不需要供电,它做的工作是把原来的高电平拉低,或者不改变高电平状态,这就是为什 ...
- 【STM32F4系列】【HAL库】旋转编码器(EC11)
目录 概述 电气连接 波形分析 思路 HAL初始化 代码 成品 概述 EC11是一种增量型AB相旋转编码器 旋转编码器是一种可以无限旋转的旋钮,常被作为各种需要大量数据范围的情况(如收音机选台,音量选 ...
- ec11编码器c语言程序,EC11旋转编码器电路和程序
现在手里的项目使用到了旋转编码器,目前只使用了旋转功能,按钮功能没用到,电路图如下: 说一下为什么这么画,原因很简单,旋钮并不需要供电,它做的工作是把原来的高电平拉低,或者不改变高电平状态,这就是为什 ...
- [模块]EC11旋转编码器
功能说明 编码器有什么用 配合UI设计 点击选择 长按退出 正反转加减 特点:采用增量编码器可以规避信号抖动引起的误差: 引脚说明 信号输出 A B 信号的差分输出,转到一个卡点,信号转动一个周期: ...
- 认识EC11旋转编码器编写驱动程序
前言 抛开工作,以电子爱好者的身份,单片机玩多了都会想着在单片机的外围设备玩出一些花样来. 这其中首先想到的就是"升级"输入输出设备. 这里先说一说我们常给单片机使用的输入设备. ...
- linux4.6 EC11旋转编码器的驱动
最近项目使用了旋转编码器EC11,遍查内核,发现并没有它的驱动,查了查CSDN,终于找到一篇有用的.根据自己的需要和对最基础的gpio_key.c的理解,我改写出了一份EC11的专用驱动. 感谢下面博 ...
最新文章
- Android 判断网络状态
- SpringBoot复习:5(配置绑定)
- python 列表、字典转json字符串
- C#中方法的参数四种类型(值参数、ref、out、params)详解
- [翻译] GoogleMaterialDesignIcons
- 【Python】windows电脑 python3.6安装lxml库
- JAVA中BigDecimal的字符化输出
- 初学者必学教程——JQuery的简介
- MySQL中视图的使用及多表LEFT JOIN的技巧分享
- 20200528每日一句
- 大数据应用案例---用户画像与精准营销
- 怎么将PDF文件在线转换成JPG图片
- 【积】有向图中的louvain社区检测(二)
- 动态人脸检测(脸数可调)
- 针对LSB 信息隐藏的卡方分析算法实现
- 线性代数05 齐次/非齐次线性方程组的具体解集
- win7 linux三系统,苹果电脑装windows7,Linux,mac os三系统,不需要BootBoot | MOS86
- 07组第二次作业 深度学习和pytorch基础
- Android 录制手机内部声音(screen recorder)framework层问题分析
- shiro-反序列化漏洞
热门文章
- ubuntu下Chrome安装支付宝控件
- 在Ubuntu\Centos等Linux环境安装支付宝控件
- 我在LED显示屏行业,想觅有能力者开发一套系统
- 离散数学当,仅当,当且仅当
- java计算机毕业设计酷美二手车管理系统源代码+数据库+系统+lw文档
- python 音频处理软件_Python pydub音频处理
- 谈谈与Elasticsearch创始人Shay Banon面对面交流后的意外收获
- 《完美世界国际版》内测消息
- matlab求两方程交点坐标,matlab求交点坐标
- 女神节特辑 | 致敬程序媛,她们的人生究竟有多精彩?