云计算百科
云计算领域专业知识百科平台

电子秤芯片hx711原理图分享

电子秤芯片hx711原理图分享

  • 一、hx711介绍
    • 1、芯片概述
    • 2、内部结构框图
    • 3、关键特性详解
    • 4、引脚功能
    • 5、工作时序
    • 6、设计注意事项
    • 7、常见故障排查
  • 二、原理图分享
  • 三、驱动代码

一、hx711介绍

1、芯片概述

HX711是一款专为高精度电子秤设计的24位模数转换器(ADC),具有以下核心特性:

  • 分辨率:24位无缺失码
  • 采样速率:10SPS或80SPS可选
  • 输入通道:双路差分输入(通道A和通道B)
  • 增益可调:通道A支持128/64倍增益,通道B固定32倍增益
  • 工作电压:2.6V~5.5V
  • 封装形式:SOP-16

  • 2、内部结构框图

    +———————–+
    | 模拟输入 (IN+/-) |→ PGA → ΣΔ调制器 → 数字滤波器 → 串行接口
    | 基准电压 (V_{BG}) |↑
    | 时钟管理 (OSC) |
    +———————–+


    3、关键特性详解

  • 差分输入设计

    • 通道A:

      V

      I

      N

      =

      (

      A

      +

      A

      )

      V_{IN} = (A+ – A-)

      VIN=(A+A)

    • 通道B:

      V

      I

      N

      =

      (

      B

      +

      B

      )

      V_{IN} = (B+ – B-)

      VIN=(B+B)

    • 共模抑制比(CMRR):>100dB
  • 可编程增益放大器(PGA)

    通道可选增益适用场景
    A 128 桥式传感器(默认)
    A 64 大信号输入
    B 32 外部电压测量
  • 输出数据速率

    f

    s

    =

    f

    C

    L

    K

    I

    N

    2

    24

    f_s = \\frac{f_{CLKIN}}{2^{24}}

    fs=224fCLKIN

    • 典型值:80Hz(

      f

      C

      L

      K

      I

      N

      =

      5.17

      M

      H

      z

      f_{CLKIN}=5.17MHz

      fCLKIN=5.17MHz)或10Hz(降噪模式)


  • 4、引脚功能

    引脚号名称功能描述
    1 VSUP 模拟电源(2.6~5.5V)
    2 VBAT 桥式传感器供电
    3 IN- 通道A负输入
    4 IN+ 通道A正输入
    11 PD_SCK 电源控制/串行时钟输入
    12 DOUT 串行数据输出

    5、工作时序

    ___ ___ ___ ___
    PD_SCK _| |___| |___| |___| |__…
    _______ _______ _______ _______
    DOUT __|DATA24|DATA23|… |DATA0|_____
    ↑T1 ↑T2 ↑T3

    • T1:SCK下降沿后DOUT准备数据
    • T2:SCK上升沿锁存数据
    • T3:25个脉冲后自动进入休眠模式

    6、设计注意事项

  • 电源噪声抑制

    • 在VSUP和VBAT引脚增加10μF+0.1μF电容
    • 模拟地与数字地单点连接
  • 温度漂移补偿

    Δ

    V

    o

    f

    f

    s

    e

    t

    =

    α

    (

    T

    T

    0

    )

    \\Delta V_{offset} = \\alpha \\cdot (T – T_0)

    ΔVoffset=α(TT0) 建议每10℃重新校准零点

  • 信号调理

    • 满量程输入电压:±20mV(增益128时)
    • 输入阻抗:>1MΩ

  • 7、常见故障排查

    现象可能原因解决方案
    读数跳变 电源纹波过大 增加电源滤波电容
    输出全零 PD_SCK信号异常 检查MCU时钟引脚配置
    数据不稳定 传感器激励不足 检查VBAT电压(≥3.3V)

    注:完整技术参数请参考官方数据手册(HX711 Rev 1.5)。实际设计中建议预留增益选择跳线,以适应不同灵敏度传感器。

    二、原理图分享

    板子画了4路每一路电源分开,下图只是其中一路。 在这里插入图片描述

    三、驱动代码

    #include "stm32f10x.h" // Device header
    #include "HX711.h"
    #include "Delay.h"

    floatBiaoDing=384.7; //标定系数,根据自己的传感器调节

    void HX711_GPIO_Init(void)
    {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //时钟线推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //数据线浮空输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    }

    void HX711_W_PD_SCK(uint8_t BitValue) //写时钟线
    {
    GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)BitValue);
    }

    void HX711_W_DOUT(uint8_t BitValue) //写数据线,开始时,需要拉高DOUT电平
    {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_WriteBit(GPIOA, GPIO_Pin_2, (BitAction)BitValue);
    }

    uint8_t HX711_R_DOUT(void) //读数据
    {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2);
    }

    void HX711_Reset(void) // 传感器复位,去皮
    {
    HX711_W_PD_SCK(1); //拉高,延时60us
    Delay_us(60);
    }

    uint32_t HX711_ReadData(void) //读数据
    {
    uint8_t i;
    uint32_t value = 0; //接收HX711采集的AD值

    HX711_W_DOUT(1); //初始DOUT为高电平
    HX711_W_PD_SCK(0); //初始PD_SCK为低电平
    Delay_us(1);
    HX711_R_DOUT(); //DOUT转换为输入

    while(HX711_R_DOUT()); //等待DOUT引脚变为高电平
    Delay_us(1);
    for(i=0;i<24;i++) //按照HX711时序接收数据
    {
    HX711_W_PD_SCK(1); // PD_SCK置高,发送脉冲
    value = value << 1; //下降沿来时变量左移一位,右侧补零,
    Delay_us(1);
    HX711_W_PD_SCK(0); // PD_SCK置低
    if(HX711_R_DOUT()) //读取一位数据,如果高电平,加一,低电平不变。
    value++;
    Delay_us(1);
    }
    HX711_W_PD_SCK(1); //最后一个脉冲,增益为128
    value = value^0x800000; //第25个脉冲转换数据,24位AD转换,最高位为符号位,其余为有效位
    Delay_us(1);
    HX711_W_PD_SCK(0);
    Delay_us(1);
    return value;
    }

    uint32_t Get_Pi(void) //皮重函数
    {
    uint8_t MEDIAN_LEN=5,MEDIAN=3; //中值滤波参数,冒泡排序法
    uint32_t buffer[MEDIAN_LEN]; //储存数组
    uint32_t HX711_dat,pi_weight,num;
    uint8_t i,medleng = 0;
    for(i=0;i<MEDIAN_LEN;i++)
    {
    HX711_dat=HX711_ReadData();
    if(medleng == 0) //第1个元素,直接放入,不需要排序
    {
    buffer[0] = HX711_dat;
    medleng = 1;
    }
    else //中值滤波,取中间值,冒泡排序法
    {
    for(i = 0; i < medleng; i ++)
    {
    if( buffer[i] > HX711_dat)
    {
    num = HX711_dat; HX711_dat = buffer[i]; buffer[i] = num;
    }
    }
    buffer[medleng] = HX711_dat;
    medleng++;
    }
    if(medleng >= MEDIAN_LEN)
    {
    HX711_dat = buffer[MEDIAN]; //取排序好的中间值,
    medleng = 0;
    }
    }
    pi_weight=HX711_dat;
    return pi_weight;
    }

    uint32_t Get_Weight(uint32_t pi_weight) //称重函数
    {
    uint32_t get_weight;
    uint32_t weight;

    get_weight=HX711_ReadData(); //HX711数据采集函数
    if(get_weight>pi_weight)
    {
    get_weight=HX711_ReadData(); //重新采集HX711数据
    weight=(uint32_t)(((float)(get_weightpi_weight))/BiaoDing);//修改标定系数,根据传感器不同
    }
    else
    weight=0;
    return weight;
    }

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 电子秤芯片hx711原理图分享
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!