数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 6548|回复: 31

[Arduino] 自制旋转编码器,效果较好

[复制链接]
发表于 2020-2-11 09:59:51 | 显示全部楼层 |阅读模式
买了一堆旋转编码器,于是自己做一个模块
比买的便宜的多





还是用测试成品编码器模块的代码来测试
比买的模块的准确度好的多


数字非常连续,基本不重复,不跳跃

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 5家元 +100 收起 理由
有点不烧 + 20 謝謝分享
超级女生 + 20 謝謝分享
kkdkj + 20 謝謝分享
aacyxjz + 20
hfsp + 20 謝謝分享

查看全部打赏

发表于 2025-2-28 00:52:07 | 显示全部楼层
随心所欲的自制啊
回复 支持 反对

使用道具 举报

发表于 2021-4-14 20:20:19 | 显示全部楼层
质量差的用一段时间就丢步了。
回复 支持 反对

使用道具 举报

发表于 2021-4-9 08:18:51 | 显示全部楼层
inthsunshine 发表于 2021-4-8 09:35
如果通信过程不允许中断检测编码器,可以临时关闭编码器中断,结束后打开,或者只有允许使用编码器的时候 ...

那有的时候就会失去体验
回复 支持 反对

使用道具 举报

发表于 2021-4-8 09:35:16 | 显示全部楼层
水表君 发表于 2020-2-12 19:21
我用51自己写的一个函数检测编码器是真的不丢步,包括你说的拧到两格之间就往回拧也不会有问题,很顺畅, ...

如果通信过程不允许中断检测编码器,可以临时关闭编码器中断,结束后打开,或者只有允许使用编码器的时候才打开,比如进入设置界面
回复 支持 反对

使用道具 举报

发表于 2021-4-8 09:30:57 | 显示全部楼层
本帖最后由 inthsunshine 于 2021-4-8 09:32 编辑

编码器可以做到不丢步,输出最好加硬件去抖动,用中断或者查询都可以,但程序要仔细编,有时会有意外发生,需要软件特殊处理

我测试过,快速/慢速/极慢速,正转反转几十圈,最后回到原始位置,丝毫不差
回复 支持 反对

使用道具 举报

发表于 2021-4-8 05:39:19 来自手机浏览器 | 显示全部楼层
放在定时器里,1ms就可以了,判断ab,用两个bit保存ab的状态,在ab都=1时再识别左右,不要直接用ab引脚的电平来识别左右
回复 支持 反对

使用道具 举报

发表于 2020-2-14 20:29:20 | 显示全部楼层
水表君 发表于 2020-2-12 19:21
我用51自己写的一个函数检测编码器是真的不丢步,包括你说的拧到两格之间就往回拧也不会有问题,很顺畅, ...

也可以用这个办法,就是通过一个单独的mcu处理,然后发给主mcu
回复 支持 反对

使用道具 举报

发表于 2020-2-14 05:16:36 | 显示全部楼层
看来楼主跟我一样,平时没事败了不少乱七八糟的玩意,赶上这个时候,闲着也是闲着

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-2-13 08:51:40 来自手机浏览器 | 显示全部楼层
水表君 发表于 2020-2-12 19:21
我用51自己写的一个函数检测编码器是真的不丢步,包括你说的拧到两格之间就往回拧也不会有问题,很顺畅, ...

额,你把编码器程序放在时间定时器里啊,比如说100us,或者1ms,定时循环扫描,用状态机的办法读出编码器的状态,来判断,左右,只要你这个定时器中断永远在循环,它就永远不会读错,,
回复 支持 反对

使用道具 举报

发表于 2020-2-12 19:21:12 | 显示全部楼层
netbeetle 发表于 2020-2-12 13:53
要不丢,要自己仔细研究编码器的工作原理。用那些什么库啊,历程的,不丢才怪。真正好的代码都是人家吃饭 ...

