基于STM32嵌入式多路数据采集存储系统的设计

发表时间:2020/7/24   来源:《中国电气工程学报》2020年3期   作者:段素平1,廖鹏1,陈天立2
[导读] 针对多路信号采集,提出了一种嵌入式数据采集存储系统,
        摘 要  针对多路信号采集,提出了一种嵌入式数据采集存储系统,该系统基于STM32微处理器和MDK KEIL软件开发平台设计。详细介绍了系统的硬件设计和软件设计。最后,通过两路电压数据采集存储分析试验,验证本系统的正确性和可靠性。
        关键词  嵌入式;STM32;多路数据采集;MDK
        中图分类号:P715.2   文献标识码:A

0  引言
        随着现代科学技术的不断发展,人们对多路数据采集存储技术的要求越来越高。传统的基于单片机或工控机PLC的数据采集技术,因采集精度低、设计复杂等缺点,很难满足人们的要求。将嵌入式引入采集技术中能够解决上述存在的问题[1]。
        STM32微处理器作为成熟的ARM嵌入式芯片,有着丰富的外围接口、较高的处理速度以及较低的价格,在嵌入式技术领域有着广泛的应用[2]。本文阐述基于STM32的多路数据采集存储系统的设计方法,希望提出一套具有一定借鉴意义的通用的开发方案。
1  系统组成
        本系统主要由微处理器、多路数据采集模块、存储模块、电源模块、下载模块、时钟模块以及复位模块组成。微处理器是本系统核心,控制整个系统的工作流程,包括启动和暂停数据采集存储、读写存储器等;多路数据采集模块对外部输入的信号进行数据采集;存储模块对采集得到的数据进行实时存储;本系统电源输入为12V电压,通过电源模块转换后可为系统各个模块提供5V、3.3V的标准电压;下载模块为本系统提供软件程序下载接口;时钟模块采用8MHz的高速外部晶振和32.768的低速外部晶振,通过倍频分频的方式,为处理器各个部分提供相应时钟;复位模块采用按键复位设计,为整个系统提供硬件复位功能。系统组成如图1所示。


2  系统硬件设计
2.1 微处理器
        作为本系统核心,微处理器控制着整个系统的工作,包括启动和暂停数据采集存储、读写存储器等。
        本系统微处理器采用STM32F407ZG处理器,该处理器是由意法半导体公司生产,基于Cortex-M4内核的ARM处理器,时钟频率高达168MHz,具有192KB的SRAM、1024KB的内部FLASH。同时,其内部还集成了A/D模块,最快可实现2.4MHz采样速率。STM32F407ZG还带有丰富的外围接口,包括多用复用IO口、多个串口、以及1个10/100M网络接口,方便系统的开发和扩展[3]。
2.2 多路数据采集模块设计
        多路数据采集模块分为电路调理部分和采集部分。电路调理部分主要起到量程变换的作用。当被测信号的电压超过了A/D模块的量程,可能会烧坏A/D模块,所以必须使用电路进行调理[4]。在调理电路中,使用如图2所示的放大器的负反馈电路来调理量程,和之间的关系如下:
                           
        根据实际的应用选择不同的电阻,就可以放大或衰减被采集的信号

        对于采集部分,本系统利用STM32F407ZG处理器内部集成的A/D模块来实现。该A/D模块是12位逐次逼近型的模拟数字转换器。它有多达19个通道,这些通道的A/D转换可以单次、连续或间断模式执行,从而实现多路(理论上最多19路)数据采集[5]。
        需要说明的是, STM32F407ZG处理器内部集成的A/D模块需要参考电压源输入,输入引脚为 VREF引脚。VREF的输入范围为1.8-3.3V,为了提高采集精度,最好使用输出波纹小的精准电压源[6],如图3所示。


