首页 > 评测 > 【STM32U599J-DK测评】工业温度仪表盘

【STM32U599J-DK测评】工业温度仪表盘

  
  • 作者:
  • 来源:
  • [导读]
  • 本帖最后由 HonestQiao 于 2024-3-5 17:00 编辑 #申请原创# 在 STM32U599J-DK 开发板上,提供了一个MEMS温度传感器: 1875965df296401640.png (33.07 KB )下载附件2024-2-28 20:38 上传 这篇评测分享,就是

本帖最后由 HonestQiao 于 2024-3-5 17:00 编辑

#申请原创# 在 STM32U599J-DK 开发板上,提供了一个MEMS温度传感器:


这篇评测分享,就是使用X-CUBE-MEMS,获取温度传感器数据,并在屏幕上进行显示,最终的效果如下:




一、功能设计
这个工业温度仪表盘要显示当前的温度数据,每秒刷新一次。
同时,还要累计历史数据,显示5分钟的平均值,以及15分钟的平均值。


二、硬件了解
从开发板的手册,可以了解到温度传感器的具体位置(U18):


从官方提供的原理图中,可以看到具体的型号为STTS22H:


关于其详细信息,可以从ST官网查看:https://www.st.com/zh/mems-and-sensors/stts22h.html

从上面的电路原理图可知,其连接到了I2C3,对应的引脚为PH7-SCL、PH8-SDA。

三、TouchGFX界面设计
1. 图片准备:
首先,准备好一张背景图:

这张图是经过仔细挑选的,搭配STM32U599J-DK的屏,完美。

并在TouchGFX项目中,添加该图片:


2. 字体文件准备
另外,还需要准备一个LED字体:


并将该字体文件,放置到项目对应的目录下:


3. 字体设置:
对界面中,要显示的字号设置对应的字体规格:



对于显示数值的部分,还有从特殊处理:


然后,在Config进行如下设置,确保最后字体能够正常调用:


4 界面设计:
参考小图,进行界面的设计:


对于要动态显示数值的元素,需要做wildcard设置:



设计完成后,可以点击预览,查看效果:



四、STM32CubeMX配置
ST官方提供了X-CUBE-MEMS,其中已经对STTS22H温度传感器提供了支持,可以很方便的通过配置集成,然后在程序中读取数据。
1. 安装X-CUBE-MEMS1
通过包管理,安装需要的模块:


2. MEMS模块传感器安装:


从上述界面,点击X-CUBE-MEMS1,进入包管理:

安装其中的STTS22H和ENV_SENSOR两个即可。

3. I2C3启用:
因为STTS22H连接到了I2C3,对应的引脚为PH7-SCL、PH8-SDA,在I2C3配置中开启并进行设置:


4. 设置STTS22H
默认情况下,需要将STTS22H的Addr脚接地:


因此需要做如下的配置:


并设置使用I2C3:


设置完成后,关闭STM32CubeMX,自动生成最新的代码。

五、代码编写
代码部分,分为两个部分,分别是初始化STTS22H,以及在MPV代码中获取温度传感器的数据,并进行呈现。

1. 初始化STTS22H
在main.c中,使用如下的代码完成初始化:


2. 温度传感器数据读取
这个部分的处理,参考了ST官方TouchGFX手册的后端通信部分:https://support.touchgfx.com/zh-CN/docs/development/ui-development/touchgfx-engine-features/backend-communication#sampling-from-gui-task

在MVP架构中:

帧率为60Hz,也就是1秒刷新60次。
在这个分享中,温度读取不需要太高的速度,所以直接在帧刷新的过程中,进行温度传感器数据的读取。

在Model的预定一种,添加对应的属性:

其中,counter用于计数,每60次进入一次读取。
temperature用于当前温度数据的测量,temps使用了向量vector来存储历史的数据。

tick()调用中,添加对应的代码:


在上述代码中,会调用SENSOR接口,读取STTS22H的数据,然后存放到temps中,并计算5分钟和15分钟的平均值。
计算完毕后,通过modelListener->notifyTemperatureChanged(temp1, temp2, temp3),通知监听其的控制器,进行数据的更新处理。

在ModelListener中,有一个空的virtual函数定义:


其实际定义在对应的控制器中:



最终,调用关联的view,进行温度值的设置。

在View中,做最终的呈现处理:



在上述代码中,需要将要显示的数据,使用字符串的模式,存入对应的Buffer中。
而这些Buffer,通过之前的界面设计,自动生成到代码中,具体在ScreenViewBase中查看:


将上面的处理流程总结一下:

 

  • 屏幕每秒刷新60次,也就是帧率为60Hz
  • 在Model中,判断刷新的次数,每60次,也就是间隔1秒,进行一次温度数据的读取,并将读取到的数据进行存储
  • 在Model中,根据存储的数据,取得当前值,以及计算5分钟平均值和15分钟平均值
  • 在Model中,计算完毕,通过ModelListener发出通知,要更新数据
  • 在Presenter中,接收到通知,并调用自己当前关联的View的接口,进行温度值的设置
  • 在View中,进行实际的界面处理。



六、实际效果
编译上述代码,下载到开发板,最终的效果如下:

七、参考资料
在研究学习过程中,参考了很多资料,以下为还记得的部分。
对所有的资料,特此表示感谢:

  • STTS22H 精度为0.5°C的低压、超低功耗I2C/SMBus 3.0温度传感器
  • C++ vector计算数组之和
  • C++ vector 容器浅析
  • C++浮点数组(vector, valarray)的二进制存取/读写
  • 【STM32H750B-DK评测】6.传感器数据读取及TouchGFX界面显示实战
  • TouchGFX后端通信
  • TouchGFX之文本和字体
  • 测评汇总:STM32U599J-DK
  • TouchGFX: 第二部分TextArea外观和通配符
  • 本文系21ic原创,未经许可禁止转载!

网友评论