任海燕,廖建平,肖述晗,吳帥,尹曉麗
(航空工業(yè)北京長城計(jì)量測試技術(shù)研究所,北京 100095)
國內(nèi)慣性測試設(shè)備的角度編碼器信號(hào)采集通常以單片機(jī)或DSP+FPGA作為系統(tǒng)的控制核心[1-2],屬于采用硬件電路實(shí)現(xiàn),但使用硬件電路時(shí)接口電路復(fù)雜,開放性差,不能實(shí)現(xiàn)系統(tǒng)的可互換性。
為實(shí)現(xiàn)慣性測試設(shè)備高精度伺服控制,不僅需要良好的用戶界面便于用戶使用,更要具有良好的實(shí)時(shí)性能,以保證數(shù)據(jù)的實(shí)時(shí)采集和實(shí)時(shí)發(fā)送。Windows是比較常見的操作系統(tǒng),人機(jī)交互界面良好,但當(dāng)打開程序平臺(tái)太多時(shí),會(huì)出現(xiàn)定時(shí)不準(zhǔn)現(xiàn)象,難以滿足對(duì)實(shí)時(shí)性要求較高的系統(tǒng)需求[3]。RTX操作系統(tǒng)是美國Ardence公司開發(fā)的實(shí)時(shí)子系統(tǒng),用于Windows平臺(tái),不僅具有較強(qiáng)的實(shí)時(shí)性,而且具有較好的穩(wěn)定性及可擴(kuò)展性[4-5]。本文基于RTX+Windows系統(tǒng)平臺(tái)進(jìn)行角度編碼器信號(hào)的實(shí)時(shí)采集研究。
RTX+Windows系統(tǒng)平臺(tái)是在Windows系統(tǒng)基礎(chǔ)上拓展實(shí)時(shí)子系統(tǒng)RTSS[6],該平臺(tái)不僅繼承了原有Windows操作系統(tǒng)的優(yōu)點(diǎn),而且提高了系統(tǒng)實(shí)時(shí)性,使線程間切換時(shí)間極大地縮短。RTX+Windows系統(tǒng)平臺(tái)也是目前Windows平臺(tái)上唯一基于軟件的硬實(shí)時(shí)解決方案[7-8]。
本文以單軸轉(zhuǎn)臺(tái)為應(yīng)用對(duì)象。單軸轉(zhuǎn)臺(tái)主要由三部分組成:臺(tái)體、采集及控制系統(tǒng)和計(jì)算機(jī)系統(tǒng)。臺(tái)體為立式結(jié)構(gòu);采集及控制系統(tǒng)用于實(shí)時(shí)采集轉(zhuǎn)臺(tái)角位置并控制臺(tái)體按照指令進(jìn)行回轉(zhuǎn)運(yùn)動(dòng);計(jì)算機(jī)系統(tǒng)主要為工控機(jī),用于采集數(shù)據(jù)及發(fā)送指令[9]。
該單軸轉(zhuǎn)臺(tái)控制系統(tǒng)要求根據(jù)給定的指令,通過計(jì)算機(jī)系統(tǒng)生成控制律,通過DA卡作用于驅(qū)動(dòng)器,從而控制電機(jī),其中采集的角度編碼器信號(hào)用于轉(zhuǎn)臺(tái)角位置反饋,實(shí)現(xiàn)對(duì)轉(zhuǎn)臺(tái)角位置的閉環(huán)控制。
由于單軸轉(zhuǎn)臺(tái)控制系統(tǒng)為閉環(huán)系統(tǒng),需要角度編碼器信號(hào)作為反饋元件,修正位置指令與反饋位置的誤差。因此角度編碼器的精度直接影響了系統(tǒng)的位置精度。
相較于相對(duì)編碼器,絕對(duì)編碼器抗干擾能力強(qiáng),用于控制系統(tǒng)更可靠。其中德國HEIDENHAIN公司絕對(duì)式光柵編碼器性能較強(qiáng)、可靠性高,并且重復(fù)性好。該編碼器可輸出ENDAT,1Vpp等信號(hào),其中ENDAT協(xié)議輸出絕對(duì)位置編碼數(shù)據(jù)。
HEIDENHAIN計(jì)數(shù)卡IK220是一個(gè)基于PCI的PC計(jì)算機(jī)擴(kuò)展卡,用于記錄絕對(duì)式角度編碼器測量值[10],與HEIDENHAIN絕對(duì)編碼器配套使用,對(duì)模擬信號(hào)的細(xì)分倍數(shù)高,準(zhǔn)確度高且實(shí)時(shí)性強(qiáng),對(duì)實(shí)現(xiàn)基于軟件的硬實(shí)時(shí)采集具有重要作用。
該單軸轉(zhuǎn)臺(tái)控制系統(tǒng)通過IK220計(jì)數(shù)卡實(shí)時(shí)采集轉(zhuǎn)臺(tái)角度編碼器信號(hào),并通過RTX系統(tǒng)實(shí)時(shí)驅(qū)動(dòng)IK220計(jì)數(shù)卡,實(shí)時(shí)讀取角位置數(shù)據(jù)。
系統(tǒng)硬件方案如圖1所示,系統(tǒng)根據(jù)實(shí)時(shí)讀取的角位置數(shù)據(jù)及位置指令,設(shè)計(jì)控制算法得到實(shí)時(shí)控制律,從而對(duì)該單軸轉(zhuǎn)臺(tái)進(jìn)行高精度控制??刂撇呗圆捎梦恢铆h(huán)和電流環(huán)雙閉環(huán),其中位置環(huán)采用經(jīng)典數(shù)字PID算法。角度編碼器信號(hào)的采集及控制均通過下位機(jī)實(shí)現(xiàn)。
圖1 單軸轉(zhuǎn)臺(tái)系統(tǒng)硬件方案圖
由于Windows系統(tǒng)是非實(shí)時(shí)系統(tǒng)[11],故IK220針對(duì)Windows系統(tǒng)的驅(qū)動(dòng)程序,不能滿足單軸轉(zhuǎn)臺(tái)控制實(shí)時(shí)性的需求。故研究基于RTX的IK220接口驅(qū)動(dòng)程序設(shè)計(jì),實(shí)時(shí)采集角度編碼器測量位置值,進(jìn)而實(shí)現(xiàn)單軸轉(zhuǎn)臺(tái)位置和速率的高精度控制。
RTX實(shí)時(shí)線程的調(diào)用機(jī)制是獨(dú)立的,且RTSS線程優(yōu)先級(jí)高于Windows線程,可直接訪問I/O設(shè)備。同時(shí),RTSS支持通過共享內(nèi)存、事件和信號(hào)量等實(shí)現(xiàn)與非實(shí)時(shí)進(jìn)程的通訊[12]。
本系統(tǒng)中驅(qū)動(dòng)程序用于完成硬件和控制軟件的數(shù)據(jù)和信息的交互。與常用Windows系統(tǒng)下的驅(qū)動(dòng)程序[13-14]相比,RTX驅(qū)動(dòng)程序是開放的,可以通過RTX函數(shù)直接訪問外部硬件,操作方便快捷。在RTX下,PCI設(shè)備和RTX基本內(nèi)核位于驅(qū)動(dòng)底層,RTX內(nèi)核可以通過I/O和中斷方式與PCI設(shè)備進(jìn)行數(shù)據(jù)交換[1],提高設(shè)備的實(shí)時(shí)性能,RTX定時(shí)精度可達(dá)0.1μs。RTX應(yīng)用程序由Visual Studio建立,使用RTX Driver Wizard生成驅(qū)動(dòng)程序框架,生成的文件類型是“rtss”。
驅(qū)動(dòng)程序設(shè)計(jì)主要包括設(shè)備初始化、物理地址的映射、基本的控制操作以及檢測處理設(shè)備錯(cuò)誤等?;赗TX驅(qū)動(dòng)程序框圖如圖2所示。
圖2 基于RTX驅(qū)動(dòng)程序框圖
IK220卡是PCI總線形式計(jì)數(shù)卡,內(nèi)部寄存器采用內(nèi)部映射方式,板卡的制造商號(hào)和設(shè)備號(hào)分別為0X10B5和0X9050。目前HEIDENHAI公司只提供Windows下和LINUX下的軟件開發(fā)包,無法用于實(shí)時(shí)控制領(lǐng)域中的數(shù)據(jù)采集。本文通過研究IK220卡的采集原理,實(shí)現(xiàn)基于RTX的IK220接口驅(qū)動(dòng)程序。
與其他板卡不同,IK220板卡上電后,需要下傳DSP固件代碼,開始啟動(dòng)板卡操作。IK220具有16個(gè)16位寄存器,其中控制寄存器用于設(shè)置板卡工作模式,命令寄存器用于控制板卡、讀寫數(shù)據(jù)等操作,IK220通過上述寄存器與板上DSP處理器進(jìn)行通訊,DSP根據(jù)指令再進(jìn)行相應(yīng)控制。基于RTX的IK220接口驅(qū)動(dòng)程序流程圖如圖3所示。
圖3 IK220接口驅(qū)動(dòng)程序流程圖
程序設(shè)計(jì)主要包含以下內(nèi)容:
1)尋找匹配設(shè)備。首先尋找所有的PCI設(shè)備,通過設(shè)備號(hào)和制造商獲取PCI板卡的基地址,為對(duì)設(shè)備操作做準(zhǔn)備。其中RtGetBusDataByOffset()函數(shù)可獲取PCI板卡配置空間[15]。
RtGetBusDataByOffset(PCIConfiguration,
uBusNum,
SlotNumber.u.AsULONG.//logical slot number
PciData,
uOffset,
PCI_COMMON_HDR_LENGTH);
2)將設(shè)備的物理地址映射為系統(tǒng)地址。驅(qū)動(dòng)程序只有將設(shè)備物理地址轉(zhuǎn)換成系統(tǒng)映射地址,才可以實(shí)現(xiàn)對(duì)設(shè)備的操作。其中RtTranslateBusAddress()函數(shù)用來將PCI板卡寄存器基地址轉(zhuǎn)換為系統(tǒng)映射地址,RtMapMemory()函數(shù)的作用是將PCI板卡內(nèi)存映射地址賦予指針變量,對(duì)板卡操作可通過該指針變量實(shí)現(xiàn)[10]。
RtTranslateBusAddress(PCIBus,BusNum,PortAdd,
&AddSpace,&uPortAdd);
BaseAddress=RtMapMemory(uPortAdd,4*1024,0);
3)設(shè)備基本操作,包括IK220初始化、IK220啟動(dòng)及停止、讀寫寄存器、讀寫數(shù)據(jù)等。由于地址映射到I/O空間,可對(duì)設(shè)備直接進(jìn)行操作。
*pData=*(PortBase[Axis]+Adr);
//Read word value from register to pData
*(PortBase[Axis]+Adr)=Data;
//Writes Data to Axis at Adr
為了驗(yàn)證基于RTX的IK220接口驅(qū)動(dòng)程序的有效性,在單軸轉(zhuǎn)臺(tái)控制系統(tǒng)中進(jìn)行角位置的多位置采集測試。手動(dòng)轉(zhuǎn)動(dòng)轉(zhuǎn)臺(tái)角度,若采集角位置結(jié)果與轉(zhuǎn)動(dòng)角位置結(jié)果一致,則證明驅(qū)動(dòng)程序各部分函數(shù)都能實(shí)現(xiàn)。
為了驗(yàn)證角位置實(shí)時(shí)采集效果,需對(duì)轉(zhuǎn)臺(tái)進(jìn)行角位置精度檢測以及轉(zhuǎn)臺(tái)動(dòng)態(tài)性能檢測,在RTX實(shí)時(shí)系統(tǒng)中,設(shè)置定時(shí)精度為1 ms。角位置精度檢測方法參照GJB 1801-93《慣性技術(shù)測試設(shè)備主要性能試驗(yàn)方法》中方法104《角位置測量試驗(yàn)》,角位置精度檢測結(jié)果為±2″。轉(zhuǎn)臺(tái)動(dòng)態(tài)性能檢測中,位置指令設(shè)置為幅值0.2°,頻率為1 Hz的正弦信號(hào),位置指令和實(shí)際角位置采集結(jié)果如圖4所示,從圖4中可看出,實(shí)時(shí)角位置與指令結(jié)果一致,幅值誤差小于0.5%。
圖4 角位置指令與采集實(shí)時(shí)位置
以上檢測結(jié)果表明,本文設(shè)計(jì)的基于RTX的角度編碼器信號(hào)實(shí)時(shí)采集系統(tǒng)滿足對(duì)轉(zhuǎn)臺(tái)的實(shí)時(shí)控制要求,并且性能結(jié)果滿足實(shí)際工程需求。
以慣性測試設(shè)備為應(yīng)用對(duì)象,設(shè)計(jì)了基于RTX的IK220接口驅(qū)動(dòng)程序,并成功應(yīng)用于單軸轉(zhuǎn)臺(tái)控制系統(tǒng),實(shí)現(xiàn)單軸轉(zhuǎn)臺(tái)基于RTX的角度編碼器信號(hào)實(shí)時(shí)采集,為實(shí)現(xiàn)單軸轉(zhuǎn)臺(tái)的位置和速率高精度控制奠定基礎(chǔ)。本文的設(shè)計(jì)方法可進(jìn)一步應(yīng)用于慣性測試設(shè)備控制系統(tǒng)的其他PCI接口板卡的實(shí)時(shí)驅(qū)動(dòng),從而提高了對(duì)慣性測試設(shè)備控制系統(tǒng)的控制性能。