HX711电子秤专用转换芯片读取MCU模块
■ HX711读取模块
通过对于 磁悬浮地球仪拆解 中,悬浮物所受到的磁力随着空间和电流的变化,可以建立起被控对象的数学模型。除了在理论上可以电磁相互作用力进行测量之外,通过实验完成数据的拟合,帮助对模型进行修正和检验。
使用 微型称重传感器 可以对于一些力进行测量。其中结合着电子秤专用模拟/数字(A/D)转换器芯片 HX711 便可以完成测量结果的数字化。本文设计的MCU HX711读取模块是基于STC8G单片机来读取受力。为了能够同时完成多路信号的读取,设计的模块至少具有4路的HX711读取通道。设计后的模块在 串口ISPHUB 支持下可以协同其它模块加成综合实验。
▲ 带有HX711接口板的小型电子秤(5kg量程)
01电路模块设计
HX711的电路模块的接口如下,其中包括有电源(VCC,GND)以及时钟(SCK)和数据(DT)。
▲ HX711模块的接口
1.电路设计1
▲ 读取模块的电路原理图
▲ 快速制版的实验电路板
2.MCU软件2
- 单片机OSC:35MHz,UART1 460800 bps
(1) 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
(3) 编写读取HX711函数
通过HX711Read4Buffer(ucMode) 读取四个通道的HX711的数值。下面是SCK的波形,对比HX711协议,它满足对时序的要求。
▲ 实际读取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读取模块工作状态
文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuoqing.blog.csdn.net/article/details/107447884
- 点赞
- 收藏
- 关注作者
评论(0)