HX711模块+称重传感器的简单应用


一、前言

最近要用到称重模块,上淘宝搜了一下,出来的大多数都是HX711模块+称重传感器,为此特地买了一个回来验证,可惜没买成品结构件,只能简单测量下。


二、HX711

1.简单介绍

HX711 采用了海芯科技集成电路专利技术, 是一款专为高精度电子秤而设计的 24 位 A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。

该芯片与后端 MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道 A 或通道 B,与其内部的低噪声可编程放大器相连。通道 A 的可编程增益为 128 或 64, 对应的满额度差分输入信号幅值分别为±20mV 或±40mV。通道 B 则为固定的 32 增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的 A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。

管脚说明如下:
在这里插入图片描述

2.原理

应变式力传感器的受力工作原理如图 2 所示。

在这里插入图片描述

将应变片粘贴到受力的力敏型弹性元件上, 当弹性元件受力产生变形时,应变片产生相应的应变, 转化成电阻变化。将应变片接成如图 3 所示的电桥,力引起的电阻变化将转换为测量电路的电压变化, 通过测量输出电压的数值, 再通过换算即可得到所测量物体的重量。

传感器一端通过螺丝孔固定,另一端保持悬空状态,按标签指示方向施加重力。特别注意,一定不要直接按压白色覆胶部分,有可能直接超量程,破坏传感器内部应变片,到时候在外力撤除后不能恢复原形状,发生塑性变形,则传感器就损坏了。

在这里插入图片描述

三、使用步骤

1.硬件

1.1 原理图

在这里插入图片描述

1.2 原理图说明

1.2.1 模拟输入

由上面的原理图可以看出桥式传感器(也就是应变片或叫做称重传感器)的差分输出连接到HX711的通道A上,而HX711除了通道A,还有个通道B。这里为什么不接通道B呢,这是因为两者的增益不同,对应的应用场景也就不一样了。一般由于桥式传感器输出的信号较小,为了充分利用A/D转换器的输入动态范围,该通道A的可编程增益较大,为128或64。这些增益所对应的满量程差分输入电压分别±20mV或±40mV。通道B为固定的32增益,所对应的满量程差分输入电压为±80mV。通道B应用于包括电池在内的系统参数检测。

1.2.2 时钟选择

如上面的原理图可以看出,X1接GND。HX711将自动选择使用内部时钟振荡器,并自动关闭外部时钟输入和晶振的相关电路。这种情况下,典型输出数据速率为10Hz或80Hz。如果需要准确的输出数据速率,可将外部输入时钟通过一个20pF的隔直电容连接到XI管脚上,或将晶振连接到XI和XO管脚上。这种情况下,芯片内的时钟振荡器电路会自动关闭,晶振时钟或外部输入时钟电路被采用。此时,若晶振频率为11.0592MHz,输出数据速率为准确的10Hz或80Hz。输出数据速率与晶振频率以上述关系按比例增加或减少。使用外部输入时钟时,外部时钟信号不一定需要为方波。可将MCU芯片的晶振输出管脚上的时钟信号通过20pF的隔直电容连接到XI管脚上,作为外部时钟输入。外部时钟输入信号的幅值可低至150mV。

1.2.3 通讯

如上面的原理图可以看出,HX711的通讯引脚为管脚PD_SCK和DOUT组成,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT为高电平时,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK应为低电平。当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲(图二)。
在这里插入图片描述
其中第一个时钟脉冲的上升沿将读出输出24位数据的最高位(MSB),直至第24个时钟脉冲完成,24位输出数据从最高位至最低位逐位输出完成。第25至27个时钟脉冲用来选择下一次A/D转换的输入通道和增益,参见表三。

在这里插入图片描述
PD_SCK的输入时钟脉冲数不应少于25或多于27,否则会造成串口通讯错误。当A/D转换器的输入通道或增益改变时,A/D转换器需要4个数据输出周期才能稳定。DOUT在4个数据输出周期后才会从高电平变低电平,输出有效数据。

1.3 实物连接

在这里插入图片描述

这里接线方式为红线电压+E,黑线电压-E,绿线信号A+,白线信号A-。供电不一定接5V电源,也可以接3.3V电源。因为我们知道HX711的供电电压是2.6V-5.5V之间。接单片机的引脚根据实际引脚而定。

1.4 使用注意事项

  1. 所有数字输入管脚,包括 RATE, XI 和PD_SCK 管脚,芯片内均无内置拉高或拉低电阻。这些管脚在使用时不应悬空。
  2. 建议使用通道 A 与传感器相连,作为小信号输入通道;通道 B 用于系统参数检测, 如电池电压检测。
  3. 建议使用 PNP 管 S8550 与片内稳压电源电路配合。也可根据需要使用其他 MOS 或双极晶体管,但应注意稳压电源的稳定性。
  4. 无论是采用片内稳压电源或系统上其他电源,建议传感器和 A/D 转换器使用同一模拟供电电源。
  5. PD_SCK 的输入时钟脉冲数不应少于 25 或多于 27,否则会造成串口通讯错误。
  6. 与 DOUT 相连的 MCU 接口应设置为输入口, 并且不接任何拉高或拉低电阻, 以减少
    MCU 与 ADC 之间的电流交换(干扰)。

