基于STM32的hx711称重模块使用

devtools/2024/11/12 23:23:33/

欢迎入群共同学习交流
时间记录: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

源程序

#include "hx711.h"/*** 使用A通道128增益模式,25时钟脉冲
*/#define SCK_HIGH GPIO_SetBits(GPIOB, GPIO_Pin_9)
#define SCK_LOW GPIO_ResetBits(GPIOB, GPIO_Pin_9)
#define DT_HIGH GPIO_SetBits(GPIOB, GPIO_Pin_8)
#define DT_LOW GPIO_ResetBits(GPIOB, GPIO_Pin_8)
#define DT_READ GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8)
#define DT_OUTMODE  {GPIOB->CRH &= 0xFFFFFFF0; GPIOB->CRH |= 0x00000003;} // 推挽输出
#define DT_INMODE   {GPIOB->CRH &= 0xFFFFFFF0; GPIOB->CRH |= 0x00000004;} // 浮空输入static int hx711Read(void);
int zero = 0;
#define gapValue 404.08  // 校准参数void hx711Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
}int hx711Read(void)
{int count = 0;DT_OUTMODE;DT_HIGH;SCK_LOW; // 默认初始化模式DT_INMODE;while(DT_READ); // 等待数据准备好,大概100ms,10Hzfor(u8 i=0;i<24;i++){SCK_HIGH; // 上升沿准备数据count <<= 1;SCK_LOW; // 下降沿采集数据if(DT_READ)count |= 0x01;}SCK_HIGH; // 产生25个脉冲信号标识使用A通道128增益模式SCK_LOW;count ^= 0x800000;return count;
}void hx711Zero(void)
{for(u8 i=0;i<7;i++){zero += hx711Read();}zero /= 7;
}float hx711GetWeight(void)
{float weight = 0.0;int tempWeight = 0;for(u8 i=0;i<7;i++){tempWeight += hx711Read();}tempWeight /= 7;if(tempWeight > zero)weight = (float)(tempWeight - zero)/gapValue;elseweight = 0.0;return weight;
}

http://www.ppmy.cn/devtools/132877.html

相关文章

达梦8数据库适配ORACLE的8个参数

目录 1、概述 1.1 概述 1.2 实验环境 2、参数简介 3、实验部分 3.1 参数BLANK_PAD_MODE 3.2 参数COMPATIBLE_MODE 3.3 参数ORDER_BY_NULLS_FLAG 3.4 参数DATETIME_FMT_MODE 3.5 参数PL_SQLCODE_COMPATIBLE 3.6 参数CALC_AS_DECIMAL 3.7 参数ENABLE_PL_SYNONYM 3.8…

OpenGL学习笔记(四) RGBA颜色

RGBA模式中&#xff0c;每一个像素会保存以下数据&#xff1a;R值&#xff08;红色分量&#xff09;、G值&#xff08;绿色分量&#xff09;、B值&#xff08;蓝色分量&#xff09;和A值&#xff08;alpha分量&#xff09;。其中红、绿、蓝三种颜色相组合&#xff0c;就可以得到…

Flutter 中 Provider 的使用指南

目录 1.什么是 Provider 2.如何安装 Provider 3.基本使用方式 1.使用ChangeNotifierProvider提供状态 2.使用 Provider.of 手动读取状态 3.多Provider 的使用 4.常见的 Provider 类型 在 Flutter 开发中&#xff0c;状态管理是一个常见的需求。Provider 是 Flutter 官方…

shell中执行hive指令以及hive中执行shell和hdfs指令语法

0. 简介 主要介绍了三种环境命令执行语法&#xff1a; shell中执行hive指令hive中执行shell指令hive中执行hdfs指令 1. shell中执行hive指令 语法&#xff1a;hive [-hiveconf xy]* [<-i filename>]* [<-f filename> | <-e query-string>] [-S] 说明&…

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…

Redis - 主从复制

在分布式系统中为了解决单点问题&#xff0c;通常会把数据复制多个副本部署到其他服务器&#xff0c;满⾜故障恢 复和负载均衡等需求。Redis也是如此&#xff0c;它为我们提供了复制的功能&#xff0c;实现了相同数据的多个Redis副 本。复制功能是⾼可⽤Redis的基础&#xff0c…

编译ffmpeg动态库时设置RPATH为$ORIGIN

原本&#xff0c;我这样编译: ./configure \--enable-xxx \--disable-yyy \...为了设置 RPATH, 尝试了在 configure 后面设置&#xff0c;如下几种都无效: --extra-ldsoflags"-Wl,-rpath,$ORIGIN" 没有 RPATH--extra-ldsoflags"-Wl,-rpath,$ORIGIN" 没有…

【前端】Svelte:核心语法和组件基础

本教程将详细介绍 Svelte 的核心语法和组件基础&#xff0c;包括 <script>、<style> 和 HTML 模板的使用方法。我们将通过实例掌握双向数据绑定、条件渲染、循环等基本语法&#xff0c;最后编写简单的交互式组件。 Svelte 组件机制 Svelte 使用组件化结构来组织代…