STM32和HX711压力传感器(电子秤)

目录

1、什么是HX711压力传感器(电子秤)?

         (1)电子秤模块简介

         (2)压力传感器工作原理:

                 具体工作流程

         (3)压力传感器规格简介

2、HX711电子秤模块重要引脚介绍

   1.DT口介绍

   2.SCK口介绍

   3.VCC供电口介绍

3、在STM32标准库中使用HX711的程序代码

(1)初始化DT口和SCK口所用的引脚代码

(2)实现A/D采样所使用的通信介绍

         (3)采样结果与实际重量转化算法

总结:


1、什么是HX711压力传感器(电子秤)?

(1)电子秤模块简介

原理图如下

(2)压力传感器工作原理:

压力传感器由一个重要构成是HX711的芯片,内部由二进制模数转换器(ADC)和一个放大器组成。ADC将模拟信号转换为数字信号,放大器则扩大转化出来的信号的幅度,以便更精确地测量。

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

具体工作流程

1、通过引脚A+和A-接入压力传感器。在未加载的情况下,两个引脚之间的电阻为R1。

2、在HX711芯片中,使用一个基准电压(通常为VCC/2)来作为压力传感器电桥电路的中心点。

3、当压力传感器开始承受载荷时,电桥电路会产生一个微小的电压差。

4、这个电压差通过A+和A-引脚输入到HX711芯片中,并经过内置的差分放大器放大。

5、放大之后的信号被送到24位的A/D转换器中进行数字化处理,并通过DOUT引脚输出。

6、PD_SCK引脚则是用于通过时钟信号来同步转换器的输出数据。

7、最终,通过对输入信号的放大和数字化处理,HX711芯片可以输出重量数据。

(3)压力传感器规格简介

                                                                   

市面上有很多不同规格的压力传感器,但大多殊途同归,读取的ADC值是一样的,只需要在计算时做出改变就行了

  1. 压力传感器学习意义

电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。

2、HX711电子秤模块重要引脚介绍

1.DT口介绍

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

注意:DT口和SCK口都接stm32的GPIO(通用输出输入端口)。

2.SCK口介绍

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

3.VCC供电口介绍

     VCC引脚连接到5V或3.3V的正电源选择5V或3.3V电源不影响正常使用。

3在STM32标准库中使用HX711的程序代码

(1)初始化DT口和SCK口所用的引脚代码

void HX711_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB的时钟
    GPIO_InitTypeDef hx711_gpio_struct;//创建一个GPIO结构体
   
    //SCK
    hx711_gpio_struct.GPIO_Mode=GPIO_Mode_Out_PP;//SCK为开漏输出模式
    hx711_gpio_struct.GPIO_Pin=GPIO_Pin_1;
    hx711_gpio_struct.GPIO_Speed=GPIO_Speed_50MHz;//通用50MHz
    GPIO_Init(GPIOB,&hx711_gpio_struct); //使能
    
    //DT
    hx711_gpio_struct.GPIO_Mode=GPIO_Mode_IPU;//DT为上拉输入模式,
	//如果IO口外部没有信号输入或者悬空,则IO口默认为高电平。
	//如果此时IO口有输入低电平,那么引脚就为低电平,MCU读取到的就是低电平
    hx711_gpio_struct.GPIO_Pin=GPIO_Pin_0;
    hx711_gpio_struct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&hx711_gpio_struct);
    
	GPIO_WriteBit(GPIOB,GPIO_Pin_1,1);//这里是初始化定义拉高SCK
}

(2)实现A/D采样所使用的通信介绍

unsigned long HX711_Read(void)//unsigned long 为无符号整数,不能表示负数
{
    unsigned long Count;
    unsigned char i;//为无符号字符,不能表示负
    W_SCK(0);//拉低SCK时钟
    Count=0;//相当于清空Count里的所有数
    while(R_DT);//由于DT是上拉输入,所以当DT口没有信号输入或者悬空
	//则IO口默认为高电平,即R_DT==1,
	//直到DT口检测到了信号输入,才置为低电平,进入下面程序
    for (i=0;i<24;i++)//这里由于是128增益,所以要循环24次
    {
        W_SCK(1);
        Count=Count<<1;//这里指的是将Count左位移一位
        W_SCK(0);
        if(R_DT) //如果有DT电平输入,那空的Count那一位就由0变1
			//否则Coun那一位任然为0,等下一次Count位移继续判断
            Count++;
    }
    W_SCK(1);
    Count=Count^0x800000; //最高位取反,其他位不变
	                      //在HX71芯片中,count是一个32位的有符号整数,
                          //用于存储称重传感器的读数。
	                      //当count的最高位为1时,表示读数为负数,
                          //而HX711芯片不支持负数的读数。
	                      //因此,为了将负数转换为正数,需要将count的最高位取反,
                          //即将count与0x800000进行异或操作。
                          //具体来说,0x800000的二进制表示为100000000000000000000000,
                          //与count进行异或操作后,
	                      //可以将count的最高位从1变为0,从而得到对应的正数读数。
    W_SCK(0);
    return(Count);
}

增益数值不同意味着循环的次数不同【增益128-循环24次;增益32-循环25次;增益64循环26次】,这里用的是增益128。

以下是通信流程图(借鉴三马分享家大佬的):

首先,我们读出的ADC值是一个无符号的32为数,所以要定义为unsigned long,后面根据上图的通信流程图,如代码中进行拉高和拉低SCK,进行DT口的数据传输通行,DT口的数据传输的细节与注意事项,如代码注解所示。注意,我们获取的数据还得进行一次倒置,因为在HX71芯片中,count是一个32位的有符号整数,用于存储称重传感器的读数。当count的最高位为1时,表示读数为负数,而HX711芯片不支持负数的读数。因此,为了将负数转换为正数,需要将count的最高位取反,即将count与0x800000进行异或操作。
具体来说,0x800000的二进制表示为100000000000000000000000,与count进行异或操作后,可以将count的最高位从1变为0,从而得到对应的正数读数。

(3)采样结果与实际重量转化算法

//校准参数
#define GapValue 3355.4

void Get_Maopi(void)
{
    Weight_Maopi = HX711_Read();
}


void Get_Weight(void)
{
    HX711_Buffer = HX711_Read();
    if(HX711_Buffer > Weight_Maopi)
    {
        Weight_Zhengshu = HX711_Buffer;
        Weight_Zhengshu = Weight_Zhengshu - Weight_Maopi;     //获取实物的AD采样数值。
        Weight_Zhengshu = (int32_t)(((float)Weight_Zhengshu/GapValue)*10/1.082);     //weight(x)=x*5kg/2^24
        Weight_tmp = ((float)Weight_Zhengshu/GapValue)*10/1.082;//注意,这里GapValue与1.082都是校准值,根据自己的实际情况进行调整
        Weight_tmp -= Weight_Zhengshu;
        if(Weight_tmp<0)
        {
            Weight_tmp = -Weight_tmp;
        }
        Weight_xiaoshu = (int32_t)(Weight_tmp*10);
    }
}

                                                         

一节5号南孚电池是24g,误差为0.1g。(校准的时候可以再细调一下,减小误差,或用卡尔曼滤波减少了数值的波动)

总结:

以上就是用stm32使用压力传感器的用法与注意点,希望能帮到各位!

下面是工程源码:

链接:https://pan.baidu.com/s/14fwtXKRCCFLkCsFXAwA6ug 
提取码:f94f

  • 37
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答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芯片的组合可以实现对各种压力传感器信号的高精度读取和分析,从而为各种应用场景提供了更加可靠和高效的数据采集和处理方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值