2.软件

2.1 参考程序汇编

参考驱动程序(汇编)
/*-------------------------------------------------------------------
在ASM中调用:	LCALL	ReadAD
可以在C中调用:	extern unsigned long ReadAD(void);
.
.
unsigned long data; data=ReadAD();
.
.
----------------------------------------------------------------------*/ 
PUBLIC	ReadAD
HX711ROM	segment code
rseg	HX711ROM

sbit	ADDO = P1.5;
sbit	ADSK = P0.0;

/*--------------------------------------------------
OUT:	R4, R5, R6, R7	R7=>LSB
如果在C中调用,不能修改R4,R5,R6,R7。
---------------------------------------------------*/
ReadAD:
CLR	ADSK	//使能AD(PD_SCK置低)
JB	ADDO,$	//判断AD转换是否结束,若未结束则等待否则开始读取MOV	R4,#24
ShiftOut:
SETB	ADSK	//PD_SCK置高(发送脉冲) NOP
CLR	ADSK	//PD_SCK置低
MOV	C,ADDO	//读取数据(每次一位)
XCH	A,R7	//移入数据RLC	A
XCH	A,R7
XCH	A,R6
RLC	A
XCH	A,R6
XCH	A,R5
RLC	A
XCH	A,R5
DJNZ	R4,ShiftOut	//判断是否移入24BIT SETB	ADSK
NOP
CLR	ADSK RET
END

2.2 参考程序51单片机

/**************************************************************
 24bit HX711参考驱动程序(C) 优质人生 2010/11
在C中调用: extern unsigned long ReadAD(void);
 .
 .
 unsigned long data;
 data=ReadAD();
 .
 .
-------------------------------------------------------------*/
sbit ADDO = P1^5;
sbit ADSK = P0^0;
unsigned long ReadCount(void)
{
 unsigned long Count;
 unsigned char i;
 ADSK=0; //使能AD(PD_SCK 置低)
 Count=0;
 while(ADDO); //AD转换未结束则等待,否则开始读取
 for (i=0;i<24;i++)
 {
 ADSK=1; //PD_SCK 置高(发送脉冲)
 Count=Count<<1; //下降沿来时变量Count左移一位,右侧补零
 ADSK=0; //PD_SCK 置低
 if(ADDO) Count++;
 }
 ADSK=1;
 Count=Count^0x800000;//第25个脉冲下降沿来时,转换数据
 ADSK=0;
 return(Count);
}

2.3 参考程序32单片机

void HX711_GPIO_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	HX711_GPIO_APBxClkCmd(HX711_GPIO_CLK, ENABLE);

	GPIO_InitStructure.GPIO_Pin = HX711_SCK_GPIO_PIN;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(HX711_SCK_GPIO_PORT, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = HX711_DATA_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(HX711_DATA_GPIO_PORT, &GPIO_InitStructure);
}

void HX711_Data_Out(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	HX711_GPIO_APBxClkCmd(HX711_GPIO_CLK, ENABLE);

	GPIO_InitStructure.GPIO_Pin = HX711_DATA_GPIO_PIN;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(HX711_DATA_GPIO_PORT, &GPIO_InitStructure);
}

void HX711_Data_In(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	HX711_GPIO_APBxClkCmd(HX711_GPIO_CLK, ENABLE);

	GPIO_InitStructure.GPIO_Pin = HX711_DATA_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(HX711_DATA_GPIO_PORT, &GPIO_InitStructure);	
}

u32 Read_HX711(void)
{
	uint8_t i;
	uint32_t value = 0;
	
	/**
	数据手册写到,当数据输出管脚 DOUT 为高电平时,表明A/D 转换器还未准备好输出数据,此时串口时
	钟输入信号 PD_SCK 应为低电平,所以下面设置引脚状态。
	**/
	HX711_Data_Out();
	HX711_DATA=1; //初始状态DT引脚为高电平
	delay_us(1);
	HX711_SCK=0; //初始状态SCK引脚为低电平
	HX711_Data_In();
	/**
	等待DT引脚变为高电平
	**/
	while(HX711_DATA);
	delay_us(1);
	
	/**
	当 DOUT 从高电平变低电平后,PD_SCK 应输入 25 至 27 个不等的时钟脉冲
	25个时钟脉冲 ---> 通道A 增益128
	26个时钟脉冲 ---> 通道B 增益32
	27个时钟脉冲 ---> 通道A 增益64
	**/
	for(i=0; i<24; i++) //24位输出数据从最高位至最低位逐位输出完成
	{
		HX711_SCK=1;
		delay_us(1);
		HX711_SCK=0;
		if(HX711_DATA == 0)
		{
			value = value << 1;
			value |= 0x00;
		}
		if(HX711_DATA == 1)
		{
			value = value << 1;
			value |= 0x01;
		}
		delay_us(1);
	}
	
	//第 25至 27 个时钟脉冲用来选择下一次 A/D 转换的输入通道和增益
	HX711_SCK=1;; 
	value = value^0x800000; 
	delay_us(1); 
	HX711_SCK=0; 
	delay_us(1);  
	return value; 	
}

四、总结

今天主要讲了HX711模块+称重传感器的简单应用。

感谢你的观看!

在这里插入图片描述

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiaobuding_QAQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值