涂鸦模组开发(压力传感器HX711)——2. 压力传感器HX711

概述

涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物的云平台,打造互联互通的开发标准,连接品牌、OEM 厂商、开发者、零售商和各行业的智能化需求,涂鸦的解决方案赋能并提升合作伙伴和客户的产品价值,同时通过技术应用使消费者的生活更加便利,涂鸦智能的智慧商业 SaaS 为丰富的垂直行业提供智能解决方案。涂鸦智能领先业界的技术,符合严格的数据保护标准和安全性。
压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
同时压力传感器可以应用于电子称重系统或者久坐系统,实现了称重显示、超限报警、校准、适应各种工作环境、远程实时监控等多种功能,可以广泛应用于各种称重场景。
本章主要是配置开发板对压力传感器HX711进行数据读取以及通过串口打印数据。

视频教学

https://www.bilibili.com/video/BV1Tr4y167gj/

硬件准备

首先需要准备一个开发板,这里我准备的是NUCLEO-F103RB的开发板:
在这里插入图片描述

对于该主控的原理图,可以在官方种进行下载,下载地址如下:
https://www.st.com/zh/evaluation-tools/nucleo-f103rb.html

在这里插入图片描述

选择芯片型号

使用STM32CUBEMX选择芯片stm32f103rb,如下所示:
在这里插入图片描述

配置时钟源

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:
在这里插入图片描述

配置时钟树

STM32F1的最高主频到72M,但是使用内部时钟最快只能达到64M,所以配置64即可:
在这里插入图片描述

串口配置

本次实验使用的串口1进行串口通信,波特率配置为115200。
在这里插入图片描述

开启中断。
在这里插入图片描述

生成工程设置

在这里插入图片描述

代码生成设置

最后设置生成独立的初始化文件:
在这里插入图片描述

生成代码

在这里插入图片描述

串口接线配置

由于只用做发送数据,故不需要接开发板的rx。
在这里插入图片描述

开发板 串口模块
PA9(TX) RX
GND GND

配置keil

在这里插入图片描述
在这里插入图片描述

打印代码

在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

变量定义:

/* USER CODE BEGIN PV */
#define BUFFERSIZE 255           //可以接收的最大字符个数       
uint8_t ReceiveBuff[BUFFERSIZE]; //接收缓冲区
uint8_t recv_end_flag = 0,Rx_len;//接收完成中断标志,接收到字符长度
/* USER CODE END PV */

函数声明和串口重定向:

/* USER CODE BEGIN PFP */

#ifdef __GNUC__									//串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */

打印数据进行测试。

  /* USER CODE BEGIN 2 */
	printf("压力传感器HX711\r\n");
  /* USER CODE END 2 */

打印演示效果

在这里插入图片描述

压力传感器HX711接线说明

桥式传感器于HX711原理如下所示。
在这里插入图片描述
模块接线方式如下所示。
在这里插入图片描述
压力传感器与HX711模块接线。

压力传感器 串口模块
红线 E+
黑线 E-
白线 A-
绿线 A+

开发板HX711模块接线。

开发板 串口模块
VCC VCC
DT PC10
SCK PC11
GND GND

STM32CUBEMX配置数据管脚

配置PC10为DT数据脚,配置PC11为SCK时钟脚。
在这里插入图片描述

压力传感器HX711通讯

串口通讯线由管脚 PD_SCK 和 DOUT 组成,用来输出数据,选择输入通道和增益。
当数据输出管脚 DOUT 为高电平时,表明A/D 转换器还未准备好输出数据,此时串口时钟输入信号 PD_SCK 应为低电平。当 DOUT 从高电平变低电平后,PD_SCK 应输入 25 至 27 个不等的时钟脉冲。其中第一个时钟脉冲的上升沿 将读出输出 24 位数据的最高位(MSB),直至第 24 个时钟脉冲完成,24 位输出数据从最高位至最低位逐位输出完成。第 25至 27 个时钟脉冲用来选择下一次 A/D 转换的输入通道和增益。
PD_SCK 的输入时钟脉冲数不应少于 25 或多于 27,否则会造成串口通讯错误。
当 A/D 转换器的输入通道或增益改变时,A/D 转换器需要 4 个数据输出周期才能稳定。
DOUT 在 4 个数据输出周期后才会从高电平变低电平,输出有效数据。
在这里插入图片描述
在这里插入图片描述

