MicroPython for esp32s3开发HX711称重模块指南

一、HX711模块基本介绍

一)、核心功能

  1. 24位高精度ADC

    • 专为称重传感器设计的模数转换芯片,支持±20mV或±40mV满幅差分输入
    • 内置128/64倍可编程增益放大器(通道A)及固定32倍增益(通道B)
  2. 集成化设计

    • 集成稳压电源、时钟振荡器等外围电路,无需额外模拟电源
    • 支持两路差分信号输入,可灵活选择通道A或B进行数据采集

二)、硬件特性

参数规格
工作电压2.6~5.5V(兼容3.3V/5V系统)
输出数据速率10Hz(抗50/60Hz工频干扰)或80Hz(高速模式)
通信接口仅需SCK(时钟)和DOUT(数据)两线制串行通信
封装形式SOP-16封装,支持工业级温度范围(-20°C~+85°C)

三)、工作原理

  1. 数据采集流程

    • DOUT引脚变低电平后,控制器发送25~27个时钟脉冲读取24位数据及增益配置
    • 第25个脉冲用于切换下一次采样通道(A或B)
  2. 信号处理机制

    • 差分输入信号经可编程放大器放大后,由24位ADC转换为数字量
    • 输出数据格式为二进制补码,需进行符号位扩展处理

四)、典型应用场景

  • 称重系统‌:电子秤、料斗秤、工业称重设备
  • 压力检测‌:压力传感器信号采集与处理
  • 工业控制‌:张力检测、物料流量监控等场景

二、硬件连接规范

  1. 电源接口

    • HX711的 ‌VCC‌ 接 ESP32 的 ‌3.3V‌ 输出端
    • HX711的 ‌GND‌ 与 ESP32 共地连接
  2. 数据通信接口

    • HX711的 ‌DOUT‌(数据输出)接 ESP32 的任意 GPIO 输入引脚(比如 ‌GPIO5‌)
    • HX711的 ‌PD_SCK‌(时钟信号)接 ESP32 的任意 GPIO 输出引脚(比如 ‌GPIO4‌)
  3. 传感器接口

    • 称重传感器的 ‌E+、E-‌ 接 HX711 的激励电压输出端(通常为红色、黑色线)
    • 称重传感器的 ‌A+、A-‌ 接 HX711 的信号输入端(通常为白色、绿色线)

三、软件配置要点

  1. 引脚初始化

    from machine import Pin 
    
    hx711_dout = Pin(5, Pin.IN) # DOUT接GPIO5 
    hx711_sck = Pin(4, Pin.OUT) # SCK接GPIO4 

  2. 通信时序控制

    • 遵循 ‌24个时钟脉冲读取数据 + 1个脉冲结束通信‌ 的时序规范
    • 每个时钟脉冲后需保持至少 ‌1μs‌ 的延时
  3. 电源管理

    • 建议在 HX711 的 ‌VCC‌ 和 ‌GND‌ 之间并联 ‌100nF 滤波电容
    • 若使用外部稳压电源,需确保 DVDD 与 ESP32 共地

四、代码实现及其要点说明

 

from machine import Pin
import time
import ujson

class HX711:
    def __init__(self, dt_pin, sck_pin):
        self.dt = Pin(dt_pin, Pin.IN)
        self.sck = Pin(sck_pin, Pin.OUT)
        self.offset = 0
        self.scale = 1.0

    def read_raw(self):
        # 等待数据准备好(DT引脚变低)
        while self.dt.value() == 1:
            time.sleep_us(1)

        data = 0
        for _ in range(24):  # 读取24位数据
            self.sck.value(1)
            time.sleep_us(1)
            data = (data << 1) | self.dt.value()
            self.sck.value(0)
            time.sleep_us(1)

        # 补码符号位扩展
        if data & 0x800000:
            data |= 0xFF000000

        self.sck.value(1)  # 发送第25个脉冲结束本次读取
        time.sleep_us(1)
        self.sck.value(0)
        time.sleep_us(1)
        
        return data

    def tare(self, samples=10):
        # 去皮操作
        self.offset = sum(self.read_raw() for _ in range(samples)) / samples

    def set_scale(self, weight,samples=10):
        # 设置比例系数
        raw = sum(self.read_raw() for _ in range(samples)) / samples
        self.scale = (raw - self.offset) / weight
        if self.scale == 0:
            self.scale = 1

    def get_weight(self, samples=3):
        # 获取校准后的重量
        raw = sum(self.read_raw() for _ in range(samples)) / samples
        return (raw - self.offset) / self.scale
    
    def save_offset_scale(self,filename="hx711setting.json"):
        with open(filename, 'w') as f:
            ujson.dump({'offset':self.offset, 'scale':self.scale}, f)        
# 使用示例
hx = HX711(dt_pin=5, sck_pin=4)

# 校准流程
hx.tare()  # 空载时去皮
hx.set_scale(500)  # 设置比例系数,需根据实际砝码校准
hx.save_offset_scale()
# 获取重量
while True:
    weight = hx.get_weight()
    print("重量: %.2f g" % weight)
    time.sleep(1)

​

建议读取数据前,先检测数据是否就绪,这样可以避免无谓的等待,提高产品的体验感,当然如果是单纯的电子称重器就无所谓了。

设置比例系数之前必须去皮,也就是调用hx.tare()。设置比例系数,其实就是计算出每克对应的AD值,所以,建议使用精度相对较高的,质量相对大一些的砝码来操作。设置好后建议保存到flash或eeprom中,这样断电后重新上电就不需要重新设置比例系统。同样的,去皮得到的值也需要保存到flash或eeprom中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远的元子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值