基于STM32的hx711称重模块使用

欢迎入群共同学习交流
时间记录:2024/11/9

一、知识点记录

1、hx711
1)HX711是一款高精度压力传感器专用的24位模数转换芯片,主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围
2)工作电压2.6-5.5V
3)引脚介绍

引脚 描述
VDD 电源正极
GND 电源地
SCK 时钟信号引脚
DT 数据输入输出引脚

4)压力传感器与hx711连线
E+ - 电源正极(红线)
E- - 电源负极(黑线)
A+ - 差分信号A通道+(绿色)
A- - 差分信号A通道-(白色)
B+ - 差分信号B通道+
B- - 差分信号B通道-

一般选择A通道128增益模式
时序图
5)时序介绍
    DT线高电平时SCK时钟线低电平,等待DT线变为低电平后数据准备完毕可以进行读取重量数据,一共24位ADC数据高位先读,上升沿等待数据变换,下降沿读取数据,通道和增益根据此次周期个数决定,切换通道和增益的话至少需要两个周期进行数据稳定

二、示例程序

头文件

#ifndef __HX711_H__
#define __HX711_H__

#include "stm32f10x.h"

void hx711Init(void);
void hx711Zero(void);
float hx711GetWeight(void);

#endif

源程序

#incl
### STM32称重模块使用方法 STM32微控制器能够有效地管理智能电子秤中的各个组件,包括传感器、模拟-数字转换器(ADC)以及显示器。为了实现这一目标,HX711称重模块被用来精确地测量重量并将其转化为数字信号供STM32处理[^3]。 #### HX711模块简介 HX711是一个专为高精度称重设计的专用集成电路(IC),其内部集成了24位A/D转换器和支持可编程增益放大(PGA)[^5]。该模块可以直接连接至电阻应变片式负载单元,并能输出稳定的毫伏级电压变化给MCU读取。 #### 硬件连接方式 对于硬件部分来说, 需要将HX711STM32之间建立通信接口。具体做法如下: - 将HX711的数据引脚(DT)接到STM32的一个GPIO口上; - 同样地把时钟引脚(SCK)也连到另一个可用作PWM输出或者定时器触发输入端子上的管脚上去; - 如果计划利用SPI总线协议,则需按照标准定义分配相应资源; 此外还需要注意电源供电问题——确保两者工作在同一电平下(通常是3.3V或5V),并且共地良好接触以减少干扰影响准确性。 #### 初始化配置过程 当完成上述物理层面准备工作之后,在软件层面上就要着手于初始化设置环节了: ```c // 定义HX711相关参数 #define DOUT_PIN GPIO_Pin_0 /* 数据引脚 */ #define CLK_PIN GPIO_Pin_1 /* 时钟引脚 */ void HX711_Init(void){ // 设置DOUT和CLK为浮空输入模式 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); GPIO_InitStructure.GPIO_Pin = DOUT_PIN | CLK_PIN ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure); } ``` 这段代码展示了如何初始化HX711所需的两个主要IO端口[DOUT 和 SCK], 并设置了它们的工作状态为浮空输入模式以便接收来自称重芯片的信息流。 #### 测量流程解析 一旦完成了前期准备活动以后就可以进入核心操作阶段即获取当前放置物品的质量数值了。这里给出了一种简单而有效的方法来执行这项任务: ```c float Read_HX711(void){ uint8_t i,j=0; float count=0; while(!GPIO_ReadInputDataBit(GPIOA,DOUT_PIN)); //等待DT变为低电平 for(i=0;i<24;i++){ GPIO_SetBits(GPIOA,CLK_PIN ); //拉高SCK delay_us(1); //延时一段时间 j<<=1; //左移一位 if(GPIO_ReadInputDataBit(GPIOA,DOUT_PIN)) j++; GPIO_ResetBits(GPIOA,CLK_PIN ); //拉低SCK delay_us(1); //再次延时 } GPIO_SetBits(GPIOA,CLK_PIN ); delay_us(1); if(j & 0x800000){ //判断最高位是否为1 j=~j; //如果是则对其求反码加一得到补码形式表示负数 ++j; count=-((float)(j)/1000000*5960/128);//计算最终结果 }else{ count=((float)(j)/1000000*5960/128); //正数情况下的运算表达式 } GPIO_ResetBits(GPIOA,CLK_PIN ); return count; } ``` 此函数实现了从HX711读取原始二进制编码并通过特定公式换算成实际意义上的质量值的过程。 #### 数据处理策略 考虑到环境因素可能会引入噪声从而降低测量精度,因此有必要采取措施消除这些不利条件带来的误差。一种常见的做法是在采集多组样本后再做平均化处理或是采用卡尔曼滤波算法来进行优化改进[^4]。 #### 显示屏驱动逻辑 最后一步就是要把经过一系列变换后获得的结果直观呈现出来。这可以通过调用LCD库函数向屏幕写入字符串的方式轻松达成目的。当然也可以考虑更复杂些的设计比如绘制图形界面等增强用户体验感[^2]。 ```python lcd_display("Weight: %.2f kg"%weight_value) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值