STM32传感器模块编程实践(八) HX711压力传感器称重模块简介及驱动源码

文章目录

一.概要

电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元。HX711采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的 24位 A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。

二.HX711主要技术指标

1.两路可选择差分输入

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

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

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

5.简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程

6.可选择10Hz或80Hz的输出数据速率

7.耗电量(含稳压电源电路):

8.典型工作电流:< 1.6mA, 断电电流:< 1µA

9.工作电压范围:2.6 ~ 5.5V

10工作温度范围:-40 ~ +85℃

三.HX711模块参考原理图

HX711模块参考原理图如下:

模块应用电路

四.模块接线说明

用4根杜邦线连接开发板和称重模块

板子的GND-----模块的GND

板子的3V3------模块的VCC

板子的PB0------模块的SCK

板子的PB1------模块的DT

电桥传感器和称重模块

电桥传感器红色-------模块的E+

电桥传感器白色-------模块的A-

电桥传感器黑色-------模块的E-

电桥传感器绿色-------模块的A+

五.模块工作原理介绍

电阻应变式传感器是一种利用电阻应变效应,将各种力学量转换为电信号的结构型传感器。电阻应变片式电阻应变式传感器的核心元件,其工作原理是基于材料的电阻应变效应,电阻应变片即可单独作为传感器使用,通过粘贴在弹性体表面的电阻应变片将机械变形转换为电阻值的变化。随后,这个电阻变化被转换为电信号(电压或电流),再经过测量电路处理,最终以数字形式显示出被测物的质量。

HX711 模块 A 通道带有 128 倍信号增益,可以将 5mV 的电压放大 128 倍,然后采样输出 24bit AD 转换的值,单片机通过指定时序将 24bit 数据读出。

HX711可以在产生VAVDD和AGND电压,即HX711模块上的E+和E-电压该电压通过VAVDD=VBG(R1 +R2)/R2 计算。VBG 为模块儿基准电压 1.25v,R1=20K,R2=8.2K 因此得出 VAVDD=4.3V。

假设重力为AKg,(x<5Kg),测量出来的AD值为y传感器输出,发送给AD模块的电压为AKg4.3mV/5Kg=0.86A mV,经过 128倍增益后为128 0.86A=110.08AmV,转换为24bit数字信号为110.08AmV*224/4.3V= 429496.7296A,所以y=429496.7296A。

因此得出A=y/429496.7296(y是测量出来的AD值)。

六.模块通讯协议介绍

串口通讯线由管脚 PD_SCK 和 DOUT 组成,用来输出数据,选择输入通道和增益。 当数据输出管脚 DOUT 为高电平时,表明A/D 转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK 应为低电平。当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲。其中第一个时钟脉冲

的上升沿将读出输出 24 位数据的最高位(MSB),直至第24个时钟脉冲完成,24位输出数据从最高位至最低位逐位输出完成。

七.STM32单片机与HX711模块实现重量测量实验

1.硬件准备

STLINK接STM32F103C8T6开发板,STLINK接电脑USB口。

用4根杜邦线连接开发板和称重模块

板子的GND-----模块的GND

板子的3V3------模块的VCC

板子的PB0------模块的SCK

板子的PB1------模块的DT

电桥传感器和称重模块

电桥传感器红色-------模块的E+

电桥传感器白色-------模块的A-

电桥传感器黑色-------模块的E-

电桥传感器绿色-------模块的A+

2.软件工程

打开STM32CubeMX软件,新建工程

Part Number处输入STM32F103C8,再双击就创建新的工程

配置下载口引脚

配置外部晶振引脚

配置系统主频

配置工程文件名,保存路径,KEIL5工程输出方式

生成工程

用Keil5打开工程

添加代码

添加HX711.C驱动文件

修改驱动引脚,跟板子接的匹配

添加称重代码

3.软件主要代码

