實(shí)現(xiàn)EMC2的硬件抽象層
1 概 述
嵌入式系統(tǒng)具有專用性強(qiáng)、外圍設(shè)備多樣的特性,這決定了其應(yīng)用的硬件環(huán)境差異性較大。系統(tǒng)軟件模塊與硬件之間的接口是嵌入式實(shí)時(shí)系統(tǒng)的主要特征,是系統(tǒng)設(shè)計(jì)過(guò)程中的必需環(huán)節(jié),也是影響嵌入式系統(tǒng)應(yīng)用前景的關(guān)鍵問(wèn)題之一。硬件抽象層(Hardware Abstraction Layer,HAL)的引入可有效解決這一問(wèn)題。HAL是將硬件平臺(tái)與應(yīng)用軟件隔離開(kāi)來(lái)的軟件層次,通過(guò)硬件抽象技術(shù)實(shí)現(xiàn)硬件相關(guān)和硬件無(wú)關(guān)兩部分程序代碼的隔離,為應(yīng)用軟件提供一個(gè)沒(méi)有硬件特性的接口。硬件抽象層的引入不僅是系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)方法的改進(jìn),更直接關(guān)系到整個(gè)系統(tǒng)的開(kāi)發(fā)模式以及嵌入式操作系統(tǒng)的可移植性。硬件抽象層的引入大大推動(dòng)了嵌入式系統(tǒng)開(kāi)發(fā)的規(guī)范化進(jìn)程。
EMC是一個(gè)開(kāi)放源代碼的用于機(jī)床或機(jī)器人等運(yùn)動(dòng)控制系統(tǒng)的計(jì)算機(jī)控制軟件。它能同時(shí)驅(qū)動(dòng)9軸電機(jī)。其運(yùn)動(dòng)控制特性包括:刀具半徑和長(zhǎng)度補(bǔ)償、軸同步運(yùn)動(dòng)、自適應(yīng)進(jìn)給速度、恒速度控制等。EMC2在原有EMC軟件的基礎(chǔ)上加入了許多新的特性和功能,其中包括了HAL和軟件PLC模塊ClassicLadder。ClassicLadder是一個(gè)基于LGPL協(xié)議的梯形圖解釋器。它隨著EMC2一起發(fā)布,可以與EMC2的HAL一起工作。本文中的控制系統(tǒng)利用EMC2的HAL為軟PLC中的應(yīng)用程序提供底層硬件操作支持,提高了應(yīng)用程序的平臺(tái)無(wú)關(guān)性與可移植性。
2 硬件架構(gòu)
控制器是鋰電池卷繞恒張力控制器,采用符合PC/104總線規(guī)范的單板計(jì)算機(jī)(以下簡(jiǎn)稱PC104)與基于FPGA的專用主機(jī)板相結(jié)合的方法構(gòu)建系統(tǒng)硬件。PC104中運(yùn)行實(shí)時(shí)Linux,ClassicLadder及HAL作為實(shí)時(shí)模塊加載到Linux系統(tǒng)中。
系統(tǒng)硬件框圖如圖1所示。其中ADS8361為12位模/數(shù)轉(zhuǎn)換器,用于采集張力值等模擬量;AD5624為數(shù)/模轉(zhuǎn)換器,用于控制直流電機(jī)轉(zhuǎn)速及氣壓閥壓力值;FPGA控制所有外圍芯片,并產(chǎn)生電機(jī)脈沖方向信號(hào),同時(shí)對(duì)電機(jī)編碼器信號(hào)進(jìn)行計(jì)數(shù);CPLD控制I/O輸入/輸出點(diǎn),并與FPGA交換信息。利用EMC2中HAL的實(shí)現(xiàn)原理,可編寫(xiě)組件將硬件系統(tǒng)所有設(shè)備抽象成引腳和函數(shù)的形式,供軟PLC在需要時(shí)加載。
3 EMC2中HAL的基本概念
EMC2的HAL提供了一種簡(jiǎn)便方法,將一些已有軟硬件模塊進(jìn)行加載和組合形成一個(gè)復(fù)雜的系統(tǒng),從而使EMC2更容易配置,以使用各種硬件設(shè)備。硬件資源在HAL中被封裝成特定組件,隨時(shí)被控制系統(tǒng)載入使用。EMC2中的HAL有以下基本概念:
Component,組件。是定義好輸入、輸出及行為的軟件模塊,可以在需要時(shí)安裝及連接。
Parameter,參數(shù)。許多硬件組件有可調(diào)整參數(shù)需要進(jìn)行訪問(wèn)。HAL有輸入及輸出兩種類型的參數(shù)。
Pin,引腳。硬件組件用于互聯(lián)的連接端子。所有Pin都有名稱,并在連接時(shí)使用。HAL的Pin是只存在于計(jì)算機(jī)內(nèi)的軟件實(shí)體。
Physical_Pin,物理引腳。許多I/O設(shè)備有真正的物理引腳或終端連接到外部硬件,這些被稱為物理引腳。
Signal,信號(hào)?,F(xiàn)實(shí)中硬件組件使用導(dǎo)線互連。在HAL中導(dǎo)線相當(dāng)于“信號(hào)”。HAL的信號(hào)將HAL的引腳連接在一起,可以隨意斷開(kāi)或重新連接。
Type,類型。引腳和信號(hào)都有類型屬性,即信號(hào)只能連接到相同類型的引腳。目前,HAL有4種類型:BIT、FLOAT、U32、S32。
Function,函數(shù)。每個(gè)函數(shù)是一個(gè)執(zhí)行具體行為的代碼塊,執(zhí)行讀取輸入、計(jì)算輸出等操作。系統(tǒng)設(shè)計(jì)者可以使用“線程”對(duì)一系列函數(shù)加以調(diào)度,以使其按照特定的順序及時(shí)間間隔運(yùn)行。
Thread,線程。作為一個(gè)實(shí)時(shí)任務(wù)的組成部分,線程是一個(gè)以特定時(shí)間間隔運(yùn)行的函數(shù)序列。函數(shù)可以添加到線程并在每次線程運(yùn)行時(shí)調(diào)用。
評(píng)論