嵌入式Linux數(shù)控系統(tǒng)設(shè)計與實(shí)現(xiàn)

時間:2022-09-24 09:37:39

導(dǎo)語:嵌入式Linux數(shù)控系統(tǒng)設(shè)計與實(shí)現(xiàn)一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

嵌入式Linux數(shù)控系統(tǒng)設(shè)計與實(shí)現(xiàn)

摘要:研究基于嵌入式的數(shù)控系統(tǒng)。采用單CPU架構(gòu)進(jìn)行設(shè)計,系統(tǒng)基于linux和ARM,軟件平臺采用Linux,從而豐富了ARM處理器的片上資源。為滿足數(shù)控系統(tǒng)高精度控制需求,基于Xenomai對Linux完成了實(shí)時性改造,并對系統(tǒng)軟件結(jié)構(gòu)進(jìn)行設(shè)計,以確保數(shù)控系統(tǒng)功能的實(shí)現(xiàn)。

關(guān)鍵詞:Linux系統(tǒng);嵌入式;數(shù)控系統(tǒng);實(shí)現(xiàn)路徑

裝備制造業(yè)對數(shù)控機(jī)床的要求逐漸提高,設(shè)備總體功能和性能離不開高效的數(shù)控系統(tǒng),嵌入式系統(tǒng)具備小型化、低功耗、穩(wěn)定可靠等優(yōu)勢,應(yīng)用在數(shù)控系統(tǒng)中,可根據(jù)實(shí)際需要對計算機(jī)控制系統(tǒng)進(jìn)行配置,實(shí)現(xiàn)智能控制、遠(yuǎn)程控制、故障檢測等功能,作為數(shù)控機(jī)床的控制中樞,目前主流數(shù)控系統(tǒng)多采用單核ARM平臺,數(shù)控系統(tǒng)性能的提升受到單核處理器自身不足的限制,因此對于多核平臺的應(yīng)用成為優(yōu)化嵌入式數(shù)控系統(tǒng)的有效手段。

1現(xiàn)狀分析

數(shù)控系統(tǒng)的硬件平臺的構(gòu)建目前多通過上位機(jī)同下位機(jī)協(xié)調(diào)工作的方式實(shí)現(xiàn),上位機(jī)的主要功能在于代碼解釋、數(shù)據(jù)處理等,控制具體的運(yùn)動以及采集信號則由下位機(jī)負(fù)責(zé)完成,但這種方式存在開發(fā)周期過長、成本較高,難以滿足經(jīng)濟(jì)型數(shù)控系統(tǒng)的控制需求,隨著嵌入式微處理器的發(fā)展與完善,可在同一個處理器上完成所有的數(shù)控任務(wù),同時通過外圍接口電路的設(shè)計,顯著簡化了數(shù)控系統(tǒng)的規(guī)范化研發(fā)過程,使系統(tǒng)具備較高的拓展性和穩(wěn)定性[1]。

2系統(tǒng)設(shè)計

2.1系統(tǒng)硬件設(shè)計。在嵌入式數(shù)控系統(tǒng)中使用了S3C2440A,基于ARM920T核的S3C2440A嵌入式微處理器提供完整的通用系統(tǒng)外設(shè),無需配置額外組件,能夠降低整體系統(tǒng)成本,該芯片上集成了豐富的資源,系統(tǒng)硬件設(shè)計具體如圖1所示。操作系統(tǒng)及軟件程序都運(yùn)行在S3C2440A上,系統(tǒng)總線上掛接存儲設(shè)備(NANDFLASH,256M),用于存貯各數(shù)控程序、文件系統(tǒng)等,采用同步動態(tài)隨機(jī)存儲器(SDRAM,64M)作為內(nèi)存,開機(jī)后,操作系統(tǒng)及數(shù)控程序在開機(jī)后會被依次裝入SDRAM中運(yùn)行,前期硬件可通過JTAG接口實(shí)現(xiàn)在線調(diào)試,對伺服電動機(jī)的控制則通過濾波處理4路PWM(分別控制x,y,z軸及主軸轉(zhuǎn)速)實(shí)現(xiàn),PWM信號經(jīng)反相器轉(zhuǎn)換成兩路差分信號后再通過運(yùn)算放大器電路得到具有負(fù)極性幅值的PWM信號,經(jīng)濾波放大得到模擬量電壓信號[-10V,10V],從而實(shí)現(xiàn)對驅(qū)動器轉(zhuǎn)矩指令的控制(電動機(jī)在PWM輸出占空比超過一半時正轉(zhuǎn))。采用FPGA進(jìn)行擴(kuò)展,轉(zhuǎn)換編碼器信號(相差90°相位)為計數(shù)脈沖信號和方向信號后,經(jīng)過FPGA的雙向計數(shù)器輸出后得到當(dāng)前編碼器的計數(shù)值,控制單元通過讀取相應(yīng)地址即可完成編碼器信號的采集,從而實(shí)現(xiàn)了閉環(huán)控制[2]。2.2軟件平臺的建立。軟件平臺是數(shù)控系統(tǒng)運(yùn)行的基礎(chǔ),搭建工作在PC機(jī)上完成,采用Fedora9系統(tǒng)(RedHat公司)作為交叉開發(fā)環(huán)境,編譯工作通過在PC機(jī)上指定的交叉編譯器(arm-l4inux-gcc工具)完成,使其可在ARM處理器中運(yùn)行,在此基礎(chǔ)上即可完成Bootloader、Linux內(nèi)核和文件系統(tǒng)的移植過程,系統(tǒng)的軟件平臺如圖2所示。主要由引導(dǎo)裝載程序、Linux內(nèi)核、GUI(圖形用戶接口)等構(gòu)成,作為軟件平臺的核心Linux內(nèi)核的功能在于調(diào)度進(jìn)程、內(nèi)存管理及通信等;系統(tǒng)運(yùn)行所需的文件和數(shù)控軟件都包含在文件系統(tǒng)內(nèi);引導(dǎo)裝載程序(u-boot)的作用功能在于硬件設(shè)備的初始化處理、內(nèi)存空間映射表的建立等,以便于操作系統(tǒng)的后續(xù)運(yùn)行;GUI提供了豐富的接口,顯著降低了軟件實(shí)現(xiàn)的難度[3]。2.3實(shí)時性改進(jìn)的實(shí)現(xiàn)。由于Linux內(nèi)核時鐘粒度較為粗糙且不支持完全的搶占,且IRQ中斷需經(jīng)常關(guān)閉,導(dǎo)致Linux的實(shí)時性較差,為滿足實(shí)時多任務(wù)控制要求需對其進(jìn)行改進(jìn),本文采用雙內(nèi)核法對Linux進(jìn)行實(shí)時擴(kuò)展,將一個硬件抽象層加入到Linux內(nèi)核與硬件間(使系統(tǒng)有兩個內(nèi)核),負(fù)責(zé)系統(tǒng)所有的硬件中斷,根據(jù)進(jìn)程對實(shí)時性的要求分配給實(shí)時內(nèi)核或Linux內(nèi)核進(jìn)行處理和調(diào)度,采用該方法的Xenomai專注于實(shí)時性,兼容性較好可支持多平臺使用,采用基于ADEOS的Xenomai使linux更好的滿足工業(yè)實(shí)時性的需求,同時使操作系統(tǒng)建的靈活性和可擴(kuò)展性得以提升,各操作系統(tǒng)運(yùn)行于獨(dú)立的域中,重點(diǎn)在于重新編譯Linux內(nèi)核及制作Xenomai庫,具體的實(shí)時擴(kuò)展工作流程為:先下載好Xenomai源代碼,在Xe-nomai_root中執(zhí)行scripts(腳本子目錄)中prepare-kernel.sh,為linux內(nèi)核源代碼(位于linux_tree目錄中)打上Xeno-mai補(bǔ)丁,指定目標(biāo)平臺為ARM架構(gòu),在此基礎(chǔ)上完成Linux內(nèi)核的配置及相關(guān)所需Xenomai選項(xiàng)的選?。ㄈ缡欠耜P(guān)閉FPU或開啟n-ativeAPI等),makebzImage命令在獲取正確的config文件后即可執(zhí)行,通過編譯實(shí)現(xiàn)最終嵌入式實(shí)時Linux內(nèi)核(支持enomai)的獲取,通過對Xenomai源碼進(jìn)行編譯即可使用其API編寫實(shí)時任務(wù),從而得到相應(yīng)的實(shí)時庫文件,再將庫文件拷貝到/lib目錄中(位于目標(biāo)平臺文件系統(tǒng)),從而完成了數(shù)控系統(tǒng)實(shí)時化改造過程[4]。

3數(shù)控系統(tǒng)的實(shí)現(xiàn)

數(shù)控系統(tǒng)軟件結(jié)構(gòu)如圖3所示。控制部分負(fù)責(zé)完成對實(shí)時性要求較高的相關(guān)數(shù)控加工任務(wù),管理部分負(fù)責(zé)提供實(shí)時性要求低的外圍支持。3.1控制模塊的實(shí)現(xiàn)。該模塊決定著系統(tǒng)的加工性能,需在讀取相應(yīng)數(shù)控程序代碼的基礎(chǔ)上完成一系列的處理,伺服電動機(jī)的驅(qū)動器接收到最終數(shù)據(jù)后,對電動機(jī)運(yùn)轉(zhuǎn)過程進(jìn)行控制完成加工任務(wù),其中位置控制對實(shí)時性的要求最高,可采用Xenomai提供的API編寫實(shí)現(xiàn),以位置控制模塊為例具體實(shí)現(xiàn)過程如下[5]。(1)首先調(diào)用實(shí)時任務(wù)創(chuàng)建函數(shù)(位于XenomaiAPI中),函數(shù)在線程創(chuàng)建成功后返回0,具體的函數(shù)表達(dá)式如下:rt_task_create(task,constchar*name,intstksize,intprio,mode);(2)位置控制的處理函數(shù)表示如下:voidcontrol_process(void){/*程周期設(shè)為1000μs*/rt_task_set_periodic(NULL,TM_NOW,1000000);while(1)/*處理位置控制的代碼*/……}(3)運(yùn)行位置控制線程所調(diào)用的函數(shù)表示如下:rt_task_start((void*)control_process,void*arg);接下來開始運(yùn)行control_process()函數(shù),利用Xenomai的實(shí)時管道實(shí)現(xiàn)各控制模塊的數(shù)據(jù)通信(實(shí)時性要求高),創(chuàng)建如下:intrt_pipe_create(constchar*name,intminor,pool-size)讀寫管道數(shù)據(jù)時實(shí)施層調(diào)用函數(shù)如下:ssize_trt_pipe_read(void*buf,size_tsize,timeout);ssize_trt_pipe_write(constvoid*buf,size_tsize,intmode);3.2管理模塊的實(shí)現(xiàn)。采用Linux提供的系統(tǒng)調(diào)用API實(shí)現(xiàn)管理任務(wù)的處理,各管理模塊的連接通過友好的交互界面實(shí)現(xiàn)以便于用戶操作,本文采用Qt/Embedded實(shí)現(xiàn),具體結(jié)構(gòu)如圖4所示。嵌入式領(lǐng)域的開源GUI項(xiàng)目中的Qt/Em-bedded支持多平臺,基于C++面向?qū)ο?,提供各種圖形用戶界面所需元素,窗口間相互依存關(guān)系在編程時可通過C++的繼承來實(shí)現(xiàn),能夠使界面程序代碼的重復(fù)部分得以有效降低;窗口中各控件間的通信則可使用Qt中的信號槽機(jī)制實(shí)現(xiàn),簡化界面程序編寫過程[6]。

4系統(tǒng)測試

為檢測本文所設(shè)計系統(tǒng)的有效性,對系統(tǒng)各模塊的功能進(jìn)行檢測,檢測結(jié)果表明系統(tǒng)具備友好的人機(jī)界面,在PC機(jī)上搭建的軟件平臺能夠根據(jù)實(shí)際需要調(diào)度進(jìn)程、管理內(nèi)存等保證了通信質(zhì)量,系統(tǒng)運(yùn)行所需的文件和數(shù)控軟件都包含在文件系統(tǒng)內(nèi),結(jié)合提供豐富接口的GUI,使數(shù)控系統(tǒng)調(diào)度任務(wù)的實(shí)時性得以有效提高,為縮短插補(bǔ)周期、提高加工效率打下基礎(chǔ),通過Xenomai提供的API編寫可有效實(shí)現(xiàn)代碼解釋、刀具補(bǔ)償、速度規(guī)劃、邏輯運(yùn)算及位置控制等子模塊的功能,具備較高的實(shí)用性和穩(wěn)定性。

5總結(jié)

本文主要研究了基于嵌入式數(shù)控系統(tǒng),采用單CPU架構(gòu)進(jìn)行設(shè)計,系統(tǒng)基于Linux和ARM,系統(tǒng)的硬件平臺采用FPGA實(shí)現(xiàn)相關(guān)控制與應(yīng)用接口的外圍擴(kuò)展,軟件平臺采用Linux系統(tǒng),從而豐富了ARM處理器的片上資源,為滿足數(shù)控系統(tǒng)高精度控制需求,基于Xenomai對Linux完成了實(shí)時性改造,從而使系統(tǒng)的實(shí)時多任務(wù)控制要求得以有效滿足,并利用Xenomai提供的豐富API對系統(tǒng)軟件結(jié)構(gòu)進(jìn)行設(shè)計,以確保數(shù)控系統(tǒng)功能的實(shí)現(xiàn),使其具備較高的靈活性和可靠性。

作者:趙明 單位:煙臺汽車工程職業(yè)學(xué)院