电子秤系统设计.doc

更新时间:2024-05-25 02:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于单片机的电子秤系统设计

摘要

电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。

电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。

本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。硬件电路主要是基于单片机STC89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁。 关键字:STC89S52单片机;电子秤;压力传感器;HX711。

1绪论

称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的应用已遍及到国民经济各领域,取得了显著的经济效益。

电子秤是称重技术中的一种新型仪表,广泛应用于各种场合。电子秤与机械秤比较有体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。从世界水平看,衡器技术已经经历了四个阶段,从传统的全部由机械元器件组成的机械称到用电子线路代替部分

机械元器件的机电结合秤,再从集成电路式到目前的单片机系统设计的电子计价秤。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。

电子称重的实现首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经A/D转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。按照设计的基本要求,系统可分为三大模块,数据采集模块、控制器模块、人机交互液晶显示界面模块。其中数据采集模块由压力传感器、信号的前级处理和A/D转换部分组成。转换后的数字信号送给控制器处理,由控制器完成对该数字量的处理,驱动显示模块完成人机间的信息交换。此部分对软件的设计要求比较高,系统的大部分功能都需要软件来控制。在扩展功能上,本设计增加了一个过载报警提示功能。

2 系统硬件方案设计

2.1系统总体设计方案比较与论证

在设计系统时,针对各个模块实现的功能来设计电子秤的方案有以下几种: 方案一 数码管显示:

数据采集 AD转换 单片机处理 LED显示

图1 数码管显示方案

此方案利用数码管显示物体重量,简单可行,可以采用内部带有模数转换功

能的单片机。由此设计出的电子秤系统,硬件部分简单,接口电路易于实现,并且在编程时大大减少程序量,在电路结构上只有简单的输出输入关系。缺点是:硬件部分简单,虽然可以实现电子称基本的称重功能,但是不能实现外部数据的输入,无法根据实际情况灵活地设定各种控制参数。由于数码管只能实现简单的数字和英文字符的显示,不能显示汉字以及其他的复杂字符,不能达到显示购物清单的要求。又因为采用了具有模数转换功能的单片机,系统电路过于简单,系统硬件的扩展必受到限制,电子秤的功能过于单一,达不到设计的标准。 方案二 在前一种方案的基础上进行扩展,增加一键盘输入装置,增加外界对单片机内部的数据设定,使电子称实现称重计价的功能。

结构简图如图2所示: 按键处理

图2带有键盘输入的结构简图

此方案设计的电子秤,可以实现称物计价功能,但是局限于数码管的功能,在显示时只能显示单价、购物总额以及简单的货物代码等。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到限制,所以此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O接口供数码管使用,比较麻烦。

方案三 前端信号处理时,选用放大、信号转换等措施来增加信号采集强度但会增加相应的设计成本;显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容,当需要增加扩展功能时可以通过切换液晶显示界面的方式来实现。

结构简图如下图3所示:

数据采集 AD转换 单片机处理 LED显示 数据采集 信号放大 A/D转换 单片机处理 LCD显示 按键处理

图3带有键盘输入及液晶显示的结构简

2.2系统元器件选型及器件参数介绍 2.2.1单片机选型

单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,鉴于以上考虑本课题选择AT89S52作为整个系统的主控芯片。

AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52芯片具有以下特性[2]:

①指令集和芯片引脚与Intel公司的8051兼容; ②8KB片内在系统可编程Flash程序存储器; ③时钟频率为0~33MHz;

④128字节片内随机读写存储器(RAM); ⑤32个可编程输入/输出引脚; ⑥2个16位定时/计数器; ⑦6个中断源,2级优先级; ⑧全双工串行通信接口; ⑨监视定时器; ⑩2个数据指针。

AT89S52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。 AT89S52单片机引脚图如图4所示:

图8 HX711典型应用电路

3系统硬件电路设计

3.1系统电源电路设计

由于该系统中 51 单片机及 AD 转换芯片及液晶显示器所需供电电压均为 5V 电压,所以要保证系统稳定可靠的工作,需要设计一个可以稳定提供 5V 电压的供电系统。本设计采用双电源接口供电方式,USB 接口供电方便程序调试,也可采用外置电源作为系统的供电电源,但是需另加三端稳压器件 LM7805 作为系统电源的稳压器件以保证系统电压为稳定的直流 5V 电压,同时外置电源的输出电压要高于 5V输出,系统电源输入接口要加滤波电容以确保工作电压稳定。电源输出接口加上LED 电源指示灯,用来判定电源是否正常工作。该系统电源电路设计如图 11 所示。

