STM32F系列通过hx711芯片实现压力传感器的测量(CUBEMAX)

一、模块

HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的 24 位 A/D 转换芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端 MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道 A 或通道 B,与其内部的低噪声可编程放大器相连。

引脚介绍:

VCC和GND引脚分别为HX711芯片的电源输入端口。

VCC引脚是连接到5V或3.3V的正电源,GND引脚是连接到地的负电源。

DOUT是HX711芯片的数据输出端口,它输出经过A/D转换处理后的24位数据。

SCK是HX711芯片的时钟输入端口,用于控制A/D转换的时钟。

HX711介绍工作原理:


HX711传感器由一个二进制模数转换器(ADC)和一个放大器组成。ADC可以将模拟信号转换为数字信号,而放大器可以扩大信号的幅度,以便更精确地测量。在称重应用中,HX711传感器可以通过应变量来测量物体的质量。

应变量是由当物体受到压力时会发生应变的特殊材料制成的。将应变量粘贴到测量物体的表面,当物体受到压力并伸展时,应变量也会发生变化。压力越大,应变量的变化也越大。

HX711压力传感器的工作原理基于万用表电桥原理,利用压力传感器的阻值变化来实现重量的测量。

二、CubeMX配置

1.时钟及sys

 

2.IO口 

注意:数据线DT配置为输入模式

 

注意:时钟线SCK配置为输出模式

3.串口 

默认配置,不需要改变

4.后续配置

三、程序

1.main.c


int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
	delay_init(72);                   
  /* 延时初始化 */
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		Get_Weight();
		Get_Maopi();
		uint32_t a=0;
		printf("净重量 = %d g\r\n",Weight_Shiwu); //打印
		printf("初始重量 = %d g\r\n",Weight_Maopi); //打印		
		HAL_Delay(1000);

		

  }
  /* USER CODE END 3 */
}

2.hx711.c

/************************************************************************************
						
*************************************************************************************/
#include "HX711.h"
#include "delay.h"
 
uint32_t HX711_Buffer;
uint32_t Weight_Maopi;
uint32_t Weight_Shiwu;
uint32_t Flag_Error = 0;
 

//卡尔曼滤波
float KalmanFilter(float inData)
{
		static float prevData = 0;                                 //先前数值
		static float p = 10, q = 0.001, r = 0.001, kGain = 0;      // q控制误差  r控制响应速度 
	
		p = p + q;
		kGain = p / ( p + r );                                     //计算卡尔曼增益
		inData = prevData + ( kGain * ( inData - prevData ) );     //计算本次滤波估计值
		p = ( 1 - kGain ) * p;                                     //更新测量方差
		prevData = inData;
		return inData;                                             //返回滤波值
}
 
 
//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
#define GapValue 106.5
 
 
 
 
//****************************************************
//读取HX711
//****************************************************
uint32_t HX711_Read(uint8_t pulse)	//增益128  PULSE 脉冲
{
	uint32_t count =0; 
	uint8_t i; 
  HX720_CLK_L(); 
  	 
  if(HAL_GPIO_ReadPin(DAT_GPIO_Port,DAT_Pin)==0)
	{
		  for(i=0;i<24;i++)
			{ 
					HX720_CLK_H();
					delay_us(1);
					count=count<<1; 				
					HX720_CLK_L();
					delay_us(1);
					if(HAL_GPIO_ReadPin(DAT_GPIO_Port,DAT_Pin)==1)
					{
						count++; 
					}
					
			}
			for(i=0;i<pulse-24;i++)
			{
				HX720_CLK_H();
				delay_us(1);
				HX720_CLK_L();
				delay_us(1);
			}
			
		count=count^0x800000;//第25个脉冲下降沿来时,转换数据
		
	}	
//		HX720_CLK_H();
//    count=count^0x800000;//第25个脉冲下降沿来时,转换数据
//	delay_us(1);
//	HX720_CLK_H();  
	return(count);
}
 
//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi(void)
{
	Weight_Maopi = HX711_Read(25);
	Weight_Maopi=KalmanFilter(Weight_Maopi);
} 
 
