激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

EM9280與光電編碼器的接口及應用

 2013-6-13              

        增量式光電編碼器是工業自動化領域最常用的轉速測量傳感器。針對轉速測量的應用需求,我們在EM9280的硬件基礎上,設計了相應的驅動程序并提供標準的流式驅動程序API,為客戶應用程序增加轉速測量功能提供了一種快速低成本的實現途徑。本文主要介紹英創工控主板EM9280與增量式光電旋轉編碼器的軟硬件接口。

 

接口硬件說明

        鑒于本應用主要是監測轉速信號,因此只需要接入增量式光電旋轉編碼器的A、B兩相脈沖信號即可。典型的A、B相信號的關系如下圖所示:

 

 

        上圖的左面是A、B相在電機順時針方向旋轉時的波形,其特點是A相脈沖超前B相脈沖90º相位。而圖的右邊是點擊逆時針旋轉時的波形,此時B相超前A相90º相位。

 

        一般說來,光電編碼器的A、B相信號需要經過隔離及電平轉換電路,方可接入EM9280的相應管腳。隔離整形后的A、B相輸出信號必須是3.3V的TTL信號,與EM9280連接如下表所示:


光電編碼器EM9280管腳簡要說明
A相信號GPIO233.3V TTL電平信號
B相信號GPIO223.3V TTL電平信號


 

由于內部電路對A、B相信號進一步做了去抖動處理,因此要求輸入信號頻率不能高于5KHz,方能保證后續計數結果的正確。

 

        從應用編程的角度看,光電編碼器的基本指標包括:(1)每分鐘最大轉速,(2)每轉輸出的脈沖數,也就是光電編碼器的分辨率。

 

接口軟件說明

        光電編碼轉速測量的驅動程序已內置在EM9280的內核中,其設備文件名為”ROT1:”。當打開該設備文件后,EM9280的對應管腳(GPIO23和GPIO22)將自動轉為相應的脈沖輸入狀態。當然這兩個管腳不能再作為通用GPIO或I2C接口使用。

 

        當調用CreateFile(_T(”ROT1:”), ….)打開設備文件后,可通過WriteFile設置光電編碼器的參數,參數包含在以下數據結構:

        typedef struct _ROTARY_ENCODER_INFO
        { 
                BYTE ucSize; // 填入本結構的字節數 = 21
                DWORD dwMaxRotary; // 正常工況每分鐘旋轉圈數,單位為rpm
                DWORD dwResolution; // 每轉輸出的脈沖數
                DWORD dwAlarmRotaryHigh; // 轉速報警高限值,單位rpm,= 0: 禁止該功能
                DWORD dwAlarmRotaryLow; // 轉速報警低限值,單位rpm,= 0: 禁止該功能
                DWORD dwPeriod; // 采樣周期,單位為ms,= 0:自動設置采樣周期 
        } ROTARY_ENCODER_INFO, *PROTARY_ENCODER_INFO;

 

        在上述數據結構中,dwMaxRotary設置的上限是編碼器的最高轉速,也可根據實際應用設置為正常工況的最高轉速。本驅動程序支持的采樣間隔共10檔,分別為1ms、2ms、5ms、10ms、20ms、50ms、100ms、200ms、500ms、1000ms。采樣周期與編碼器參數的關系為:

        N =(dwMaxRotary×dwResolution / 60)× dwPeriod / 1000

 

        上式中N表示在一個采樣間隔所采集的脈沖數,當N為正時,表示順時針旋轉,N為負數時,表示逆時針旋轉。在本驅動程序中,采集輸出的數據即為N,數據類型為帶符號的16-bit整型量。具體設置并啟動測量的API調用為:

        ROTARY_ENCODER_INFO Info; //定義結構對象
        DWORD dwReturnWritten; //實際寫入的字節數

        //填寫數據結構參數
        Info.ucSize = sizeof(ROTARY_ENCODER_INFO);
        // … …
        WriteFile(hROT, &Info, sizeof(ROTARY_ENCODER_INFO), &dwReturnWritten, 0);

 

        上面調用中的hROT是CreateFile返回的文件句柄。若dwPeriod設置為自動(= 0),則可通過以下API讀取驅動實際使用的采樣周期:

        ReadFile(hROT, &Info, sizeof(ROTARY_ENCODER_INFO), &dwReturnRead, 0);

 

        若應用程序設置自動采樣周期,驅動程序將根據光電編碼器的基本參數(轉速和分辨率),選取滿足一定精度的最小采樣周期。

 

        當通過WriteFile設置并啟動了轉速測量后,還可通過ReadFile隨時讀取當前轉速或截止當前時刻的轉速數據序列(即轉速曲線),具體調用方式為:

        int short DBuf[1024]; // 16-bit 帶符號整型量數據buffer
        DWORD dwBufLen; // buffer長度,必須兩字節對齊
        DWORD dwReturnRead; // 返回的字節數
        DWORD dwNbSamples;

        dwBufLen = 20 * sizeof(int short); // 采集20個樣點
        dwReturnRead = 0; // 必須置0
        ReadFile(hROT, DBuf, dwBufLen, &dwReturnRead, 0);
        dwNbSamples = dwReturnRead / sizeof(int short);

 

        注意實際采集的點數有可能小于希望采集的點數。在驅動程序內部緩沖的最大數據點數為32K,即32768個樣點。上面調用中特別要注意的是dwBufLen必須為兩字節對齊,這是因為16-bit 帶符號整型量占用2個字節。

主站蜘蛛池模板: 亚洲精品在线影院| 亚洲乱码视频| 香蕉在线精品视频在线观看2| 污污小视频在线观看| 中国大陆一级毛片 免费| sese在线| 亚洲欧美精品日韩欧美| 一级片二级片| 我要看黄色录像一级片| 黄色片播放器| 欧美日韩国产一区| 一级黄色视| 在线高清视频观看vvvv| 国产精品自产拍2021在线观看| 九九久久国产精品| 在线观看免费网址大全| 亚洲jjzzjjzz在线播放| 国产xvideoscom| 草草免费| 欧美日韩免费在线视频| 亚洲国产欧美日韩一区二区三区| 日本一本高清v免费视频| 欧美一级毛片片aa视频| 黄大色大片免费久久| 久久ww精品w免费人成| 亚洲婷婷网| 五月天爱爱激情视频在线观看| 农村寡妇一级毛片免费看视频| 欧美精品一区二区三区观| 爱爱视频免费网站| 国产福利微拍精品一区二区| 性做久久久久久网站| 97视频在线免费| 中文字幕无线码一区二区三区| 欧美亚洲黄色片| 国产激情一区二区三区| 大美女久久久久久j久久| 久久天天综合| 亚洲不卡在线视频| 91啦91pornv国产自| 日日噜噜夜夜狠狠视频无|