曾彥龍,俞子榮,陳黎娟
(南昌航空大學(xué)信息工程學(xué)院,江西 南昌 330063)
隨著科學(xué)技術(shù)和工業(yè)制造行業(yè)的迅速發(fā)展,人們對鑄件的薄壁度、復(fù)雜度方面的要求越來越高?,F(xiàn)代鑄造中的真空差壓鑄造技術(shù)很好地滿足了對鑄件生產(chǎn)提出的薄壁化、精密化、復(fù)雜化、高質(zhì)量的要求,因此在航空航天、國防和汽車工業(yè)領(lǐng)域被廣泛運用[1-3]。目前國內(nèi)外的真空差壓鑄造控制系統(tǒng)大都存在人機互動缺乏、成本過高的問題,例如西北工業(yè)大學(xué)研制的TY-1型調(diào)壓鑄造控制系統(tǒng)[4]和北京理工大學(xué)研制的基于8031單片機為核心的真空差壓鑄造控制系統(tǒng)[5],存在著成本和功耗過高、人機互動缺乏、可靠性不強等問題。本文針對此類問題設(shè)計了一種基于ARM的真空差壓鑄造控制系統(tǒng)。該系統(tǒng)通過LCD觸摸屏進行人機交互,并設(shè)有遠程通訊模塊,以實施遠程監(jiān)控;同時具有制造過程參數(shù)存儲、實時參數(shù)曲線顯示及打印等功能。本文介紹了以S3C2440為核心來設(shè)計該真空差壓鑄造控制系統(tǒng),描述了控制和鑄造的實現(xiàn)原理、系統(tǒng)的硬件組成以及對應(yīng)的應(yīng)用軟件。利用該系統(tǒng)可有效地實現(xiàn)對鑄罐壓力的精確控制。系統(tǒng)在鑄造的過程中能夠?qū)崟r顯示鑄造過程中的參數(shù)變化曲線,并且實現(xiàn)網(wǎng)絡(luò)傳輸、存儲打印等功能。該系統(tǒng)有效地提高了控制的可靠性,節(jié)約了制造成本且提高了人機的互動性,具有良好的應(yīng)用推廣前景。
系統(tǒng)通過對各種開關(guān)閥的動作進行控制來達到觸摸屏設(shè)置的工藝參數(shù)要求。根據(jù)工藝流程要求,該控制系統(tǒng)的工藝流程包括抽真空、升液、充型、加壓、升壓、保壓、卸壓階段等。工作流程如圖1所示。
圖1 真空差壓工作流程
基于ARM的真空差壓控制系統(tǒng)主要由4個模塊組成:S3C2440為核心的最小系統(tǒng)模塊、數(shù)據(jù)采集模塊、開關(guān)閥及數(shù)字組合閥模塊和人機交互模塊。S3C2440開發(fā)板為核心的最小系統(tǒng)模塊包括256M的Nandflash、64M內(nèi)存SDRAM以及網(wǎng)卡通信、串口等外圍電路。真空差壓鑄造控制系統(tǒng)框圖如圖2所示。
圖2 ARM為核心的控制系統(tǒng)框圖
壓力采集電路由電流型壓力傳感器ETM-634(X)-375(M)系列和電流環(huán)接收器芯片RCV420組成,傳感器壓力類型為絕壓,輸出方式為4~20 mA電流。電流環(huán)接收器芯片RCV420將壓力傳感器產(chǎn)生的電流直接轉(zhuǎn)換成0~5 V的電壓信號,由于S3C2440自帶的AD芯片只有10位精度,所以利用I2C接口外擴一片16位的ADS1110,ADS1110的基準(zhǔn)電壓為2.048 V,所以前面需要把0~5 V電壓轉(zhuǎn)換成0~2.048 V,經(jīng)過轉(zhuǎn)換成數(shù)字量后傳輸給CPU采集數(shù)據(jù)。壓力采集轉(zhuǎn)換電路如圖3所示。
圖3 壓力采集轉(zhuǎn)換電路
控制輸出開關(guān)閥信號共有9路。S3C2440輸出的數(shù)字量信號由開關(guān)閥驅(qū)動電路放大成驅(qū)動電磁閥的控制信號,實現(xiàn)對開關(guān)閥的控制。開關(guān)閥驅(qū)動電路如圖4所示??刂戚敵鰯?shù)字調(diào)節(jié)閥有2×8路,數(shù)字組合閥是組合式流量調(diào)節(jié)閥,調(diào)節(jié)方式是通過4個節(jié)流口面積大小成8∶4∶2∶1的比例關(guān)系來實現(xiàn)的,相當(dāng)于8個開關(guān)閥,提供256種不同的流量。
圖4 開關(guān)閥驅(qū)動電路
本系統(tǒng)采用由Hitachi日立集團生產(chǎn)的TX09D70VM1CBA液晶屏作為人機界面顯示。該液晶屏提供240×320圖形點陣,262k色真彩色TFT的LCD,支持各種語言,還可自行設(shè)計字庫,使用方便。芯片中VLINE水平同步信號連接CPU里的LCD控制器,表示一行數(shù)據(jù)的開始。VFRAME垂直同步信號表示一幀數(shù)據(jù)的開始。每個VCLCK信號表示正在傳輸一個像素數(shù)據(jù),LCD根據(jù) VLINE、VFRAME、VCLK不停地讀取總線數(shù)據(jù)VD0~VD23顯示。
S3C2440的觸摸屏接口可以驅(qū)動4線電阻觸摸屏,當(dāng)按壓時,相互絕緣的兩層導(dǎo)電層在接觸點相連,不同的觸點在x、y方向上的分壓值不同,將這兩個電壓值經(jīng)過A/D轉(zhuǎn)換后即可得到x、y坐標(biāo)。
該系統(tǒng)軟件分為3個部分:操作性系統(tǒng)平臺搭建、驅(qū)動程序的移植編寫和用戶應(yīng)用程序的設(shè)計。
操作系統(tǒng)的搭建主要包括:Bootloader移植、Linux系統(tǒng)移植、根文件系統(tǒng)的構(gòu)建以及MiniGUI的移植。
(1)Bootloader第一段代碼主要進行硬件設(shè)備初始化,為加載第二段代碼準(zhǔn)備RAM空間,并把第二段代碼復(fù)制過去,然后跳轉(zhuǎn)第二段代碼入口。第二段代碼最重要的任務(wù)是加載和啟動內(nèi)核并傳遞各類參數(shù)給內(nèi)核。Bootloader移植主要有下列幾個步驟,首先新建一個與開發(fā)板相應(yīng)的目錄和文件,直接在board目錄下將smdk2410復(fù)制為100ask24x0,將 include/configs/smdk2410.h 復(fù)制為 100ask24x0.h,復(fù)制后根據(jù)開發(fā)板型號對上述兩文件進行相應(yīng)的修改。然后再修改下面兩處配置文件,分別是頂層的Makefile和board/100ask24x0/Makefile,最后生成 U-boot.bin 下載。
(2)Linux內(nèi)核移植:Linux內(nèi)核主要分為2個階段,第一個內(nèi)核引導(dǎo)階段主要是確定是否支持架構(gòu)和單板、建立一級頁表、使能MMU、保存機器ID等;第二階段主要是設(shè)置與體系機構(gòu)相關(guān)的環(huán)境參數(shù)、初始化控制臺、啟動init的程序等。內(nèi)核移植主要步驟如下:更改頂層的Makefile文件來設(shè)置交叉編譯工具的路徑,修改目錄arch/arm/mach-s3c2440中的晶振頻率,修改mach-smdk2440.c中的機器ID,修改內(nèi)存技術(shù)設(shè)備等,然后再使用arch/configs/S3C2410_deconfig文件來配置內(nèi)核,之后編譯內(nèi)核。內(nèi)核配置完成之后,直接執(zhí)行make進行編譯。最后在/arch/arm/boot目錄中生成需要的內(nèi)核鏡像UImage[6]。
(3)構(gòu)建根文件系統(tǒng):編譯安裝busybox得到一些Linux命令以及第一個啟動的應(yīng)用程序init,然后創(chuàng)建etc配置文件,以及配置文件指定的應(yīng)用程序,安裝glibc庫和創(chuàng)建dev目錄,在Linux操作系統(tǒng)中,設(shè)備文件放在dev目錄中,設(shè)備節(jié)點影響內(nèi)核的啟動,而內(nèi)核的啟動無法自動創(chuàng)建,因此要制作2個設(shè)備節(jié)點:console和null。這2個設(shè)備節(jié)點位于dev目錄下。其他的硬件設(shè)備驅(qū)動也同樣要制作相應(yīng)的設(shè)備節(jié)點。
(4)MiniGUI的移植:首先,通過執(zhí)行#tar-xvjf rmlinux-gcc-3.3.2命令建立交叉編譯環(huán)境。從網(wǎng)上可以下載免費的源代碼包。其中主要有3個:libminigui-1.6.10.tar.gz、minigui-res-1.6.10.tar.gz 和 mgsmaples-1.6.10.tar.gz。然后安裝并編譯 MiniGUI,首先通過#mkdir/minigui建立MiniGUI存放的目錄,編譯安裝 MiniGUI函數(shù)庫,包括 libminigui、libmgext和libvcongui。最后將MiniGUI資源加入開發(fā)板中。將/home/lib目錄下所有庫文件和/minigui/res目錄下所有文件都拷貝在開發(fā)板的/usr/local/lib目錄下;然后再將/home/etc目錄下的MiniGUI.cfg拷貝到開發(fā)板上的/etc目錄下[7]。
驅(qū)動程序包括周邊硬件驅(qū)動程序和應(yīng)用程序驅(qū)動。LCD、I2C等各種周邊硬件驅(qū)動程序已經(jīng)被編進內(nèi)核模塊的驅(qū)動中,再根據(jù)硬件不同進行移植修改。應(yīng)用程序驅(qū)動主要包括底層ADC驅(qū)動程序和GPIO驅(qū)動程序。
3.2.1 AD 驅(qū)動程序設(shè)計
A/D轉(zhuǎn)換屬于字符設(shè)備。設(shè)備驅(qū)動程序就是硬件的接口,連接著用戶空間與硬件。ADS1110通過I2C總線與S3C2440進行數(shù)據(jù)傳輸,I2C驅(qū)動框架如圖5所示。
圖5 I2C驅(qū)動框架
創(chuàng)建ADS1110相關(guān)的結(jié)構(gòu)體,由于是I2C接口的AD,要先構(gòu)造 i2c_client結(jié)構(gòu)體,然后構(gòu)造i2c_drive結(jié)構(gòu)體,里面設(shè)置name以及attach_adapter、detach_client兩個重要函數(shù),使它們分別指向ads1110_attach和 ads1110_detach,以實現(xiàn) I2C總線與ADS1110的連接和分離。還有最重要的函數(shù)ads1110_fops的構(gòu)建,用來存儲驅(qū)動內(nèi)核模塊提供的對設(shè)備進行各種操作的函數(shù)。
首先創(chuàng)建安裝驅(qū)動時的加載函數(shù)ads1110_init,調(diào)用i2c_add_driver(&ads1110_driver),這個函數(shù)會注冊ads1110_driver,把其放入driver鏈表,然后從a-dapter鏈表中取出每一個i2c_adapter,調(diào)用ads1110_attach函數(shù)中的 i2c_probe(adapter,&addr_data,ads1110_detect),來確定是否符合相應(yīng)的設(shè)備地址。如果符合,則調(diào)用ads1110_detect(),否則繼續(xù)取下一個i2c_adapter再比較。而在ads1110_detect()函數(shù)中,則設(shè)置ads1110_client,通過i2c_attach_client()注冊,然后通過 register_chrdev(0,"ads1110",&ads1110_fops)注冊驅(qū)動程序,并把ads1110_fops傳入內(nèi)核,最后調(diào)用class_create()和class_device_create()完成類和類設(shè)備的創(chuàng)建。
ads1110_detach()完成對類和類設(shè)備的注銷以及驅(qū)動的卸載,然后通過調(diào)用i2c_detach_client(client)和kfree(i2c_get_clientdata(client))來完成i2c_client數(shù)據(jù)結(jié)構(gòu)的注銷。
最重要的是ADS1110的讀函數(shù)ads1110_read(),因為ADS1110是通過I2C總線進行傳輸,所以需要確定ADS1110設(shè)備的地址,并按I2C時序來傳輸。首先把ADS1110設(shè)備地址構(gòu)造成I2C消息數(shù)據(jù)組通過i2c_transfer()進行傳輸,確定了對的設(shè)備地址后,再發(fā)出讀命令,調(diào)用i2c_transfer()把采集的數(shù)據(jù)傳輸給內(nèi)核,最后通過copy_to_user()把數(shù)據(jù)從內(nèi)核傳給用戶空間[8]。
3.2.2 GPIO 驅(qū)動程序設(shè)計
GPIO驅(qū)動程序?qū)儆谧址O(shè)備驅(qū)動,本設(shè)計的GPIO驅(qū)動主要是用于控制LED顯示和開關(guān)閥以及數(shù)字組合開關(guān)閥的輸出控制。同樣地,需要入口點通過一個file_operations數(shù)據(jù)結(jié)構(gòu)在注冊設(shè)備文件時與外部調(diào)用函數(shù)關(guān)聯(lián)起來,里面有open函數(shù)以及ioctl函數(shù)等,ioctl中調(diào)用copy_from_user把所需要控制數(shù)字量從用戶空間傳進來,再來通過s3c2410_gpio_setpin輸出控制GPIO口。
圖6 Main函數(shù)流程圖
主任務(wù)是開機后通過MiniGUI中的API函數(shù)來進行界面的繪制,然后進入應(yīng)用程序任務(wù)的主循環(huán);信號采集任務(wù)中,利用16位A/D轉(zhuǎn)換芯片的輸出值經(jīng)過v=Vmax/216×D16的計算得到電壓值。其中Vmax是信號上限值,即2.048 V;D16為A/D轉(zhuǎn)換芯片輸出值。利用內(nèi)核傳回來的采集數(shù)據(jù)和MiniGUI提供的繪圖函數(shù)建立二維坐標(biāo)系,繪制參數(shù)曲線圖形。在控制任務(wù)中,根據(jù)真空差壓設(shè)定好的參數(shù)和實時采集的上下鑄罐以及氣源罐的壓力來進行模糊自適應(yīng)PID控制。PID控制器的輸出值控制開關(guān)閥和數(shù)字組合閥,以達到真空差壓鑄造最佳的壓力參數(shù)值。Main函數(shù)流程如圖6所示。
本文實現(xiàn)了一種可靠性高的全自動化真空差壓鑄造控制系統(tǒng),可以有效地把嵌入式微型計算機的優(yōu)點結(jié)合到鑄造領(lǐng)域,以實現(xiàn)低功耗、低成本的優(yōu)點。系統(tǒng)設(shè)計中針對S3C2440的自身精度缺陷,外擴了4個高分辨率工業(yè)AD芯片,提高了系統(tǒng)的精度。
[1]熊博文,余歡,嚴青松,等.真空差壓鑄造薄壁鑄件的研究進展[J].特種鑄造及有色合金,2012,32(3):238-242.
[2]畢鑒智,曲萬春,王宏偉,等.差壓鑄造的應(yīng)用及發(fā)展[J].鑄造技術(shù),2000(2):16-18.
[3]王新,徐成海,張楊.真空鑄造技術(shù)的研究現(xiàn)狀[J].真空,2005,42(1):6-10.
[4]吳江,馮志軍,閆衛(wèi)平,等.調(diào)壓鑄造技術(shù)的研究現(xiàn)狀及發(fā)展[J].鑄造,2009,58(8):804-809.
[5]劉兵,齊燕山,畢維生,等.真空差壓鑄造調(diào)壓系統(tǒng)及其微計算機控制[J].中國鑄機,1995(6):43-45.
[6]唐征兵.S3C2440下的嵌入式操作系統(tǒng)的移植及應(yīng)用程序開發(fā)[J].現(xiàn)代電子技術(shù),2012,35(24):14-16.
[7]龔惠紅.基于S3C2440的MiniGUI移植[J].現(xiàn)代電子技術(shù),2012,35(12):16-18.
[8]黃建明,劉寶林,徐秀林.基于S3C2440多路A/D轉(zhuǎn)換Linux驅(qū)動程序設(shè)計[J].微計算機信息,2011,27(9):110-111,104.
[9]劉天時,強新建,王瑞,等.ARM7嵌入式開發(fā)基礎(chǔ)實驗[M].北京:北京航空航天大學(xué)出版社,2007.
[10]杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.
[11]范克東,肖世德,龔邦明.基于ARM微處理器的嵌入式數(shù)控系統(tǒng)[J].制造技術(shù)與機床,2006(1):15-17.
[12]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[13]強新建,田澤,劉天時.基于S3C2440的觸摸屏驅(qū)動程序?qū)崿F(xiàn)[J].航空計算技術(shù),2007,37(4):85-87.