航天包装箱用便携式数据采集仪的实现
2015-04-01王海勇刘秀芳梁世盛
王海勇 刘秀芳 梁世盛
(上海航天设备制造总厂研发部,上海 200245)
0 引言
航天器储运包装箱作为贮存、包装、运输航天产品的重要工艺装备,在确保航天产品安全到达目的地并顺利完成任务方面起着至关重要的作用。随着航天产品精密程度的提高,其对包装箱的要求也越来越高,不仅要求实时监测箱内环境参数,包括压差、温度、湿度等,还要求实时记录加速度、速度等更多类型的传感器数据。在远距离运输过程中,不仅要求记录全程各传感器的数据,还需实时进行数据传输、显示,以便使用者更好地实现远程监控等功能。针对上述需求,开发一种便携式数据采集仪。该数据采集仪能够实时记录、存储上述传感器数据,同时具有数据远程传输、实时显示等功能。系统采用ARM9 处理器作为主控制器中,采用Linux 操作系统,ADS1256 高精度模数转换器作为系统模数转换芯片,采用核心板加底板的硬件架构模式开发系统。统稳定、开发调试便利、后期维护方便[1],将硬件架构分为底板与核心板两大块。底板实现数据采集模块、数据存储模块、显示接口、通信接口等电路设计,核心板实现以ARM9 处理器为核心的最小系统电路设计[2]。
1 系统组成及工作原理
图1 为便携式数据采集仪的架构图。考虑到系
图1 系统架构图Fig.1 Architecture of the system
系统工作原理为传感器信号经信号预处理模块调制滤波后送入高精度模数转换器ADS1256 芯片中,经ARM9 微处理器采样控制,将24 位数字量信号进行数字滤波。将采样数据存储在SD 卡中,同时将当前采样值显示在LCD 触摸屏上。该便携式采集仪既可当作采集仪使用,也可作为记录仪使用。系统还留有以太网口、串口等通信接口,以便将存储在SD 卡中的数据导入到上位机中查看。底板上的数据采集模块是系统关键部分,决定了系统功能及性能指标。下文将从软、硬件两方面叙述数据采集模块的设计过程。
2 模数转换电路设计
图2 ADS1256 外围电路Fig.2 Peripheral circuits of ADS1256
为保证该款便携式数据采集记录仪能够精准地记录航天包装箱内各个状态参数,系统采用TI 公司的ADS1256 芯片作为系统模数转换芯片。设计了ADS1256 相应的外围电路,包括信号预处理电路、参考基准电压电路、通信接口电路,它们构成了底板上的数据采集模块电路。
ADS1256 外围接口电路如图2 所示。
图2 中,模拟电源AVDD为+5 V,数字电源DVDD为+3.3 V,外部晶振为7. 68 MHz。ADC 模拟输入端AIN0和AIN1作为差分信号的一对输入端,同样还有AIN2和AIN3、AIN4和AIN5、AIN6和AIN7组成系统所需的四对差分信号输入通道。图中只画出一路输入通道,其他几路与之相同。模拟输入端的两端对称使用了一个简单的RC 电路,这个RC 电路起到了低通滤波器的作用,它将进入通道之前的模拟信号进行初步滤波,去掉高频噪声[3]。两端之间连接适当大小的电解电容和瓷片电容作旁路电容,减少输入端的耦合噪声,注意尽量将电容放置在靠近ADC 管脚的地方。ADS1256 通过SPI 接口与ARM9 进行通信。从图中右半部分可以看出,在通信接口处外接100 Ω 的电阻作为匹配,目地是为了提高数字信号的质量。
实际测量系统中,电源是影响精度的重要因素之一,而最为重要的是系统参考电源设计。ADC 参考电压电路如图3 所示。电压,电压经过简单的RC 滤波,进入由OPA350 低噪声运放组成的跟随器中。这样做既能提高电压的基准,又能提高电压的输出能力,因为REF1004 经过R4后,电流的输出能力非常低,并且还能降低基准电源的噪声。
3 模数转换芯片驱动程序设计
系统采用REF1004 基准电压芯片产生2.5 V 基准
图3 ADC 参考电压电路Fig.3 Voltage reference circuit of ADC
由于便携式数据采集仪是一个典型多任务系统,采用Linux 操作系统作为系统的管理软件,故需要在Linux 下开发模数转换芯片的驱动程序。ADS1256 与ARM9 处理器是通过SPI 接口进行通信,Linux 内核有完整的SPI 子系统软件架构,对ADS1256 芯片驱动开发需按照标准的SPI 子系统架构进行。ADS1256 芯片驱动开发分为分析Linux 内核SPI 子系统的驱动机制和利用这个驱动机制设计对应的驱动策略程序两部分。驱动机制是编写SPI 驱动的前提,只有在了解内核SPI 驱动机制后,才能完整地完成驱动程序的设计。
驱动机制方面,在Linux 系统中,SPI 子系统从上到下分为:SPI 设备驱动层(外设驱动)、SPI 核心层API、master 驱动层(主机控制器驱动)、硬件层,如图4 所示。
其中master 驱动层抽象出SPI 控制器的相关操作即ARM9 中SPI 控制器操作,而SPI 设备驱动层抽象出用户空间API。主机控制器驱动在内核中以platform 平台设备总线模型的形式体现,在板级支持包(board support package,BSP)中将会添加platform_device 结构,它描述了SPI 控制器的相关资源,对应的主机控制器驱动将以platform_driver 形式体现,这样主机控制器和主机控制器驱动就挂载到了platform 总线上[4]。spi_master 结构体用来描述一个SPI 主机控制器驱动,其主要成员是主机控制器的序号(系统中可能存在多个SPI 主机控制器)、片选数量、SPI 模式和时钟设置用的函数、数据传输用到的函数等。
图4 SPI 子系统Fig.4 SPI subsystem
外设驱动用spi_driver 结构来描述,可以认为是spi_master 的client 驱动,也将挂载到SPI 总线上,SPI总线可理解为主机控制器引出的总线。spi_driver 结构体和platform_driver 结构体有极大的相似性,这几乎是一切client 驱动的习惯模板。它和platform_driver 对应一个platform_device 一样,spi_driver 也对应着一个spi_device,上面platform_device 需要在BSP 的板文件中添加信息数据,而spi_device 也同样需要。
SPI 核心层API 是主机控制器驱动和外设驱动之间的桥梁。主机控制器驱动不必关心外设,而外设驱动也不必关心主机,外设只是访问核心层通用API 进行数据传输,主机和外设之间可以进行任意组合。这也体现了Linux 驱动中主机、外设驱动分离的思想[5]。
3.1 ADS1256 驱动机制设计
首先定义并初始化spi_driver 结构体,系统进行注册时将调用spi_register_driver 函数。该函数在调用过程中,将用driver. name 和spi_device. modalias 字段进行比较,如果两者相等,则将spi_driver 与spi_device 进行绑定。当spi_driver 注册成功后,调用probe 方法,即调用ads1256_probe 方法。在ads1256_probe 函数中,将自己注册为字符设备或者hwmon 设备。ads1256_driver 结构体描述如下:
ads1256_probe()函数是驱动注册中重要环节,该函数执行成功后,将在/sys/class/hwmon/hwmon1/device/inX_input (X=0 ~7 路信号输入通道)。用户只需执行cat inX_input 命令即可调用驱动进行工作。
执行完probe 函数之后,驱动机制还需提供读、写、控制等功能。下面就写功能做详细的叙述。以ads1256_write_reg 函数剖析SPI 从设备驱动怎么调用SPI 核心API,最后怎么调到主控制器驱动,让主控制器最终执行写的时序操作。文中列出ads 1256_write_reg 函数,读函数与此相似,读者可自行编写。
在上述函数中,调用到了spi_write 函数,该函数就是SPI 子系统核心层提供给驱动程序的通用API,这样编写的驱动程序才能真正做到跨平台,符合标准的Linux 驱动框架。如图5 给出了spi_write 系统调用过程,可以清晰看到函数调用从SPI 设备驱动层,随后调用bitbang 中间层,最后调用master 驱动层来完成数据的传输。驱动机制设计完以后,剩下的就是怎样实现策略的问题。
图5 spi_write 调用过程图Fig.5 The diagram of spi_write calling process
3.2 ADS1256 驱动策略设计
系统采用的是多通道循环采样工作方式。这种方式的特点是在数据准备好信号DRDY,提示可以提取数据后,首先把A/D 当前采样通道变为下一个采样通道,使A/D 开始新的采集转换。然后马上读取寄存器中的数据,这时的数据其实是上一轮转换好的数据。这种工作方式实现了一边提取数据的同时一边进行新数据的采集转换,是一种高效的工作模式。
图6 给出了ADS1256 初始化流程图,图7 是ADS1256 采样转换流程图。
图6 初始化流程图Fig.6 Flowchart of the initialization
图6 中初始化流程非常重要。由于ADS1256 高精度、低噪声的特殊要求,对芯片的控制相对复杂。对写入芯片寄存器的数据,采取一次回读的校准方式很有必要。在对ADS1256 写入命令过程中,两个命令字之间需要满足一定的时间间隔,系统使用较多的就是WREG 写寄存器命令与RDATA 读数据命令,这些命令之间间隔最少为4 个时钟周期。另外,需要注意的是控制命令本身是两个字节的情况要区别开,若控制命令本身是两个字节,那么这两个字节之间是不需要时间间隔的。
图7 采样转换流程图Fig.7 Flowchart of the sampling conversion
4 结束语
本文介绍了航天储运包装箱上一款便携式数据采集仪中数据采集模块的软、硬件实现,系统的方案设计基于航天包装箱的实际需求,具有很好的市场推广前景。目前该款便携式数据采集仪进行了各种环境试验及可靠性测试,将应用在现有的航天包装箱上。该款数据采集仪融合了当前新兴技术,操作人员可利用触摸屏对其进行各种配置操作,操作简单灵活,携带便利,可作为一款工业现场手持掌上电脑(personal digital assistant,PDA)使用[6]。
[1]王保杰,彭力.嵌入式Linux 车载智能中心的设计与实现[J].自动化仪表,2013,34(4):19.
[2] 周立功.ARM 嵌入式系统基础教程[M]. 北京:北京航空航天大学出版社,2010.
[3] 孙沁梅,卢益民.高精度模数转换器ADS1256 的原理和应用[J].计算机与数字工程,2004(33):95-97.
[4] 宋宝华.Linux 设备驱动开发详解[M]. 北京:人民邮电大学出版社,2010.
[5] 王勇,张浩,彭道刚. ARM 平台在多功能数据采集系统中的设计与实现[J].自动化仪表,2010,31(6):13 -16.
[6] 周耀群,张为公,周木子.汽车道路试验便携式数据采集系统的设计与开发[J].自动化仪表,2006,27(8):61 -63.