HX711称重传感器

https://atta.szlcsc.com/upload/public/pdf/source/20201105/C43656_14FD91CAE53E7DB415D03EABCB162D83.pdf

是一款专为高精度电子秤而设计的 24 位 A/D 转 换器芯片。

• 两路可选择差分输入

• 片内低噪声可编程放大器,可选增益为 32,64 和 128

• 片内稳压电路可直接向外部传感器和芯片内 A/D 转换器提供电源

• 片内时钟振荡器无需任何外接器件,必要时 也可使用外接晶振或时钟

• 上电自动复位电路 • 简单的数字控制和串口通讯:所有控制由管 脚输入,芯片内寄存器无需编程 • 可选择 10Hz 或 80Hz 的输出数据速率

• 同步抑制 50Hz 和 60Hz 的电源干扰

• 耗电量(含稳压电源电路): 典型工作电流:< 1.6mA, 断电电流:< 1A

• 工作电压范围:2.6 ~ 5.5V • 工作温度范围:-40 ~ +85℃

• 16 管脚的 SOP-16 封装

HX711称重传感器_第1张图片

 HX711称重传感器_第2张图片

 

原理图:

HX711称重传感器_第3张图片

 

 //初始化HX711

long HX711_Buffer = 0;
long Weight_Maopi = 0,Weight_Shiwu = 0;

#define GapValue 430  //不同传感器值不同 需要标定
#define HIGH 1
#define LOW  0
#define HX711_GROUP GPIOB
#define HX711_DT  GPIO_Pin_0 
#define HX711_SCK GPIO_Pin_1  
//****************************************************
//初始化HX711
//****************************************************
void Init_Hx711()
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  //SCK
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_InitTypeDef  GPIO_InitStructure1;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

  //DOUT
  GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_1 ;
  GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IN;
  //GPIO_InitStructure1.GPIO_OType = GPIO_OType_OD; 
  GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure1);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
}

 读取重量

//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void)	//增益128
{
	unsigned long val = 0; 
	unsigned char i = 0; 

	//判断模块是否准备好
	while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));
	delay_us(1);   
	//sck 拉低
	GPIO_ResetBits(GPIOB,GPIO_Pin_0);
	//再次判断是否准备好
	while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));
  
	for(i=0;i<24;i++) 
	{ 
		delay_us(100); 
		GPIO_SetBits(GPIOB,GPIO_Pin_0);	   
		val=val<<1; 
		delay_us(1);  
		GPIO_ResetBits(GPIOB,GPIO_Pin_0);	   
		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1))  
		val++; 
		delay_us(1); 
	} 
	GPIO_SetBits(GPIOB,GPIO_Pin_0); 
	val = val^0x800000; 
	delay_us(1); 
	GPIO_ResetBits(GPIOB,GPIO_Pin_0); 
	delay_us(1);  
	return val; 
}

 获取毛重需要放置在初始化里面,或者放置在按键中断里面 进行去皮。

//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
	Weight_Maopi = HX711_Read();		
} 
//****************************************************
//称重
//****************************************************
long Get_Weight()
{
	HX711_Buffer = HX711_Read();
	Weight_Shiwu = HX711_Buffer;
	Weight_Shiwu = Weight_Shiwu - Weight_Maopi;				//获取实物的AD采样数值。
	Weight_Shiwu = (long)((float)Weight_Shiwu/GapValue); 	
	return Weight_Shiwu;
}

你可能感兴趣的:(stm32,单片机,fpga开发,嵌入式硬件)