基于STM32的AD采集与SD卡数据存储
杜佳良+丁亚东+赵俊杰
摘要:设计一种基于STM32的AD信号采集并且将采集相关信息在SD卡上存储的系统。利用计算机软件将SD卡上的文本格式数据信息转换成EXCEL格式,方便用户对信息进行查询管理,在实际工程中具有很高的应用价值。
关键词:STM32;SD卡;数据存储
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)12-0235-03
Abstract:Based on STM32,designing an analog to digital acquisition and related information will be collected on the SD card storage system. Using computer software to convert the text format data on the SD card into EXCEL format, user-friendly information query has a high value in the actual project.
Key words: STM32; SD card; data storage
随着工业自动化的发展,控制设备在各领域得到了广泛的应用。在一个控制系统中,外界的传感器相当于一个系统的“鼻子”和“眼睛”,往往决定系统中下一步的动作,是一个系统的关键。现在的32位处理器基本都具有ADC模块,免去了使用8位单片机需要外搭ADC电路的过程,简化电路设计并提高了转换的快速性和准确性。现在加工制造业的迅速发展,对系统数据的实时性也提出了更高的要求,迫切需要一种简单方便的方式对大量数据进行存储。大型控制系统通常会采用485通讯、以太网的方式将数据直接传送到上位机,建立数据库,而对于一些小型控制设备,这会大大增加设备的成本,相比之下,利用单片机和存储介质就地存储就显得更有优势。
1系统的整体分析
STM32F103VET6单片机是一款基于Cortex-M3内核的增强型处理器,工作频率可以达到72MHz,其内部具有3个12位的ADC采用通道,每个ADC共用了多达21个外部通道接口,可以实现单次或连续外部数据采样[1]。SD卡是目前最常用的大容量数据存储介质,支持2种操作模式:SDIO模式和SPI模式[2]。SPI模式通常可以采用MCU自带的SPI接口或者用普通的I/O口模拟SPI通讯,通讯速度相对较慢,而SDIO模式以其传输速度快,兼容性好等优点被广泛应用于安卓设备、相机等移动设备,支持SDIO卡、复合SDIO卡、SD存储卡和MMC卡,支持1位和4位SD模式[3]。STM32具有一个SDIO接口,能够对SD卡快速进行数据读写。
2硬件电路设计
系统硬件部分主要有ADC采样调理电路和SD卡硬件连接电路组成。为了提高数据的精确度,需要给STM32提供了一个外部电压基准源。此外,外部传感器输入电压可能与ADC采样范围之间存在电压跨度不相等的情况,往往并不能直接输入到MCU的AD采样引脚,需要对信号进行调理,使传感器与ADC的组合达到最好的精度。结合以上两种考虑,采用TI公司的REF2030芯片为ADC采样和运放调理电路提供基准电压。REF2030是一款低漂移、低功率、双路输出的电压基准芯片,提供了一个3.0V可供ADC使用的基准电压VREF和一个1.5V可用于偏置输入双极性信号的高精度电压VBIAS。芯片使能引脚可以在不需要ADC采样时使芯片处于低功耗状态。 根据运算放大器的工作原理,上述运放电路输入与输出端的关系为:
此外,STM32内部具有RTC功能,能够为控制系统提供时间。在对采集到的数据进行保存过程中,记录系统时间,能够更好地帮助技术人员分析数据。在系统断电后,外部纽扣电池可以通过VBAT引脚对RTC时钟继续供电。
3 软件设计
3.1 系统工作流程
为了方便采集到的数据能够直接在PC机上查看,需要对SD卡存储介质采用文件系统管理方式,我们采用常见的FAT32文件系统格式。目前FAT文件系统模块主要有:周立功公司的zlg/FS、美国Micrium公司的uC/FS、SourceForge.net网站提供的Embeded File System Library以及日本电子爱好者设计维护的FATFS文件系统模块[1]。FAT32文件系统以簇为最小分配单位,主要由引导区、文件分配表表、数据区三大部分组成,引导区保留了每簇对应的扇区数及引导参数,文件分配表保存各簇使用情况信息,本文设计时使用日本的FATFS文件管理模块。控制系统的工作流程如图2所示。要以FAT32文件系统格式进行文件创建及信息储存,必须将SD卡格式转换成FAT32文件系统格式,这就是SD卡的初始化。在确定SD卡通信正常后即开始初始化,其过程包括:读取原有FAT表、查找空间簇并确定起始簇号、将新的FAT表写回SD卡、读取目录项信息、将文件信息赋给文件信息结构体、将新的目录写回到SD卡,初始化完成后即可进行SD卡的读写操作。AD采样信号出发后向SD卡触发写命令,命令中包含写地址,写地址必须与SD卡物理地址相对应,SD卡接收到数据后验证地址,并进行CRC校验,发出响应命令。
3.2 程序编写
在SD卡初始化后,利用RTC时钟获得当前日期,创建一个以当前日期命名的文本格式文件,用结构指针fnew关联该文本文件,再次操作文件就是通过结构指针来完成。具体方法是在获取当前日期后将其转换为字符串类型并在字符串末尾加上“.text”,然后利用f_open()函数创建,在文件的首行,写入标题信息,包括采样时间、采样通道、通道名称、采样数据和采样触发模式等。然后关闭文本格式文件,完成了系统的初始化,等待ADC采样时刻的到来。
EXCEL是大家极为熟悉的一种办公软件,其强大的表格数据处理能力为我们日常的数据统计、整理、计算带来了极大的方便。EXCEL具有文本格式导入向导功能,可以对文本格式中行列排列整齐的数据导入到EXCEL中。具体过程如下:首先在菜单栏中点击打开,在下拉菜单文件类型中选择文本文件格式即可启动文本导入向导,在高级设置中选择全部文本,文件类型选择固定宽度。最后在数据预览中,左右拖动竖线对EXCEL中的单元格网格进行调整并选定列数据类型,如图3所示。点击完成即可将即可发现文本格式中的数据已经成功的展现在EXCEL中。此时的文件格式仍然是文本文件,需要再另存为.xls文件,最后将表格中的列宽度调到合适大小,采用数据即完美展现在Excel中,如图4所示。
4 结语
SD卡作为目前一种大容量的数据存储设备,在嵌入式系统中应用越来越广泛。本文利用STM32实现了通过SDIO接口与SD卡进行数据传输,创建文本格式,并提出了数据的管理方式,便于实现文本格式文件到EXCEL的转换,方便数据管理,具有较高的实用价值。
参考文献:
[1] 刘火良,杨森.STM32库开发实战指南[M].北京:机械工业出版社,2013:124.
[2] 徐建功,赵捷.基于STM32F103XX微处理器的Micro SD卡读写[J],现代电力电子技术,2010(20):26-28,32.
[3] 黄哓曦,黄世震.基于ARM的SDIO驱动设计[J],计算机与数字工程,2010,38(1):159-163.
[4] 周跃,沈捷.基于SD卡的数据存储系统设计[J],化工自动化及仪表,2012,39(1):95-98.