C1,C2实现对电源滤波,以滤除可能存在的高频杂波对电源的影响,C4实现对电源电压的平滑稳定作用[10],当USB接口输出电压高时C4用来储能,当后续电路负载过高USB供电不足时电解电容C4通过释放储存的电能来保证电源电压不跌落。LED0用作电源指示,其亮灭代表电源工作与否,R0用来限流,以保证LED不被烧坏[13]。

3.2系统串口程序下载电路设计

由于RS-232C的接口电平与TTL兼容接口电平标准不同,所以该接口与TTL兼容电平连接时需要电平转换。MAX232 芯片是常用的转换芯片。MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电,该芯片引脚图如图12所示。

3.3单片机控制电路设计

系统主控电路由AT89S52单片机及晶振电路和复位电路组成,该电路作为整个系统功能实现的核心单元,其连接方式如图14所示。

图14单片机主控电路

晶振全称为晶体振荡器,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。晶振一般叫做晶体谐振器,是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。这种晶体有一个很重要的特性,如果给它通电,它就会产生机械振荡,反之,如果给它机械力,它又会产生电,这种特性叫机电效应。他们有一个很重要的特点,其振荡频率与他们的形状,材料,切割方向等密切相关。由于石英晶体化学性能非常稳定,热膨胀系数非常小,其振荡频率也非常稳定,由于控制几何尺寸可以做到很精密,因此,其谐振频率也很准确。根据石英晶体的机电效应,我们可以把它等效为一个电磁振荡回路,即谐振回路。他们的机电效应是机-电-机-电..的不断转换,由电感和电容组成的谐振回路是电场-磁场的不断转换。在电路中的应用实际上是把它当作一个高Q值的电磁谐振回路。由于石英晶体的损耗非常小,即Q值非常高,做振荡器用时,可以产生非常稳定的振荡,作滤波器用,可以获得非常稳定和陡削的带通或带阻曲线[10]。

复位电路是用来让单片机返回到初始状态的辅助电路,其作用是当单片机程序跑飞或系统出现死机状态时可以让系统从新恢复工作。本系统复位电路的设计具有上电复位和手动按键复位两种复位方式。 3.4系统显示电路设计

显示部分采用LCD1602液晶显示模块,液晶板上排列着若干 5×7或 5×10点阵的字符显示位,每个显示位可显示1个字符,从规格上分为每行 8、16、20、24、32、40位,有一行、两行及四行三类。其与单片机的连接电路如图15所示

图15系统状态显示电路图

1脚和2脚为液晶1602地和电源引脚,3脚为背光调节引脚,通过10K电位器接地,背光可通过电位器来调节亮度;4脚、5脚、6脚为液晶片选控制引脚,分别连接到单片机的P2.0、P2.1、P2,2端口,7~14脚为数据接口,与单片机的P0口相连实现数据的传输,15、16、脚为液晶的背光控制脚,分别接到电源和地[9]。

3.5超重报警提示电路设计

报警指示电路用来在称重测量超出最高值时报警提示,以免重量太高的情况下损坏传感器。报警指示电路由PNP三极管9012驱动蜂鸣器来实现,单片机IO口控制三极管的基极,当单片机的IO口输出为低电平时,三极管导通,蜂鸣器的正极与电源接通,蜂鸣器通电发出报警声,当单片机IO口输出高电平时,三极管截止,蜂鸣器停止报警。报警指示电路如图16所示。

图16报警指示电路

3.6按键输入电路设计

按键输入电路用来在电子称测量过程中输入单价值,按键输入电路采用4*4矩阵键盘实现,矩阵键盘电路如图17所示。

图17按键输入电路

电子称按键功能分配如下表所示:

7 4 1 0

8 5 2 9 6 3 ? 去皮 清零 累计 计算 此电子秤是开机检测托盘重量,并将托盘重量清零(即电子秤每次开机后检测托盘重量,并程序中自动将托盘重量保存在一个变量中,称量过程中每次都将获得的重量减去托盘重量,而得到所要称量物体的真正的重量),

