使用STONE串口屏制作简易电子秤

STONE串行串口屏显示器

STONE串行串口屏具有广泛的应用范围,涵盖民用、医疗、精密测量仪器等领域。现在,我将使用一块5英寸的STONE串行HMI屏幕来制作一个简易电子秤。

所需模块如下:

  1. STONE STVC050WT-01串口屏串口显示模块
  2. STM32F103RC 开发板
  3. 压力采集模块
  4. ADC 转换模块

硬件连接原理图如下:

hardware-connection-block-diagram(1)

所有硬件模块均按该原理图的连接原则进行连接。

显示内容如下:

  • 通过 STONE 显示模块显示托盘上当前放置物品的重量。
  • 用户可执行三种操作:去皮、单位转换和归零。

通过在线商城购买的电子秤模块

hardware-connection-block-diagram

hardware-connection-block-diagram

主要分为两部分,其中一部分是HX711准替代模块。

另一部分是压力传感器模块。

这两部分连接后的效果可参考下图。我添加了另一个托盘:

hardware-connection-block-diagram

STONE STVI050WT-01显示模块描述

在本项目中,我使用了STONE STVC050WT-01的串口屏串口显示屏作为用户界面。

该STONE显示屏已集成驱动芯片,用户可直接使用上层计算机,只需通过计算机设计UI图像,添加按钮、文本框等,然后生成配置文件下载至显示屏即可运行。

STVC050WT-01显示屏通过UART-TTL信号与MCU通信,而STM32 MCU的UART恰好处于TTL逻辑电平,因此STONE显示屏与STM32可直接通过UART进行通信。

此外,STONE官方网站还销售支持UART-232逻辑电平的串口触摸显示屏。当使用支持 UART-232 的显示屏时,只需添加一个 MAX232 芯片进行逻辑电平转换,即可与 SCM 通信。

如果您不确定如何使用 MAX3232,请参考以下图片:

hardware-connection-block-diagram

如果电平转换过于麻烦,可以使用其他类型的显示屏。部分型号可直接输出 UART-TTL 信号。

网站上有详细信息和介绍:https://www.stone-hmi.com//

如果您想使用视频教程和教程,也可以下载官方网站。

开发 STONE 串口屏串口显示模块需要什么?

STONE 显示模块的开发主要分为三个步骤:

  • 使用 STONE TOOL 软件设计显示逻辑和按钮逻辑,并将设计文件下载到显示模块。
  • MCU 通过串口与 STONE LCD 显示模块通信。
  • 根据步骤 2 获取的数据,MCU 执行其他操作。

当然,前提之一是设计一套美观的 UI 界面,通常以 JPEG 格式保存。

在上述三个步骤中,我们需要在电脑上安装以下软件:

  • STONE TOOL2019
  • Photoshop或其他图形设计软件

使用STONE TOOL软件

从官方网站下载STONE TOOL软件的最新版本(当前为TOOL2019)并安装。

安装完成后,将打开以下界面:

hardware-connection-block-diagram

点击左上角的“文件”按钮创建新项目,具体操作将在后续步骤中详细说明。

Photoshop主要用于制作UI界面。在STONE串口屏串口显示设备中,所有用户界面均以图片形式加载并显示,而文字则采用屏幕内置的字体。

如何使用STONE TOOL软件?

首先,我们需要使用Photoshop设计一套UI界面。以下界面是我使用Photoshop设计的非常简单的UI图片:

hardware-connection-block-diagram hardware-connection-block-diagram

第一张图片是主显示界面。用户将图片下载到STONE串口串口屏显示器后,屏幕在通电后会继续显示该图片。图片中包含一个文本显示框和三个按钮。TOOL 2019软件可配置按钮按下时STONE屏幕通过串口发送的数据内容。

同一TOOL2019软件还允许配置文本显示框的显示方式。

在本项目中,当按下“Peeled”按钮时,STONE屏幕将通过UART向STM32 MCU发送指令,STM32微控制器在接收到指令后,将忽略当前采集的压力传感器值。

“清除”按钮用于清除显示内容,“单位”按钮用于切换显示单位。

在 TOOL 2019 软件中设计 UI 逻辑

设计好用于显示图像的 UI 后,将其保存为 JPG 格式。

打开 STONE TOOL2019 软件并创建新项目:

hardware-connection-block-diagram

hardware-connection-block-diagram

删除新项目默认加载的图像,然后添加我们自己的 UI 图像。

可以看到我们刚刚设计的两个UI图像已加载。

设计按钮逻辑

hardware-connection-block-diagram

T组件由带箭头的按钮组件表示,将其添加到“剥离”区域,相关组件属性如下:

hardware-connection-block-diagram

X坐标:组件在整体UI中的X坐标位置

Y坐标:组件在整体UI界面中的Y方向位置

宽度&高度:组件的宽度和高度

移动锁定:固定位置

名称定义:组件的名称

按钮效果:按下按钮时的效果

页面切换:按下按钮切换到下一页,或为空如果不存在

音频文件:按下按钮时播放的音频文件

变量内存地址:组件在显示中的地址

我主要修改了两个地方:

hardware-connection-block-diagram

修改后,按下按钮时,按钮的效果为“1_effect”页面的效果,随后STONE屏幕通过串口屏串口向MCU发送“000A”。

其他两个按钮以类似方式添加。

添加数据文本组件

我们只需显示两组数据,即电子秤的重量数据和单位。

这两组数据包含数字和字母,因此需要分开显示。

右侧的“属性设置”是组件的属性设置,包括组件位置、大小、名称、初始值、数据长度、组件地址等。

这里需要说明的是组件地址。每个组件都有独立的组件地址。图中显示的组件地址为0x0133。

这由组件地址决定。

模拟运行

点击生成配置文件并模拟运行以查看效果。

红色区域为按下按钮后的效果。

修改STONE串口串口屏显示器的UART波特率

显示器支持在以下界面修改UART波特率:

最大波特率为921600,本例中使用115200。

修改波特率实际上是修改STONE串口串口屏显示模块中寄存器R1、R5和R9的值:

当R1为0x00-0x10时,R5和R9无效。

当R1等于0x11时,波特率由R5和R9决定。

生成配置文件并将其下载到STONE屏幕。

完成上述UI界面设计后,可生成配置文件并下载至STVC050WT-01显示模块。此部分操作在STONE开发资料中已有详细说明。

执行步骤 1 后,将 USB 驱动器插入计算机,磁盘将被显示。然后点击“下载到 U 盘”将配置文件下载到 USB 驱动器,并将 USB 驱动器插入 STVC050WT-01 以完成升级。

然后点击“在线下载”并按照提示将配置文件更新到 STONE 显示模块。

将配置文件下载至 STONE 串口触摸显示屏后,即可开始 STM32 MCU 编程。

以下是几个组件的地址:

文本值显示地址:0x000d

单位值显示地址:0x000e

剥离按钮地址:0x000a

“清除”按钮地址:0x000b

“单位”按钮地址:0x000c

HX711模块

简要介绍

HX711是一款专为高精度电子秤设计的24位A/D转换芯片。压力传感器实际上是电阻值的变化,最终通过HX711进行采集转换,再由STM32进行采集。

在本项目中,我们只需了解 HX711 的输出数据是什么,以及如何通过 STM32 采集 HX711 的数据。

HX711 模块有四个接口:

1,VCC

2,GND

这部分的编程原理将在后续的 STM32 编程中体现。

硬件原理

HX711模块的原理图如下:

左侧是一个由四个电阻组成的桥式传感器。不同物体的重量会改变对应的电阻值,然后通过HX711转换为实际重量。

在51 MCU中,可以使用Proteus软件进行仿真:

STM32F103RCT6

STM32 SCM在此我们已非常熟悉,不再赘述。

以下是我使用的STM32开发板:

应用架构

主代码如下:

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "hx711.h"
#define KEY_PEELED           0x0a
#define KEY_CLEAR            0x0b
#define KEY_UINT             0x0c
#define DISPLYER_ADDR0           0x0d
#define DISPLYER_ADDR1           0x0e
extern u8 USART_RX_END;
u8 data_send[8]= {0xA5, 0x5A, 0x05, 0x82, 0x00, 0x00, 0x00,0x00};
void UART1_Send_Array(u8 *send_array,unsigned char num)
{
u8 i=0;
while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);
while(i<num)< span=""></num)<>
{
USART_SendData(USART1,send_array[i]);
while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);
i++;
}
}
int main(void)
{
int cm,peeled;
u16 time=0;
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);  //UART INIT
ADInit();//HX711 INIT
delay_ms(1000);
while(1)
{
delay_ms(5);
time++;
if(time>=60)
{
cm=11270-Get_Weight();//»ñȡʵÎïÖØÁ¿
//if(cm<=0)cm=0;
if(peeled)
{
cm=cm-peeled;
}
time=0;
data_send[5]=DISPLYER_ADDR0;
data_send[6] = cm >> 8;//hight
data_send[7] = cm & 0x00ff;//low
UART1_Send_Array(data_send,8); //Send display data
}
if(USART_RX_END)
{
switch (USART_RX_BUF[5])
{
case KEY_PEELED:
peeled=cm;
break;
case KEY_CLEAR:
peeled=0;
break;
case KEY_UINT:
break;
default:
USART_RX_END=0;
USART_RX_STA=0;
break;
}
USART_RX_END=0;
USART_RX_STA=0;
}
}
}

STONE 显示 UART 数据格式说明

以下指令表示将 00 04 写入数据存储区域的地址 0x0020:

0xA5 0x5A 0x05 0x82 0x01 0x33 0x00 0x04

0xA55A:数据帧头部

0x05:有效数据长度,从 0x82 开始

0x82:写寄存器指令

0x0133:写内存地址

0x0004:待写入的数据

只需在 Arduino 中编程,并将数据以这种格式发送至 STONE 串口触摸显示模块即可完成数据显示。

当用户按下串口屏串口显示屏上的按钮时,STM32 将接收 8 个字节的数据。我们只需确定第五个字节的数据即可判断用户按下了哪个按钮,然后编写代码让 MCU 执行相应的操作。

简单电子秤效果

    滚动至顶部