丘宏烈,楊燕祥,羅曉雪,付元柄,袁鵬飛
(西華大學 電氣信息學院,四川 成都 610039)
在工業電力傳動現場的實際應用過程中,常常需要監測現場設備。通過監測采集設備的運行參數實時了解、跟蹤設備的運行狀態,進而分析和診斷設備。
ARM技術是嵌入式系統的重要技術。在眾多嵌入式系統廠家參與下,基于ARM系列處理器的應用技術在眾多領域取得突破性進展。
ARM技術中的數據采集正向著強實時、高精度等方向發展;數據傳輸部分向多通信方式、遠距離數據傳輸的方向發展。使用ARM處理器對工業電力傳動現場的電力參數進行采集是基于ARM的數據采集系統具有高精度、高速度、強實時等特點。
本文采用μCLinux嵌入式操作系統構建ARM7硬件平臺,并對實時性要求較高的數據采集、傳輸以及顯示進行了研究設計和實現。
系統采集兩路電壓參數的功能如圖1所示。

圖1 系統電力參數監測功能圖Fig.1 Functional block diagram of system power parameters monitor
整個監測系統以ARM7-TDMI為核心處理器,通過A/D轉換電路把連續的電壓參數轉換為處理器所識別的數字量,并通過串口超級終端實時地顯示所采集到的電壓參數值。選用ARM7處理器,避免了使用單片機不能有效、實時、精確地監測電壓的缺點,也避免使用ARM9(包含MMU)使得整個內核龐大、消耗內存、程序運行速率降低的缺點影響監測電壓的實時性。選用次開發板與RS-232串口通信不需要通信間的電平轉換,系統供電電壓與次串口通信電壓都是3.3 V。
A/D轉換電路中的核心部分就是A/D轉換模塊,如圖2所示。A/D轉換模塊外圍電路如圖3所示。

圖2 A/D轉換模塊的寄存器功能框圖Fig.2 Functional block diagram of A/D converter module registers

圖3 A/D轉換模塊外圍電路圖Fig.3 Peripheral circuit diagram of A/D converter module
因為要求監測系統對可變電壓具有實時監測能力,所以選用可變電阻來改變電壓值。兩路電壓線連接芯片的兩個引腳 P0_27和 P0_28,然后連接進 AIN0~AIN1,由 A/D轉換模塊進行模數轉換。
圖3中使用了AIN0~AIN1兩個引腳作為監測兩路電力參數的功能引腳,電壓的測量范圍為0~3.3 V。ADCR寄存器設置 A/D轉換器的工作模式 (21 bit),A/D轉換通道(7:0 bit),轉換時鐘(CLKDIV 時鐘分頻值)(15:8 bit),并啟動 A/D轉換(26:24 bit)。ADDR寄存器保存了轉換后的二進制編碼值(15:6 bit),A/D轉換完成標志位,當A/D轉換結束時該位置位(31 bit)。
A/D轉換時鐘分頻值計算公式如下:

式中,Fadclk為所要設置的A/D轉換器的時鐘,其值不能大于4.5 MHz[1]。
目前,世界上有多種類型的A/D轉換器,有傳統的并行、逐次逼近型、積分型A/D轉換器,也有近年來新發展起來的∑-Δ型和流水線型A/D轉換器,多種類型的A/D轉換器各有其優缺點并能滿足不同的具體應用要求。低功耗、高速、高分辨率是新型的A/D轉換器的發展方向。
這里采用逐次逼近型A/D轉換器,它由比較器、D/A轉換器、比較寄存器SAR、時鐘發生器以及控制邏輯電路組成,將采樣輸入信號與已知電壓不斷進行比較,然后轉換成二進制數。該轉換器分辨率低于12位時,價格較低,采樣速率可達1 Ms/s;與其他A/D轉換器相比,功耗相當低。據此滿足本系統10位的模數轉換精度要求。但在高于14位分辨率情況下,價格較高;傳感器產生的信號在進行A/D轉換之前需要進行調理,包括增益級和濾波,這樣會明顯增加成本[2]。
μCLinux的開發模式和編程接口與Linux類似。因此μCLinux除了在內存管理方面與Linux差異較大而表現出自己的特點以外,其他很多特點與Linux相同[3]。
μCLinux能夠很好地兼容Linux,在一定的條件下,幾乎所有的Linux API函數都能夠在μCLinux操作系統中使用,這極大地便利了嵌入式系統的開發[4]。
μCLinux的移植分為3個層次級,即處理器體系級、芯片級和目標板級移植。
1)處理器體系的源文件在arch目錄下。處理器結構文件目錄主要包括:kernel內核源代碼,mm-內存管理源代碼,lib處理器特定的內部庫函數,bootloader包含壓縮內核的代碼,也是內核文件最后編譯生成的地方,tools包含自動產生文件的腳本。μCLinux-dist-20040408在處理器結構上對ARM7TDMI核已經支持,只需修改μCLinux-dist/Makefile。在其中定義處理器架構ARCH:=armnommu和交叉編譯器的設置:CROSS_COMPILE=arm-elf-。
2)芯片級移植指當待移植處理器是某種已支持體系的分支處理器,進行芯片層次的移植,需要在該處理器體系結構目錄下增加修改部分目錄和代碼。同處理器體系級移植相比較,芯片級移植不用為μCLinux重新構造一個處理器結構,只需要在該處理器體系某個已存在的芯片基礎上,根據二者之間的不同進行修改調試,達到芯片移植的目的。
3)板級移植。當使用處理器已經被μCLinux支持時,主要的工作就是針對目標板進行板級移植。板級移植的主要內容是由目標板相關地址與時鐘頻率設置,也可能會涉及部分驅動程序的編寫[5-6]。
設備驅動程序是介于硬件和Linux內核之間的軟件接口,是一種低級的、專用與某一硬件的軟件組件。本文采用內核模塊的方式安裝驅動程序,使得系統內核更加精簡,加快應用程序的運行速度。
程序中所用到的函數主要有:
1)訪問 I/O 端口方法函數:static int adc_open(struct inode*inode,struct file*filp),用于打開A/D轉換通道以及通道的使用計數器遞增。這里應用程序用到兩次打開函數,分別打開通道1和通道2。
2)read()方法:static ssize_t adc_read(struct file*filp,char*buf,size_t count,loff_t*f_pos),用于讀取A/D轉換的結果。根據設定的A/D精度的不同,可支持1和2字節數據。
3)ioctl () 方法:static int adc_ioctl (struct inode*inode,struct file*filp,unsigned int cmd,unsigned long arg), 這里要區分ioctl()(輸入/輸出控制),后者是針對設備的。一般情況下,程序正確地調用函數ioctl()時會導致對某個驅動程序ioctl()方法的調用。ioctl()函數的第 2 個參數會傳遞給 ioctl()方法的第3個參數,ioctl()函數的第3個參數會傳遞給ioctl()方法的第4個參數。
在arm-elf-tools編譯環境中,編譯其生成可執行的二進制文件,然后采用命令mknod建立設備文件。最后用insmod命令安裝此驅動程序供應用程序使用[7]。
應用程序應用于讀取兩路A/D轉換電壓參數,程序框圖如圖4所示。

圖4 應用程序流程圖Fig.4 Flow chart of application program
建立交叉編譯環境,把應用程序編譯成可執行二進制文件,并通過NFS掛載到開發板上,測試成功后下載到開發板。在底層結構建立完成后,如何讀取兩路電壓成為關鍵的問題,此處采用輪流讀取兩路電壓的方法,兩路讀取間隔為1 s。
通過超級終端監測兩路電壓參數的結果如圖5所示。據測量結果可知,當改變VIN2的可變電阻時,電壓值VIN2迅速改變;隨后改變VIN1的可變電阻時,電壓值VIN1也迅速隨之改變。其精確度比8位的模數轉換高9.7 mV,其監測的實時性遠超過單片機系統。
本系統建立在ARM7硬件平臺及μCLinux操作系統的基礎上,解決了監測兩路電壓參數與兩路通道傳輸的問題。通過此監測試驗,所得結果滿足測量的實時性,有效性和精確度。硬件的設計本著低成本、低功耗、小體積和實時性的設計思想,采用了IPC2200微處理器,實現了兩路電壓參數測量,并完成了兩路通信接口的傳輸。

圖5 監測結果圖Fig.5 The measuring results
[1] 周立功.ARM嵌入式系統基礎教程[M].北京:北京航空航天大學出版社,2005.
[2] 蘭勇.GEC2410開發板使用手冊[M].廣東省嵌入式軟件公共技術中心,2009.
[3] Hallinan C.Embedded Linux primer-A practical real-world approach[M].New Jersey:Prentice Hall,2006.
[4] 劉峰,陳演平,顧利剛.μCLinux的特點及在嵌入式系統中的應用 [J].交通部上海船舶運輸科學研究所學報,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] 楊誠.基于S3044BOX的uClinux內核移植實現[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嵌入式系統移植與開發[J].現代電子技術,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] 周立功,陳明計,陳渝.ARM嵌入式Linux系統構建與驅動開發范例[M].北京:北京航空航天大學出版社,2006.