计算功能:在正确输入了单价之后,按下计算按键,将会计算出金额,并在液晶显示器上显示出重量、单价、总价。

电子日历时钟键盘面板:

设置 + —

3.7系统硬件电路的绘制与PCB制作 3.7.1 Protel99SE软件介绍

本文在硬件电路的设计过程中,原理图和PCB的绘制采用Protel99SE软件,Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,该软件以其简单易操作的优势一直以来备受电子工程师的喜爱,因而也成了很多高校电子相关专业EDA工具的必选课程。 3.7.2系统原理图与PCB的绘制

采用Protel99SE软件绘制原理图和PCB的主要步骤如下所述: 1. 建立系统所需原件库;

2. 加载所建原件库到工程项目中;

3. 在原理图页面中放置所需元器件并按照电气性能连接各元件; 4. 建立原件封装库并加载到工程文件中;

5. 绘制好电路后进行ERC电气检测,并生成网络表; 6. 在工程中建立PCB文件,导入生成的网络表; 7. 按照网络飞线提示绘制PCB,最后完成DRC检测[13]。

按照如上步骤最终完成绘制的电路原理图如图18所示,PCB线路板图如图19所示。

图18 系统整体电路图

图19 系统PCB图

参考文献

[1] 薛均义,张彦斌.《MCS-516系列单片微型计算机及应用》[M].西安交通大学出版社,1999

[2] 中国机械工业教育协会 组编.《单片机原理与应用》.机械工业出版社.2001 [3] 黄继昌.《传感器工作原理及应用实例》[A],人民邮电出版社,1998 [4] 郭永贞, 《数字电子技术》[M] 西安电子科技大学出版社 2000

[5] 杨金岩等.《8051单片机数据传输接口扩展技术与应用实例》[M]人民邮电出版社,2005.

[6] 张齐,杜群贵.《单片机应用系统设计技术》[M].电子工业出版社,2007 [7] 李广弟 《单片机基础》[M],北京航空航天大学出版社,2001

[8] 于京《51系列单片机C程序设计与应用方案》[M] 中国电力出版社 2002. [9] 张齐,杜群贵 《单片机应用系统设计技术》[M].电子工业出版社,2004 [10] 张洪润 《电子线路与电子技术》[M].清华大学出版社,2005 [11] 童诗白,华成英.《模拟电子技术基础》[M]. 高等教育出版社,2006 [12] 胡海学.《单片机原理及应用系统设计》[M].电子工业出版社,2005. [13] 及力,《Protel99SE原理图与PCB设计教程》[M]电子工业出版社,2004. [14] 戴佳,《51单片机C语言设计实例精讲》[M] 电子工业出版社 2006 [15] 周坚,《单片机C语言轻松入门》[M] 北京航空航天大学出版社2007

附录

附录1系统整体电路图

附录2系统设计PCB图

附录3系统部分源程序

