题目:以电阻应变片作为传感器,完成一体重秤设计,要求检测量程为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. 注意事项
传感器位置:确保装置放置在平坦硬实的地面,避免受力不均影响测量精度。
温度影响:环境温度对电阻应变片造成一定的影响。
电磁干扰:避免电子秤周围存在强电磁场,以免影响测量稳定性。
其中文件已打包到该链接: