基于单片机的高精度电子秤设计(单片机实例分享)
基于单片机的高精度电子秤设计(单片机实例分享)图25.3 梁式电阻应变片称重传感器光有梁式称重传感器还不能制作成电子秤,还需要为梁式称重传感器打造一套可以称重的托盘结构,图25.4所示是电子秤的本体机械图,包含称重托盘、传感器-桥臂和底座。实物如图25.5所示。图25.1 电阻应变片的结构示意图图25.2 应变片全桥测量电路模型在实际的应用中,通常将4片电阻应变片通过特殊的材料紧密粘合在能产生力学应变的基体上。图25.3所示为笔者使用到的梁式电阻应变片称重传感器,类似于横梁,其中间通常留有一些孔或槽,上下两面各贴有电阻应变片。整个传感器由全桥电阻应变片和基体构成,当梁受力发生机械形变时,电阻应变片也会发生形变,直接导致了电阻值的变化。在整个传感器电路中,电阻值的变化会被直接转换成输出电压值的变化。
力传感器可以用来测量物体的质量,最常见的应用就是电子秤。而关于力传感器的信号处理,在开发设计中未必是一帆风顺的,为此笔者为大家提供两种以前在项目开发过程中使用过的非常经典的设计方案,通过对比两种方案的供电特点、采集方式、处理方法,我们能了解两种方案各自的优势,为大家对力传感器的设计与应用提供一定的帮助。
力传感器力传感器的种类繁多,如电阻应变片压力传感器、半导体应变片压力传感器、压阻式压力传感器、电感式压力传感器、电容式压力传感器、谐振式压力传感器及电容式加速度传感器等。但应用最为广泛的是电阻应变片压力传感器,它具有极低的价格和较高的精度以及较好的线性特性,市场上大部分称重工具,比如电子秤,都采用这种压力传感器。本文介绍的制作方案也采用电阻应变式称重传感器,而且笔者会为大家提供两种围绕电阻应变式称重传感器的信号调理电路。
电阻应变式称重传感器的特性在进入电路分析前,我们有必要先了解一下电阻应变式传感器的特性。电阻应变片是一种将被测物件上的应变量转换成一种电信号的敏感器件。图25.1为电阻应变片的结构示意图,它由基体材料、金属应变丝或应变箔片、绝缘保护片和引出线等组成。
当基体受力发生形变时,电阻应变片也一起产生形变,使应变片的阻值发生改变,从而使加在电阻上的电压发生变化。这种应变片在受力时产生的阻值变化通常较小,一般这种应变片都组成应变电桥,并通过后续的仪表放大器进行放大。为了提高测量精度,通常把4片应变片组合成全桥测量电路,图25.2所示为电阻应变片全桥测量电路的电路模型。4个臂R1、R2、R3、R4都用电阻应变片代替。
图25.1 电阻应变片的结构示意图
图25.2 应变片全桥测量电路模型
在实际的应用中,通常将4片电阻应变片通过特殊的材料紧密粘合在能产生力学应变的基体上。图25.3所示为笔者使用到的梁式电阻应变片称重传感器,类似于横梁,其中间通常留有一些孔或槽,上下两面各贴有电阻应变片。整个传感器由全桥电阻应变片和基体构成,当梁受力发生机械形变时,电阻应变片也会发生形变,直接导致了电阻值的变化。在整个传感器电路中,电阻值的变化会被直接转换成输出电压值的变化。
光有梁式称重传感器还不能制作成电子秤,还需要为梁式称重传感器打造一套可以称重的托盘结构,图25.4所示是电子秤的本体机械图,包含称重托盘、传感器-桥臂和底座。实物如图25.5所示。
图25.3 梁式电阻应变片称重传感器
图25.4 电阻应变片称重传感器工作对象示意图
图25.5 电子称托盘实物
分立件信号调理电路图25.6 分立件信号调理电路
桥臂式传感器的信号调理电路,采用仪表放大器进行放大。仪表放大器是一种高增益、直流耦合放大器,它具有差分输入、单端输出、高输入阻抗和高共模抑制比等特点,这些特点适用于桥臂式传感器的信号调整放大。运算放大器只有工作在双电源情况下才能对称地进行零点调节,因此不得不为电路设计双路输出电源。这个分立件组成的信号调理电路原理图如图25.6所示,实物电路见图25.7。传感器工作电压由HT7550-5.0V的LDO芯片供电,其中RP2用于电路零点调节,RP1是放大倍数调节,也就是常说的量程。
图25.7 供电电路实物与信号调整放大电路实物
每一款传感器的出厂性能都不一致,因此想得到准确的质量与输出电压值,必须对电路进行调试,首先是电路输出调零。所谓调零,就是电子秤接入传感器信号电路后,空载的输出电压必须为0V。当然,这并不是简单调节一下RP2电位器就能校准输出电压的。真正有效的校准这个信号调理电路输出为0V的方法如下。
这里使用了称重传感器标称值为5kg,若称重物体为100g,输出电压为0.1V;若称重物体为1kg,输出电压为1V。由此,理论上可以得到一个比较好的线性关系:y = kx b,其中y表示电压,x表示质量。因此,对电路校准输出0V必须在电子秤空载的情况下先对RP2进行调整,用万用表测量出IC6第6脚输出电压为0V时完成第一步;然后将一个1kg的物体置于电子秤上,测量输出电压值可能会偏离1V,此时调整RP1进行量程核准,使输出电压为1V;最后将1kg物体移走,再用万用表测量输出电压值,若不为0V,重新微调RP2。以上步骤可以多重复几次,或更换不同重量的物体测量,使电路保证输出准确的0V。测试连接如图25.8所示,其中电源部分使用万能板焊接,由双路输出变压器供电,控制器使用C51/AVR/Arduino主板的Arduino部分。
校准结束后,可以取两种不同重量的物体,进行人工测量,求出线性关系中的斜率和截距,方便后面的调整。笔者测量725g和100g两个物体,实际测量输出电压值分别为714mV和107mV,两点坐标值可以求出斜率k值为0.9712,通过公式代入一个坐标值即可得出截距b值为1.04552。有了这个线性关系,可以利用线性函数关系式实时测量传感器的输出电压,进而计算出测试的称重物体的重量。
接下来就可以测量一下实际物体重量,进入电子秤的具体制作环节。Arduino内置了10位精度的ADC转换功能,使用Arduino处理相关信号调理电路,可以加速整个调试开发过程。简易的电子秤实现流程如图25.9所示。
图25.8 信号调理电路系统
使用Arduino板的A0接口采集输出电压值,用Arduino板上的调试窗口直接观察称重物体的重量。Arduino演示代码如下,程序中使用了人工标定后计算出的线性函数关系因子数,并使用多次采样取平均值的滤波方法。
图25.9 电子秤的实现流程图
void setup()
{
//initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// 算术平均滤波法
#define FILTER_N 10
float Filter()
{
int i;
float filter_sum = 0;
for(i=0;i
{
int sensorValue = analogRead(A0); // read the input on analog pin 0
//Convert the analog reading (which goes from 0 - 1023) to avoltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
filter_sum = voltage; // read the input on analog pin 0:
delay(1);
}
return (float)(filter_sum / FILTER_N);
}
// the loop routine runs over and over again forever:
void loop()
{
float k = 0.9712;//人工标定计算出的斜率
float b = 1.04552;//人工标定计算出的截距
// 获得滤波器输出值
float Wei = ((Filter()*1000) - b) / k;// 线性函数
Serial.print(Wei 3);// print out the value you read:
Serial.print(‘g’);
Serial.print(“ “);
Serial.print(Wei/1000 3);//print out the value you read:
Serial.println(“kg”);
delay(500);
}
集成化数字电路模块接下来将要介绍的是用数字电路模块采集称重传感器的输出动态电压。此款模块中有一个电子秤专用模拟/数字转换器芯片——HX711,其内部具有24位A/D高精度转换器,可输入两通道差分信号,其中通道A的增益可编程128倍和64倍。工作电压范围在2.6~5.5V,图25.10所示为官方提供的参考电路。
图25.10 HX711 模块参考应用电路
由于将信号调理电路已集成为芯片,所以就没有了外围调节校准等工作,也不存在标定和计算线性关系因子的环节了。接下来,使用STC89C52RC单片机对模块进行通信,并将使用4×4矩阵键盘对称重物体进行计价操作,LCD1602显示模块显示质量、单价和支付金额,同时在程序设计中增加负压力和过压力检测报警动作。
图25.11 微量物称重
图25.12 称量计价
图25.11所示是对1g重的跳线进行称重示意,其结果很稳定,默认显示的单位是千克(kg);图25.12所示是对称重物体进行单价99元输入后的计算,应付金额为3.5元。因为称重传感器会测量到托盘的重量,存在一定的毛重,所以电子称在进入初始化工作时必须对电子称进行一次毛重计算,正常工作后,当前称重的数据需要减去毛重,这样称出来的重量值才是实物的重量。此款电子秤的实现流程基本和Arduino板一样,只是大部工作均由HX711芯片辅助处理了,单片机只需要连续发送脉冲给HX711,直接读取出HX711已经转换好的称重数据即可。
单片机电子称参考代码如下所示。程序中Weight_Maopi变量就是电子称上电后对托盘称重的毛重。其中转换后的数据除以100是用来缩小数据,为后续计算出的数值能以克计,即4位有效值。而计算实物重量时除以4.22,不同的称重传感器特性曲线不一样,每一个传感器都会有一个矫正值,所以这个数值也随之不同,这里取值为4.22。当发现测试出来的重量偏大时,可加大这个数值,反之减小,该数值一般在4.0到5.0之间。计算式最后补加0.05是保证测量结果以四舍五入百分位计算。完整的驱动程序读者可移步qq群下载。
void Get_Weight()
{
HX711_Buffer = HX711_Read();
HX711_Buffer = HX711_Buffer / 100;
Weight_Shiwu = HX711_Buffer;
Weight_Shiwu = Weight_Shiwu - Weight_Maopi;//获取实物的AD采样数值
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu / 4.22 0.05);//计算实物的实际重量
if(Weight_Shiwu < -300)//称重小于毛皮值说明负重300g的漂移值
{
Buzzer = 0;//负重量报警
}
else if(Weight_Shiwu > 5000)//压力传感器上总质量大于5kg的最大量程,报警
{
Buzzer = 0;
}
else if(Weight_Shiwu > -200) //正常测量{
Buzzer = 1;//关闭警报
}
}
总结通过两种称重传感器信号处理电路的分析和实测,可总结出:分立件仪表放大器电路结构复杂,电源供电复杂、调试步骤繁多,虽然线性度比较好,但若电源不稳定,温度上升,工作时间过长,会影响输出电压,发生漂移,在运算上增加了复杂的计算难度。而电子秤专用集成化芯片,具有供电简单、功耗低、线路精简、转换精度高、无调试步骤、无温漂等优点。希望笔者在电子称制作项目中的对比经验能为读者在力传感器的应用处理方面提供一些帮助。