• 【mcuclub】称重-HX711


    一、实物图

     

    二、原理图

    编号名称功能
    1GND电源地
    2DT数据输出引脚
    3SCK时钟引脚
    4VCC电源正

    三、简介

    HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片是专门为称重传感器设计的,称重传感器只需要一个HX711芯片即可完成称重信号的处理及AD转换;对于单片机来说,获取此刻的重量值,只需一个简单函数读取此时AD值,并通过一个线性方程的转换后即可获取此时物体的精确重量。

    HX711芯片与单片机的通讯只需要两个引脚,时钟引脚PD_SCK及数据引脚DOUT,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT为高电平时,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK应为低电平。当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲,如图:

    其中第一个时钟脉冲的上升沿将读出输出24位数据的最高位(MSB),直至第24个时钟脉冲完成,24位输出数据从最高位至最低位逐位输出完成。第25至27个时钟脉冲用来选择下一次A/D转换的输入通道和增益,时序如图:

    四、称重原理

    1.HX711模块可以看成由三个部分组成:压力传感器、电压放大器、ad转换芯片

    压力传感器:感知物体重力,并转化为电压信号。这里是0~10kg压力传感器,灵敏电压为1mv,即1kg重力产生1mv电压

    电压放大器:由于压力传感器产生电压太小,需要对电压信号放大。这里用的是128倍电压增益。

    ad转换芯片(24位):将模拟信号(放大后的电压值)转化为数字信号(ad值)

    2.ad值转化为重力大小

    假设重力为x kg,ad = (x/10)*128*2^24*(5/5000),(满量程为10kg,128倍放大,精度为2^24,传感器满偏电压5mv,单片机为5v)

    ad = 214748.3648x    >>    x = ad/214748.3648  (按g显示再乘1000即可)

    //ad转化为重力大小公式,(float)将整除转化为小数运算,再将运算结果强制转化为无符号整型数值

    Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/240);

    //理论上是除以214.7,实际上存在误差(传感器曲线以及电压的微小误差),需要根据显示情况来调整这一数值

    五、程序

    /****

    *******  读取HX711数值

    *****/

    ulong HX711_Read(void)

    {

       ulong count;                    //存ad值

       uchar i;

       HX711_DOUT = 1;               //数据端口拉高,参照时序图写

       Hx711_delay_us();            //延时

       HX711_SCK = 0;                //时钟端口拉低,使能AD

       count = 0;                    //ad值初始化

       while(HX711_DOUT);   //AD转换未结束则等待,否则开始读取

       for(i=0; i<24; i++)     //循环24次传数据,按位接收数据

       {

          HX711_SCK = 1;             //准备转换数据

          count = count << 1;     //向左移位,即向低位补0,空出最低位进行传值操作,如1<<1为10

          HX711_SCK = 0;          //时钟脉冲下降延,数据开始转换

          if(HX711_DOUT)

             count++;               //数据端为高则最低位+1,为1,数据端为低则最低位不变,为0(左移把最低位空出)

       }

       HX711_SCK = 1;                //第25个脉冲延

       count = count^0x800000;       //异或输出原码

       Hx711_delay_us();            //延时

       HX711_SCK = 0;                //结束ad转换

       return(count);               //传出ad值

    }

    六、流程设计

    首先初始化引脚,然后数据引脚拉高,延时一段时间后,将时钟引脚拉低,等待AD转换结束,然后开始读取数据。接下来循环24次数据接收,在第25个脉冲将数据异或转换,并拉低时钟引脚结束AD转换。通过采集第一次数据为毛皮重量,采集第二次数据减去第一次数据即为最终称重重量。

  • 相关阅读:
    python concurrent.futures 模块启动并行任务
    计算机毕业设计(附源码)python制药企业人力资源管理系统
    RHCSA-Day2 --- 命令、目录结构、vi编辑器
    View绘制流程
    都是程序员,来认识一下啊!
    设计模式-抽象工厂模式
    vuejs之父子组件的通信【props】和【$emit】
    ansible ---- ansible.builtin.command
    [附源码]Python计算机毕业设计Django设备运维平台出入库模块APP
    数据结构之< AVLTree >
  • 原文地址:https://blog.csdn.net/weixin_61121477/article/details/127763104