真夜 发表于 2018-11-2 15:54:55

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

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

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



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



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




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


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





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



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

放在bilibili的展示連結

放在youtube的展示連結


以下是代碼附件,用 Arduino 編輯器 + visual studio + Arduino IDE for Visual Studio

watermelon 发表于 2018-11-2 17:53:06

支持真夜大佬!!话说今天大家都在研究硬件么,站长发了一个帖子,真夜大佬又发一个关于硬件的,看来小弟想和大家交流顺利还要补一些硬件知识啊....
页: [1]
查看完整版本: 【单片机】編碼器擷取信號 for Arduino