c 复制代码
int main(void)
{
  /* USER CODE BEGIN 1 */
  uint8_t Counter=0;
  /* 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();//8M外部晶振,72M主频

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
	MX_GPIO_Init();//GPIO初始化
	HAL_Delay_us_init(SystemCoreClock);//初始化us
	/* USER CODE BEGIN 2 */
	OLED_Init();//OLED初始化  
	OLED_Clear();//清屏
	Init_HX711pin();//HX711模块初始化
	/* USER CODE END 2 */
	Get_Maopi();		//去皮,称到的重量就是物体本身的重量
	HAL_Delay(2000);//等待2秒
	Get_Maopi();		//去皮,称到的重量就是物体本身的重量
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	Counter++;
	if(Counter>=5)
	{
	Counter=0;
	OLED_Clear();//清屏
	}
	OLED_ShowCHinese(18,0,0);//光
	OLED_ShowCHinese(36,0,1);//子
	OLED_ShowCHinese(54,0,2);//物
	OLED_ShowCHinese(72,0,3);//联
	OLED_ShowCHinese(90,0,4);//网
	OLED_ShowCHinese(36,3,6);//电
	OLED_ShowCHinese(54,3,7);//子
	OLED_ShowCHinese(72,3,8);//秤
	Get_Weight();//读取重量	
	HAL_Delay(1000);//等待1000ms
	OLED_ShowNum(18,6,Weight_Shiwu,4,16);//显示重量
	OLED_ShowCHinese(72,6,5);//克
		
  }
  /* USER CODE END 3 */
}

//****************************************************
//获取托盘的重量,方便后面减去托盘的重量,就是实际实物的重量
//****************************************************
void Get_Maopi(void)
{
	Weight_Maopi = HX711_Read();	
} 

//****************************************************
//称重
//****************************************************
void Get_Weight(void)
{
	HX711_Buffer = HX711_Read();
	if(HX711_Buffer > Weight_Maopi)			
	{
		Weight_Shiwu = HX711_Buffer;
		Weight_Shiwu = Weight_Shiwu - Weight_Maopi;				//获取实物的AD采样数值,减去托盘的重量。
	
		Weight_Shiwu = (int32_t)((float)Weight_Shiwu/GapValue); 	//计算实物的实际重量
																		//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。
																		//当发现测试出来的重量偏大时,增加该数值。
																		//如果测试出来的重量偏小时,减小改数值。
	}

	
}

4.实验效果

称重一块开发板的重量

八.小结

HX711压力传感器广泛应用于重量测量、压力监测等场景,使用STM32驱动该模块,能开发出电子秤等产品。

相关推荐
安科瑞刘鸿鹏6 小时前
校园建筑用电安全监测装置 电气火灾监测预防设备功能介绍
运维·服务器·网络·嵌入式硬件·安全·能源
Wx120不知道取啥名6 小时前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
Cici_ovo9 小时前
摄像头点击器常见问题——摄像头视窗打开慢
人工智能·单片机·嵌入式硬件·物联网·计算机视觉·硬件工程
无际单片机项目实战10 小时前
为什么STM32的HAL库那么难用,ST还是要硬推HAL库?
c语言·stm32·单片机·嵌入式硬件·物联网
正在努力的小立12 小时前
STM32 HAL 点灯
stm32·单片机·嵌入式硬件
TeYiToKu13 小时前
笔记整理—linux驱动开发部分(1)驱动梗概
linux·c语言·arm开发·驱动开发·嵌入式硬件
Whappy00114 小时前
3. STM32之TIM实验--输出比较(PWM输出,电机,四轴飞行器,智能车,机器人)--(实验1:PWM驱动LED呼吸灯)
stm32·嵌入式硬件·机器人
想拿 0day 的脚步小子14 小时前
6.stm32 OLED显示屏
stm32
Java Fans17 小时前
嵌入式软件在电子烟开发中的应用
嵌入式硬件
子朔不言17 小时前
[ARM-2D 专题]5 MDK编译器一个旧版本-Ofast优化bug的问题及解决办法
arm开发·mcu·方案开发·arm-2d