压力传感器HX711驱动程序

通过参考的驱动程序,修改成自己的代码。
在这里插入图片描述

主程序代码

  /* USER CODE BEGIN 2 */
	printf("压力传感器HX711\r\n");
	weight_qupi=ReadCount();//首次读取重量进行去皮操作
	printf("首次去皮weight_qupi=%d\n",weight_qupi);
	HAL_Delay(100);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		weight_shiji=ReadCount();
		if(weight_qupi>=weight_shiji)
		{
			weight_shiji=weight_qupi-weight_shiji;
			weight_shiji=weight_shiji/100;
			printf("重量为:%dg",weight_shiji);
		}
		else
		{
			weight_shiji=weight_shiji-weight_qupi;
			weight_shiji=weight_shiji/100;
			printf("重量为:-%dg",weight_shiji);
		}	
		HAL_Delay(1000);
  }
  /* USER CODE END 3 */

实际演示

实际测试重量为1115g。
在这里插入图片描述
模块测试如下所示1157g。
在这里插入图片描述
在这里插入图片描述

最后

以上的代码会在Q群里分享。QQ群:615061293。
或者关注微信公众号『记帖』,持续更新文章和学习资料,可加作者的微信交流学习!
在这里插入图片描述

版权声明:本文为CSDN博主「记帖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24312945/article/details/123173099

概述

涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物的云平台,打造互联互通的开发标准,连接品牌、OEM 厂商、开发者、零售商和各行业的智能化需求,涂鸦的解决方案赋能并提升合作伙伴和客户的产品价值,同时通过技术应用使消费者的生活更加便利,涂鸦智能的智慧商业 SaaS 为丰富的垂直行业提供智能解决方案。涂鸦智能领先业界的技术,符合严格的数据保护标准和安全性。
压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
同时压力传感器可以应用于电子称重系统或者久坐系统,实现了称重显示、超限报警、校准、适应各种工作环境、远程实时监控等多种功能,可以广泛应用于各种称重场景。
本章主要是配置开发板对压力传感器HX711进行数据读取以及通过串口打印数据。

视频教学

https://www.bilibili.com/video/BV1Tr4y167gj/

硬件准备

首先需要准备一个开发板,这里我准备的是NUCLEO-F103RB的开发板:
在这里插入图片描述

对于该主控的原理图,可以在官方种进行下载,下载地址如下:
https://www.st.com/zh/evaluation-tools/nucleo-f103rb.html

在这里插入图片描述

选择芯片型号

使用STM32CUBEMX选择芯片stm32f103rb,如下所示:
在这里插入图片描述

配置时钟源

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:
在这里插入图片描述

配置时钟树

STM32F1的最高主频到72M,但是使用内部时钟最快只能达到64M,所以配置64即可:
在这里插入图片描述

串口配置

本次实验使用的串口1进行串口通信,波特率配置为115200。
在这里插入图片描述

开启中断。
在这里插入图片描述

生成工程设置

在这里插入图片描述

代码生成设置

最后设置生成独立的初始化文件:
在这里插入图片描述

生成代码

在这里插入图片描述

串口接线配置

由于只用做发送数据,故不需要接开发板的rx。
在这里插入图片描述

开发板 串口模块
PA9(TX) RX
GND GND

配置keil

在这里插入图片描述
在这里插入图片描述

打印代码

在main.c中,添加头文件,若不添加会出现 identifier “FILE” is undefined报错。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

变量定义:

