嵌入式Linux數(shù)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
時(shí)間:2022-09-24 09:37:39
導(dǎo)語(yǔ):嵌入式Linux數(shù)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要:研究基于嵌入式的數(shù)控系統(tǒng)。采用單CPU架構(gòu)進(jìn)行設(shè)計(jì),系統(tǒng)基于linux和ARM,軟件平臺(tái)采用Linux,從而豐富了ARM處理器的片上資源。為滿足數(shù)控系統(tǒng)高精度控制需求,基于Xenomai對(duì)Linux完成了實(shí)時(shí)性改造,并對(duì)系統(tǒng)軟件結(jié)構(gòu)進(jìn)行設(shè)計(jì),以確保數(shù)控系統(tǒng)功能的實(shí)現(xiàn)。
關(guān)鍵詞:Linux系統(tǒng);嵌入式;數(shù)控系統(tǒng);實(shí)現(xiàn)路徑
裝備制造業(yè)對(duì)數(shù)控機(jī)床的要求逐漸提高,設(shè)備總體功能和性能離不開(kāi)高效的數(shù)控系統(tǒng),嵌入式系統(tǒng)具備小型化、低功耗、穩(wěn)定可靠等優(yōu)勢(shì),應(yīng)用在數(shù)控系統(tǒng)中,可根據(jù)實(shí)際需要對(duì)計(jì)算機(jī)控制系統(tǒng)進(jìn)行配置,實(shí)現(xiàn)智能控制、遠(yuǎn)程控制、故障檢測(cè)等功能,作為數(shù)控機(jī)床的控制中樞,目前主流數(shù)控系統(tǒng)多采用單核ARM平臺(tái),數(shù)控系統(tǒng)性能的提升受到單核處理器自身不足的限制,因此對(duì)于多核平臺(tái)的應(yīng)用成為優(yōu)化嵌入式數(shù)控系統(tǒng)的有效手段。
1現(xiàn)狀分析
數(shù)控系統(tǒng)的硬件平臺(tái)的構(gòu)建目前多通過(guò)上位機(jī)同下位機(jī)協(xié)調(diào)工作的方式實(shí)現(xiàn),上位機(jī)的主要功能在于代碼解釋、數(shù)據(jù)處理等,控制具體的運(yùn)動(dòng)以及采集信號(hào)則由下位機(jī)負(fù)責(zé)完成,但這種方式存在開(kāi)發(fā)周期過(guò)長(zhǎng)、成本較高,難以滿足經(jīng)濟(jì)型數(shù)控系統(tǒng)的控制需求,隨著嵌入式微處理器的發(fā)展與完善,可在同一個(gè)處理器上完成所有的數(shù)控任務(wù),同時(shí)通過(guò)外圍接口電路的設(shè)計(jì),顯著簡(jiǎn)化了數(shù)控系統(tǒng)的規(guī)范化研發(fā)過(guò)程,使系統(tǒng)具備較高的拓展性和穩(wěn)定性[1]。
2.1系統(tǒng)硬件設(shè)計(jì)。在嵌入式數(shù)控系統(tǒng)中使用了S3C2440A,基于ARM920T核的S3C2440A嵌入式微處理器提供完整的通用系統(tǒng)外設(shè),無(wú)需配置額外組件,能夠降低整體系統(tǒng)成本,該芯片上集成了豐富的資源,系統(tǒng)硬件設(shè)計(jì)具體如圖1所示。操作系統(tǒng)及軟件程序都運(yùn)行在S3C2440A上,系統(tǒng)總線上掛接存儲(chǔ)設(shè)備(NANDFLASH,256M),用于存貯各數(shù)控程序、文件系統(tǒng)等,采用同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM,64M)作為內(nèi)存,開(kāi)機(jī)后,操作系統(tǒng)及數(shù)控程序在開(kāi)機(jī)后會(huì)被依次裝入SDRAM中運(yùn)行,前期硬件可通過(guò)JTAG接口實(shí)現(xiàn)在線調(diào)試,對(duì)伺服電動(dòng)機(jī)的控制則通過(guò)濾波處理4路PWM(分別控制x,y,z軸及主軸轉(zhuǎn)速)實(shí)現(xiàn),PWM信號(hào)經(jīng)反相器轉(zhuǎn)換成兩路差分信號(hào)后再通過(guò)運(yùn)算放大器電路得到具有負(fù)極性幅值的PWM信號(hào),經(jīng)濾波放大得到模擬量電壓信號(hào)[-10V,10V],從而實(shí)現(xiàn)對(duì)驅(qū)動(dòng)器轉(zhuǎn)矩指令的控制(電動(dòng)機(jī)在PWM輸出占空比超過(guò)一半時(shí)正轉(zhuǎn))。采用FPGA進(jìn)行擴(kuò)展,轉(zhuǎn)換編碼器信號(hào)(相差90°相位)為計(jì)數(shù)脈沖信號(hào)和方向信號(hào)后,經(jīng)過(guò)FPGA的雙向計(jì)數(shù)器輸出后得到當(dāng)前編碼器的計(jì)數(shù)值,控制單元通過(guò)讀取相應(yīng)地址即可完成編碼器信號(hào)的采集,從而實(shí)現(xiàn)了閉環(huán)控制[2]。2.2軟件平臺(tái)的建立。軟件平臺(tái)是數(shù)控系統(tǒng)運(yùn)行的基礎(chǔ),搭建工作在PC機(jī)上完成,采用Fedora9系統(tǒng)(RedHat公司)作為交叉開(kāi)發(fā)環(huán)境,編譯工作通過(guò)在PC機(jī)上指定的交叉編譯器(arm-l4inux-gcc工具)完成,使其可在ARM處理器中運(yùn)行,在此基礎(chǔ)上即可完成Bootloader、Linux內(nèi)核和文件系統(tǒng)的移植過(guò)程,系統(tǒng)的軟件平臺(tái)如圖2所示。主要由引導(dǎo)裝載程序、Linux內(nèi)核、GUI(圖形用戶接口)等構(gòu)成,作為軟件平臺(tái)的核心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í)時(shí)性改進(jìn)的實(shí)現(xiàn)。由于Linux內(nèi)核時(shí)鐘粒度較為粗糙且不支持完全的搶占,且IRQ中斷需經(jīng)常關(guān)閉,導(dǎo)致Linux的實(shí)時(shí)性較差,為滿足實(shí)時(shí)多任務(wù)控制要求需對(duì)其進(jìn)行改進(jìn),本文采用雙內(nèi)核法對(duì)Linux進(jìn)行實(shí)時(shí)擴(kuò)展,將一個(gè)硬件抽象層加入到Linux內(nèi)核與硬件間(使系統(tǒng)有兩個(gè)內(nèi)核),負(fù)責(zé)系統(tǒng)所有的硬件中斷,根據(jù)進(jìn)程對(duì)實(shí)時(shí)性的要求分配給實(shí)時(shí)內(nèi)核或Linux內(nèi)核進(jìn)行處理和調(diào)度,采用該方法的Xenomai專(zhuān)注于實(shí)時(shí)性,兼容性較好可支持多平臺(tái)使用,采用基于ADEOS的Xenomai使linux更好的滿足工業(yè)實(shí)時(shí)性的需求,同時(shí)使操作系統(tǒng)建的靈活性和可擴(kuò)展性得以提升,各操作系統(tǒng)運(yùn)行于獨(dú)立的域中,重點(diǎn)在于重新編譯Linux內(nèi)核及制作Xenomai庫(kù),具體的實(shí)時(shí)擴(kuò)展工作流程為:先下載好Xenomai源代碼,在Xe-nomai_root中執(zhí)行scripts(腳本子目錄)中prepare-kernel.sh,為linux內(nèi)核源代碼(位于linux_tree目錄中)打上Xeno-mai補(bǔ)丁,指定目標(biāo)平臺(tái)為ARM架構(gòu),在此基礎(chǔ)上完成Linux內(nèi)核的配置及相關(guān)所需Xenomai選項(xiàng)的選?。ㄈ缡欠耜P(guān)閉FPU或開(kāi)啟n-ativeAPI等),makebzImage命令在獲取正確的config文件后即可執(zhí)行,通過(guò)編譯實(shí)現(xiàn)最終嵌入式實(shí)時(shí)Linux內(nèi)核(支持enomai)的獲取,通過(guò)對(duì)Xenomai源碼進(jìn)行編譯即可使用其API編寫(xiě)實(shí)時(shí)任務(wù),從而得到相應(yīng)的實(shí)時(shí)庫(kù)文件,再將庫(kù)文件拷貝到/lib目錄中(位于目標(biāo)平臺(tái)文件系統(tǒng)),從而完成了數(shù)控系統(tǒng)實(shí)時(shí)化改造過(guò)程[4]。
3數(shù)控系統(tǒng)的實(shí)現(xiàn)
數(shù)控系統(tǒng)軟件結(jié)構(gòu)如圖3所示??刂撇糠重?fù)責(zé)完成對(duì)實(shí)時(shí)性要求較高的相關(guān)數(shù)控加工任務(wù),管理部分負(fù)責(zé)提供實(shí)時(shí)性要求低的外圍支持。3.1控制模塊的實(shí)現(xiàn)。該模塊決定著系統(tǒng)的加工性能,需在讀取相應(yīng)數(shù)控程序代碼的基礎(chǔ)上完成一系列的處理,伺服電動(dòng)機(jī)的驅(qū)動(dòng)器接收到最終數(shù)據(jù)后,對(duì)電動(dòng)機(jī)運(yùn)轉(zhuǎn)過(guò)程進(jìn)行控制完成加工任務(wù),其中位置控制對(duì)實(shí)時(shí)性的要求最高,可采用Xenomai提供的API編寫(xiě)實(shí)現(xiàn),以位置控制模塊為例具體實(shí)現(xiàn)過(guò)程如下[5]。(1)首先調(diào)用實(shí)時(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);接下來(lái)開(kāi)始運(yùn)行control_process()函數(shù),利用Xenomai的實(shí)時(shí)管道實(shí)現(xiàn)各控制模塊的數(shù)據(jù)通信(實(shí)時(shí)性要求高),創(chuàng)建如下:intrt_pipe_create(constchar*name,intminor,pool-size)讀寫(xiě)管道數(shù)據(jù)時(shí)實(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ù)的處理,各管理模塊的連接通過(guò)友好的交互界面實(shí)現(xiàn)以便于用戶操作,本文采用Qt/Embedded實(shí)現(xiàn),具體結(jié)構(gòu)如圖4所示。嵌入式領(lǐng)域的開(kāi)源GUI項(xiàng)目中的Qt/Em-bedded支持多平臺(tái),基于C++面向?qū)ο?,提供各種圖形用戶界面所需元素,窗口間相互依存關(guān)系在編程時(shí)可通過(guò)C++的繼承來(lái)實(shí)現(xiàn),能夠使界面程序代碼的重復(fù)部分得以有效降低;窗口中各控件間的通信則可使用Qt中的信號(hào)槽機(jī)制實(shí)現(xiàn),簡(jiǎn)化界面程序編寫(xiě)過(guò)程[6]。
4系統(tǒng)測(cè)試
為檢測(cè)本文所設(shè)計(jì)系統(tǒng)的有效性,對(duì)系統(tǒng)各模塊的功能進(jìn)行檢測(cè),檢測(cè)結(jié)果表明系統(tǒng)具備友好的人機(jī)界面,在PC機(jī)上搭建的軟件平臺(tái)能夠根據(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í)時(shí)性得以有效提高,為縮短插補(bǔ)周期、提高加工效率打下基礎(chǔ),通過(guò)Xenomai提供的API編寫(xiě)可有效實(shí)現(xiàn)代碼解釋、刀具補(bǔ)償、速度規(guī)劃、邏輯運(yùn)算及位置控制等子模塊的功能,具備較高的實(shí)用性和穩(wěn)定性。
5總結(jié)
本文主要研究了基于嵌入式數(shù)控系統(tǒng),采用單CPU架構(gòu)進(jìn)行設(shè)計(jì),系統(tǒng)基于Linux和ARM,系統(tǒng)的硬件平臺(tái)采用FPGA實(shí)現(xiàn)相關(guān)控制與應(yīng)用接口的外圍擴(kuò)展,軟件平臺(tái)采用Linux系統(tǒng),從而豐富了ARM處理器的片上資源,為滿足數(shù)控系統(tǒng)高精度控制需求,基于Xenomai對(duì)Linux完成了實(shí)時(shí)性改造,從而使系統(tǒng)的實(shí)時(shí)多任務(wù)控制要求得以有效滿足,并利用Xenomai提供的豐富API對(duì)系統(tǒng)軟件結(jié)構(gòu)進(jìn)行設(shè)計(jì),以確保數(shù)控系統(tǒng)功能的實(shí)現(xiàn),使其具備較高的靈活性和可靠性。
作者:趙明 單位:煙臺(tái)汽車(chē)工程職業(yè)學(xué)院