HX711电子秤模块详解(STM32)
目录
一、介绍
HX711是一种高精度、低成本的压力传感器信号放大器,主要用于测量重力或压力变化。它工作在 2.7V 至 5.5V 的电源范围内,支持多种传感器类型,如电桥、应变计等。HX711 提供了一种简便的数字接口来读取模拟输出信号,适用于嵌入式系统和传感器应用。
以下是HX711电子秤模块的参数:
型号 | HX711 |
工作电压 | 3.3~5V(推荐5V) |
量程 | 5kg |
精度 | 1g |
AD位宽 | 24位 |
哔哩哔哩视频链接
HX711电子秤模块详解(STM32)
(资料分享见文末)
二、传感器原理
1.原理图
2.引脚描述
引脚名称 | 描述 |
GND | 模块地线 |
DT | 数据输出端口 |
SCK | 时钟输入端口 |
VCC | 电源 |
3.工作原理介绍
传感器的一个重要构成是HX711的芯片,内部由二进制模数转换器(ADC)和一个放大器组成。ADC将模拟信号转换为数字信号,放大器则扩大转化出来的信号的幅度,以便更精确地测量。HX711压力传感器的工作原理是基于万用表电桥原理,利用压力传感器的阻值变化来实现重量的测量
三、程序设计
1.使用STM32F103C8T6读取HX711电子秤模块采集的数据,通过串口发送至电脑
2.将读取得到信息数据同时在OLED上显示
HX711_SCK | PA0 |
HX711_DT | PA1 |
OLED_SCL | PB11 |
OLED_SDA | PB10 |
串口 | 串口1 |
main.c文件
#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "hx711.h"
/*****************辰哥单片机设计******************
STM32
* 项目:HX711电子秤模块实验
* 版本: V1.0
* 日期: 2024.9.11
* MCU:STM32F103C8T6
* 接口:参看HX711.h
* BILIBILI:辰哥单片机设计
* CSDN:辰哥单片机设计
* 作者:辰哥
**********************BEGIN***********************/
int value;
float weight;
int32_t reset;
u8 buff[30];
float Weights=100.0; //100g
int32_t Weights_100=8493860; //100g
int main(void)
{
SystemInit();//配置系统时钟为72M
delay_init(72);
LED_Init();
LED_On();
HX711_Init();
USART1_Config();//串口初始化
OLED_Init();
printf("Start \n");
delay_ms(1000);
//显示“重量:”
OLED_ShowChinese(0,0,0,16,1);
OLED_ShowChinese(16,0,1,16,1);
OLED_ShowChar(32,0,':',16,1);
reset = HX711_GetData();
while (1)
{
LED_Toggle();
value = HX711_GetData();
weight=(float)(value-reset)*Weights/(float)(Weights_100-reset);
sprintf((char*)buff,"%.1f ",weight);
printf("重量: %f\r\n",weight);
OLED_ShowString(50,30,buff,16,1);
delay_ms(500);
}
}
hx711.h文件
#ifndef __HX711_H
#define__HX711_H
#include "stm32f10x.h"
#include "delay.h"
#include "math.h"
/*****************辰哥单片机设计******************
STM32
* 文件:HX711电子秤模块h文件
* 版本: V1.0
* 日期: 2024.9.11
* MCU:STM32F103C8T6
* 接口:见代码
* BILIBILI:辰哥单片机设计
* CSDN:辰哥单片机设计
* 作者:辰哥
**********************BEGIN***********************/
/***************根据自己需求更改****************/
// HX711 GPIO宏定义
#defineHX711_GPIO_CLKRCC_APB2Periph_GPIOA
#define HX711_SCK_GPIO_PORTGPIOA
#define HX711_SCK_GPIO_PINGPIO_Pin_0
#define HX711_DT_GPIO_PORTGPIOA
#define HX711_DT_GPIO_PINGPIO_Pin_1
/*********************END**********************/
#define HX711_SCK_HGPIO_SetBits(HX711_SCK_GPIO_PORT,HX711_SCK_GPIO_PIN);
#define HX711_SCK_LGPIO_ResetBits(HX711_SCK_GPIO_PORT,HX711_SCK_GPIO_PIN);
#define HX711_DTGPIO_ReadInputDataBit(HX711_DT_GPIO_PORT, HX711_DT_GPIO_PIN)
void HX711_Init(void);
unsigned long HX711_GetData(void);
#endif /* __ADC_H */
hx711.c文件
#include "hx711.h"
#include "delay.h"
/*****************辰哥单片机设计******************
STM32
* 文件:HX711电子秤模块c文件
* 版本: V1.0
* 日期: 2024.9.11
* MCU:STM32F103C8T6
* 接口:见代码
* BILIBILI:辰哥单片机设计
* CSDN:辰哥单片机设计
* 作者:辰哥
**********************BEGIN***********************/
/**
* @brief PM25初始化程序
* @param 无
* @retval 无
*/
void HX711_Init(void)
{
/*定义一个HX711_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相关的GPIO外设时钟*/
RCC_APB2PeriphClockCmd(HX711_GPIO_CLK , ENABLE);
/*选择要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = HX711_SCK_GPIO_PIN;
GPIO_Init(HX711_SCK_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = HX711_DT_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(HX711_DT_GPIO_PORT, &GPIO_InitStructure);
}
unsigned long HX711_GetData(void)
{
unsigned long Count;
unsigned char i;
HX711_SCK_L;
delay_us(1);
Count=0;
while(HX711_DT);
for (i=0;i<24;i++)
{
HX711_SCK_H;
delay_us(1);
Count=Count<<1;
HX711_SCK_L;
delay_us(1);
if(HX711_DT) Count++;
}
HX711_SCK_H;
delay_us(1);
Count=Count^0x800000;//最高位取反,其他位不变
//在HX71芯片中,count是一个32位的有符号整数,用于存储称重传感器的读数。
//当count的最高位为1时,表示读数为负数,而HX711芯片不支持负数的读数。
//因此,为了将负数转换为正数,需要将count的最高位取反,即将count与0x800000进行异或操作。
//具体来说,0x800000的二进制表示为100000000000000000000000,与count进行异或操作后,
//可以将count的最高位从1变为0,从而得到对应的正数读数。
HX711_SCK_L;
delay_us(1);
return(Count);
}
四、实验效果
五、资料获取
项目分享
原文地址:https://blog.csdn.net/qq_44016222/article/details/142353234
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!