//****************************************************
//称重
//****************************************************
void Get_Weight(void)
{
	HX711_Buffer = HX711_Read(25);
	if(HX711_Buffer > Weight_Maopi)			
	{
		Weight_Shiwu = HX711_Buffer;
		Weight_Shiwu = Weight_Shiwu - Weight_Maopi;				//获取实物的AD采样数值。
	
		Weight_Shiwu = ((float)Weight_Shiwu/GapValue)-478; 	//计算实物的实际重量
																		//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。
																		//当发现测试出来的重量偏大时,增加该数值。
																		//如果测试出来的重量偏小时,减小改数值。
		Weight_Shiwu=KalmanFilter(Weight_Shiwu);
	}

}	

3.hx711.h

#ifndef __HX711_H
#define __HX711_H
 
#include "main.h"
#include "gpio.h"


#define HX720_CLK_H()   HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_SET) //时钟线置高电平
#define HX720_CLK_L()   HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_RESET)//时钟线置低电平
 
 
extern uint32_t HX711_Read(void);
extern void Get_Maopi(void);
extern void Get_Weight(void);
 
extern uint32_t HX711_Buffer;
extern uint32_t Weight_Maopi;
extern uint32_t Weight_Shiwu;
extern uint32_t Flag_Error;
 
#endif

4.串口重定向

/* USER CODE BEGIN 1 */
#include <stdio.h>
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);

return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;

HAL_UART_Receive(&huart1, &ch, 1, 0xffff);	
return ch;
}

/* USER CODE END 1 */

5.实验结果

总结

提示:本文章学到的一个主要知识点写时序

通讯逻辑是先将数据线电平拉高,代表数据开始传输,等待接收完数据后,数据线电平置低,数据传输结束。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: hx711压力传感器是一种高精度的模拟数字转换器,可以将压力信号转换为数字信号。它可以与STM32F103单片机配合使用,实现对压力信号的采集和处理。在应用中,可以通过编程控制HX711STM32F103之间的通信,实现压力传感器的读取和数据处理。这样,就可以实现对压力信号的精确测量和控制。 ### 回答2: HX711压力传感器是一种高精度、低成本、易于使用的传感器,它可以用来测量物体的重量、压力等物理量。HX711内置了高精度的模数转换器和放大器,可以直接连接到STM32F103单片机,具有很高的精度和灵敏度。 HX711的连接方式很简单,它只需要4个接:VCC、GND、DT和SCK。其中,VCC和GND分别连接到电源正负极,DT和SCK则连接到STM32F103的GPIO端。在使用HX711传感器时,需要先对它进行校准,以确保精度和准确性。 HX711传感器的主要应用领域包括电子秤、压力传感器、力传感器等。它具有很高的精度和稳定性,可以满足大部分应用的需求。在使用STM32F103控制HX711传感器时,需要编写相应的程序进行数据采集和处理,以实现各种功能。比如可以将采集到的数据通过串或者无线模块发送到上位机,或者利用嵌入式操作系统进行数据处理和控制。 总之,HX711压力传感器STM32F103单片机的结合,可以为各种各样的物理量测量提供高精度和稳定性的解决方案,具有广泛的应用前景和市场价值。 ### 回答3: HX711压力传感器是一种专门用于测量电压信号并进行数据转换的芯片,它采用24位的模数转换器(ADC)结构,能够对高分辨率的压力信号进行精确的测量STM32F103是一种基于ARM Cortex-M3内核的微控制器单元(MCU),它采用了高速时钟和优化的指令集,能够为HX711传感器提供稳定而可靠的信号处理能力,从而实现压力传感器数据的精确读取和分析。 在使用HX711压力传感器STM32F103芯片进行组合时,首先需要确定传感器的工作电压和最大输入电压范围,以确保对传感器的准确读取。此外,需要针对不同的压力传感器进行校准,以保证其输出信号的精度和稳定性,从而准确反映被测量物体的状态。 在连接HX711压力传感器STM32F103芯片时,可以通过使用数字输入输出(GPIO)接实现信号的传输和控制。在读取传感器数据时,可以通过使用STM32F103芯片的ADC模块进行数据转换,并使用定时器模块进行数据的优化和处理。此外,为了减小外部噪音的干扰和提高传感器的抗干扰性能,可以使用滤波器等信号处理技术,从而使传感器数据的精度和可靠性得到优化。 总之,HX711压力传感器STM32F103芯片的组合可以实现对各种压力传感器信号的高精度读取和分析,从而为各种应用场景提供了更加可靠和高效的数据采集和处理方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值