傳感器數(shù)據(jù)采集、傳輸因微處理器的不同而方式各異,微處理器之間可采用串口、總線、無線等方式實現(xiàn)數(shù)據(jù)傳輸.但微處理器與上位機的數(shù)據(jù)傳輸方式單一,大部分采用串口與上位機通信,無法實現(xiàn)多遠程主機對同一檢測對象的訪問.本文設計了基于ARM 的數(shù)據(jù)采集與網(wǎng)絡傳輸系統(tǒng),以便多個主機訪問同一檢測對象,并實現(xiàn)多機遠程監(jiān)控某鋼件的受力.
1 采集平臺硬件設計 基于ARM920T的ARM 處理器將A/D轉換結果網(wǎng)絡打包后通過CS8900傳遞到網(wǎng)絡上,網(wǎng)絡上的主機可接收傳感器結果.并在此系統(tǒng)上實現(xiàn)遠程監(jiān)控某鋼件所受力(圖1).

1.1 微處理器 基于ARM920T內(nèi)核的微處理器因微型化、多樣的外圍設備接El(如觸摸屏接口、LCD接口、IICISP、IIS、A/D、USB),適合多傳感器檢測平臺架構,并可移植Linux、uclinux等操作系統(tǒng)和miniGUI、QT 應用程序.基于ARM9體系的S3C2440、S3C2410是兩款16/32位RISC嵌入式微處理器,芯片上集成了MPLL,使得微處理器工作頻率最高達到203 MHz.這兩款微處理器有兩個8位的SPI串行接口,可工作在查詢、中斷、DMA 3種工作方式,通過設置適當?shù)臄?shù)據(jù)傳輸頻率和主從工作方式,可直接與外圍SPI器件通信,需要注意的是每次讀取外部設備數(shù)據(jù)時必須向8位傳輸寄存器寫1.
1.2 傳感器電路 圖2所示為測重傳感器變換電路Ll .利用金屬應變片單臂電橋檢測直徑為1 cm的鋼件所受壓力.應變片靈敏度系數(shù)K為2,電橋的阻值為120 Q.為提高傳感器的靈敏度,電橋由LM358構成的恒流源提供5 mA 電流,壓力信號經(jīng)過電路處理后可放大2 178倍.可以通過調(diào)節(jié)滑動變阻器RP 實現(xiàn)調(diào)零操作.壓力檢測所用的A/D芯片為MAX147,它是具有SPI接口的12位串行8通道模數(shù)轉換模塊,可以與ARM 的SPI接口相接.通過軟件選擇所需通道.為保證A/D轉換模塊的工作精度,由LM385為MAX147提供2.5 V的參考電壓.可以與ARM 的SPI接口相接.通過軟件選擇所需通道.為保證A/D轉換模塊的工作精度,由LM385為MAX147提供2.5 V的參考電壓.
2 采集系統(tǒng)軟件設計 采集系統(tǒng)的軟件部分包括A/D驅(qū)動部分和TCP程序部分.ARM 平臺中位于用戶空間的TCP程序可調(diào)用A/D驅(qū)動實現(xiàn)傳感器數(shù)據(jù)采集. 2.1 驅(qū)動程序設計 Linux設備驅(qū)動程序可分為字符流設備驅(qū)動程序,塊設備驅(qū)動程序和網(wǎng)絡設備驅(qū)動程序.MAX147的采集結果為12位的字符流設備,為實現(xiàn)在Linux環(huán)境下訪問MAX147,需要編寫字符流驅(qū)動函數(shù).以下是A/D驅(qū)動的讀寫函數(shù)部分代碼.
A/D芯片MAX147的寫參數(shù)函數(shù)為:
static ssize— t write(struct file *filp,const char_ user*buffer,size— t count,loff_t*offset) {⋯ If(readb(rSPSTA)& C241o— SPSTA_READY) {copy_from_user(~buff,buffer,1); writeb(buff,rSPTDAT); return count;) ⋯ ) 讀函數(shù)為: static ssize— t read(struct file * flip,char— user * buffer, size— t count。lof_ t*offset) {⋯ ; if(readb(rSPSTA)&$3C2410一 SPSTA_ READY) {writeb(OxO0,rSPTDAT); . if(readb(rSPSTA)&$3C2410一 SPSTA _ READY) {from_buff=readb(rSPRDAT); copy_to_user(buffer,&from— buff,count);return count;} }.··;
在嵌入Linux系統(tǒng)的ARM 處理器中,用戶空間訪問的只能是虛擬地址,所以為訪問SPI控制器,需要通過ioremap()函數(shù)將宏rSPTDAT映射為發(fā)送寄存器的虛擬地址,rSPTDAT — iorema(0x59000010,1),參數(shù)0x59000010為發(fā)送寄存器的實際物理地址.為實現(xiàn)軟件查詢的工作方式,需要利用函數(shù)write(readb(rSPCON)&~S3C2410—SPCON— TAGD & S3C2410一SPCON — CPH A 一FMTA & S3C2410一SPCON — SM OD — POLL&S3C2410一 SPCON— CPOL_HIGH,rSPCON)向SPI控制器寫入S3C2410一SPC0N—SM0D—P0LL參數(shù),讀寫函數(shù)中利用if(readb(rSPST A)&S3C2410一SPSTA— READY)讀SPI狀態(tài)寄存器,判斷SPI模塊的工作狀態(tài).驅(qū)動模塊的讀寫函數(shù)分別使用函數(shù)copy—tO—user(buffer,&from— buff,count),copy—from— user( buff,buffer,1)與用戶空間中應用程序的讀寫函數(shù)傳遞數(shù)據(jù).
2.2 TCP程序設計 為實現(xiàn)多主機網(wǎng)絡共享傳感器數(shù)據(jù),本文提出采用TCP方式 進行數(shù)據(jù)傳輸.圖3是服務器端的程序流程圖,服務器通過Listen()函數(shù)監(jiān)聽客戶端的連接請求.客戶端無需監(jiān)聽(1isten())和接受連接(accept())步驟,只需申請連接(connect()函數(shù)實現(xiàn))即可獲得傳感器數(shù)據(jù).客戶端程序和服務器端程序可通過read()、write()函數(shù)實現(xiàn)通信.此系統(tǒng)中ARM 平臺作為服務器為網(wǎng)絡上的多客戶端提供檢測數(shù)據(jù).
3 試驗結果
對壓力檢測平臺進行標定 ,得測力檢測系統(tǒng)的非線性校正方程如下:
F一16.95+24032.61U一3.15U .
將非線性校正方程的3個系數(shù)存入系統(tǒng)中,可根據(jù)檢測到的電壓值得到壓力值.ARM 平臺的IP地址為192.168.1.230.對鋼件施加壓力,IP地址為192.168.1.x的上位機通過connect()函數(shù)申請鏈接,得到壓力傳感器電壓值.表1是本采集系統(tǒng)對鋼件施加不同的力時采集到的三組電壓值及鋼件對應的受力值.
|