王真旭,萬(wàn)在紅,熊文華,蔣樂(lè)云,楊超然
(南昌航空大學(xué)信息工程學(xué)院,南昌 330000)
光電編碼器是一種通過(guò)光電轉(zhuǎn)換技術(shù)將輸入的角度信息轉(zhuǎn)換為相應(yīng)的數(shù)字脈沖的傳感器,其具有體積小、精確度高、操作方便等優(yōu)點(diǎn)。在過(guò)去幾十年中,已經(jīng)發(fā)展為一種成熟的多規(guī)格、高性能的系列工業(yè)產(chǎn)品,主要用于檢測(cè)角度位置,也可以通過(guò)機(jī)械聯(lián)動(dòng)裝置測(cè)量直線位移。因?yàn)楣怆娋幋a器測(cè)量速度、角速度和位移都很簡(jiǎn)單,相關(guān)的文獻(xiàn)也有很多,但缺少實(shí)際的硬件制作和軟件設(shè)計(jì),所以本文基于STC89C52 單片機(jī)和光電旋轉(zhuǎn)編碼器設(shè)計(jì)一個(gè)位移測(cè)量系統(tǒng),希望能提供一些光電編碼器的硬件使用方法和測(cè)量位移的軟件設(shè)計(jì)思路[1-3]。另一方面,在工業(yè)生產(chǎn)中,流水線上的貨物往往需要精確的位移控制才能被送到相應(yīng)處理的環(huán)節(jié),為了提高物體傳送的精確性,降低操作人員的失誤率,本文采用增量型光電旋轉(zhuǎn)編碼器對(duì)物體進(jìn)行位移實(shí)時(shí)顯示,并且通過(guò)警報(bào)燈和蜂鳴器來(lái)提醒操作人員進(jìn)行做出相應(yīng)的措施[4-5]。本文首先介紹光電旋轉(zhuǎn)編碼器的工作原理,然后介紹硬件系統(tǒng)的組成和部分重要模塊的實(shí)現(xiàn),最后再講解軟件的流程圖,比如如何將采集到的編碼器數(shù)據(jù)轉(zhuǎn)化為位移量。本文只是對(duì)編碼器的使用,并未考慮一些誤差,比如電機(jī)減速時(shí)由于慣性導(dǎo)致多運(yùn)動(dòng)一段的誤差距離,關(guān)于光電編碼器的誤差分析可以參考其他文獻(xiàn)[6-8]。
光電編碼器分為增量型、絕對(duì)型以及混合型等,本文只簡(jiǎn)單介紹增量型光電編碼器。增量型光電編碼器通過(guò)光電轉(zhuǎn)化技術(shù),把轉(zhuǎn)軸的幾何位移量轉(zhuǎn)化為等寬脈沖進(jìn)行輸出,即把連續(xù)的位移量離散化為一個(gè)個(gè)的等大的脈沖,而且產(chǎn)生的脈沖與位移大小一一對(duì)應(yīng),因此一個(gè)脈沖對(duì)應(yīng)的位移量越小則越精確,記錄的脈沖之和就對(duì)應(yīng)了位移之和。通常情況下,增量型光電編碼器輸出兩個(gè)相差90°的脈沖信號(hào)(記為A 相、B 相)和每旋轉(zhuǎn)一圈就產(chǎn)生一個(gè)的Z 脈沖信號(hào)。通過(guò)分析A 相和B 相的相位關(guān)系可以方便地判斷出旋轉(zhuǎn)方向,Z 相可以用來(lái)減少累計(jì)誤差。增量型光電編碼器由光源、碼盤、檢測(cè)光柵、光電檢測(cè)器件和轉(zhuǎn)換電路等組成,如圖1所示。
圖1 增量型光電編碼器的組成
碼盤上有很多個(gè)的透光縫隙,相鄰兩個(gè)透光縫隙間距大小相同,并且代表一個(gè)周期。檢測(cè)光柵上有兩組間距相差剛好1/4 間距的透光縫隙,檢測(cè)光柵的透光縫隙和碼盤的透光縫隙間距相同。增量型光電編碼器正常工作時(shí),檢測(cè)光柵固定不動(dòng),而碼盤被轉(zhuǎn)軸帶動(dòng)旋轉(zhuǎn),此時(shí)由編碼器內(nèi)部光源發(fā)出的光線周期性地穿過(guò)碼盤和檢測(cè)光柵并且照射到光電檢測(cè)器件上時(shí),光電檢測(cè)器件將會(huì)輸出兩個(gè)相位相差90°的正弦信號(hào)。緊接著這兩個(gè)正弦信號(hào)通過(guò)轉(zhuǎn)換電路轉(zhuǎn)化為方波,即A 相脈沖和B 相脈沖。增量型光電編碼器輸出信號(hào)的波形如圖2所示。
圖2 增量型光電編碼器輸出的波形
增量型光電編碼器的具有體積小、精度高、操作方便等特點(diǎn),而且既可以用來(lái)測(cè)量角位移,又可以通過(guò)加上聯(lián)軸器來(lái)測(cè)量直線位移。其缺點(diǎn)是:因?yàn)闇y(cè)量直線位移時(shí)必須安裝聯(lián)軸器,所以需要考慮由機(jī)械摩擦產(chǎn)生的誤差。
準(zhǔn)確地計(jì)算產(chǎn)生的脈沖個(gè)數(shù)是使用增量型光電編碼器測(cè)量位移的關(guān)鍵。計(jì)算光電編碼器輸出的脈沖個(gè)數(shù)主要分為以下兩個(gè)步驟:因?yàn)樵趯?shí)際操作過(guò)程中,電機(jī)既能正向旋轉(zhuǎn),又能反向旋轉(zhuǎn)轉(zhuǎn),所以首先對(duì)編碼器輸出的A、B 相脈沖進(jìn)行方向判別,即判斷電機(jī)此時(shí)是正向旋轉(zhuǎn)還是反向旋轉(zhuǎn);然后根據(jù)正反轉(zhuǎn)得出計(jì)數(shù)器是加一還是減一,如果是正轉(zhuǎn)則計(jì)數(shù)器加一,如果是反轉(zhuǎn)那么計(jì)數(shù)器減一。如圖3所示,當(dāng)編碼器正轉(zhuǎn)時(shí),A 相超前B相90°,A 相的每一次上升沿處B 相都正好為低電平;當(dāng)編碼器反轉(zhuǎn)時(shí),A 相滯后B 相90°,A 相的每一次上升沿處B 相都正好為高電平。如果A 相以下降沿為判斷依據(jù),B相的電平相反即可[9-10]。
圖3 編碼器正反轉(zhuǎn)示意圖
相應(yīng)的計(jì)數(shù)方式主要有軟件方式和硬件方式兩種方式。硬件計(jì)數(shù)方式是在外部接上由多個(gè)可加可減的雙時(shí)鐘計(jì)數(shù)器(如74LS193 芯片)級(jí)聯(lián)而成的加減計(jì)數(shù)電路,優(yōu)點(diǎn)是執(zhí)行速度快;軟件方式是將A 相脈沖接單片機(jī)INT0 引腳,B 相接單片機(jī)P1.0 引腳,設(shè)置外部中斷0 為下降沿觸發(fā),當(dāng)A 相出現(xiàn)下降沿時(shí),進(jìn)入外部中斷0,判斷B 相電平高低,若為高電平則為正轉(zhuǎn),脈沖數(shù)數(shù)加一,為低電平則相反。軟件方式在光電編碼器脈沖方向判別以及系統(tǒng)控制方面的實(shí)時(shí)性不及硬件方式,而且編碼器的數(shù)量與系統(tǒng)的可靠性成反比。但是因?yàn)樗碾娐吩O(shè)計(jì)相對(duì)于硬件方式更簡(jiǎn)單,而且本次只使用了一個(gè)編碼器,所以本文選用軟件計(jì)數(shù)方式。
系統(tǒng)硬件主要包含以下部分[11-13]:(1)單片機(jī)最小系統(tǒng)板,選用STC89C52 作為控制核心;(2)編碼器模塊,將位移轉(zhuǎn)化為脈沖輸出;(3)報(bào)警模塊,當(dāng)位移超過(guò)某些值時(shí)產(chǎn)生相應(yīng)的報(bào)警;(4)報(bào)警值存儲(chǔ)模塊,當(dāng)單片機(jī)突然掉電,設(shè)置的報(bào)警值也不會(huì)丟失;(5)液晶顯示模塊,采用1602顯示當(dāng)前位移和,3個(gè)報(bào)警值;(6)按鍵模塊,可以根據(jù)需求設(shè)置不同的報(bào)警值;(7)模擬工業(yè)位移測(cè)量模塊,用直流電機(jī)帶動(dòng)齒輪和皮帶旋轉(zhuǎn),模擬工業(yè)中機(jī)器運(yùn)轉(zhuǎn);(8)光電檢測(cè)模塊:判斷系統(tǒng)開始測(cè)位移和結(jié)束測(cè)位移,這樣可以計(jì)算出開始和結(jié)束之間的位移。系統(tǒng)總體框架如圖4所示。
圖4 機(jī)械位移測(cè)量系統(tǒng)總體框架
整體原理圖如圖5所示。
圖5 系統(tǒng)原理
用一個(gè)紅外發(fā)光二極管和一個(gè)紅外接收管組成一個(gè)電路,用來(lái)檢測(cè)是否有物體通過(guò),當(dāng)沒有物體通過(guò)時(shí)輸出低電壓,當(dāng)有物體時(shí)則輸出高電壓。這個(gè)信號(hào)轉(zhuǎn)到單片機(jī)中進(jìn)行判斷開始或者停止計(jì)算位移。將START 端口與單片機(jī)的P2.2 引腳相連,END 端口與單片機(jī)的P2.4 引腳相連,當(dāng)光電檢測(cè)裝置檢測(cè)到高電平時(shí),單片機(jī)啟動(dòng)位移測(cè)量模塊。硬件原理圖如圖6所示。
圖6 光帶檢測(cè)裝置
為了真實(shí)模擬電機(jī)帶動(dòng)編碼器進(jìn)行測(cè)距,選用了一個(gè)聯(lián)軸器把編碼器和電機(jī)連接在一起,并且選用的是雙出軸直流電機(jī),在電機(jī)的另一側(cè)接上孔徑一致的齒輪,齒輪上加一根皮帶,當(dāng)電機(jī)旋轉(zhuǎn)時(shí),一端帶動(dòng)編碼器測(cè)距,另一端帶動(dòng)皮帶向前轉(zhuǎn)動(dòng),它們都是和直流電機(jī)同軸旋轉(zhuǎn),同軸旋轉(zhuǎn)距離與半徑成正比,所以進(jìn)行位移測(cè)量的時(shí)候,要乘上齒輪半徑與編碼器半徑之比。
電機(jī)的選擇:因?yàn)闇y(cè)量的是兩個(gè)光電開關(guān)的距離,當(dāng)經(jīng)過(guò)第一個(gè)開始光電開關(guān)時(shí),單片機(jī)開始測(cè)距,當(dāng)?shù)竭_(dá)第二個(gè)光電開關(guān)時(shí)結(jié)束測(cè)距,與電機(jī)的減速過(guò)程沒有關(guān)系,所以選擇最簡(jiǎn)單控制的直流電機(jī),直流電機(jī)的轉(zhuǎn)速與輸入的電壓有關(guān),考慮到電機(jī)轉(zhuǎn)速太快,將電機(jī)輸入電壓減小到1 V 以下,以方便測(cè)量。模擬工業(yè)電機(jī)實(shí)物如圖7所示。
圖7 模擬工業(yè)電機(jī)實(shí)物
本次選用的編碼器的分辨率是600 個(gè)脈沖每圈,電源電壓為5 V,孔徑6 mm,有4 根不同顏色的線,不同顏色有特定的作用,綠色的線代表A 相脈沖輸出,白色的線代表B 相脈沖輸出,紅色的線接5 V 電源,黑色的線接地。編碼器輸出的A 相脈沖接到單片機(jī)的外部中斷P3.2 引腳,B 相脈沖接到I/O 端口P3.3 口(雖然P3.3引腳有外部中斷功能,但不使用此功能)。當(dāng)位移測(cè)量系統(tǒng)啟動(dòng)時(shí),首先將INT0 端口設(shè)置為下降沿觸發(fā)方式,然后打開相應(yīng)的中斷。 當(dāng)INT0 引腳出現(xiàn)下降沿時(shí),單片機(jī)程序觸發(fā)外部中斷0,執(zhí)行外部中斷0 的處理程序,此時(shí)判別P3.3 引腳是低電平還是高電平。 若該引腳是高電平,則說(shuō)明此時(shí)編碼器正轉(zhuǎn),脈沖個(gè)數(shù)加一;若該引腳是低電平,則說(shuō)明此時(shí)編碼器反轉(zhuǎn),脈沖個(gè)數(shù)減一。
如果位移記錄采用一般的存儲(chǔ)器,在突然掉電時(shí)必須使用備用電池來(lái)供電,并且需要在硬件上加入一個(gè)檢測(cè)掉電的電路,但會(huì)出現(xiàn)電池不可靠等特點(diǎn),為了防止突然掉電導(dǎo)致位移信息丟失的情況發(fā)生。此次使用AT24C02 存儲(chǔ)芯片,它是由Atmel 公司生產(chǎn)的一款CMOS型的存儲(chǔ)器,具有2 kbit 的存儲(chǔ)容量,存儲(chǔ)的數(shù)據(jù)不易丟失,并且能夠反復(fù)擦寫很多次,通常能擦寫10 000 次以上。硬件連接圖如圖8所示。
圖8 AT24C02硬件
系統(tǒng)的軟件設(shè)計(jì)主要包括:數(shù)據(jù)采集和處理程序、報(bào)警程序、LCD1602 顯示程序、鍵盤掃描程序、外部存貯和讀取程序。整體流程如圖9~11所示。
圖9 主程序流程
圖10 定時(shí)器T0流程
圖11 外部中斷0流程
本文將光電旋轉(zhuǎn)編碼器與單片機(jī)結(jié)合起來(lái)設(shè)計(jì)了一個(gè)機(jī)械位移測(cè)量系統(tǒng),該系統(tǒng)通過(guò)電機(jī)帶動(dòng)皮帶工作模擬了工業(yè)旋轉(zhuǎn)設(shè)備的正常運(yùn)行,具有體積小、精度高、既能夠測(cè)量角位移又可以通過(guò)機(jī)械轉(zhuǎn)換裝置測(cè)量直線位移的特點(diǎn),成功實(shí)現(xiàn)了實(shí)時(shí)數(shù)據(jù)顯示和報(bào)警等功能。本文也簡(jiǎn)單介紹編碼器的工作原理并且提供了一些簡(jiǎn)單的硬件和軟件使用方法,但是本文并沒有考慮聯(lián)軸器與編碼器機(jī)械摩擦產(chǎn)生的誤差,相關(guān)的分析可參考其他論文介紹??傮w來(lái)說(shuō),該系統(tǒng)提高了位移測(cè)量的準(zhǔn)確度,有效減少了測(cè)量誤差。