技术中心
 
 

基于ARM 的传感器数据采集与网络传输系统

   日期:2013-05-07    

传感器数据采集、传输因微处理器的不同而方式各异,微处理器之间可采用串口、总线、无线等方式实现数据传输.但微处理器与上位机的数据传输方式单一,大部分采用串口与上位机通信,无法实现多远程主机对同一检测对象的访问.本文设计了基于ARM 的数据采集与网络传输系统,以便多个主机访问同一检测对象,并实现多机远程监控某钢件的受力.

1 采集平台硬件设计

基于ARM920T的ARM 处理器将A/D转换结果网络打包后通过CS8900传递到网络上,网络上的主机可接收传感器结果.并在此系统上实现远程监控某钢件所受力(图1).

 

 

1.1 微处理器

基于ARM920T内核的微处理器因微型化、多样的外围设备接El(如触摸屏接口、LCD接口、IICISP、IIS、A/D、USB),适合多传感器检测平台架构,并可移植Linux、uclinux等操作系统和miniGUI、QT 应用程序.基于ARM9体系的$3C2440、$3C2410是两款16/32位RISC嵌入式微处理器,芯片上集成了MPLL,使得微处理器工作频率最高达到203 MHz.这两款微处理器有两个8位的SPI串行接口,可工作在查询、中断、DMA 3种工作方式,通过设置适当的数据传输频率和主从工作方式,可直接与外围SPI器件通信,需要注意的是每次读取外部设备数据时必须向8位传输寄存器写1.

1.2 传感器电路

图2所示为测重传感器变换电路Ll .利用金属应变片单臂电桥检测直径为1 cm的钢件所受压力.应变片灵敏度系数K为2,电桥的阻值为120 Q.为提高传感器的灵敏度,电桥由LM358构成的恒流源提供5 mA 电流,压力信号经过电路处理后可放大2 178倍.可以通过调节滑动变阻器RP 实现调零操作.压力检测所用的A/D芯片为MAX147,它是具有SPI接口的12位串行8通道模数转换模块,可以与ARM 的SPI接口相接.通过软件选择所需通道.为保证A/D转换模块的工作精度,由LM385为MAX147提供2.5 V的参考电压.可以与ARM 的SPI接口相接.通过软件选择所需通道.为保证A/D转换模块的工作精度,由LM385为MAX147提供2.5 V的参考电压.

2 采集系统软件设计

采集系统的软件部分包括A/D驱动部分和TCP程序部分.ARM 平台中位于用户空间的TCP程序可调用A/D驱动实现传感器数据采集.

2.1 驱动程序设计

Linux设备驱动程序可分为字符流设备驱动程序,块设备驱动程序和网络设备驱动程序.MAX147的采集结果为12位的字符流设备,为实现在Linux环境下访问MAX147,需要编写字符流驱动函数.以下是A/D驱动的读写函数部分代码.

A/D芯片MAX147的写参数函数为:

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;)

⋯ )

读函数为:

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系统的ARM 处理器中,用户空间访问的只能是虚拟地址,所以为访问SPI控制器,需要通过ioremap()函数将宏rSPTDAT映射为发送寄存器的虚拟地址,rSPTDAT — iorema(0x59000010,1),参数0x59000010为发送寄存器的实际物理地址.为实现软件查询的工作方式,需要利用函数write(readb(rSPCON)&~$3C2410—SPCON— TAGD & $3C2410一SPCON — CPH A 一FMTA & $3C2410一SPCON — SM OD — POLL&$3C2410一 SPCON— CPOL_HIGH,rSPCON)向SPI控制器写入$3C2410一SPC0N—SM0D—P0LL参数,读写函数中利用if(readb(rSPST A)&$3C2410一SPSTA— READY)读SPI状态寄存器,判断SPI模块的工作状态.驱动模块的读写函数分别使用函数copy—tO—user(buffer,&from— buff,count),copy—from— user( buff,buffer,1)与用户空间中应用程序的读写函数传递数据.

2.2 TCP程序设计

为实现多主机网络共享传感器数据,本文提出采用TCP方式 进行数据传输.图3是服务器端的程序流程图,服务器通过Listen()函数监听客户端的连接请求.客户端无需监听(1isten())和接受连接(accept())步骤,只需申请连接(connect()函数实现)即可获得传感器数据.客户端程序和服务器端程序可通过read()、write()函数实现通信.此系统中ARM 平台作为服务器为网络上的多客户端提供检测数据.

3 试验结果

对压力检测平台进行标定 ,得测力检测系统的非线性校正方程如下:

F一16.95+24032.61U一3.15U .

将非线性校正方程的3个系数存入系统中,可根据检测到的电压值得到压力值.ARM 平台的IP地址为192.168.1.230.对钢件施加压力,IP地址为192.168.1.x的上位机通过connect()函数申请链接,得到压力传感器电压值.表1是本采集系统对钢件施加不同的力时采集到的三组电压值及钢件对应的受力值.

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