王 海 勇 刘 秀 芳 梁 世 盛
(上海航天设备制造总厂研发部,上海200245)
摘要:针对目前航天器储运包装箱的实际需求,以ARM9处理器与嵌入式Linux操作系统为基础,设计开发了一款便携式数据采集记录设备。给出了系统的整体设计方案、结构框图、模数转换硬件电路以及基于Linux操作系统下模数转换芯片的驱动程序设计。整个系统硬件体积小、功耗低、运行稳定、携带便利。试验表明,系统满足航天储运包装箱提出的多通道实时数据采集、记录、传输、处理及显示等功能。
关键词:航天储运包装箱嵌入式Linux ADS1256数据采集模数转换
中图分类号:TP23;TH86 文献标志码:A DOI:10. 16086/j. cnki. issnl000 - 0380. 201512026
Abstract: In accordance with the actual demands for aerospace storage and transportation boxes, with ARM9 processor and embedded Linux operating system as the basis, the portable data collecting and logging device has been developed. The overall design scheme.structural block diagram, hardware circuit of A/D conversion and the design of driver program for A/D conversion chip under Linux operating system of the system are given. The system hardware features compact, low power consumption, stable operation, and easy to carry. The tests show that the system satisfies the functions of multi-channel online real time data coUection, record, transmission, processing and display that are requested for aerospace storage and transportation boxes.
Keywords: Aerospace storage and transportation box Embedded Linux ADS1256 Data acquisition A/D conversion
O引言
航天器储运包装箱作为贮存、包装、运输航天产品的重要工艺装备,在确保航天产品安全到达目的地并顺利完成任务方面起着至关重要的作用。随着航天产品精密程度的提高,其对包装箱的要求也越来越高,不仅要求实时监测箱内环境参数,包括压差、温度、湿度等,还要求实时记录加速度、速度等更多类型的传感器数据。在远距离运输过程中,不仅要求记录全程各传感器的数据,还需实时进行数据传输、显示,以便使用者更好地实现远程监控等功能。针对上述需求,开发一种便携式数据采集仪。该数据采集仪能够实时记录、存储上述传感器数据,同时具有数据远程传输、实时显示等功能。系统采用ARM9处理器作为主控制器中,采用Linux操作系统,ADS1256高精度模数转换器作为系统模数转换芯片,采用核心板加底板的硬件架构模式开发系统。
1 系统组成及工作原理
图1为便携式数据采集仪的架构图。考虑到系统稳定、开发调试便利、后期维护方便,将硬件架构分为底板与核心板两大块。底板实现数据采集模块、数据存储模块、显示接口、通信接口等电路设计,核心板实现以ARM9处理器为核心的最小系统电路设计。
系统工作原理为传感器信号经信号预处理模块调制滤波后送入高精度模数转换器ADS1256芯片中,经ARM9微处理器采样控制,将24位数字量信号进行数字滤波。将采样数据存储在SD卡中,同时将当前采样值显示在LCD触摸屏上。该便携式采集仪既可当作采集仪使用,也可作为记录仪使用。系统还留有以太网口、串口等通信接口,以便将存储在SD卡中的数据导人到上位机中查看。底板上的数据采集模块是系统关键部分,决定了系统功能及性能指标。下文将从软、硬件两方面叙述数据采集模块的设计过程。
2模数转换电路设计
为保证该款便携式数据采集记录仪能够精准地记录航天包装箱内各个状态参数,系统采用T公司的ADS1256芯片作为系统模数转换芯片。设计了ADS1256相应的外围电路,包括信号预处理电路、参考基准电压电路、通信接口电路,它们构成了底板上的数据采集模块电路。
ADS1256外围接口电路如图2所示。
图2中,模拟电源AVDD为+5 V,数字电源DVDD为+3.3 V,外部晶振为7.68 MHz。ADC模拟输入端AINo和AIN.作为差分信号的一对输入端,同样还有AIN2和AIN3、AIN4和AINs、AIN6和AIN,组成系统所需的四对差分信号输入通道。图中只画出一路输入通道,其他几路与之相同。模拟输入端的两端对称使用了一个简单的RC电路,这个RC电路起到了低通滤波器的作用,它将进入通道之前的模拟信号进行初步滤波,去掉高频噪声。两端之间连接适当大小的电解电容和瓷片电容作旁路电容,减少输入端的耦合噪声,注意尽量将电容放置在靠近ADC管脚的地方。ADS1256通过SPI接口与ARM9进行通信。从图中右半部分可以看出,在通信接口处外接100 n的电阻作为匹配,目地是为了提高数字信号的质量。
实际测量系统中,电源是影响精度的重要因素之一,而最为重要的是系统参考电源设计。ADC参考电压电路如图3所示。
系统采用REF1004基准电压芯片产生2.5 V基准电压,电压经过简单的RC滤波,进入由OPA350低噪声运放组成的跟随器中。这样做既能提高电压的基准,又能提高电压的输出能力,因为REF1004经过R。后,电流的输出能力非常低,并且还能降低基准电源的噪声。
3模数转换芯片驱动程序设计
由于便携式数据采集仪是一个典型多任务系统,采用Lmux操作系统作为系统的管理软件,故需要在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总线上。spi_master结构体用来描述一个SPI主机控制器驱动,其主要成员是主机控制器的序号(系统中可能存在多个SPI主机控制器)、片选数量、SPI模式和时钟设置用的函数、数据传输用到的函数等。
外设驱动用spi_driver结构来描述,可以认为是spLmaster的client驱动,也将挂载到SPI总线上,SPI总线可理解为主机控制器引出的总线。spi_driver结构体和platform_driver结构体有极大的相似性,这几乎是一切client驱动的习惯模板。它和platform_driver对应一个platform_device -样,spi_driver也对应着一个spi_device,上面platform_device需要在BSP的板文件中添加信息数据,而spi_device也同样需要。
SPI核心层API是主机控制器驱动和外设驱动之间的桥梁。主机控制器驱动不必关心外设,而外设驱动也不必关心主机,外设只是访问核心层通用API进行数据传输,主机和外设之间可以进行任意组合。这也体现了Lmux驱动中主机、外设驱动分离的思想。
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结构体描述如下:
执行完probe函数之后,驱动机制还需提供读、写、控制等功能。下面就写功能做详细的叙述。以ads1256_write_reg函数剖析SPI从设备驱动怎么调用SPI核心API,最后怎么调到主控制器驱动,让主控制器最终执行写的时序操作。文中列出ads1256_write_reg函数,读函数与此相似,读者可自行编写。
在上述函数中,调用到了spi_write函数,该函数就是SPI子系统核心层提供给驱动程序的通用API,这样编写的驱动程序才能真正做到跨平台,符合标准的Llnux驱动框架。如图5给出了spi_write系统调用过程,可以清晰看到函数调用从SPI设备驱动层,随后调用bitbang中间层,最后调用master驱动层来完成数据的传输。驱动机制设计完以后,剩下的就是怎样实现策略的问题。
3.2 ADS1256驱动策略设计
系统采用的是多通道循环采样工作方式。这种方式的特点是在数据准备好信号DRDY,提示可以提取数据后,首先把A/D当前采样通道变为下一个采样通道,使A/D开始新的采集转换。然后马上读取寄存器中的数据,这时的数据其实是上一轮转换好的数据。这种工作方式实现了一边提取数据的同时一边进行新数据的采集转换,是一种高效的工作模式。
图6给出了ADS1256初始化流程图,图7是ADS1256采样转换流程图。
图6中初始化流程非常重要。由于ADS1256高精度、低噪声的特殊要求,对芯片的控制相对复杂。对写入芯片寄存器的数据,采取一次回读的校准方式很有必要。在对ADS1256写人命令过程中,两个命令字之间需要满足一定的时间间隔,系统使用较多的就是WREC写寄存器命令与RDATA读数据命令,这些命令之间间隔最少为4个时钟周期。另外,需要注意的是控制命令本身是两个字节的情况要区别开,若控制命令本身是两个字节,那么这两个字节之间是不需要时间间隔的。
4结束语
本文介绍了航天储运包装箱上一款便携式数据采集仪中数据采集模块的软、硬件实现,系统的方案设计基于航天包装箱的实际需求,具有很好的市场推广前景。目前该款便携式数据采集仪进行了各种环境试验及可靠性测试,将应用在现有的航天包装箱上。该款数据采集仪融合了当前新兴技术,操作人员可利用触摸屏对其进行各种配置操作,操作简单灵活,携带便利,可作为一款工业现场手持掌上电脑( personaldigital assistant,PDA)使用。