基于stm32+HX711的体重秤设计

题目:以电阻应变片作为传感器,完成一体重秤设计,要求检测量程为100kg,检测精度±10g,1 节干电池供电。

1. 传感器选择

  1.1 压力传感器

电阻应变式称重传感器是基于这样一个原理:弹性体(弹性元件,敏感梁)在外力作用下产生弹性变形,使粘贴在他表面的电阻应变片(转换元件)也随同产生变形,电阻应变片变形后,它的阻值将发生变化(增大或减小),再经相应的测量电路把这一电阻变化转换为电信号(电压或电流),从而完成了将外力变换为电信号的过程。电信号经处理后以数字形式显示出被测物的质量。

微型称重传感器:内部为1000欧半桥应变片,量程为50kg 称重传感器,半桥结构。测量时,外侧边正确施加外力,E字形传感器的应变梁部分(即中间贴应变片的,有白色覆胶的梁臂)和外侧边要形成一个方向相反的剪切力,即中间的应变梁在受力下必需可以发生弯曲变化,应变梁受力面另一侧不可有阻挡物。以下为淘宝传感器连接:

传感器人体秤50kg HX711模块+压力传感器套装 称重传感器-淘宝网 (taobao.com)

 1.2 A/D转换器HX711

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

1.3 STM32F103

 STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。

1.4 TM1637

使用数字管显示体重数值。TM1637是一款简单易用、功能丰富的数字管驱动芯片,可以满足数字显示的应用。我们使用TM1637驱动4段数码管来进行体重数值的显示。驱动能力:TM1637能够同时驱动4位共阴或共阳的7段数码管。通信接口:支持简单的两线式串行接口通信(CLK时钟线和DIO数据线),方便与微控制器或其他逻辑电路连接。

4位数码管显示模块 LED亮度可调 带时钟点配件积木 TM1637驱动-淘宝网 (taobao.com)

2. 电路设计

 2.1 升压电路

由于使用1节干电池作为主电源,需要通过升压电路和稳压电路为各模块提供稳定的工作电压。使用ME2108芯片,低电源电流PFM升压DC/DC转换器IC。输出电压在2.0~7.0V之间以0.1V的极差。用电感对能量的存储,并通过其与输入端电源共同的泄放作用,从而获得高于输入电压的输出电压。只需少量的外接元件:仅一只肖特基二极管、一只电感和几只电容。

1.5V 1.8V 2.5V 3V 3.3V 3.7V 4.2V转3.3V/5V DC升压转换电源模块-淘宝网 (taobao.com)

 2.2 电桥接线

本次设计使用四只传感器组成全桥测量,量程为四只传感器的量程之和:50kgx4=200kg。全桥测量电路,将四个传感器合成的电阻应变片(R1、R2、R3、R4)接入电桥,其中一个对角线接入工作电压,另一个对角线输出电压(Uo)。当物体放置在秤台上时,应变片随重量变化而发生形变,导致电阻值变化,从而电桥输出不平衡电压。

 可以使用杜邦线连接各个模块,也可以制作PCB使连接更为可靠。

3. 软件设计

 3.1 HX711转换读取

MCU与HX711转换器的通信。串口通讯线由管脚 PD_SCK 和 DOUT 组成,用来输出数据,选择输入通道和增益。当数据输出管脚 DOUT 为高电平时,表明A/D 转换器还未准备好输出数据,此时串口时钟输入信号 PD_SCK 应为低电平。当 DOUT 从高电平变低电平后,PD_SCK 应输入 25 至 27 个不等的时钟脉冲。其中第一个时钟脉冲的上升沿 将读出输出 24 位数据的最高位(MSB),直至第 24 个时钟脉冲完成,24 位输出数据从最高位至最低位逐位输出完成。第 25至 27 个时钟脉冲用来选择下一次 A/D 转换的输入通道和增益。

