数据采集系统
作者:xinmeng_wit
1.作品简介
本作品基于STM32实现数据采集系统,主要功能是对数据进行采集、存储、读取、显示和导出,能对接不同传感器(例如:BME280、DHT11、DS18B20等)、不同接口(例如:SPI、IIC、UART等)。本作品设计的初衷是提供一款实用的传感器可插拔的数据采集系统,让用户根据自己的需求来进行数据采集/保存/导出。
本作品通过TFT显示屏进行传感器的选择和采样间隔时间设置,和其他功能设置。TFT显示屏使用LVGL GUI图形库,因为本次比赛的显示屏不带触摸功能,本作品使用了外部按键作为输入。
由于STM32U5内部带有4M Bytes FLASH,所以可以直接将数据存储在内部FLASH中,无需外扩存储器或SD卡。为了方便数据管理,本作品做了专门的FLASH读写接口。
本作品支持本地与远程操作,远程通讯接口为UART\USB。
2.系统框图
本作品使用如下模块:NUCLEO-U5A5ZJ、DFROBOT IPS LCD(2.0寸)、按键模块、BME280模块。
本作品用到了LCD模块进行信息显示,其与主控之间通过SPI进行通讯;传感器BME280模块进行温湿度气压采集,其与主控之间通过IIC进行通讯;另外,可选其他传感器作为数据来源,比如DHT11、DS18B20等。按键模块用于与主控进行交互,实现输入参数设置。
3.各部分功能说明和解析
总结下来主要分为如下几个部分:
- 驱动部分
驱动部分主要是对使用到的各个硬件进行初始化和底层控制。涉及到的MCU资源如下图。
System Core部分最主要是系统及外设时钟、GPIO、DMA、中断的配置。其中,为了达到最高的性能,MCU的主频设置为了最高的160MHz。另外,USART的数据接收使用了DMA加上空闲中断实现了不定长数据的接收,降低了数据接收的中断开销。
Connectivity部分主要涉及到的通讯为I2C、SPI、USART。
为了能够充分利用MCU资源以及多任务处理,本作品将FreeRTOS移植到了STM32U5A5上。在本作品中主要分为3个task:TaskCom、TaskDataSample和TaskHMI。三个task分别负责通讯、数据采样和LCD显示。
- LCD显示部分
显示部分是单独的task,只负责显示,不参与任何检测和控制。为了方便显示,使用了开源GUI图形库LVGL,极大地简化了应用程序开发,同时能使显示更加美观。对于控件的布局和设置使用了NXP免费的GUI图形配置软件GUI Guider进行控件代码生成,生成的相关文件如下:
显示任务的主循环如下:
LVGL默认是不支持中文的,为了能够显示中文,特地使用GUI Guider工具生成了中文字库。
LVGL控件部分主要使用了label、dropdown、chart、button和led。
- 按键部分
按键部分是用来与GUI联动实现人机交互的。由于本次选用的LCD屏不带触摸功能,所以只能使用外接按键来实现。LVGL除了能将控件与触摸屏绑定以外其实还支持控件与外部按键的绑定。当控件与外部按键绑定后能够与触摸屏一样很方便地控制屏幕控件。
- 传感器部分
理论上来说本作品应该支持多种常用的传感器,比如BME280、DHT11、DS18B20等。但是由于多方面的原因目前除了BME280传感器以外,其他传感器暂未支持。
BME280传感器是博世的一款三合一传感器,同时支持温度 ,湿度和气压检测,并能同时输出,接口应该是I2C和SPI可选。如果有条件可以选择升级款的BME680传感器 ,精度更高。
- 通讯部分
理论上来说本作品应该支持通过串口/USB来配置参数,而且本次已经打通了开发板与PC端的通讯,但是由于时间的关系,没有时间去做PC端的上位机了,只能后期再去完善了。
5.视频演示
https://training.eeworld.com.cn/video/38971
6.项目总结
其实这个项目的想法是很好的,但是由于前期没有把握好时间,另外在后期手部受伤耽误了,再加上FATFS文件系统调试了很长时间,最终导致很多想法没能在这次比赛中实现,有点遗憾。
本次比赛完成了数据采集系统的最核心的部分,也就是数据的采集和保存以及数据的读取并显示。另外,也实现了通过按键配合LCD显示来配置采样的参数。采集完成后可以通过LCD显示采集到的数据。还有一些功能由于多方面原因未能在本次项目中实现,后续将继续完成既定任务。
本次项目中遇到了很多的问题,查阅了很多的资料,最后都一一解决了(有的不一定是解决,只是换了一种方式实现),同时自己也收获了,成长了。
最后,再次感谢得捷电子和EEWORLD提供这次机会,再次感谢。
7.其他
|