/* USER CODE BEGIN PV */
#define BUFFERSIZE 255           //可以接收的最大字符个数       
uint8_t ReceiveBuff[BUFFERSIZE]; //接收缓冲区
uint8_t recv_end_flag = 0,Rx_len;//接收完成中断标志,接收到字符长度
/* USER CODE END PV */

函数声明和串口重定向:

/* USER CODE BEGIN PFP */

#ifdef __GNUC__									//串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END PFP */

打印数据进行测试。

  /* USER CODE BEGIN 2 */
	printf("压力传感器HX711\r\n");
  /* USER CODE END 2 */

打印演示效果

在这里插入图片描述

压力传感器HX711接线说明

桥式传感器于HX711原理如下所示。
在这里插入图片描述
模块接线方式如下所示。
在这里插入图片描述
压力传感器与HX711模块接线。

压力传感器 串口模块
红线 E+
黑线 E-
白线 A-
绿线 A+

开发板HX711模块接线。

开发板 串口模块
VCC VCC
DT PC10
SCK PC11
GND GND

STM32CUBEMX配置数据管脚

配置PC10为DT数据脚,配置PC11为SCK时钟脚。
在这里插入图片描述

压力传感器HX711通讯

串口通讯线由管脚 PD_SCK 和 DOUT 组成,用来输出数据,选择输入通道和增益。
当数据输出管脚 DOUT 为高电平时,表明A/D 转换器还未准备好输出数据,此时串口时钟输入信号 PD_SCK 应为低电平。当 DOUT 从高电平变低电平后,PD_SCK 应输入 25 至 27 个不等的时钟脉冲。其中第一个时钟脉冲的上升沿 将读出输出 24 位数据的最高位(MSB),直至第 24 个时钟脉冲完成,24 位输出数据从最高位至最低位逐位输出完成。第 25至 27 个时钟脉冲用来选择下一次 A/D 转换的输入通道和增益。
PD_SCK 的输入时钟脉冲数不应少于 25 或多于 27,否则会造成串口通讯错误。
当 A/D 转换器的输入通道或增益改变时,A/D 转换器需要 4 个数据输出周期才能稳定。
DOUT 在 4 个数据输出周期后才会从高电平变低电平,输出有效数据。
在这里插入图片描述
在这里插入图片描述

压力传感器HX711驱动程序

通过参考的驱动程序,修改成自己的代码。
在这里插入图片描述

主程序代码

  /* USER CODE BEGIN 2 */
	printf("压力传感器HX711\r\n");
	weight_qupi=ReadCount();//首次读取重量进行去皮操作
	printf("首次去皮weight_qupi=%d\n",weight_qupi);
	HAL_Delay(100);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		weight_shiji=ReadCount();
		if(weight_qupi>=weight_shiji)
		{
			weight_shiji=weight_qupi-weight_shiji;
			weight_shiji=weight_shiji/100;
			printf("重量为:%dg",weight_shiji);
		}
		else
		{
			weight_shiji=weight_shiji-weight_qupi;
			weight_shiji=weight_shiji/100;
			printf("重量为:-%dg",weight_shiji);
		}	
		HAL_Delay(1000);
  }
  /* USER CODE END 3 */

实际演示

实际测试重量为1115g。
在这里插入图片描述
模块测试如下所示1157g。
在这里插入图片描述
在这里插入图片描述

最后

以上的代码会在Q群里分享。QQ群:615061293。
或者关注微信公众号『记帖』,持续更新文章和学习资料,可加作者的微信交流学习!
在这里插入图片描述

版权声明:本文为CSDN博主「记帖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24312945/article/details/123173099

生成海报
点赞 0

记帖

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

pwm电机调速的原理介绍与代码实现

1、pwm实现调速的原理与介绍 PWM(Pulse Width Modulation)脉冲宽度调制。 1)占空比 pwm占空比就是一个脉冲周期内有效电平在整个周期所占的比例。 通过调节PWM的占空比就能调节IO口上电压的持续

【STM32Cube笔记】2-STM32Cube安装教程

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配