找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机如何能高效读取编码器的AB相信号

查看数: 5986 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-6-4 22:37

正文摘要:

本帖最后由 mxlslf 于 2021-6-4 22:40 编辑 情况说明:在做单片读取编码器的AB相信号时,选用ATMEGA328P单片机,把A相信号接到单片机INT0外部中断上,B相接到另一个引脚上。识别到A相发生中断时计数器加1计数,并 ...

回复

ID:47286 发表于 2021-6-8 10:54
mxlslf 发表于 2021-6-8 09:02
我借鉴了网上别人写的文档,这样改进:用双D触发器74HC74读取A,B两相,OUT1如果有输出脉冲说明是正转,OU ...

如果在主循环里判断次数和方向 除非你用一个片子专门去扫编码器 否则 主循环时间不一定 有可能错过 所以中断是相对最可靠的 但中断里不适于做防抖 即便是计时器防抖或者变量累加防抖 都有可能在第二个脉冲过来的时候冲突 如果处理冲突 又可能造成中断内程序太多 那么理想的状态就是中断中得到的是确定脉冲 所以我认为编码器的消抖用硬件消抖 单片机中断计数 可以在中断函数里用两个标记分别对比以确定方向

硬件消抖实际上也有点缺点 要么容错低 要么体积大 要么成本高 硬件消抖简单的就是用个0.1uf电容 这方法是假定抖动会在十几毫秒内 随使用编码器那东西会越来越接触不良 到后期误判很多 另一种是用门电路做消抖 我没试过 但至少布线上要多一大坨东西 还有就是专门的消抖片子 有专门干这个的芯片 但那东西好贵啊 感觉很不值得

至于最终怎么弄 我认为主要是看速率 就是编码器拧多快 如果1s拧一下 那无所谓什么方法了 最便宜最简单的都不是问题 如果特别快 或者脉冲特别多的编码器 讲真 我觉得只能用专门的芯片 好象叫什么增量触发之类的 专用芯片 也特别贵 当时就是看见价格直接就忽略了
ID:450849 发表于 2021-6-8 10:07
ID:883242 发表于 2021-6-5 20:02
select microcontroller with quadrature encoder interface .
ID:752974 发表于 2021-6-5 08:29
你的这种做法,像你说的中断计数影响程序工作,B信号判向也很难。简单的方法是AB信号经D触发器判向,判向后的信号给单片机,A或B给T计数,这样做,单片机负担轻,不影响其他程序。
ID:213173 发表于 2021-6-5 08:28
只要主函数周期够短,可以不用外部中断,改用查询方式。编码器的AB信号随便用2个IO口。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表