一种基于STC15的U盘实时海量数据采集系统设计
00 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转换器采集来的海量数据,该方案设计简单而且数据存储能力强大,能够存储海量数据,具有一定的实用价值。
- 用STC15F104E单片机制作闪灯(11-30)
- 不用网络照样可以打字聊天(11-30)
- 基于STC15F2K61单片机的MBUSRS232转换器设计(11-30)
- STC15W系列单片机自带的ADC使用方法以及时需要注意的问题(11-27)
- STC15F2K60S2串口1程序(11-26)
- STC15F2K60S2串口2程序(11-26)