unsigned long Read_HX711(void) //CLK为25,输入通道A
{
    unsigned long count;    // unsigned long为4字节32个位二进制
    unsigned char i;
    HX711_CLK = 0;
    count = 0;
    while(HX711_DATA);  // 等待DATA变低
 
    for (i = 0; i < 24; i++)   // 24
	{
	     HX711_CLK  = 1;   // CLK变高,准备读取数据位
         count = count << 1;  // 左移一个位,为下一个数据位腾出位置
         HX711_CLK = 0;   // CLK变低,实际上在CLK的上升沿读取数据位
         if (HX711_DATA)
            count++;		
    }
    HX711_CLK = 1;     // 发送额外的脉冲,设定下一次读取的增益
		count = count >> 8;  // 用于将count向右移动8位。舍去后8位。
		count = count ^ 0x800000; // 如果需要的话可以转换为负数
    HX711_CLK = 0;
		
    return (count);
}

3.2 显示控制

将计算得到的体重值显示在数码管上。TM1637的串行数据输入/输出,输入数据在 SLCK 的低电平变化,在SCLK 的高电平被传输,每传输一个字节芯片内部都将在第八个时钟下降沿产生一个 ACK。通过控制TM1637的显示寄存器地址和显示模式寄存器存储,可以将串行接口从外部器件传送到TM1637 的数据,其中寄存器地址00H-05H共6个字节单元,分别与芯片SGE和GRID管脚所接的LED灯对应。

/** 按从左到右的顺序显示, h 控制 ':', 1显示,0不显示 */
void TM1637_display(unsigned char a,unsigned char b,unsigned char c,unsigned char d,unsigned char h)
{
    TM1637_start();
    TM1637_Write(0x40);//写数据+自动地址加1+普通模式
    TM1637_ack();
    TM1637_stop();
    TM1637_start();
    TM1637_Write(0xc0);//设置显示首地址即第一个LED  c0
    TM1637_ack();
 
    TM1637_Write(tab[a]);
    TM1637_ack();
//	  TM1637_Write(0x7F);
    TM1637_Write(tab[b]|h<<7);//h为1时显示时钟中间的两点
    TM1637_ack();
    TM1637_Write(tab[c]);
    TM1637_ack();
    TM1637_Write(tab[d]);
    TM1637_ack();
 
    TM1637_stop();
    TM1637_start();
    TM1637_Write(0x8f);//开显示,2/16亮度   0x89
    TM1637_ack();
    TM1637_stop();
}

3.3 数据处理

根据A/D转换器的输出值,通过校准算法计算体重,并考虑体重秤的自重等因素以提高测量精度。首先获取体重秤的初始重量,在一开始的时候减去。使用标准的重量多次测试校准,使用一次函数校准。当体重值小于1Kg时不显示数值,只有超过上限才显示。

		weight = Get_Weight1();
		weight =  (weight*Value_k + Value_b)/100; 	//计算实物的实际重量
		if(weight > (weight1+20)) weight1 = weight; //只有当重量大于或小于之前2kg时才赋值					
		else if (weight < (weight1-20))  weight1 = weight;
		Print_display(weight1);
		if(weight1>100)  TM1637_DisplayInt(weight1);
		else  TM1637_off();

4. 结构设计

称重传感器:使用四个称重传感器桥式连接在秤的四个角上,以确保均匀负载和测量准确性。秤体结构:设计坚固且轻便的秤体,确保传感器的安装位置准确,并避免外部干扰。负载分配:确保负载均匀分布在四个应变片上,避免称量不准。

5. 注意事项

传感器位置:确保装置放置在平坦硬实的地面,避免受力不均影响测量精度。

温度影响:环境温度对电阻应变片造成一定的影响。

电磁干扰:避免电子秤周围存在强电磁场,以免影响测量稳定性。

其中文件已打包到该链接:

https://download.csdn.net/download/zhenxixianzai00/89682659

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值