增量式光電編碼器是工業(yè)自動(dòng)化領(lǐng)域最常用的轉(zhuǎn)速測量傳感器。針對轉(zhuǎn)速測量的應(yīng)用需求,我們在EM9280的硬件基礎(chǔ)上,設(shè)計(jì)了相應(yīng)的驅(qū)動(dòng)程序并提供標(biāo)準(zhǔn)的流式驅(qū)動(dòng)程序API,為客戶應(yīng)用程序增加轉(zhuǎn)速測量功能提供了一種快速低成本的實(shí)現(xiàn)途徑。本文主要介紹英創(chuàng)工控主板EM9280與增量式光電旋轉(zhuǎn)編碼器的軟硬件接口。
接口硬件說明
鑒于本應(yīng)用主要是監(jiān)測轉(zhuǎn)速信號(hào),因此只需要接入增量式光電旋轉(zhuǎn)編碼器的A、B兩相脈沖信號(hào)即可。典型的A、B相信號(hào)的關(guān)系如下圖所示:
上圖的左面是A、B相在電機(jī)順時(shí)針方向旋轉(zhuǎn)時(shí)的波形,其特點(diǎn)是A相脈沖超前B相脈沖90o相位。而圖的右邊是點(diǎn)擊逆時(shí)針旋轉(zhuǎn)時(shí)的波形,此時(shí)B相超前A相90o相位。
一般說來,光電編碼器的A、B相信號(hào)需要經(jīng)過隔離及電平轉(zhuǎn)換電路,方可接入EM9280的相應(yīng)管腳。隔離整形后的A、B相輸出信號(hào)必須是3.3V的TTL信號(hào),與EM9280連接如下表所示:
光電編碼器 | EM9280管腳 | 簡要說明 |
A相信號(hào) | GPIO23 | 3.3V TTL電平信號(hào) |
B相信號(hào) | GPIO22 | 3.3V TTL電平信號(hào) |
由于內(nèi)部電路對A、B相信號(hào)進(jìn)一步做了去抖動(dòng)處理,因此要求輸入信號(hào)頻率不能高于5KHz,方能保證后續(xù)計(jì)數(shù)結(jié)果的正確。
從應(yīng)用編程的角度看,光電編碼器的基本指標(biāo)包括:(1)每分鐘最大轉(zhuǎn)速,(2)每轉(zhuǎn)輸出的脈沖數(shù),也就是光電編碼器的分辨率。
接口軟件說明
光電編碼轉(zhuǎn)速測量的驅(qū)動(dòng)程序已內(nèi)置在EM9280的內(nèi)核中,其設(shè)備文件名為”ROT1:”。當(dāng)打開該設(shè)備文件后,EM9280的對應(yīng)管腳(GPIO23和GPIO22)將自動(dòng)轉(zhuǎn)為相應(yīng)的脈沖輸入狀態(tài)。當(dāng)然這兩個(gè)管腳不能再作為通用GPIO或I2C接口使用。
當(dāng)調(diào)用CreateFile(_T(”ROT1:”), ….)打開設(shè)備文件后,可通過WriteFile設(shè)置光電編碼器的參數(shù),參數(shù)包含在以下數(shù)據(jù)結(jié)構(gòu):
typedef struct _ROTARY_ENCODER_INFO
{
BYTE ucSize; // 填入本結(jié)構(gòu)的字節(jié)數(shù) = 21
DWORD dwMaxRotary; // 正常工況每分鐘旋轉(zhuǎn)圈數(shù),單位為rpm
DWORD dwResolution; // 每轉(zhuǎn)輸出的脈沖數(shù)
DWORD dwAlarmRotaryHigh; // 轉(zhuǎn)速報(bào)警高限值,單位rpm,= 0: 禁止該功能
DWORD dwAlarmRotaryLow; // 轉(zhuǎn)速報(bào)警低限值,單位rpm,= 0: 禁止該功能
DWORD dwPeriod; // 采樣周期,單位為ms,= 0:自動(dòng)設(shè)置采樣周期
} ROTARY_ENCODER_INFO, *PROTARY_ENCODER_INFO;
在上述數(shù)據(jù)結(jié)構(gòu)中,dwMaxRotary設(shè)置的上限是編碼器的最高轉(zhuǎn)速,也可根據(jù)實(shí)際應(yīng)用設(shè)置為正常工況的最高轉(zhuǎn)速。本驅(qū)動(dòng)程序支持的采樣間隔共10檔,分別為1ms、2ms、5ms、10ms、20ms、50ms、100ms、200ms、500ms、1000ms。采樣周期與編碼器參數(shù)的關(guān)系為:
N =(dwMaxRotary×dwResolution / 60)× dwPeriod / 1000
上式中N表示在一個(gè)采樣間隔所采集的脈沖數(shù),當(dāng)N為正時(shí),表示順時(shí)針旋轉(zhuǎn),N為負(fù)數(shù)時(shí),表示逆時(shí)針旋轉(zhuǎn)。在本驅(qū)動(dòng)程序中,采集輸出的數(shù)據(jù)即為N,數(shù)據(jù)類型為帶符號(hào)的16-bit整型量。具體設(shè)置并啟動(dòng)測量的API調(diào)用為:
ROTARY_ENCODER_INFO Info; //定義結(jié)構(gòu)對象
DWORD dwReturnWritten; //實(shí)際寫入的字節(jié)數(shù)
//填寫數(shù)據(jù)結(jié)構(gòu)參數(shù)
Info.ucSize = sizeof(ROTARY_ENCODER_INFO);
// … …
WriteFile(hROT, &Info, sizeof(ROTARY_ENCODER_INFO), &dwReturnWritten, 0);
上面調(diào)用中的hROT是CreateFile返回的文件句柄。若dwPeriod設(shè)置為自動(dòng)(= 0),則可通過以下API讀取驅(qū)動(dòng)實(shí)際使用的采樣周期:
ReadFile(hROT, &Info, sizeof(ROTARY_ENCODER_INFO), &dwReturnRead, 0);
若應(yīng)用程序設(shè)置自動(dòng)采樣周期,驅(qū)動(dòng)程序?qū)⒏鶕?jù)光電編碼器的基本參數(shù)(轉(zhuǎn)速和分辨率),選取滿足一定精度的最小采樣周期。
當(dāng)通過WriteFile設(shè)置并啟動(dòng)了轉(zhuǎn)速測量后,還可通過ReadFile隨時(shí)讀取當(dāng)前轉(zhuǎn)速或截止當(dāng)前時(shí)刻的轉(zhuǎn)速數(shù)據(jù)序列(即轉(zhuǎn)速曲線),具體調(diào)用方式為:
int short DBuf[1024]; // 16-bit 帶符號(hào)整型量數(shù)據(jù)buffer
DWORD dwBufLen; // buffer長度,必須兩字節(jié)對齊
DWORD dwReturnRead; // 返回的字節(jié)數(shù)
DWORD dwNbSamples;
dwBufLen = 20 * sizeof(int short); // 采集20個(gè)樣點(diǎn)
dwReturnRead = 0; // 必須置0
ReadFile(hROT, DBuf, dwBufLen, &dwReturnRead, 0);
dwNbSamples = dwReturnRead / sizeof(int short);
注意實(shí)際采集的點(diǎn)數(shù)有可能小于希望采集的點(diǎn)數(shù)。在驅(qū)動(dòng)程序內(nèi)部緩沖的最大數(shù)據(jù)點(diǎn)數(shù)為32K,即32768個(gè)樣點(diǎn)。上面調(diào)用中特別要注意的是dwBufLen必須為兩字節(jié)對齊,這是因?yàn)?6-bit 帶符號(hào)整型量占用2個(gè)字節(jié)。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35616
發(fā)布評論請先 登錄
相關(guān)推薦
編碼器的作用與功能解析
![<b class='flag-5'>編碼器</b>的作用與功能解析](https://file1.elecfans.com/web3/M00/00/39/wKgZPGdHvSqAPp78AAAzhqTTy40014.png)
編碼器種類大觀:探索技術(shù)前沿與應(yīng)用創(chuàng)新
編碼器類型詳解:探索不同編碼技術(shù)的奧秘
![<b class='flag-5'>編碼器</b>類型詳解:探索不同<b class='flag-5'>編碼</b><b class='flag-5'>技術(shù)</b>的奧秘](https://file1.elecfans.com/web1/M00/F5/5F/wKgaoWc74oSAWHJUAACzs7YXEZQ157.png)
二進(jìn)制編碼器與絕對編碼器的區(qū)別
磁電式編碼器好還是光電式編碼器
磁電編碼器和光電編碼器的區(qū)別
光電編碼器碼盤和狹縫設(shè)計(jì)的區(qū)別
光電軸角編碼器和讀數(shù)頭的區(qū)別
光電編碼器的結(jié)構(gòu)和類型
MT6501在線編程磁編碼IC:光電編碼器的理想替代品
光電編碼器是什么?它具有什么特征?
![<b class='flag-5'>光電</b><b class='flag-5'>編碼器</b>是什么?它具有什么特征?](https://file1.elecfans.com/web2/M00/FF/A3/wKgaomajc96AcfV0AAAlK8XhOZY975.png)
怎么用編碼器控制變頻器速度?
![怎么用<b class='flag-5'>編碼器</b>控制變頻<b class='flag-5'>器</b>速度?](https://file1.elecfans.com/web2/M00/F3/14/wKgaomZ3zUyAYIAGAAAx_X0qaaw851.png)
怎么用編碼器控制變頻器速度
絕對值編碼器結(jié)構(gòu)簡介
![絕對值<b class='flag-5'>編碼器</b>結(jié)構(gòu)<b class='flag-5'>簡介</b>](https://file1.elecfans.com/web2/M00/C5/2A/wKgaomXyU6-AC-lJAAB3KQpiu7s655.png)
評論