//Logo Image
作者:蔡宗成(2002-05-08);推薦:徐業良(2002-05-09)

單晶片實習-光電感測器應用

當要量測物體旋轉角度變化時,常採用「角度解碼器(Encoder)」,其基本原理如圖1所示,旋轉軸帶動刻有細長槽的圓盤,兩側分別擺放發光二極體與光電晶體,發光二極體光線若透過刻槽讓光電晶體接受到,將啟動光電晶體形成通路,所以當圓盤不斷旋轉光電晶體將持續送出開路與通路訊號,我們只要記錄訊號出現的數目即可計算出旋轉角度。圓盤的刻橫分劃越細密,所能量測的角度位置精度越高,若要測量正反轉位置時,則可以藉由不同的刻畫方式將每一個位置區分開來,獲得絕對位置的角度變化。

1. 角度編碼器的作動原理

本文介紹使用多組光電感測器與格雷碼編碼規則,組合成絕對型角度編碼器,使用單晶片讀取光電感測器輸出訊號,由讀取到的編碼號碼來對應其角度位置,經由程式判斷出正反轉、停止等資訊。

1.     絕對型角度編碼器

本實習電路所使用的光電感測器外觀如圖2,由OMRON1】公司生產製造,型號為EE-SPY402,屬於反射型光電感測器,入光時ON,偵測距離約5mm,並附動作顯示燈,電源電壓為DC5~24V,控制輸出80mA

2. 光電感測器

經過實地測試,供應此光電感測器電源電壓5V,當偵測到前方有反射物體時,動作顯示燈亮,out端與負端形成通路,且out端由4V高電位降為0V低電位;根據產品使用手冊,此反射型光電感測器所偵測到前方的反射物體以白色為標準,反射率約90%,不同的條件會有不同的檢測距離,白色物體的檢測距離約是黑色物體的3倍左右。

絕對型角度編碼器是以多組光電感測器來讀取一組位置資訊,因此可以利用二進位碼(Binary code)將圓分成若干等分,如圖3(a)所示,而每個角度都由一固定的編碼代表,此外由於必需考量到雜訊的抑制、判別正反轉、以及防止誤讀提高可靠度,因此絕對型角度編碼器在編碼方式上又多採用「格雷碼(Gray code)」編碼,如圖3(b)所示,格雷碼與一般二進位碼最大的差異在於格雷碼每次只變動一個位元,因此不易產生誤讀。

(a)二進位碼編碼                          (b)格雷碼編碼     

3. 絕對型角度編碼器

本實習電路使用格雷碼編碼規則與三組光電感測器,此三組光電感測器的排列方式如圖4ABC三點,可依照本身設計需求進行更精密劃分或是增加光電感測器數目,提高其解析度;由此排列方式,這三組光電感測器可組合成8組位置訊號,白色區域會反射,呈現低電位,以單晶片而言,相對應之接腳會讀到0”的訊號,黑色區域不反射,呈現高電位,相對應之接腳會讀到1”的訊號,如此,可得到編碼方式如表1所示。

4. 光電感測器位置圖

1. 格雷碼與角度位置對應表

位置

0

1

2

3

4

5

6

7

格雷碼

000

001

011

010

110

111

101

100

十六進位

0x00

0x01

0x03

0x02

0x06

0x07

0x05

0x04

2.     單晶片編碼電路

單晶片編碼電路如圖5所示,分別將三組光電感測器的out端接至單晶片的PortBPin0~Pin2,供應5V電壓,且負端輸出與單晶片共接地,以求電壓準位;單晶片一次讀取PortB8支接腳的狀態,組合成二進位系統,經過程式處理與判斷,獲得當時角度位置。圖6為單晶片編碼電路程式內容,引用相關設定與函數庫,程式流程為一次讀取PortB8支腳位,存入一個8位元變數“data”,使用一for迴圈,依序比較datadat[i]變數矩陣,dat[i]為一16位元變數矩陣,矩陣內容為角度位置換算成十六進位數值,當for迴圈比較變數內容相同時,顯示當時所在位置。

5. 光電感測器與單晶片接腳圖

6. 單晶片編碼電路程式內容

6中相關指令說明如下:

int16

Defines a 16 bit number

set_tris_b(value)

value8位元數值,1”代表輸入(input)腳位,0”代表輸出(output)腳位,例如要設定RB0~RB2為輸入腳位,RB3~RB7為輸出腳位,二進位表示為00000111,換算成十六進位為0x07,所以set_tris_b(00000111)也等於set_tris_b(0x07)

input_b()

指令用法為value = input_b()”value8位元數值,一次讀取PortB8支接腳腳位狀態,並存入指定的變數裡,可使用在其他PortA~PortE