- 物聯(lián)網(wǎng)百科
- 產(chǎn)品百科
- 元器件百科
- 方案百科
光電編碼器,是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。這是目前應(yīng)用最多的傳感器,光電編碼器是由光柵盤和光電檢測(cè)裝置組成。光柵盤是在一定直徑的圓板上等分地開通若干個(gè)長方形孔。由于光電碼盤與電動(dòng)機(jī)同軸,電動(dòng)機(jī)旋轉(zhuǎn)時(shí),光柵盤與電動(dòng)機(jī)同速旋轉(zhuǎn),經(jīng)發(fā)光二極管等電子元件組成的檢測(cè)裝置檢測(cè)輸出若干脈沖信號(hào),通過計(jì)算每秒光電編碼器輸出脈沖的個(gè)數(shù)就能反映當(dāng)前電動(dòng)機(jī)的轉(zhuǎn)速。此外,為判斷旋轉(zhuǎn)方向,碼盤還可提供相位相差90o的兩路脈沖信號(hào)。
光電編碼器簡(jiǎn)介
光電編碼器(Optical Encoder)俗稱“單鍵飛梭”,其外觀好像一個(gè)電位器,因其外部有一個(gè)可以左右旋轉(zhuǎn)同時(shí)又可按下的旋鈕,很多設(shè)備(如顯示器、示波器等)用它作為人機(jī)交互接口。
光電編碼器原理
光電編碼器是利用光柵衍射原理實(shí)現(xiàn)位移-數(shù)字變換,通過光電轉(zhuǎn)換,將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖數(shù)字量的傳感器.
常見的光電編碼器由光柵盤,發(fā)光元件和光敏元件組成.光柵實(shí)際上是一個(gè)刻有規(guī)則透光和不透光線條的圓盤,光敏元件接收的光通量隨透光線條同步變化,光敏元件輸出波形經(jīng)整形后,變?yōu)槊}沖信號(hào),沒轉(zhuǎn)一圈,輸出一個(gè)脈沖.根據(jù)脈沖的變化,可以精確測(cè)量和控制設(shè)備位移量
光電編碼器的應(yīng)用電路
EPC-755A光電編碼器的應(yīng)用
EPC-755A光電編碼用具備良好的使用性能,在角度丈量、位移丈量時(shí)抗干擾能力很強(qiáng),并具有穩(wěn)定可靠的輸出脈沖信號(hào),且該脈沖信號(hào)經(jīng)計(jì)數(shù)后可得到被丈量的數(shù)字信號(hào)。因此,我們?cè)谘兄破囻{駛模擬器時(shí),對(duì)方向盤旋轉(zhuǎn)角度的丈量選用EPC-755A光電編碼器作為傳感器,其輸出電路選用集電極開路型,輸出分辨率選用360個(gè)脈沖/圈,考慮到汽車方向盤轉(zhuǎn)動(dòng)是雙向的,既可順時(shí)針旋轉(zhuǎn),也可逆時(shí)針旋轉(zhuǎn),需要對(duì)編碼器的輸出信號(hào)鑒相后才能計(jì)數(shù)。圖2給出了光電編碼器實(shí)際使用的鑒相與雙向計(jì)數(shù)電路,鑒相電路用1個(gè)D觸發(fā)器和2個(gè)與非門組成,計(jì)數(shù)電路用3片74LS193組成。
當(dāng)光電編碼器順時(shí)針旋轉(zhuǎn)時(shí),通道A輸出波形超前通道B輸出波形90°,D觸發(fā)器輸出Q(波形W1)為高電平,Q(波形W2)為低電平,上面與非門打開,計(jì)數(shù)脈沖通過(波形W3),送至雙向計(jì)數(shù)器74LS193的加脈沖輸進(jìn)端CU,進(jìn)行加法計(jì)數(shù);此時(shí),下面與非門封閉,其輸出為高電平(波形W4)。當(dāng)光電編碼器逆時(shí)針旋轉(zhuǎn)時(shí),通道A輸出波形比通道B輸出波形延遲90°,D觸發(fā)器輸出Q(波形W1)為低電平,Q(波形W2)為高電平,上面與非門封閉,其輸出為高電平(波形W3);此時(shí),下面與非門打開,計(jì)數(shù)脈沖通過(波形W4),送至雙向計(jì)數(shù)器74LS193的減脈沖輸進(jìn)端CD,進(jìn)行減法計(jì)數(shù)。
汽車方向盤順時(shí)針和逆時(shí)針旋轉(zhuǎn)時(shí),其最大旋轉(zhuǎn)角度均為兩圈半,選用分辨率為360個(gè)脈沖/圈的編碼器,其最大輸出脈沖數(shù)為900個(gè);實(shí)際使用的計(jì)數(shù)電路用3片74LS193組成,在系統(tǒng)上電初始化時(shí),先對(duì)其進(jìn)行復(fù)位(CLR信號(hào)),再將其初值設(shè)為800H,即2048(LD信號(hào));如此,當(dāng)方向盤順時(shí)針旋轉(zhuǎn)時(shí),計(jì)數(shù)電路的輸出范圍為2048~2948,當(dāng)方向盤逆時(shí)針旋轉(zhuǎn)時(shí),計(jì)數(shù)電路的輸出范圍為2048~1148;計(jì)數(shù)電路的數(shù)據(jù)輸出D0~D11送至數(shù)據(jù)處理電路。
實(shí)際使用時(shí),方向盤頻繁地進(jìn)行順時(shí)針和逆時(shí)針轉(zhuǎn)動(dòng),由于存在量化誤差,工作較長一段時(shí)間后,方向盤回中時(shí)計(jì)數(shù)電路輸出可能不是2048,而是有幾個(gè)字的偏差;為解決這一題目,我們?cè)黾恿艘粋€(gè)方向盤回中檢測(cè)電路,系統(tǒng)工作后,數(shù)據(jù)處理電路在模擬器處于非操縱狀態(tài)時(shí),系統(tǒng)檢測(cè)回中檢測(cè)電路,若方向盤處于回中狀態(tài),而計(jì)數(shù)電路的數(shù)據(jù)輸出不是2048,可對(duì)計(jì)數(shù)電路進(jìn)行復(fù)位,并重新設(shè)置初值。
光電編碼器在重力丈量儀中的應(yīng)用
采用旋轉(zhuǎn)式光電編碼器,把它的轉(zhuǎn)軸與重力丈量儀中補(bǔ)償旋鈕軸相連。重力丈量儀中補(bǔ)償旋鈕的角位移量轉(zhuǎn)化為某種電信號(hào)量;旋轉(zhuǎn)式光電編碼器分兩種,盡對(duì)編碼器和增量編碼器。
增量編碼器是以脈沖形式輸出的傳感器,其碼盤比盡對(duì)編碼器碼盤要簡(jiǎn)單得多且分辨率更高。一般只需要三條碼道,這里的碼道實(shí)際上已不具有盡對(duì)編碼器碼道的意義,而是產(chǎn)生計(jì)數(shù)脈沖。它的碼盤的外道和中間道有數(shù)目相同均勻分布的透光和不透光的扇形區(qū)(光柵),但是兩道扇區(qū)相互錯(cuò)開半個(gè)區(qū)。當(dāng)碼盤轉(zhuǎn)動(dòng)時(shí),它的輸出信號(hào)是相位差為90°的A相和B相脈沖信號(hào)以及只有一條透光狹縫的第三碼道所產(chǎn)生的脈沖信號(hào)(它作為碼盤的基準(zhǔn)位置,給計(jì)數(shù)系統(tǒng)提供一個(gè)初始的零位信號(hào))。從A,B兩個(gè)輸出信號(hào)的相位關(guān)系(超前或滯后)可判定旋轉(zhuǎn)的方向。由圖3(a)可見,當(dāng)碼盤正轉(zhuǎn)時(shí),A道脈沖波形比B道超前π/2,而反轉(zhuǎn)時(shí),A道脈沖比B道滯后π/2。圖3(b)是一實(shí)際電路,用A道整形波的下沿觸發(fā)單穩(wěn)態(tài)產(chǎn)生的正脈沖與B道整形波相‘與’,當(dāng)碼盤正轉(zhuǎn)時(shí)只有正向口脈沖輸出,反之,只有逆向口脈沖輸出。因此,增量編碼器是根據(jù)輸出脈沖源和脈沖計(jì)數(shù)來確定碼盤的轉(zhuǎn)動(dòng)方向和相對(duì)角位移量。通常,若編碼器有N個(gè)(碼道)輸出信號(hào),其相位差為π/ N,可計(jì)數(shù)脈沖為2N倍光柵數(shù),現(xiàn)在N=2。圖3電路的缺點(diǎn)是有時(shí)會(huì)產(chǎn)生誤記脈沖造成誤差,這種情況出現(xiàn)在當(dāng)某一道信號(hào)處于‘高’或‘低’電平狀態(tài),而另一道信號(hào)正處于‘高’和 ‘低’之間的往返變化狀態(tài),此時(shí)碼盤固然未產(chǎn)生位移,但是會(huì)產(chǎn)生單方向的輸出脈沖。例如,碼盤發(fā)生抖動(dòng)或手動(dòng)對(duì)準(zhǔn)位置時(shí)(下面可以看到,在重力儀丈量時(shí)就會(huì)有這種情況)。
增量光電編碼器基本波形和電路圖
四倍計(jì)數(shù)計(jì)數(shù)方式的波形和電路圖
上圖是一個(gè)既能防止誤脈沖又能進(jìn)步分辨率的四倍頻細(xì)分電路。在這里,采用了有記憶功能的D型觸發(fā)器和時(shí)鐘發(fā)生電路。由圖4可見,每一道有兩個(gè)D觸發(fā)器串接,這樣,在時(shí)鐘脈沖的間隔中,兩個(gè)Q端(如對(duì)應(yīng)B道的74LS175的第2、7引腳)保持前兩個(gè)時(shí)鐘期的輸進(jìn)狀態(tài),若兩者相同,則表示時(shí)鐘間隔中無變化;否則,可以根據(jù)兩者關(guān)系判定出它的變化方向,從而產(chǎn)生‘正向’或‘反向’輸出脈沖。當(dāng)某道由于振動(dòng)在‘高’、‘低’間往復(fù)變化時(shí),將交替產(chǎn)生‘正向’和‘反向’脈沖,這在對(duì)兩個(gè)計(jì)數(shù)器取代數(shù)和時(shí)就可消除它們的影響(下面儀器的讀數(shù)也將涉及這點(diǎn))。由此可見,時(shí)鐘發(fā)生器的頻率應(yīng)大于振動(dòng)頻率的可能最大值。由圖4還可看出,在原一個(gè)脈沖信號(hào)的周期內(nèi),得到了四個(gè)計(jì)數(shù)脈沖。例如,原每圈脈沖數(shù)為1000的編碼器可產(chǎn)生4倍頻的脈沖數(shù)是4000個(gè),其分辨率為0.09°。實(shí)際上,目前這類傳感器產(chǎn)品都將光敏元件輸出信號(hào)的放大整形等電路與傳感檢測(cè)元件封裝在一起,所以只要加上細(xì)分與計(jì)數(shù)電路就可以組成一個(gè)角位移丈量系統(tǒng)(74159是4-16譯碼器)。 本篇文章來由電子網(wǎng)收集整理轉(zhuǎn)載請(qǐng)以鏈接形式注明出處 網(wǎng)址:http://dz.siaaa.com/read.php?tid-459715-fpage-1.html
光電編碼器驅(qū)動(dòng)程序的設(shè)計(jì)
光電編碼器與S3C2410的硬件接口
光電編碼器與S3C24lO的接口電路如圖4所示。光電編碼器的A、B相為集電極開路輸出,由于S3C2410的I/O口電平為3.3 V,所以將其通過電阻上拉到3.3V后再分別接到CPU的EINT0和EINT1上;將Pl直接接到3.3V,P2通過電阻下拉到GND。當(dāng)旋鈕按下時(shí),P2口輸出為高電平,否則輸出為低電平。
工作狀態(tài)下,將EINTO、EINTl配置成上升沿和下降沿均觸發(fā)的外部中斷,將EINT2配置成上升沿觸發(fā)的中斷,旋鈕按下時(shí)EINT2引腳產(chǎn)生上升沿觸發(fā)中斷。
外部中斷初始化及中斷服務(wù)程序的編寫
首先必須完成CPU的I/O口和中斷的初始化工作,然后再編寫中斷處理程序。具體分為4個(gè)步驟:
- 初始化I/O口。在Port[_]Init()函數(shù)中,將EINT0和EINTl初始化為上升沿和下降沿均觸發(fā)的中斷。將EINT2初始化為上升沿觸發(fā)的中斷。
- 添加中斷號(hào)。在oalint.h下添加光電編碼器中斷向量的宏定義。代碼為#define SYSINTR[_]OED(SYSINTR[_]FIRMWARE+20)
- 添加中斷的初始化、禁止、復(fù)位等函數(shù),分別在OEMInterruptEnable()、OEMInterruptDisable()、OEM-InterruptDone()等函數(shù)中加入相關(guān)代碼。
- 返同中斷標(biāo)識(shí),由OEMInterruptHandler()函數(shù)返回中斷標(biāo)識(shí)(SYSINTR[_]OED)。
編寫流接口驅(qū)動(dòng)程序
Windows CE.net把中斷處理分成兩個(gè)部分:中斷服務(wù)程序(ISR)和中斷服務(wù)線程(IST)。TSR通常要求越短、越快越好,它的唯一任務(wù)就是返回中斷標(biāo)識(shí)。正由于ISR很小,只能做少量的處理,因此中斷處理器就調(diào)用IST執(zhí)行大多數(shù)的中斷處理。中斷服務(wù)線程(IST)在從waitForSingleObject()函數(shù)得到中斷已經(jīng)發(fā)生的信號(hào)前一直保持空閑;當(dāng)接收到中斷信號(hào)后,它就在本機(jī)設(shè)備驅(qū)動(dòng)程序的PDD層調(diào)用子程序,這些程序反過來訪問硬件以獲得硬件的狀態(tài)。IST使用InterruptInitialize()函數(shù)來注冊(cè)自己,然后使用WaitForSingleObject()函數(shù)等待中斷信號(hào)。如果這時(shí)中斷信號(hào)到來,則應(yīng)將光電編碼器的狀態(tài)記錄下來,保存在變量OED[_]Status中。OED[_]Status=1表示旋鈕按下,OED[_]Status=2表示旋鈕逆時(shí)針旋轉(zhuǎn),OED[_]Status=3表示旋鈕順時(shí)針旋轉(zhuǎn)。
這里還有一種比較簡(jiǎn)單的鑒相規(guī)則,具體步驟是,當(dāng)創(chuàng)建線程時(shí)讀出EINTl的電平狀態(tài)并保存在變量PreEINTl中,每次中斷到來時(shí)首先判斷EINT2是否為高電平。如果為高電平,則說明按鈕按下;如果EINT2為低電平,則判斷EINTO電平是否與PreEINTl相同。如果相同,則說明旋鈕逆時(shí)針旋轉(zhuǎn);反之,旋鈕順時(shí)針旋轉(zhuǎn),判斷的流程如圖5所示。
光電編碼器鑒相流程框圖
Windows CE流接口驅(qū)動(dòng)程序模型要求驅(qū)動(dòng)程序開發(fā)者編寫10個(gè)接口函數(shù),針對(duì)光電編碼器的驅(qū)動(dòng)主要應(yīng)完成設(shè)備初始化和數(shù)據(jù)讀取2個(gè)函數(shù)的編寫。WindowsCE設(shè)備文件名前綴由3個(gè)大寫字母組成,操作系統(tǒng)使用這3個(gè)字母來識(shí)別與流接口驅(qū)動(dòng)程序相對(duì)應(yīng)的設(shè)備。這里定義設(shè)備文件名前綴為“OED”(Optical Encoder),其中設(shè)備初始化函數(shù)OED[_]Init()在Windows CE裝載驅(qū)動(dòng)程序時(shí)用于創(chuàng)建中斷事件和中斷服務(wù)線程。在函數(shù)OED[_]Read()中將光電編碼器的狀態(tài)(OED[_]Status)返回。
封裝驅(qū)動(dòng)程序并加入到WinCE中
根據(jù)上述方法編譯出動(dòng)態(tài)鏈接庫(DLL)還不夠,因?yàn)樗慕涌诤瘮?shù)還沒有導(dǎo)出,還需要告訴鏈接程序輸出什么樣的函數(shù),因此必須建立一個(gè)后綴名為def的文件。在本設(shè)計(jì)中為OpticalEnccder.def。下面是此文件的內(nèi)容:
一個(gè)具體的流接口驅(qū)動(dòng)程序和注冊(cè)表是密不可分的。向WinCE內(nèi)核添加注冊(cè)表項(xiàng)的方法有兩種:一種是直接修改Platform Builder下的reg文件;另一種是自己編寫一個(gè)注冊(cè)表文件,通過添加組件的方法將動(dòng)態(tài)鏈接庫文件添加到內(nèi)核中。這里用第2種方法,將OpticalEncoder.dll添加到內(nèi)核中。編寫的注冊(cè)表文件內(nèi)容如下:
最后編寫一個(gè)CEC文件,完成對(duì)定制內(nèi)核注冊(cè)表部分的修改并將OpticalEncoder.dll添加到系統(tǒng)內(nèi)核中去,然后在Platform Builder中就可以直接添加已經(jīng)編寫好的驅(qū)動(dòng)程序了。