HX711 压力传感器学习

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

一、引言

在许多需要测量重量或压力的应用场景中,如电子秤、工业称重系统等,压力传感器起着至关重要的作用。HX711 是一款专为高精度称重传感器设计的 24 位 A/D 转换器芯片,它具有高集成度、低功耗、抗干扰能力强等优点,能够将压力传感器输出的微弱模拟信号转换为数字信号,方便微控制器进行处理。本文将详细介绍 HX711 压力传感器的工作原理、硬件连接、软件编程以及实际应用中的注意事项。

二、HX711 工作原理

2.1 基本功能

HX711 芯片主要由一个低噪声可编程增益放大器和一个 24 位的 A/D 转换器组成。它可以直接与各种类型的桥式压力传感器连接,将传感器输出的差分模拟信号进行放大和数字化处理,最终输出 24 位的数字信号供微控制器读取。

2.2 增益选择

HX711 提供了两种增益选择:128 倍和 64 倍。增益的选择通过芯片的 PD_SCK 和 DOUT 引脚的操作来实现。当增益为 128 倍时,适用于小信号的压力传感器;当增益为 64 倍时,可用于信号相对较大的传感器。

2.3 时钟与数据传输

HX711 通过两个引脚与微控制器进行通信:PD_SCK(Power Down and Serial Clock Input)和 DOUT(Serial Data Output)。PD_SCK 用于提供时钟信号,DOUT 用于输出转换后的数字数据。数据传输采用串行方式,每次传输 24 位数据。

三、硬件连接

3.1 压力传感器与 HX711 的连接

压力传感器通常为桥式结构,有四个引脚:激励正(EXC+)、激励负(EXC - )、信号正(SIG+)和信号负(SIG - )。将激励正和激励负引脚连接到 HX711 的 AVDD 和 GND 引脚,为传感器提供电源;将信号正和信号负引脚连接到 HX711 的 A+ 和 A - 引脚,用于传输传感器输出的差分信号。

3.2 HX711 与微控制器的连接

将 HX711 的 PD_SCK 引脚连接到微控制器的一个 GPIO 输出引脚,用于提供时钟信号;将 DOUT 引脚连接到微控制器的一个 GPIO 输入引脚,用于读取转换后的数字数据。同时,将 HX711 的 VCC 引脚连接到电源(通常为 5V),GND 引脚连接到地。

以下是一个简单的硬件连接示例(以 Arduino 为例):

HX711 引脚Arduino 引脚
VCC5V
GNDGND
DOUTD2
PD_SCKD3

四、软件编程

4.1 数据读取原理

当 DOUT 引脚为低电平时,表示 HX711 已经完成一次 A/D 转换,微控制器可以开始读取数据。微控制器通过 PD_SCK 引脚提供 24 个时钟脉冲,每一个时钟脉冲的上升沿,DOUT 引脚上的数据将被移出一位,微控制器依次读取 24 位数据。读取完 24 位数据后,再根据需要提供额外的 1 - 3 个时钟脉冲来选择增益。

4.2 Arduino 代码示例

#include <Arduino.h>

// 定义 HX711 引脚
const int DOUT = 2;
const int PD_SCK = 3;

// 读取 HX711 数据的函数
long readHX711() {
  long value = 0;
  byte data[3] = {0};

  // 等待 DOUT 引脚变为低电平,表示数据准备好
  while (digitalRead(DOUT) == HIGH);

  // 读取 24 位数据
  for (int i = 2; i >= 0; i--) {
    for (int j = 7; j >= 0; j--) {
      digitalWrite(PD_SCK, HIGH);
      bitWrite(data[i], j, digitalRead(DOUT));
      digitalWrite(PD_SCK, LOW);
    }
  }

  // 提供额外的时钟脉冲选择增益(这里选择 128 倍增益)
  digitalWrite(PD_SCK, HIGH);
  digitalWrite(PD_SCK, LOW);

  // 将 24 位数据转换为有符号的 32 位整数
  value = ((long)data[2] << 16) | ((long)data[1] << 8) | (long)data[0];

  return value;
}

void setup() {
  // 初始化串口通信
  Serial.begin(9600);

  // 设置 PD_SCK 和 DOUT 引脚的模式
  pinMode(PD_SCK, OUTPUT);
  pinMode(DOUT, INPUT);
}

void loop() {
  // 读取 HX711 数据
  long rawValue = readHX711();

  // 输出原始数据到串口监视器
  Serial.print("Raw Value: ");
  Serial.println(rawValue);

  // 延时一段时间
  delay(1000);
}

4.3 代码解释

  • readHX711() 函数:用于读取 HX711 的 24 位数据。首先等待 DOUT 引脚变为低电平,表示数据准备好;然后通过 24 个时钟脉冲依次读取 24 位数据;最后提供一个额外的时钟脉冲选择 128 倍增益。将读取到的 24 位数据转换为有符号的 32 位整数并返回。
  • setup() 函数:初始化串口通信和 PD_SCK、DOUT 引脚的模式。
  • loop() 函数:循环调用 readHX711() 函数读取数据,并将原始数据输出到串口监视器,然后延时 1 秒。

五、实际应用中的注意事项

5.1 电源稳定性

HX711 对电源的稳定性要求较高,不稳定的电源可能会导致测量结果出现误差。因此,建议使用高质量的电源模块或在电源引脚附近添加滤波电容,以减少电源噪声的影响。

5.2 布线问题

在硬件连接时,应尽量缩短传感器与 HX711 之间的连线长度,避免信号线受到干扰。同时,将信号线与电源线分开布线,以减少电磁干扰。

5.3 校准问题

由于不同的压力传感器具有不同的灵敏度和零点输出,因此在实际应用中需要对 HX711 进行校准。校准的方法通常是先测量空载时的输出值作为零点,然后在传感器上加载已知重量的物体,测量此时的输出值,通过计算得到传感器的灵敏度系数,从而将原始数据转换为实际的重量值。

六、总结

通过本文的介绍,我们对 HX711 压力传感器有了全面的了解。从工作原理、硬件连接到软件编程,以及实际应用中的注意事项,都进行了详细的阐述。HX711 作为一款高性能的 A/D 转换器芯片,能够为压力测量应用提供可靠的解决方案。在实际开发中,我们可以根据具体需求对代码进行优化和扩展,实现更加精确和稳定的压力测量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值