找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2134|回复: 1

【单片机】編碼器擷取信號 for Arduino

[复制链接]
发表于 2018-11-2 15:54:55 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
本帖最后由 真夜 于 2018-11-7 10:27 编辑

這是一個編碼器的控制代碼
用於 Arduino UNO 讀取控制~附帶LED圓環!
本代碼算是絕大部分原創,因為代碼嘛~參考一下然修修改改是正常的!
參考的是本電路板的原始範例代碼,所以也不知道誰寫的!
不過可以肯定的是........
這人寫的代碼BUG超多,偵測非常不準確,反應極端遲緩還會當掉!
Arduino 能寫到會當掉真心覺的不容易!
而參考他的範例的我也算是倒了血霉了!



10325_2.jpg
原始的電路板我是用了 sparkfun 的 RGB RingCoder 這塊板子!
板上合併了 編碼器 + 環形LED + 2顆8位元的位移暫存器。
(但不推薦用這個板啊,因為太貴了。)



21306224984999_137_m.jpg
上圖是我用的編碼器,這編碼器自帶RGB燈號。
這顆編碼器很有趣,它中央的旋柱是透明的可以發出RGB三色光!
如果對上PWM控制的話可以256*256*256階的三色漸層混色功能,著實很有趣。
單單這一顆編碼器的話淘寶上有在賣。
只要查詢「RGB 編碼器」就有了。



ENCODER原理圖.jpg
上圖這是編碼器的動作原理,這是我借來的圖片,因為這張圖看起來真的很好理解啊......
這圖上別標示著編碼器順時針跟逆時針旋轉的輸出狀態!
在看這張圖的時候我發現一個有趣的狀態,
當編碼器順時針轉動的時候A准位上升時會遇見B的准位是低位。
而當編碼器逆時針轉動的時候後A准位上升時則會遇見B准位也會是高位。
所以我想到一個簡單的方法,如果我將A拿來誘發中斷
而中斷誘發的時候去讀取B的准位那麼是不是就可以知道編碼氣勢順時針還是逆時針轉動呢?



但是剛寫完的時候,我發現它的B准位擷取是在亂跳的!
有的時候高准位有的時候低准位,甚至跳出255 或 -255!
後來我修改了一下電路並在代碼中做了一些限制。
就出來了非常完美的擷取,幾乎沒有任何錯誤!


encoder_filter.png


上圖是我將電路修改過的電路圖,
原始的電路2號就直接是接地,1 3號直接銜接到Arduino輸入上。



有什麼誤漏的地方請指教囉!

放在bilibili的展示連結

放在youtube的展示連結


以下是代碼附件,用 Arduino 編輯器 + visual studio + Arduino IDE for Visual Studio
ReadingRotaryEncoders_01.rar (2.53 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2018-11-2 17:53:06 | 显示全部楼层
支持真夜大佬!!话说今天大家都在研究硬件么,站长发了一个帖子,真夜大佬又发一个关于硬件的,看来小弟想和大家交流顺利还要补一些硬件知识啊....
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 17:26 , Processed in 0.029393 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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