丘宏烈,楊燕祥,羅曉雪,付元柄,袁鵬飛
(西華大學(xué) 電氣信息學(xué)院,四川 成都 610039)
在工業(yè)電力傳動(dòng)現(xiàn)場(chǎng)的實(shí)際應(yīng)用過程中,常常需要監(jiān)測(cè)現(xiàn)場(chǎng)設(shè)備。通過監(jiān)測(cè)采集設(shè)備的運(yùn)行參數(shù)實(shí)時(shí)了解、跟蹤設(shè)備的運(yùn)行狀態(tài),進(jìn)而分析和診斷設(shè)備。
ARM技術(shù)是嵌入式系統(tǒng)的重要技術(shù)。在眾多嵌入式系統(tǒng)廠家參與下,基于ARM系列處理器的應(yīng)用技術(shù)在眾多領(lǐng)域取得突破性進(jìn)展。
ARM技術(shù)中的數(shù)據(jù)采集正向著強(qiáng)實(shí)時(shí)、高精度等方向發(fā)展;數(shù)據(jù)傳輸部分向多通信方式、遠(yuǎn)距離數(shù)據(jù)傳輸?shù)姆较虬l(fā)展。使用ARM處理器對(duì)工業(yè)電力傳動(dòng)現(xiàn)場(chǎng)的電力參數(shù)進(jìn)行采集是基于ARM的數(shù)據(jù)采集系統(tǒng)具有高精度、高速度、強(qiáng)實(shí)時(shí)等特點(diǎn)。
本文采用μCLinux嵌入式操作系統(tǒng)構(gòu)建ARM7硬件平臺(tái),并對(duì)實(shí)時(shí)性要求較高的數(shù)據(jù)采集、傳輸以及顯示進(jìn)行了研究設(shè)計(jì)和實(shí)現(xiàn)。
系統(tǒng)采集兩路電壓參數(shù)的功能如圖1所示。
圖1 系統(tǒng)電力參數(shù)監(jiān)測(cè)功能圖Fig.1 Functional block diagram of system power parameters monitor
整個(gè)監(jiān)測(cè)系統(tǒng)以ARM7-TDMI為核心處理器,通過A/D轉(zhuǎn)換電路把連續(xù)的電壓參數(shù)轉(zhuǎn)換為處理器所識(shí)別的數(shù)字量,并通過串口超級(jí)終端實(shí)時(shí)地顯示所采集到的電壓參數(shù)值。選用ARM7處理器,避免了使用單片機(jī)不能有效、實(shí)時(shí)、精確地監(jiān)測(cè)電壓的缺點(diǎn),也避免使用ARM9(包含MMU)使得整個(gè)內(nèi)核龐大、消耗內(nèi)存、程序運(yùn)行速率降低的缺點(diǎn)影響監(jiān)測(cè)電壓的實(shí)時(shí)性。選用次開發(fā)板與RS-232串口通信不需要通信間的電平轉(zhuǎn)換,系統(tǒng)供電電壓與次串口通信電壓都是3.3 V。
A/D轉(zhuǎn)換電路中的核心部分就是A/D轉(zhuǎn)換模塊,如圖2所示。A/D轉(zhuǎn)換模塊外圍電路如圖3所示。
圖2 A/D轉(zhuǎn)換模塊的寄存器功能框圖Fig.2 Functional block diagram of A/D converter module registers
圖3 A/D轉(zhuǎn)換模塊外圍電路圖Fig.3 Peripheral circuit diagram of A/D converter module
因?yàn)橐蟊O(jiān)測(cè)系統(tǒng)對(duì)可變電壓具有實(shí)時(shí)監(jiān)測(cè)能力,所以選用可變電阻來(lái)改變電壓值。兩路電壓線連接芯片的兩個(gè)引腳 P0_27和 P0_28,然后連接進(jìn) AIN0~AIN1,由 A/D轉(zhuǎn)換模塊進(jìn)行模數(shù)轉(zhuǎn)換。
圖3中使用了AIN0~AIN1兩個(gè)引腳作為監(jiān)測(cè)兩路電力參數(shù)的功能引腳,電壓的測(cè)量范圍為0~3.3 V。ADCR寄存器設(shè)置 A/D轉(zhuǎn)換器的工作模式 (21 bit),A/D轉(zhuǎn)換通道(7:0 bit),轉(zhuǎn)換時(shí)鐘(CLKDIV 時(shí)鐘分頻值)(15:8 bit),并啟動(dòng) A/D轉(zhuǎn)換(26:24 bit)。ADDR寄存器保存了轉(zhuǎn)換后的二進(jìn)制編碼值(15:6 bit),A/D轉(zhuǎn)換完成標(biāo)志位,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí)該位置位(31 bit)。
A/D轉(zhuǎn)換時(shí)鐘分頻值計(jì)算公式如下:
式中,F(xiàn)adclk為所要設(shè)置的A/D轉(zhuǎn)換器的時(shí)鐘,其值不能大于4.5 MHz[1]。
目前,世界上有多種類型的A/D轉(zhuǎn)換器,有傳統(tǒng)的并行、逐次逼近型、積分型A/D轉(zhuǎn)換器,也有近年來(lái)新發(fā)展起來(lái)的∑-Δ型和流水線型A/D轉(zhuǎn)換器,多種類型的A/D轉(zhuǎn)換器各有其優(yōu)缺點(diǎn)并能滿足不同的具體應(yīng)用要求。低功耗、高速、高分辨率是新型的A/D轉(zhuǎn)換器的發(fā)展方向。
這里采用逐次逼近型A/D轉(zhuǎn)換器,它由比較器、D/A轉(zhuǎn)換器、比較寄存器SAR、時(shí)鐘發(fā)生器以及控制邏輯電路組成,將采樣輸入信號(hào)與已知電壓不斷進(jìn)行比較,然后轉(zhuǎn)換成二進(jìn)制數(shù)。該轉(zhuǎn)換器分辨率低于12位時(shí),價(jià)格較低,采樣速率可達(dá)1 Ms/s;與其他A/D轉(zhuǎn)換器相比,功耗相當(dāng)?shù)?。?jù)此滿足本系統(tǒng)10位的模數(shù)轉(zhuǎn)換精度要求。但在高于14位分辨率情況下,價(jià)格較高;傳感器產(chǎn)生的信號(hào)在進(jìn)行A/D轉(zhuǎn)換之前需要進(jìn)行調(diào)理,包括增益級(jí)和濾波,這樣會(huì)明顯增加成本[2]。
μCLinux的開發(fā)模式和編程接口與Linux類似。因此μCLinux除了在內(nèi)存管理方面與Linux差異較大而表現(xiàn)出自己的特點(diǎn)以外,其他很多特點(diǎn)與Linux相同[3]。
μCLinux能夠很好地兼容Linux,在一定的條件下,幾乎所有的Linux API函數(shù)都能夠在μCLinux操作系統(tǒng)中使用,這極大地便利了嵌入式系統(tǒng)的開發(fā)[4]。
μCLinux的移植分為3個(gè)層次級(jí),即處理器體系級(jí)、芯片級(jí)和目標(biāo)板級(jí)移植。
1)處理器體系的源文件在arch目錄下。處理器結(jié)構(gòu)文件目錄主要包括:kernel內(nèi)核源代碼,mm-內(nèi)存管理源代碼,lib處理器特定的內(nèi)部庫(kù)函數(shù),bootloader包含壓縮內(nèi)核的代碼,也是內(nèi)核文件最后編譯生成的地方,tools包含自動(dòng)產(chǎn)生文件的腳本。μCLinux-dist-20040408在處理器結(jié)構(gòu)上對(duì)ARM7TDMI核已經(jīng)支持,只需修改μCLinux-dist/Makefile。在其中定義處理器架構(gòu)ARCH:=armnommu和交叉編譯器的設(shè)置:CROSS_COMPILE=arm-elf-。
2)芯片級(jí)移植指當(dāng)待移植處理器是某種已支持體系的分支處理器,進(jìn)行芯片層次的移植,需要在該處理器體系結(jié)構(gòu)目錄下增加修改部分目錄和代碼。同處理器體系級(jí)移植相比較,芯片級(jí)移植不用為μCLinux重新構(gòu)造一個(gè)處理器結(jié)構(gòu),只需要在該處理器體系某個(gè)已存在的芯片基礎(chǔ)上,根據(jù)二者之間的不同進(jìn)行修改調(diào)試,達(dá)到芯片移植的目的。
3)板級(jí)移植。當(dāng)使用處理器已經(jīng)被μCLinux支持時(shí),主要的工作就是針對(duì)目標(biāo)板進(jìn)行板級(jí)移植。板級(jí)移植的主要內(nèi)容是由目標(biāo)板相關(guān)地址與時(shí)鐘頻率設(shè)置,也可能會(huì)涉及部分驅(qū)動(dòng)程序的編寫[5-6]。
設(shè)備驅(qū)動(dòng)程序是介于硬件和Linux內(nèi)核之間的軟件接口,是一種低級(jí)的、專用與某一硬件的軟件組件。本文采用內(nèi)核模塊的方式安裝驅(qū)動(dòng)程序,使得系統(tǒng)內(nèi)核更加精簡(jiǎn),加快應(yīng)用程序的運(yùn)行速度。
程序中所用到的函數(shù)主要有:
1)訪問 I/O 端口方法函數(shù):static int adc_open(struct inode*inode,struct file*filp),用于打開A/D轉(zhuǎn)換通道以及通道的使用計(jì)數(shù)器遞增。這里應(yīng)用程序用到兩次打開函數(shù),分別打開通道1和通道2。
2)read()方法:static ssize_t adc_read(struct file*filp,char*buf,size_t count,loff_t*f_pos),用于讀取A/D轉(zhuǎn)換的結(jié)果。根據(jù)設(shè)定的A/D精度的不同,可支持1和2字節(jié)數(shù)據(jù)。
3)ioctl () 方法:static int adc_ioctl (struct inode*inode,struct file*filp,unsigned int cmd,unsigned long arg), 這里要區(qū)分ioctl()(輸入/輸出控制),后者是針對(duì)設(shè)備的。一般情況下,程序正確地調(diào)用函數(shù)ioctl()時(shí)會(huì)導(dǎo)致對(duì)某個(gè)驅(qū)動(dòng)程序ioctl()方法的調(diào)用。ioctl()函數(shù)的第 2 個(gè)參數(shù)會(huì)傳遞給 ioctl()方法的第3個(gè)參數(shù),ioctl()函數(shù)的第3個(gè)參數(shù)會(huì)傳遞給ioctl()方法的第4個(gè)參數(shù)。
在arm-elf-tools編譯環(huán)境中,編譯其生成可執(zhí)行的二進(jìn)制文件,然后采用命令mknod建立設(shè)備文件。最后用insmod命令安裝此驅(qū)動(dòng)程序供應(yīng)用程序使用[7]。
應(yīng)用程序應(yīng)用于讀取兩路A/D轉(zhuǎn)換電壓參數(shù),程序框圖如圖4所示。
圖4 應(yīng)用程序流程圖Fig.4 Flow chart of application program
建立交叉編譯環(huán)境,把應(yīng)用程序編譯成可執(zhí)行二進(jìn)制文件,并通過NFS掛載到開發(fā)板上,測(cè)試成功后下載到開發(fā)板。在底層結(jié)構(gòu)建立完成后,如何讀取兩路電壓成為關(guān)鍵的問題,此處采用輪流讀取兩路電壓的方法,兩路讀取間隔為1 s。
通過超級(jí)終端監(jiān)測(cè)兩路電壓參數(shù)的結(jié)果如圖5所示。據(jù)測(cè)量結(jié)果可知,當(dāng)改變VIN2的可變電阻時(shí),電壓值VIN2迅速改變;隨后改變VIN1的可變電阻時(shí),電壓值VIN1也迅速隨之改變。其精確度比8位的模數(shù)轉(zhuǎn)換高9.7 mV,其監(jiān)測(cè)的實(shí)時(shí)性遠(yuǎn)超過單片機(jī)系統(tǒng)。
本系統(tǒng)建立在ARM7硬件平臺(tái)及μCLinux操作系統(tǒng)的基礎(chǔ)上,解決了監(jiān)測(cè)兩路電壓參數(shù)與兩路通道傳輸?shù)膯栴}。通過此監(jiān)測(cè)試驗(yàn),所得結(jié)果滿足測(cè)量的實(shí)時(shí)性,有效性和精確度。硬件的設(shè)計(jì)本著低成本、低功耗、小體積和實(shí)時(shí)性的設(shè)計(jì)思想,采用了IPC2200微處理器,實(shí)現(xiàn)了兩路電壓參數(shù)測(cè)量,并完成了兩路通信接口的傳輸。
圖5 監(jiān)測(cè)結(jié)果圖Fig.5 The measuring results
[1] 周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2005.
[2] 蘭勇.GEC2410開發(fā)板使用手冊(cè)[M].廣東省嵌入式軟件公共技術(shù)中心,2009.
[3] Hallinan C.Embedded Linux primer-A practical real-world approach[M].New Jersey:Prentice Hall,2006.
[4] 劉峰,陳演平,顧利剛.μCLinux的特點(diǎn)及在嵌入式系統(tǒng)中的應(yīng)用 [J].交通部上海船舶運(yùn)輸科學(xué)研究所學(xué)報(bào),2009,32(1):20-27.LIU Feng,CHEN Yan-ping,GU Li-gang.Features of μClinux and its application in embedded system [J].Journal of Shanghai Scientific Research Institute of Shipping,2009,32(1):20-27.
[5] 楊誠(chéng).基于S3044BOX的uClinux內(nèi)核移植實(shí)現(xiàn)[J].電腦與電信,2009,11:48-49,52.YANG Cheng.The realization of uClinux kernel transplantation based on S3C44BOX [J].Computer&Telecommunication,2009(11):48-49,52.
[6] 吳川,王斌.基于ADSP-BF533的μClinux嵌入式系統(tǒng)移植與開發(fā)[J].現(xiàn)代電子技術(shù),2008,31(12):11-13,21.WU Chuan,WANG Bin.Transplanting and development of μClinux embedded system based on ADSP-BF533[J].Modern Electronic Technique,2008,31(12):11-13,21.
[7] 周立功,陳明計(jì),陳渝.ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動(dòng)開發(fā)范例[M].北京:北京航空航天大學(xué)出版社,2006.