void shizhong_hanshu() { init(); Init_DS1302();//初始化芯片 init_1602();//初始化lcd while(1) { if(du_k2==0) dianzhicheng_hanshu(); //跳去运行电子称 tmpchange(); //温度转换 wendu_100bei=tmp(); //获得温度 show_date(); keyscan(); if((shi==clock_shi)&&(fen==clock_fen)&&(status==2)&&(miao<5)) { clock_flag=1; TR1=1; } if(status==1) //闹钟状态A解除闹钟 { clock_flag=0; clock=1; TR1=0; } } }

void get_pizhong() { uint j; ulong hx711_dat; for(j=0;j<5;j++) Delay10ms(); hx711_dat=ReadCount(); temp=(uint)(hx711_dat/100); }

void get_weight() { ulong hx711_data,a; uint get,aa; hx711_data=ReadCount();

}

get=(uint)(hx711_data/100); if(get<(temp+4)) { while(1) { if(du_k1==0) shizhong_hanshu(); //跳去运行时间 weight=0; TR0=0; //不允许运行 chaozhong_flag=0; //无重物,超重标志为0; clock=1; if(leiji_flag==1) { weight_shuzhi(leiji_weight);//显示累计重量 P3=0xf0; if(P3!=0xf0) { leiji_count--; break; } //按键就提出 } else weight_shuzhi(weight);//显示重量 hx711_data=ReadCount(); get=(uint)(hx711_data/100); if(get>(temp+4))break; } }

a=ReadCount();

aa=(uint)(a/100)-temp;

weight=(uint)((float)aa/4.4+0.05); weight=weight-qi_weight; //去皮 if(weight>=0) { if(weight>5000) {chaozhong_flag=1;TR0=1;} //重量大于5000g,超重报警? else {chaozhong_flag=0;TR0=0;clock=1;} weizhi_zifu(0x00,'+'); }

else {weizhi_zifu(0x00,'-');}

void press(uchar *s) { unsigned char dat; nn: P3=0xf0; //保存第一位 while(P3==0xf0) { get_weight();//得到重量 if(weight>0) {weight_shuzhi(weight);}//显示重量 else {weight_shuzhi(-weight);} }

dat=key_scan(); if(dat>=0&&dat<10) { if(leiji_flag==1) { leiji_weight=leiji_weight+weight; leiji_count++; if(leiji_count==10) leiji_count=0; weizhi_zifu(0x04,0x30+leiji_count); weight_shuzhi(leiji_weight); } *s=dat; price_shuzhi(1,dat+0x30);//显示 s++; } if(dat==16) //去皮 {qi_weight=weight+qi_weight;goto nn;} if(dat==15) //置零 { qi_weight=0; weight=0; price=0; money=0; pricetable[2]=0; pricetable[1]=0; pricetable[0]=0; leiji_flag=0; leiji_weight=0;

leiji_count=0; chaozhong_flag=0; clock=1; TR0=0; write_com(0x01);//清屏; init_1602(); system(); goto nn; } if(dat==14)//累计 { leiji_flag=1; leiji_weight=leiji_weight+weight; leiji_count++; if(leiji_count==10) {leiji_count=0;} write_com(0x01);//清屏; init_1602(); system(); weizhi_zifu(0x04,0x30+leiji_count); goto nn; }

mm: P3=0xf0; //保存第二位 while(P3==0xf0) { get_weight();//得到重量 if(leiji_flag==1) {weight_shuzhi(leiji_weight);}//如果累计标志为1,显示累计重量 else { if(weight>0) {weight_shuzhi(weight);}//显示重量 else {weight_shuzhi(-weight);} } } dat=key_scan(); if(dat>=0&&dat<10) { *s=dat; price_shuzhi(2,dat+0x30);//显示 s++;

}

if(dat==16) //去皮

{qi_weight=weight+qi_weight;goto mm;} if(dat==12) //清除

{s--;*s=0;price_shuzhi(1,' ');goto nn;} if(dat==15) //置零 { s--; qi_weight=0; weight=0; price=0; money=0; pricetable[2]=0; pricetable[1]=0; pricetable[0]=0; leiji_flag=0; leiji_weight=0; leiji_count=0; chaozhong_flag=0; clock=1; TR0=0; write_com(0x01); init_1602(); system(); goto nn; }

//清屏;

致 谢

该电子秤控制系统的设计及论文的撰写是在我的导师 ?老师的精心指导和悉心关怀下完成的,从论文的选题、研究、撰写到定稿,都得到了?老师细心指导。他宽厚待人,对学生关怀备至,在工作上精益求精,对学生严格要求,鼓励学生学以致用,敢于实践,勇于创新,在实践中发现问题、解决问题。?老师具有丰富的科研经验与理论水平,其开明的学术思想、求实的科研作风和对科学研究及发展趋势的深刻认识给我以极大的影响、启迪和熏陶,令我受益匪浅。该设计及论文的圆满完成是和?老师的细心关怀分不开的。

在系统的设计和论文的研究工作中无不倾注着各位老师的心血和辛勤的汗水,各位老师严谨的治学态度、渊博的知识、生动而满富激情的授课方式,让我四年里学到了扎实的理论知识。从各位尊敬的老师身上,我不仅学到了扎实的专业知识和丰富的实践技能,也学到了很多做人的道理。在此,向给予我指导和帮助的各位老师致以最衷心的感谢和深深的敬意!

在这四年多的学习和研究工作中,也得到了学院的师兄弟们的关心和热心帮助,在此向他们表示由衷的感谢!

最后,衷心感谢在百忙中评阅论文和参加答辩的各位专家、教授和同学!

本文来源:https://www.bwwdw.com/article/91b7.html

Top