摘要:设计了一种基于STC15单片机的U盘实时海量数据采集系统。该系统利用USB接口芯片CH376时U盘进行读写操作,利用实时时钟芯片DS1 2887实时采集记录数据的时间,将采集到的海量数据以EXCEL文件形式存储在U盘中。实验结果表明,该方案能够采集、存储海量数据而且还兼顾成本低、通用性强、移动性好等优点,具有一定实用价值。
引言
在工业数据采集中,数据的存储担负着记录系统运行状态的责任,基于单片机的数据采集仪表以其成本低廉、操作简单、工作可靠而得到大批量应用。鉴于单片机数据采集系统的以上优势提出了一种基于STC15系列单片机和CH376的U盘海量存储数据方案,该方案利用南京沁恒公司推出的USB接口芯片CH376对U盘进行读写操作,完成超速信息的转存,并采用沁恒公司提供的FAT文件系统库,将采集到的数据以文件的形式存储在U盘中,操作者可以方便地利用PC机对采集到的数据进行分析和处理。
1 系统设计
系统主要框图如图1所示,主要是以STC15F2K60S2单片机为核心,通过扩展外同接口而使其以低成本的优势满足大容量数据采集存储的要求。被测信号经过前端调理电路的放大与滤波处理后进入单片机的片内A/D转换模块,此时采样数据存储于单片机内部开辟的缓冲数组中,当缓冲区满后通过控制CH376向U盘写入采样数据,并同时将DS12887内的时间信息写入文件中。
1.1 STC15F2K60S2单片机简介
STC15F2K60S2系列单片机是STC公司生产的单时钟/机器周期(1T)的单片机,采用STC—Y5超高速CPU内核。STC15F2K60S2系列单片机是高速/高可靠/低功耗/超强抗干扰的一代8051单片机,采用第八代加密技术,加密性超强,指令代码完全兼容传统8051。内部集成高精度R/C时钟,可设置5~35 MHz的工作频率,彻底省掉外部昂贵的晶振和外部复位电路,具有3路CCP/PWM/PCA和8路高速A/D转换器,内置2 KB大容量SRAM,2组高速异步串行通信端口UART1/UART2,一组高速同步通信端口SPI,广泛地用于一般的现代工业控制领域。
1.2 CH376模块设计
1.2.1 USB接口芯片CH376简介
CH376是南京沁恒公司推出的一款U盘和SD卡文件管理控制芯片,用于单片机或嵌入式系统读写U盘或者SD卡中的文件。CH376支持USB设备方式和USB主机方式,并且内置了USB通信协议的基本固件,内置了处理海量存储Mass-Storage设备的专用通信协议的固件,内置了SD卡的通信接口固件,内置了FAT16和FAT32以及FAT12文件系统的管理固件,支持常用的USB存储设备(包括U盘/USB硬盘/USB闪存盘/USB读卡器)和SD卡(包括标准容量SD卡和高容量HC-SD卡以及协议兼容的MMC卡和TF卡)。
CH376支持3种通信接口:8位并口、SPI接口或者异步串口,单片机/DSP/MCU/MPU等控制器可以通过上述任何一种通信接口控制CH376芯片,存取U盘或者SD卡中的文件或者与计算机通信。CH376芯片内部集成了USB-SIE和Phy-I/O、CRC数据校验、USB-Host控制器、USB-Dev ice控制器、SD卡SPI-Host控制器、被动并行接口、SPI—Slave控制器、异步串口、双口SRAM、FIFO、高速MCU、固件程序、晶体振荡器和PLL倍频器、电源上电复位电路等。其主要特点概括为:
①支持1.5 Mbps低速和12 Mbps全速USB通信,兼容USB V2.0;
②支持USB-HOST主机接口和USB-DEVICE设备接口,支持动态切换主机方式与设备方式;
③内置USB通信协议的基本固件处理海量存储Mass-Storage设备的专用通信协议固件,SD卡的通信接口固件以及FAT16/FAT32和FAT12文件系统的管理固件;
④提供文件管理功能、文件读写功能和磁盘管理功能;
⑤提供2 MB速度的8位被动并行接口,提供2 MB/24 MHz速度的SPI设备接口,提供最高3 Mbps速度的异步串口;
⑥支持5 V/3.3 V/3 V电源电压,支持低功耗模式。
1.2.2 CH376硬件电路设计
USB接口芯片CH376模块硬件电路设计如图2所示。单片机与CH376采用的是硬件总线8位并口连接方式,这样无需用I/O模拟CH376读写时序,简化了软件的设计。CH376芯片通过8位被动并行接口的D7~D0、RD#、WR#、PCS#、A0直接连接到STC15F2K60S2单片机的系统总线上,其中D7~D0连接STC15F2K60S2的数据总线P0.7~P0.0引脚上,RD#、WR#引脚与STC15F2K60S2的对应引脚相连,INT#引脚连到STC15F2K60S2的外部中断INT0上,采用中断方式处理USB数据传输,PCS#连接STC15F2K60S2的P2.6引脚来控制CH376的使能,A0连到STC15F2K60S2的P2.0引脚。因此,CH376命令寄存器的地址可选为BDF1H,数据寄存器的地址可选为BCF0H。
另外,R2用于限制作为USB主机提供给外部USB设备的电流,电容C1用于CH376内部电源节点退耦,C1是容量为4 700 pF~0.02μF的独石或者高频瓷片电容。电容C3和C4用于外部电源退耦,C3是容量为0.1μF的独石或者高频瓷片电容。晶振Y1用于时钟振荡电路,USB—HOST主机方式要求时钟频率比较准确,晶振Y1的频率为12 MHz±0.4‰。振荡电容C6、C7是可选的,根据晶振Y1的特性选择,容量在0~22 pF。
1.2.3 CH376软件设计
系统利用单片机将片内A/D转换器采集到的数据通过CH376存入U盘中需要完成三件事:
第一是要完成单片机读写CH376,由于CH376是以硬件并行总线的方式与单片机连接的,单片机读写CH376就不需要用I/O模拟时序了,确定CH376的命令端口地址和数据端口地址后,直接向命令端口地址写入相应命令,向数据端口地址写入相应数据即完成了写入操作。读操作时也只需要将命令端口或数据端口的值直接赋给一个变量,单片机读取的状态或数据就保存在该变量中了。
第二是操作沁恒公司提供的FILE SYS文件系统库,通过移植、裁减该文件系统库,在U盘中创建一个EXCEL格式的文件ZYZ_ADC.XLS,这是系统软件设计的核心所在。具体步骤是:首先单片机发送CMD_SET_USB_MODE命令设置CH376工作在主机模式下,然后调用FILE SYS文件系统库中的CH376DiskConnect函数等待U盘连接,U盘可以由CH376自动检测并产生中断通知,也可以由单片机定时发送命令检测。U盘连接成功后,在进行操作之前必须由单片机发送CMD_DISK_MOUNT进行初始化,并检测磁盘是否准备就绪,确认磁盘准备就绪后,调用文件系统库函数CH376FileOpen,打开磁盘中已经创建好的文件,如果该文件不存在,则调用文件系统库函数CH376FileCreate并在磁盘中创建一个新的文件,设定其参数为“/ZYZ_ADC.XLS”即完成了在U盘中创建了一个名为ZYZ_ADC.XLS的EXCEL格式文件。另外,文件创建成功后为方便向文件中添加数据,还需要将该文件移置到U盘中所有已有文件的末尾,可调用文件系统库函数CH376ByteLocate,设定参数为0xFFFFFFFF即可移动该文件至所有文件之后。以上一切准备就绪后就可以向文件中写入数据了,最后就是保存文件并更新文件长度,涉及到的文件库函数是CH376GetFileSize。在U盘中创建EXCEL文件的软件流程图如图3所示。
第三是向已创建的EXCEL文件中写入A/D采集数据和时钟芯片中的日期、时间信息。系统软件是将EXCEL文件中的所有已采集的数据以字符形式存储的,因此对于采集的电压、日期、时间等二进制数据要转换成字符串形式。另外,EXCEL文件中的数据信息是以单元格的形式存储的,即每一次采集的数据存储在一个单元格中,因此在调用sprintf函数时,将采集的数据信息写入EXCEL文件时用“\t”切换单元格,比如将采集的日期、时间、单元信息分别显示在3个不同的单元格中的函数格式为:
2 系统测试结果
为了验证上述系统能否完成将A/D采集来的海量数据信息存入U盘中创建的EXCEL文件中,选用了2 GB的金士顿U盘作为测试对象,系统上电后插上U盘,即可看到CH376模块中USB读写指示灯变亮并且U盘指示灯闪烁数下,这表明U盘读写成功。然后,按下数据采集控制开关,可以看到U盘指示灯开始不停地闪烁,表示数据采集正在进行中,通过串口调试软件的打印窗口如图4所示,可以清楚地看到文件创建成功,数据写入文件的详细过程。
图4中File size=1表示创建了一个新文件,其大小为1 K,下面即是不停地向文件中写入日期、时间、电压等采集信息。待系统运行一段时间后取下U盘,将U盘重新插在PC上即可在U盘中发现一个新建的名为ZYZ_ADC.XLS的文件,打开该文件,如图5所示,可以看到系统采集到的日期、时间、电压等采样信息完整地存在于该文件中。
结语
本文提出的基于STC15系列单片机和CH376的实时海量数据采集系统设计方案中,由于CH376内置了文件系统,使单片机的操作更为方便,单片机只需要发送命令和数据就可以在U盘中创建文件、读写数据。因此开发人员用简便的方法就可以实现利用U盘存储A/D转换器采集来的海量数据,该方案设计简单而且数据存储能力强大,能够存储海量数据,具有一定的实用价值。