42步進電機,基本的一步是1.8度,加上程式中的細分之後就更精準了,比如用64細分,一步就已經是1.8°/64=0.028125°.
而硬體上用的不鏽鋼碼盤是25齒的,如下圖,遮擋為0,不遮擋為1,一圈50個高低電平狀態。如果用雙光耦的話一圈有100個高低電平,解析度也就是360°/100=3.6°,這個精度在步進電機來說沒啥意義。
但是,如果因為一些外力干擾,步進電機丟步了,光耦就可以在此時發揮作用,將情況反饋給步進電機。
例如:步進電機到達目標位置後,被人為旋轉過,此時的位置與程式中標定的位置不一致了。光耦的內部,左邊是乙個發光二極體,右邊乙個光敏三極體。例如:安裝在裝置上,步進電機被機械限位,無法繼續執行了。
當發光二極體的光照到右邊的時候,就會給右邊光敏三極體的基極提供電流,從而三極體導通;否則三極體截止。
單個光耦的硬體電路如下,導通為0,不導通為1,左邊的電阻用於發光二極體的導通,右邊的電阻用於上拉。
1、光被擋上,在**中我把發光二極體的迴路斷開,此時三極體截止,電壓表就是接微控制器io的,檢測為5v,即為高電平。
2、發光二極體導通時,右邊光敏三極體也導通,也就是集電極和發射極就導通了,電壓表接的是集電極,電壓應該是ce的飽和壓降零點幾伏,所以為低電平,電壓電流如下圖所示。
就是上面的原理,把兩個槽型光耦串起來,接微控制器兩個io口。
兩個io口,能記下四種狀態,如下四張圖為順時針方向旋轉時我拍的,一看明了,擋住為1,不擋為0.
兩個io口記為s1、s2,微控制器讀取到的值依次為:00,01,11,10.
解釋都寫在注釋裡了,對著**看容易理解
//y軸光耦檢測,順時針s1 s2 —— 00 10 11 01
void
y_opto_check()
else
if(a&
0x01
)
opto_last = input;
}}
電機測速感測器槽型光耦模組的使用(stm32)
out 訊號輸出端,有遮擋,輸出高電平 無遮擋,輸出低電平 gnd 接地 vcc 接 3.3v 5v 用途 廣泛用於電機轉速檢測,脈衝計數,位置限位等。模組特色 1 使用進口槽型光耦感測器,槽寬度 10mm。2 有輸出狀態指示燈,輸出高電平燈滅,輸出低電平燈亮。3 有遮擋,輸出高電平 無遮擋,輸出低...