2.3 存储模块设计
        嵌入式系统的存储模块设计一般有两种方案:
        1)采用FLASH芯片方案。该方案的优点是读写速度快,价格相对便宜,但它属于芯片式存储介质,必须焊接在PCB电路板上,如果要将其数据读出到上位机,则必须要通过网口或串口等交互接口,增加了开发成本。
        2)采用标准接口外接存储器方案。接口的优点是设计比较简单,直接连接到系统总线上就可以了,编写软件程序也比较简单。
        本系统为了设计简单和方便读取数据,采用SDIO接口的SD卡作为本系统的存储模块。SD卡方便插拔,通过读卡器可直接读取数据。
        STM32F407ZG处理器自带SDIO接口,该接口与SD存储卡规格版本2.0全兼容,支持多种数据总线模式;完全支持CE-ATA功能,8位总线模式下数据传输速率可达48MHz[7]。其硬件电路设计如图4所示。

   
3  软件程序设计
        本系统采用MDK作为软件程序设计平台,MDK软件源自德国的KEIL公司,是目前针对Cortex M 内核处理器的最佳开发工具[8]。
     本系统的软件程序设计流程如图5所示。系统启动程序后,首先通过Adc_Init( )、SD_Init( )、KEY_Init( )等函数分别对A/D模块、SD卡存储模块以及外围电路进行初始化。初始化完成后,进入main( )函数,即主程序。之后,等待采集指令,一旦接受到采集指令,将进入数据采集程序,本次数据采集完成以后,将进入数据存储程序。数据存储程序结束以后,若系统接收到停止采集指令,则系统程序结束;否则,系统继续采集数据。

                   
        对于数据采集程序,采用多次采集取平均值的方法来提高采集的精度。对于数据存储程序,若采集一次数据就存储一次,频繁的写SD卡,大大降低整个系统的数据采集速度。另外,SD卡最大写入次数也是有限的。为了解决该问题,本系统给数据存储程序额外分配20480字节大小的缓存区间,采集的数据将首先放置在该缓存区间,缓存满之后再将数据写入SD卡中。
4  设计实例
        为了验证本系统的正确性和可靠性,利用信号发生器产生两路电压信号v1 / v2进行测试。其中v1起始电压为5V,之后逐渐降低至3.5V;v2起始电压为0,之后逐渐升高至3V。
        本系统同时采集v1/v2电压信号,并将采集信息存储至SD卡。数据采集完成后,上位机通过读卡器读取SD卡上的数据,描绘出v1/v2电压数据变化曲线,如图6所示。


        由图6可以看出,本系统采集的v1/v2电压数据变化曲线平滑,没有出现跳变,曲线走势与实际信号发生器产生的基本一致,符合预期,这就验证了本系统的正确性和可靠性。
5  结束语
本文针对多路数据采集存储系统进行了讨论和研究,成功完成了系统的硬件设计和软件设计。最后,通过两路电压数据采集存储分析试验,验证了本系统的正确性和可靠性。

参考文献
[1] 何立民,嵌入式系统的定义和发展历史[J]. 单片机及嵌入式系统应用,2004(1):5-8.
[2] 孟强, 徐慧, 万青苗. 基于STM32的数据采集及显示系统的设计[J]. 计算机知识与技术, 2013,13(9):3184-3186.
[3]  Yan R,Pang S,Sun H. Development and missions of unmanned surface vehicle[J]. Journal of Marine Science and Application,2010,9(4):451-457.
[4] 谢辉程,郭莉. 基于STM32的无线环境监控系统设计[J].嵌入式软件,2014,35(12):5-7.
[5] 卿燕玲,汪道辉. 高速数据采集及信号处理[D]. 四川省,四川大学,2006.
[6] 叶彦斌,魏志刚,王耘波,等.基于ARM7的电路检测平台数据采集系统[J].自动化与仪表,2007, 22(4):71-75.
[7] 邹绵坤,陈星,徐承深.  基于单片机和NANDFLASH芯片的嵌入式文件系统[J]. 自动化与信息工程,2007,28(3):38-40.
[8] 李剑,赵鹏程,汤建彬. 32位ARM嵌入式处理器的调试技术[J]. 电子技术应用, 2003,29(3):25-27.
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: