1引言
电子设备运行状态的稳定性直接影响到现代企业的生产, 设备发生故障后高昂的维修费以及设备停机后给企业生产带来的损失, 使得各个企业纷纷采取措施, 降低设备的故障率。通过数据采集系统准确的获取设备运行特征数据, 并对数据进行分析,判断设备的运行状态是否良好, 达到提前预防故障出现、减少停机检修的目的。实际应用中对数据采集系统的可靠性, 准确性和便携性要求很高。目前常用的数据传输网络(如RS232 /RS485, CAN 等)已经不能满足大量采集数据和高速实时数据传输的要求。而USB传输具有高速可靠传输的优势, 具有成本低、可靠性高、维护方便等优点。本文以带有片上USB 和高速AD转换器的C8051F340为核心控制器件, 利用USB总线高速传输的特性, 设计了一款高速度低成本的数据采集系统, 采集信号包括该设备输出气体的温度、压力和流量等14个参数, 适用于特定设备运行状态的数据采集工作。
2系统设计
系统设计图如图1所示, 系统主要由C8051F340数据采集模块与上位PC机构成。需要监控的数据通过系统前端的传感器转换后送入预处理电路, 从预处理电路输出的数据通过I/O端口送入AD转换端口,经过AD转换将数据保存到C8051F340单片机, 最后通过USB把数据送入上位PC机保存处理。
图1 系统设计框图
3 硬件设计
在整个硬件设计中C8051F340 单片机是系统重要的组成部分。C8051F340单片机是S ilicon Laboratories公司推出的完全集成的混合信号片上系统型MCU。具有高速、流水线结构的8051兼容的微控制器内核( 可达48M IPS ); 通用串行总线(USB )功能控制器, 有8 个灵活的端点管道, 集成收发器和1K FIFO RAM; 真正10位200ksps的单端/差分ADC, 带模拟多路器; 片内电压基准和温度传感器; 精确校准的12MH z内部振荡器和4 倍时钟乘法器; 多达64KB 的片内FLASH 存储器; 多达4352字节片内RAM ( 256+ 4KB ); 多达40个端口I/O (容许5V 输入)采集系统的电路设计。
由于C8051F340本身集成众多硬件电路的特性, 硬件接口设计变得非常简单, 不需要再添加额外的电子元器件就能实现USB 的数据传输和AD转换等, 使得系统的硬件结构简单, 集成度高, 可靠性好。如图2所示, 单片机通过片上USB 接口与上位PC 机连接进行数据的传输。C8051F340上的P2. 0~ P2. 6引脚作为数据采集的输入端口, 接受来自预处理电路输送过来的数据, 最后通过单片机的模拟多路选择器( AMUX) 最终决定进入AD 转换的通道。
图2 数据采集硬件原理图。
4 软件设计
系统的软件部分包括单片机固件和上位PC 机客户端程序。单片机固件主要负责单片机初始化及与上位机的通信准备, 而客户端程序则负责对固件中相应控制的调用, 实现数据的传输控制、数据保存以及故障的预警。
4. 1 单片机固件( firmw are)
单片机固件采用K eil uV ision3软件进行编写,由主程序, AD数据转换, USB通讯三个模块组成。
主程序负责初始化单片机的各个端口和功能模块, 设置相应的IO 端口为数据输入端口, 完成各项初始化后通过vo id USB_API_TEST _ISR ( void)函数进入USB中断服务, 在中断服务中通过调用Get_Interrupt_Source( )函数获得USB 中断源。然后根据不同的入口情况, 来进行相应的处理。比如收到初始化命令时, 复位单片机内的各个状态参数。
AD数据转换模块主要负责AD转换时的转换时间间隔、采样精度的设置。C8051F340单片机的AD转换启动有6 种触发方式, 由ADC0CN 中的ADC0转换启动方式位( AD0CM2..0)的状态决定采用哪一种方式。本系统则是是通过单片机中的定时器2的每次计时溢出来触发AD 转换。为确保每次定时器触发AD 转换时上一次数据转换完全结束, 因此定时器2溢出后到下一次计时溢出的时间间隔( Tcon t)必须要大于AD 转换时间, 才能保证每次AD转换的完整进行。AD 转换时间由建立转换时间( Tsettle)和采样时间( Tsample)构成。图3所示为在差分方式下等效的AD 转换的输入电路。对于一个给定的建立精度( SA ) 的系统中, 所需要的ADC 建立时间( Tsettle)可以用方程1来确定。而采样时间( Tsamp le)通过查询技术手册得知需要10个SAR 时钟。Tcon t则必须要满足式( 2)和式( 3), 才能满足设计要求。
图3 AD 转换等效输入电路。
其中: SA 是建立精度, 用一个LSB 的分数表示(例如, 建立精度0. 25对应1 /4LSB ); t为所需要的建立时间( Tsettle), 以秒为单位; n为ADC 的分辨率,用比特表示。Rtota l为AMUX 电阻与外部信号源电阻之和; C samp le为ADC采样电容:
其中: K 为定时器2溢出后重载的计数数值; clk 为系统时钟频率。
USB通讯模块则设置单片机与主机的数据传输模式。根据USB 通信协议要求, 设置相应寄存器来配置USB中端点0与端点2跟上位主机进行数据通信, 其中端点0负责与主机的控制命令接收与响应, 端点2 负责将采集的数据传输到上位主机, 同时配置端点2在U SB0的FIFO 分配中256字节使用空间全部为数据输出。由于C8051F340 整合的是10位ADC控制器, 采集到的数据填充为16位数据, 以先低8 位, 后高8位将数据保存到系统的RAM 中, 而一次AD 转换能得到2个字节的数据, 因此为了每次数据上传时充分利用端点2的使用空间, 在ADC中断响应函数中添加一个变量i来检测进行转换的次数, 在进行完128次AD转换后通过调用B lock_W rite( )函数向主机发送数据。部分代码如下:
4. 2 上位PC 机客户端程序
上位PC 机客户端程序包括USB 驱动程序和用户应用程序两个部分。
USB驱动程序是一个软件组件, 封装了应用程序存取硬件设备的功能函数。有些设备具有相同的属性, 把它们归为一组标准类别, 可以定义设备类规范作为该类设备的主机驱动框架。设备类驱动程序使用相似的函数, 处理不同设备间的通信,这样使设备类驱动程序的开发可以脱离设备制造商。本系统的驱动程序使用了Silicon Laboratories公司提供的USB Xpress开发包, 在V isua l C ++ 6. 0环境下开发, 封装成动态链接库DLL 的形式供用户应用程序调用。
用户应用程序采用C + + 编写, 由客户交互界面, USB数据通信, 数据保存显示, 设备故障预警四个模块组成。在USB 数据通信模块设计中, 使用S ilicon Laboratories公司提供的S I_GetN umDevices,S I_GetProductString ( ), SI_Open( ), SI_C lose( ) , SI_Read( ) , SI_W rite( ) 等API函数, 屏蔽了对底层硬件操作中USB 复杂的通信协议, 简化了USB 通信开发, 使得开发USB 通信的程序变得更容易 。
程序流程图如图4所示。
图4 客户端应用程序流程图。
诱发设备出现故障的原因很多, 为保证设备正常运行需要检测多方面的数据, 本系统主要是检测设备的温度和压力等的数据, 检测获得的数据一旦超过某个界限, 表示设备可能出现故障。因此为了保证设备长时间的稳定工作, 需要对获取的实时数据与事先设好的临界值进行对比, 一旦超过临界值, 系统则发出警报提醒工作人员对设备进行故障排查, 起到了故障预警的效果。
5 结语
基于USB 数据采集系统可供选择的方案很多, 而本设计从便携式和高速传输考虑, 编写了固件和客户端数据传输协议, 使得该数据采集系统方便携带, 数据传输高速准确, 具有良好的人机交互界面, 并能对一定的设备故障进行预警提醒, 有较大的使用价值。而且单片机端口资源还没有用完,还有开发和扩展的空间。