当前位置: 首页 > news >正文

基于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

源程序

#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.lryc.cn/news/480436.html

相关文章:

  • Nginx独立项目相关配置说明
  • Nuxt3之使用lighthouse性能测试及性能优化实操
  • ‌webdriver.Chrome()参数简介
  • Ubuntu如何更换环境中的Python版本
  • python-字符串中大写字母转小写,小写字母转大写
  • 前端学习之ES6+
  • yolov10的几种权重文件
  • FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持
  • C++类和对象 (下)
  • 网络层5——IPV6
  • 【wpf】ResourceDictionary 字典资源的用法
  • Foliate:沉浸式阅读!!!
  • 【excel基本操作-sumif绝对引用和相对引用
  • word及Excel常见功能使用
  • 网页中的某个元素高度突然无法设置
  • springboot给不同用户动态定制请求结果思路
  • 【网络】HTTP(超文本传输协议)详解
  • poll()方法和remove()方法的区别是什么?
  • 小程序跳转另一个小程序
  • 介绍一下数组(c基础)(详细版)
  • 工业主板在汽车制造中的应用
  • 博弈论(所有情况最优解)——课堂笔记
  • 深入提升Python编程能力的全方位指南
  • 如何使用 Python 语言的正则表达式进行网页数据的爬取?
  • 剑指offer第七、八天
  • 有哪些常见的方法可以评估中断处理能力?
  • Android GPU纹理数据拷贝
  • 浏览器端直播推流实现——系统篇
  • HDFS和HBase跨集群数据迁移 源码
  • opencv实时弯道检测