新聞中心

        EEPW首頁 > 光電顯示 > 設計應用 > 光電旋轉編碼器的原理及應用方法

        光電旋轉編碼器的原理及應用方法

        作者: 時間:2012-03-13 來源:網絡 收藏


        3 驅動程序的設計

        本文引用地址:http://www.104case.com/article/168291.htm

          3.1 與S3C2410的硬件接口

          與S3C24lO的接口電路如圖4所示。光電編碼器的A、B相為集電極開路輸出,由于S3C2410的I/O口電平為3.3 V,所以將其通過電阻上拉到3.3V后再分別接到CPU的EINT0和EINT1上;將Pl直接接到3.3V,P2通過電阻下拉到GND。當旋鈕按下時,P2口輸出為高電平,否則輸出為低電平。

          

        光電編碼器與S3C24lO的接口電路

          工作狀態下,將EINTO、EINTl配置成上升沿和下降沿均觸發的外部中斷,將EINT2配置成上升沿觸發的中斷,旋鈕按下時EINT2引腳產生上升沿觸發中斷。

          3.2 外部中斷初始化及中斷服務程序的編寫

          首先必須完成CPU的I/O口和中斷的初始化工作,然后再編寫中斷處理程序。具體分為4個步驟:

          初始化I/O口。在Port_Init()函數中,將EINT0和EINTl初始化為上升沿和下降沿均觸發的中斷。將EINT2初始化為上升沿觸發的中斷。

          添加中斷號。在oalint.h下添加光電編碼器中斷向量的宏定義。代碼為#define SYSINTR_OED(SYSINTR_FIRMWARE+20)

          添加中斷的初始化、禁止、復位等函數,分別在OEMInterruptEnable()、OEMInterruptDisable()、OEM-InterruptDone()等函數中加入相關代碼。

          返同中斷標識,由OEMInterruptHandler()函數返回中斷標識(SYSINTR_OED)。

          3.3 編寫流接口驅動程序

          Windows CE.net把中斷處理分成兩個部分:中斷服務程序(ISR)和中斷服務線程(IST)。TSR通常要求越短、越快越好,它的唯一任務就是返回中斷標識。正由于ISR很小,只能做少量的處理,因此中斷處理器就調用IST執行大多數的中斷處理。中斷服務線程(IST)在從waitForSingleObject()函數得到中斷已經發生的信號前一直保持空閑;當接收到中斷信號后,它就在本機設備驅動程序的PDD層調用子程序,這些程序反過來訪問硬件以獲得硬件的狀態。IST使用InterruptInitialize()函數來注冊自己,然后使用WaitForSingleObject()函數等待中斷信號。如果這時中斷信號到來,則應將光電編碼器的狀態記錄下來,保存在變量OED_Status中。OED_Status=1表示旋鈕按下,OED_Status=2表示旋鈕逆時針,OED_Status=3表示旋鈕順時針。

          這里還有一種比較簡單的鑒相規則,具體步驟是,當創建線程時讀出EINTl的電平狀態并保存在變量PreEINTl中,每次中斷到來時首先判斷EINT2是否為高電平。如果為高電平,則說明按鈕按下;如果EINT2為低電平,則判斷EINTO電平是否與PreEINTl相同。如果相同,則說明旋鈕逆時針;反之,旋鈕順時針旋轉,判斷的流程如圖5所示。

          

        判斷的流程

        51單片機相關文章:51單片機教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 喀喇| 鸡西市| 阿克苏市| 那坡县| 大安市| 古浪县| 富阳市| 廉江市| 双流县| 曲水县| 宜良县| 木里| 林芝县| 榕江县| 德钦县| 信宜市| 新蔡县| 惠安县| 泰安市| 建德市| 涞源县| 贺州市| 金寨县| 高淳县| 英吉沙县| 眉山市| 佳木斯市| 松桃| 成武县| 色达县| 宽甸| 社旗县| 白河县| 清河县| 安达市| 宁陵县| 新兴县| 建水县| 贞丰县| 鹤庆县| 资兴市|