HX711电子秤专用转换芯片读取MCU模块

举报
tsinghuazhuoqing 发表于 2021/12/26 22:18:12 2021/12/26
【摘要】   ■ HX711读取模块 通过对于 磁悬浮地球仪拆解 中,悬浮物所受到的磁力随着空间和电流的变化,可以建立起被控对象的数学模型。除了在理论上可以电磁相互作用力进行测量之外,通过实验完成...

 

■ HX711读取模块


通过对于 磁悬浮地球仪拆解 中,悬浮物所受到的磁力随着空间和电流的变化,可以建立起被控对象的数学模型。除了在理论上可以电磁相互作用力进行测量之外,通过实验完成数据的拟合,帮助对模型进行修正和检验。

使用 微型称重传感器 可以对于一些力进行测量。其中结合着电子秤专用模拟/数字(A/D)转换器芯片 HX711 便可以完成测量结果的数字化。本文设计的MCU HX711读取模块是基于STC8G单片机来读取受力。为了能够同时完成多路信号的读取,设计的模块至少具有4路的HX711读取通道。设计后的模块在 串口ISPHUB 支持下可以协同其它模块加成综合实验。

▲ 带有HX711接口板的小型电子秤(5kg量程)480

▲ 带有HX711接口板的小型电子秤(5kg量程)

 

01电路模块设计


HX711的电路模块的接口如下,其中包括有电源(VCC,GND)以及时钟(SCK)和数据(DT)。

▲ HX711模块的接口

▲ HX711模块的接口

1.电路设计1

▲ 读取模块的电路原理图

▲ 读取模块的电路原理图

▲ 快速制版的实验电路板

▲ 快速制版的实验电路板

2.MCU软件2

  • 单片机OSC:35MHz,UART1 460800 bps

(1) HX711读取数据协议

下面是HX711读取数据的协议:

▲ HX711读取数据序列

▲ HX711读取数据序列

(2) 延迟程序

通过_nop_()循环获得延迟: 4.6us.

for(j = 0; j < 0x20; j ++) 
    _nop_();
ON(SCK1);
for(j = 0; j < 0x20; j ++) 
    _nop_();
OFF(SCK1);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

▲ 测量SCK1波形:4.6us

▲ 测量SCK1波形:4.6us

(3) 编写读取HX711函数

通过HX711Read4Buffer(ucMode) 读取四个通道的HX711的数值。下面是SCK的波形,对比HX711协议,它满足对时序的要求。

▲ 实际读取HX711的SCK波形

▲ 实际读取HX711的SCK波形

 

02串口命令


具体命令参见下面serialtxt中的命令:

else IFARG0("hx711read") {
    printf("%ld ", g_lnHX711Buffer[0]);
    printf("%ld ", g_lnHX711Buffer[1]);
    printf("%ld ", g_lnHX711Buffer[2]);
    printf("%ld\r\n", g_lnHX711Buffer[3]);
} else IFARG0("hx711readb") {
    lnNumber = g_lnHX711Buffer[0];
    SendChar((unsigned char)(lnNumber >> 16));
    SendChar((unsigned char)(lnNumber >> 8));
    SendChar((unsigned char)(lnNumber));
    lnNumber = g_lnHX711Buffer[1];
    SendChar((unsigned char)(lnNumber >> 16));
    SendChar((unsigned char)(lnNumber >> 8));
    SendChar((unsigned char)(lnNumber));
    lnNumber = g_lnHX711Buffer[2];
    SendChar((unsigned char)(lnNumber >> 16));
    SendChar((unsigned char)(lnNumber >> 8));
    SendChar((unsigned char)(lnNumber));
    lnNumber = g_lnHX711Buffer[3];
    SendChar((unsigned char)(lnNumber >> 16));
    SendChar((unsigned char)(lnNumber >> 8));
    SendChar((unsigned char)(lnNumber));
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

 

02 ISPHUB命令3


  • ISPHUB的读取HX711的子程序:
//------------------------------------------------------------------------------
#if HX711_EN
void HX711Read(long * pBuffer) { 
    unsigned char c, i;
    unsigned long lnNumber;
       
    SendHubCommand("hx711readb");
    WaitTime(10);
    
    for(i = 0; i < 4; i ++) {
        UART2ReceChar(&c);
        if(c & 0x80) lnNumber = 0xff;
        else lnNumber = 0;
        
        lnNumber = (lnNumber << 8) + c;
        UART2ReceChar(&c);
        lnNumber = (lnNumber << 8) + c;
        UART2ReceChar(&c);
        lnNumber = (lnNumber << 8) + c;
        
        *(pBuffer + i) = (long)lnNumber;
    }
    
}

#endif // HX711_EN

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • ISPHUB的串口命令:
} else IFARG0("hx711read") {
    
    HX711Read(g_lnHX711Buffer);
    printf("%ld ", g_lnHX711Buffer[0]);
    printf("%ld ", g_lnHX711Buffer[1]);
    printf("%ld ", g_lnHX711Buffer[2]);
    printf("%ld ", g_lnHX711Buffer[3]);
    printf("\r\n");

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

 

※ 结论


HX711模块可以满足读取四个通道的HX711转换模块数据读取的要求。

▲ HX711读取模块工作状态

▲ HX711读取模块工作状态


  1. AD硬件设计工程文件:AD\STC\Tools\2020\HX711STC8G1K.SchDoc * ↩︎

  2. MCU的C51工程文件:C51\STC\Test\2020\Tools\HX711STC8G1K\HX711STC8G1K.uvproj ↩︎

  3. ISPHUB的MCU工程文件:C51\STC\Test\2020\Tools\ISPHUBALLSELSTC8H1K28\ISPHUBALLSELSTC8H1K28.uvproj ↩︎

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107447884

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。