多功能数字电子称 摘要
电子称是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。
电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。
本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。硬件电路主要是基于单片机STC89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子称专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁。 关键字:STC89S52单片机;电子称;压力传感器;HX711。
目录
1绪论...................................................................................3 2 方案设计..........................................................................4 2.1系统总体设计方案比较与论证....................................4 3 硬件的方案设计..............................................................6 3.1 传感器...........................................................................6 3.2单片机选型....................................................................7 3.3 显示模块.......................................................................8 3.4 AD模块.........................................................................8 3.5 键盘输入......................................................................10 4电路设计..........................................................................10 4.1电源电路.......................................................................10 4.2单片机控制电路...........................................................11 4.3显示电路.......................................................................12 4.4系统原理图与PCB电路图..........................................12 4.5实物图展示...................................................................13 5原件清单..........................................................................14 6系统程序..........................................................................15 7参考文献..........................................................................20
8总结..................................................................................21 1绪论
称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。随着社会的进步、科学的发展,我们对其要求操作方便、易于识别。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。电子秤向提高精度和降低成本方向发展的趋势引起了对低成本、高性能模拟信号处理器件需求的增加。通过分析近年来电子衡器产品的发展情况及国内外市场的需求,电子衡器总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。
电子秤与机械秤比较有体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。从世界水平看,衡器技术已经经历了四个阶段,从传统的全部由机械元器件组成的机械称到用电子线路代替部分机械元器件的机电结合秤,再从集成电路式到目前的单片机系统设计的电子计价秤。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。
2 方案设计
2.1系统总体设计方案比较与论证
在设计系统时,针对各个模块实现的功能来设计电子秤的方案有以下几种: 方案一 数码管显示:
数据采集 AD转换 单片机处理 LED显示
图1 数码管显示方案
此方案利用数码管显示物体重量,简单可行,可以采用内部带有模数转换功能的单片机。由此设计出的电子秤系统,硬件部分简单,接口电路易于实现,并且在编程时大大减少程序量,在电路结构上只有简单的输出输入关系。缺点是:硬件部分简单,虽然可以实现电子称基本的称重功能,但是不能实现外部数据的输入,无法根据实际情况灵活地设定各种控制参数。由于数码管只能实现简单的数字和英文字符的显示,不能显示汉字以及其他的复杂字符,不能达到显示购物清单的要求。又因为采用了具有模数转换功能的单片机,系统电路过于简单,系统硬件的扩展必受到限制,电子秤的功能过于单一,达不到设计的标准。 方案二 在前一种方案的基础上进行扩展,增加一键盘输入装置,增加外界对单片机内部的数据设定,使电子称实现称重计价的功能。
结构简图如图2所示: 按键处理
数据采集 AD转换 单片机处理 LED显示
图2带有键盘输入的结构简图
此方案设计的电子秤,可以实现称物计价功能,但是局限于数码管的功能,在显示时只能显示单价、购物总额以及简单的货物代码等。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到限制,所以此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O接口供数码管使用,比较麻烦。
方案三 前端信号处理时,选用放大、信号转换等措施来增加信号采集强度但会增加相应的设计成本;显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容,当需要增加扩展功能时可以通过切换液晶显示界面的方式来实现。
结构简图如下图3所示:
数据采集 信号放大 AD转换 单片机处理 LCD显示 按键处理
图3带有键盘输入及液晶显示的结构简图
鉴于上述三种方案的优缺点,本系统在设计时充分考虑到系统的实用性及成本的可行性的前提下,设计完成了最终的电子称方案,最终的硬件设计方案图如图4所示,该方案增加了电子日历功能,从而使本系统的设计功能得到了很好的扩展与应用。
时钟芯片 数据采集 信号放大 AD转换 单片机处理 LCD显示 时钟显示 计量显示 按键处理
图4系统设计硬件框图
3 硬件的方案设计 3.1 传感器
传感器的变形量是很微小的,在安装、使用过程中要特别注意,不要超载。如果在外力撤除后不能恢复原形状,发生塑性变形,则传感器就损坏了。传感器有四根线连接外电路,红线为电源正极输入,黑线为电源负极输入,白线为信号输出1,绿线信号输出2。为保正精度,一般不要随意调整线长。
图5
3.2单片机选型
单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,鉴于以上考虑本课题选择AT89S52作为整个系统的主控芯片。
AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。AT89S52单片机引脚图如图4所示:
图6
3.3 显示模块
采用点阵字符型 LCD 液晶显示,液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件LCD1602可以显示2行 16 个字符,有 8 位数据总线 D0-D7,和 RS、R/W、 EN 三个控制端口,工作电压为 5V,并且带有字符对比度调节和背光[4]。LCD1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同 的点阵字符图形,如表 1 所示,这些字符有:阿拉伯数字、英文字母的大小写、 常用的符号、和日文假名等,每一个字符都有一个固定的代码,它的读写操作、 屏幕和光标的操作都是通过指令编程来实现的。
图7
3.4 AD模块
简介:
HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B则为固定的32增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。 特点:
两路可选择差分输入
片内低噪声可编程放大器,可选增益为64 和128
片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源 片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟 上电自动复位电路
简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程 可选择10Hz 或80Hz 的输出数据速率 同步抑制50Hz 和60Hz 的电源干扰 耗电量(含稳压电源电路):典型工作电流:<1.7mA, 断电电流:<1μA 工作电压范围:2.6 ~ 5.5V 工作温度范围:-20 ~ +85℃ 16 管脚的SOP-16 封装
图8
3.5 键盘输入
矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,按键设置在行列的交点上。例如,用2×2的行列结构可构成4个键的键盘,4×4行列结构可构成16个键的键盘。因此,在按键数量较多时,可以节省I/O口线。相对于专用芯片式可以节省成本,且更为灵活。
图9 4×4矩阵键盘
4.电路设计 4.1电源电路
由于该系统中 51 单片机及 AD 转换芯片及液晶显示器所需供电电压均为 5V 电压,所以要保证系统稳定可靠的工作,需要设计一个可以稳定提供 5V 电压的供电系统。本设计采用双电源接口供电方式,USB 接口供电方便程序调试,也可采用外置电源作为系统的供电电源,但是需另加三端稳压器件 LM7805 作为系统电源的稳压器件以保证系统电压为稳定的直流 5V 电压,同时外置电源的输出电压要高于 5V输出,系统电源输入接口要加滤波电容以确保工作电压稳定。电源输出接口加上LED 电源指示灯,用来判定电源是否正常工作。该系统电源电路设计如图 11 所示。C1,C2实现对电源滤波,以滤除可能存在的高频杂波对电源的影响,C4实现对电源电压的平滑稳定作用[10],当USB接口输出电压高时C4用来储能,当后续电路负载过高USB供电不足时电解电容C4通过释放储存的电能来保证电源电压不跌落。LED0用作电源指示,其亮灭代表电源工作与否,R0用来限流,
图10
4.2单片机控制电路
图11
系统主控电路由AT89S52单片机及晶振电路和复位电路组成,晶振和电容在电路中当作一个高Q值的电磁谐振回路。复位电路是用来让单片机返回到初始状态的辅助电路,其作用是当单片机程序跑飞或系统出现死机状态时可以让系统从新恢复工作。本系统复位电路的设计具有上电复位和手动按键复位两种复位方式。
4.3显示电路
显示部分采用LCD1602液晶显示模块,
1脚和2脚为液晶1602地和电源引脚,3脚为背光调节引脚,通过10K电位器接地,背光可通过电位器来调节亮度;4脚、5脚、6脚为液晶片选控制引脚,
分别连接到单片机的P2.0、P2.1、P2,2端口,7~14脚为数据接口,与单片
机的P0口相连实现数据的传输,15、16、脚为液晶的背光控制脚,分别接到电源和地[9]。
图12
4.4系统原理图与PCB电路图
图13 PCB图
图14系统原理图
4.5实物图展示
图15
5.原件清单
器件名称 1/4W电阻 1/4W电阻 1/4W电阻 1/4W电阻 10K排阻(103) 整流二极管 电解电容 电解电容 电解电容 陶瓷电容 稳压芯片 陶瓷电容 三极管 AT24C02存储器带IC座 蜂鸣器 电源插头DC-005 HX711模块插口 4*4矩阵键盘 晶振 串口接口 LCD1602液晶+排针 LED发光二极管 电平转换芯片 单片机 5KG压力传感器带螺丝 8P弯排针 16P液晶底座 秤盘 轻触按键 PCB板子 按键开关 器件型号 对应PCB位号 0欧姆(代替跳线) R7,R8,R9 1K R0,R3,R4 2.2K R6 10K R1,R2,R5 10K RP1 1N4007 D0 10u/16v C6 47U/25V C4 220U/16V C1 30P C7,C8 78L05 U1 C2,C5,C14,C15,C16,104 C17,C18 S8550 Q1 8PIC座 U3 5V有源蜂鸣器 BZ1 CON2 J1 CON6 J4 CON8 J6 12M Y1 DB9 J0 LCD1602 LCD1 LED LED0 MAX232加座子 U2 STC89S52加座子 U4 带螺丝 LCD1 SO SW1 SW1 数量 3 3 1 3 1 1 1 1 1 2 1 7 1 1+1 1 1 1 1 1 1 1 1 1+1 1+1 1+4 1 1 1 1 1 1
6.系统程序
#include \"main.h\" #include \"LCD1602.h\" #include \"HX711.h\"
unsigned long HX711_Buffer = 0; unsigned long Weight_Maopi = 0; long Weight_Shiwu = 0; char Price_Count = 0;
unsigned char KEY_NUM = 0;
unsigned char Price_Buffer[3] = {0x00,0x00,0x00}; unsigned long Money = 0; bit Flag_OK = 0;
//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 //该值可以为小数 #define GapValue 430
//**************************************************** //主函数
//**************************************************** void main() {
char k = 20 ; Init_LCD1602(); //初始化LCD1602
LCD1602_write_com(0x80); //指针设置 LCD1602_write_word(\"Welcome to use! \"); //开机画面第一行
Get_Maopi(); Delay_ms(2000); //延时2s
loop:Price_Count = 0; Price_Buffer[0] = 0; Price_Buffer[1] = 0; Price_Buffer[2] = 0; Flag_OK = 0;
LCD1602_write_com(0x80); //指针设置
LCD1602_write_word(\"+WEI |PRI | MON \"); LCD1602_write_com(0x80+0x40); //指针设置 LCD1602_write_word(\"0.000| . | . \");
Get_Maopi(); //称毛皮重量
while(1) { if( Flag_OK == 0) { if( k == 0) Get_Weight(); k--; if( k < 0) { k = 20; } //显示当前重量 LCD1602_write_com(0x80+0x40); LCD1602_write_data(Weight_Shiwu/1000 + 0x30); LCD1602_write_data('.'); LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30); LCD1602_write_data(Weight_Shiwu%100/10 + 0x30); LCD1602_write_data(Weight_Shiwu%10 + 0x30); } KEY_NUM = KEY_Scan(); if( KEY_NUM != 0x55) //当返回的不是初值时候,确认按键按下。 { if(KEY_NUM == 16) //数字A键,去皮功能 { Get_Maopi(); //去皮 } if(KEY_NUM == 15) //数字B键清除键,二次测量 { goto loop; } if(KEY_NUM == 12) //数字C输入单价错误时返回上一步
{ Price_Count--; if( Price_Count < 0) { Price_Count = 0; } Price_Buffer[Price_Count] = 0; //清除上一个输入的数据
switch(Price_Count) { case 0: LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(' '); break; case 1: LCD1602_write_com(0x80+0x40+7); LCD1602_write_data(' '); break; case 2: LCD1602_write_com(0x80+0x40+9); LCD1602_write_data(' '); break; default : break; } } if(KEY_NUM == 13) //数字D键,计算总价 { Money = Price_Buffer[0] * 100 + Price_Buffer[1] * 10 + Price_Buffer[2]; Money = Money * Weight_Shiwu / 1000; LCD1602_write_com(0x80+0x40+11); LCD1602_write_data(Money/1000 + 0x30); LCD1602_write_data(Money%1000/100 + 0x30); LCD1602_write_data(Money%100/10 + 0x30); LCD1602_write_data('.'); LCD1602_write_data(Money%10 + 0x30); Flag_OK = 1; } if(KEY_NUM >= 0 && KEY_NUM <= 9) //显示输入的价格值
{ Price_Buffer[Price_Count] = KEY_NUM; switch(Price_Count) { case 0: LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(Price_Buffer[0] + 0x30); break; case 1: LCD1602_write_com(0x80+0x40+7); LCD1602_write_data(Price_Buffer[1] + 0x30); break; case 2: LCD1602_write_com(0x80+0x40+9); LCD1602_write_data(Price_Buffer[2] + 0x30); break; default : break; } Price_Count++; if( Price_Count >= 3) { Price_Count = 3; } } }
} }
//**************************************************** //矩阵键盘扫描
//**************************************************** unsigned char KEY_Scan() {
unsigned char temp = 0;
unsigned char com = 0x55 , com1 = 0 , com2 = 0; P3=0xf0; if(P3!=0xf0) { com1=P3;
P3=0x0f; com2=P3; }
P3=0xf0;
while(P3!=0xf0); temp=com1|com2;
if(temp==0xee)com=1;//数字1 if(temp==0xed)com=4;//数字4 if(temp==0xeb)com=7;//数字7
if(temp==0xe7)com=11;//备用键*号键 if(temp==0xd7)com=0;//数字0
if(temp==0xb7)com=14;//备用键*号键
if(temp==0xde)com=2; //数字2 if(temp==0xdd)com=5; //数字5 if(temp==0xdb)com=8;//数字8
if(temp==0xbe)com=3;//数字3 if(temp==0xbd)com=6; //数字6 if(temp==0xbb)com=9;//数字9
if(temp==0x7e)com=16;//数字A键,去皮功能 if(temp==0x7d)com=15;//数字B键清除键,二次测量
if(temp==0x7b)com=12;//数字C输入单价错误时返回上一步 if(temp==0x77)com=13;//数字D键,计算总价 return(com); }
//**************************************************** //称重
//**************************************************** void Get_Weight() {
Weight_Shiwu = HX711_Read();
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重 if(Weight_Shiwu > 0) { Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue); 实物的实际重量 if(Weight_Shiwu > 5000) //超重报警 {
//计算
Buzzer = 0; } else { Buzzer = 1; } } else { Weight_Shiwu = 0; Buzzer = 0; //负重报警 } }
//**************************************************** //获取毛皮重量
//**************************************************** void Get_Maopi() {
Weight_Maopi = HX711_Read(); }
//**************************************************** //MS延时函数(12M晶振下测试)
//**************************************************** void Delay_ms(unsigned int n) {
unsigned int i,j; for(i=0;i [1] 张齐,杜群贵 《单片机应用系统设计技术》[M].电子工业出版社,2004 [2] 张洪润 《电子线路与电子技术》[M].清华大学出版社,2005 [3] 张齐,杜群贵.《单片机应用系统设计技术》[M].电子工业出版社,2007 [4] 李广弟 《单片机基础》[M],北京航空航天大学出版社,2001 [5] 胡海学.《单片机原理及应用系统设计》[M].电子工业出版社,2005. [6] 及力,《Protel99SE原理图与PCB设计教程》[M]电子工业出版社,2004. 8总结 采用AT89S52单片机计的电子称, 无论是计量精度, 还是稳定性都满足要求, 它具有较好的标定校准方法, 性能稳定, 操作简单, 价格低廉。在整个课程设计过程中,我对本课题所用到的单片机及其相关知识有了进一步的掌握,在此实践过程中增长了知识、丰富了经验,提高了解决问题的能力。也知道了理论和实际必须紧密结合,在设计中要针对不同的系统根据理论给与不同的方案,综合考虑各方面的因素和需要,选择出最佳的方案与结论。通过这次单片机课程设计,我不仅学会如何将所学专业知识运用到实际生活中,还学会如何克服未知的困难,解决难题的方法。由于时间太仓促,经验不足,理论方面也相应的存在不足,加上条件有限,仍存在着一些设计方面的问题,个人技能也有待提高。在今后仍需不断地学习以及实践,才能更好地使用单片机。 因篇幅问题不能全部显示,请点此查看更多更全内容