我用51自己写的一个函数检测编码器是真的不丢步,包括你说的拧到两格之间就往回拧也不会有问题,很顺畅,没有任何问题,但是如果加到一个比较长比较大的程序里,扫描速度不够就会出现丢步检测不到现象。防止这种的办法就需要用中断,但是对于一些通讯协议来说,通讯的时候就不能用中断,就会出事。所以有的单片机集成硬件编码器接口。据说也不好用。最好的办法就是单独处理,然后串口通讯或者其他通讯方式给主控,但是成本就很高了
回复 支持 反对

使用道具 举报

发表于 2020-2-12 13:53:21 | 显示全部楼层
水表君 发表于 2020-2-12 13:37
我实际使用很多次,确实有不丢步的,丢步的情况也会发生,有的程序使用时候还经常发生,这个一个是软件一 ...

要不丢,要自己仔细研究编码器的工作原理。用那些什么库啊,历程的,不丢才怪。真正好的代码都是人家吃饭的玩意,是不会放出来的。
回复 支持 反对

使用道具 举报

发表于 2020-2-12 13:44:27 | 显示全部楼层
本帖最后由 fryefryefrye 于 2020-2-12 13:49 编辑
水表君 发表于 2020-2-12 13:39
编码器就是判断两个引脚的先后顺序达到左转右转的目的。
你那个编码器我没看出来,好像是红外传感器配合 ...

我自己做的也是这个原理啊。用了两个红外传感器并排放,传感器之间的间距比光栅大了一点。这样光栅每移动一格,一样产生两个先后顺序的脉冲。可以用来判断左右,也可判断格子数量,从而推算出当前位置。

但是我这个有个问题,移动光栅没有任何机械阻尼限制,会存在触发了一个脉冲之后反向运行了,这一个不成对的脉冲,我怎么处理呢?只能丢掉了。

成品的旋转编码器用机械的方法保证了每次必然跳一整格,所以必然会触发两次脉冲。如果有人手贱,非要拧到两格之间,就往回拧,照样有我说的问题。
回复 支持 反对

使用道具 举报

发表于 2020-2-12 13:39:28 | 显示全部楼层
fryefryefrye 发表于 2020-2-12 10:59
不是中断的问题。我就是用了两个中断来采集编码器的脉冲也会丢步。

编码器每跳一格,产生两个脉冲。然后 ...

编码器就是判断两个引脚的先后顺序达到左转右转的目的。
你那个编码器我没看出来,好像是红外传感器配合光栅,你是想实现左右移动判断么?
回复 支持 反对

使用道具 举报

发表于 2020-2-12 13:37:38 | 显示全部楼层
netbeetle 发表于 2020-2-11 21:56
代码处理好了,完全可以不丢

我实际使用很多次,确实有不丢步的,丢步的情况也会发生,有的程序使用时候还经常发生,这个一个是软件一个是硬件,好的数控使用的编码器一个就要几百
回复 支持 反对

使用道具 举报

发表于 2020-2-12 10:59:41 | 显示全部楼层
水表君 发表于 2020-2-11 13:04
软件处理,做到不丢步可以用定时器,可以用中断,但是有的程序对时序要求严苛时就不能开中断。所以有的单 ...

不是中断的问题。我就是用了两个中断来采集编码器的脉冲也会丢步。

编码器每跳一格,产生两个脉冲。然后比较这两个脉冲的前后顺序,来判断方向。是这样吗?

你看我12楼自己做的编码器,有时候两个脉冲才触发了一个,就换向运行了,来回多次之后,就会丢步。

我只好在终点位置放了个限位开关,每次归位之后,校正实际位置和软件位置的误差。

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-2-12 10:44:51 | 显示全部楼层
真的是每天一更啊

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-2-12 10:22:28 | 显示全部楼层
:victory:非常不错,动手能力强

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-2-12 08:18:12 | 显示全部楼层
是不是增加了消抖电容,还是这个器件质量好呢,为何有6个电阻呢?没有看明白

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2020-2-11 21:56:20 | 显示全部楼层
水表君 发表于 2020-2-11 12:19
发出代码看看啊。编码开关在大程序里,很难做到不丢步

代码处理好了,完全可以不丢

打赏

参与人数 1家元 +5 收起 理由
人艰不拆了 + 5

查看全部打赏

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-5 16:37 , Processed in 0.140401 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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