✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对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 引脚 |
---|---|
VCC | 5V |
GND | GND |
DOUT | D2 |
PD_SCK | D3 |
四、软件编程
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 转换器芯片,能够为压力测量应用提供可靠的解决方案。在实际开发中,我们可以根据具体需求对代码进行优化和扩展,实现更加精确和稳定的压力测量。