电子称毕业设计
目 录
前 言 ........................................... 1 1 整体设计方案 ................................... 2
1.1 称重技术和衡器的发展 .............................. 2
1.2 电子秤的组成 ...................................... 3
1.2.1 电子秤的基本结构 ............................. 3
1.2.2 电子秤的工作原理 ............................. 3
1.2.3 电子秤的计量性能 ............................. 3
1.3 电子秤的整体方案框图 .............................. 4 2 器件的选择 ..................................... 6
2.1 传感器的选择 ...................................... 6
2.2 A/D转换器的选择 .................................. 8
2.3 CPU的选择方案 .................................... 9
2.4 键盘的选择 ........................................ 9
2.5 显示器部分的选择 ................................. 10 3 硬件电路的设计 ................................ 11
3.1 传感器电路设计 ................................... 11
3.1.1 传感器的定义 ................................ 11
3.1.2 压力传感器 .................................. 12
3.2 放大和A/D转换电路设计 ........................... 12
3.2.1 HX711的介绍和引脚 .......................... 12
3.2.2 A/D电路的电路图 ............................. 15
3.3 单片机控制电路 ................................... 15
3.3.1 STC89C52RC的介绍 .......................... 16
3.3.2 单片机最小系统 .............................. 18
3.4 液晶屏显示电路 ................................... 18
3.5矩阵键盘电路 ...................................... 19
3.6 声光报警电路 ..................................... 20
3.7 电源电路 ......................................... 21 4 软件电路的设计 ................................ 22
4.1系统的应用软件组成 ................................ 22
4.2 系统的主程序设计 ................................. 23
4.3按键电路程序设计 .................................. 23
4.4显示屏的显示程序设计 .............................. 24 5 安装与调试 .................................... 25
5.1 硬件的调试 ....................................... 25
5.2 软件的调试 ....................................... 26
5.3 综合调试 ......................................... 27
5.4 运行和使用 ....................................... 27 总 结 .......................................... 31 参考文献 ........................................ 32 致 谢 .......................................... 33 附 录 .......................................... 34
前 言
当今物质生活的不断提高和科技的不断迅猛发展,人们越来越注重使用一些更加简单方便并能快速识别的称量工具,来测量物品的重量。随着电子科学和称重技术的发展和社会经济发展速度不断加快,需要称重物品也越来越多样化,人们对称重工具的要求也在不断地提高,要求称重能够更加自动、智能、动态、精确。原先的杠杆秤、台秤、磅秤等均无法满足现代称量的要求,但是基于单片机的电子秤却能很好的满足这些要求。设计基于单片机设计的电子秤,目的是能够设计称重更加精确使用更加便捷的称量衡器。该设计采用单片微控制器设计,安全和可靠系数更高称量更加准确。该设计的各个部分为整体方案的设计、元器件的选择、电子秤硬件电路的设计、软件电路的设计、系统的检测与调试。本文着重介绍了硬件电路设计及软件程序控制,全面介绍了所用到的元件和元件的参数。
1 整体设计方案
1.1 称重技术和衡器的发展
称重技术自远古时代就作为一种计量方法,运用在经济、生活的各个领域,和人们生产生活紧密相连。衡器是作为一种国家规定的计量工具存在于社会生活中各个领域中的,它的制造水平高低,影响着整个国家的现代化和社会经济效益的提高。
电子秤的发展也与其他工具的发展相通也经历一个普遍的发展过程。从早期的机械功能单一到系统功能完善。特别是在过去的30几年中,电子秤的发展进入一个飞速发展的阶段。对过程称重,材料定量和监测的质量等一系列环节,电子秤有着不可忽视重要作用。电子秤不仅仅提供称重信号质量,也可以作为一个整体的系统控制和监测单元发送信号成为一个独立的单元存在。因此生产的自动化和合理化,贸易的流通等社会环节都离不开电子秤。
国际范围内,发达国家电子称重已经到了很高水准。国外的电子称产品的类别和构造在不断更新,功能的应用范围也在变的更广。在上个世纪六七十年代中期,美国等一些西欧国家就对本国的四分之三的机械秤进行了机电结合改造。再经过许多年的发展和改造,国际上的称重技术已经达到了一个相当高度。
国内的电子秤称重技术现在已基本追赶到上世纪九十年代的脚步。少数国产的设备性能已经处于世界领先。自五十年代电子技术进入称重设备领域,六十年代初期就出现了机电结合称重设备。当今我国电子称重设备经过四十多年发展有了一个质的突破。国内的科研人员正加紧脚步赶超世界先进水平。
现代社会中电子称重设备在系统中的理数据、过程控制都必不可少。现代称重技术和数据系统的电子秤已经成为各个领域一项重要的组成成分,今年来称重传感器在不断突破,为电子秤的研发打下坚实的其础。各个国家对称重技术的攻坚都是十分重视的。称重技术上的突破将带领一个国家迈入世界先进国家的行列。
研究称重设备的发展情况和市场的需要,称重装置的未来方向是向模块智能方向发展的。其技术性能的趋向是快准稳的方向。未来的电子称重设备的发展将会越来与迅速,称重技术会得到更广泛的应用。
1.2 电子秤的组成
1.2.1 电子秤的基本结构
秤的基本原理是在荷载的重力作用下来确定其质量的装置。电子秤的组成都是由几个共通的构件。
1.承重、传力复位系统
电子秤的主体框架。包括着托撑、秤身、缓冲保护等构件。
2.压力传感器
它是一种相当于感官的的感受转换装置。能够将感受到的荷载变化成其他易于运算传输的信号,例如电信号等。
3.控制和计算处理的微处理器。
就是处理传感器产生的电信号的线路模块(数模转换、电流电压源、调节器、补尝、保护)它是荷载的测量装置或称二次仪表。数字化电路,其主要环节主要有放大、运算、转化、寄存、驱动显示等。
4.显示和测试输出的载荷装置。
外部显示装置(显示屏、打印器件、数据传输存贮装置将数据体现出来的外设)。
1.2.2 电子秤的工作原理
荷载放在电子秤的称台后,由传感器产生相应的压电效应,被测物体的质量会转换为一般与自身呈正比例关系的电信号。但是产生的电压信号是比较微弱的,必须通过放大,滤波等,输出相对应模拟信号。模拟信号不便被程序系统所识别,所以要进行转换,变为数字信号。随后把这个模拟的信号量传到转换器,经过内部的电路系统处理将信号数字化。数字量会被送到单片机主控制器进行内部处理。在处理的过程中,单片机将不断循环扫描,根据键盘输入开关状态和内部程序储存,数字信息将会在单片机内部进行判断、分析,运算生成的数据将被送到内贮存器。当需要显示时贮存器中的数据将被重新读出并传递到显示器显示,过程结束。
1.2.3 电子秤的计量性能
电子秤主要性能规格有:量程、分度值、分度数、准确度级别等。
1.量程:最大称量,即在正常工作时,称重的最大值为多少。
2.分度值:量程被分成若干等份,每一份的值大小即为分度值。用e、d表示。
3.分度值数:量程被等份,这些等份部分的总的份数即为分度数。可用n表示。
4.准确度分级:国际法制计量组织按照分度值数不同分I、II、III、IV等级,分别对应不同准确度的电子秤和分度值数n的范围,如表1-1所示。
表1-1 准确度级别与分度数
1.3 电子秤的整体方案框图
设计整体的思路是:传感器的力电效应会产生相应的电压信号,荷载一般与产生的电压成正比关系。由于传感器信号比较微小须经电路放大,然后由数模转换器将信号转换为数字信号,再送入单片机主控制器。单片机内部处理,得到荷载重量总额等信息,最后通过显示屏显示出来。其技术指标能够实现荷载称重、输入单价、总价格计算、显示、超过量程报警等功能。称量量程0~10kg,精度可以达到5g,电源可以使用交流220V通过变压转换为5V。
电子秤主题包括压力传感器、放大数模转换部分、89C52单片机、4×4矩阵式键盘、显示屏等五部分组成。整体方案实现过程思路为:荷载放在称重平台上,压力传感器会产生相应的电压模拟信号,随后信号传递到专用的HX711A/D模块,经过模块的放大、转换以后传递到单片机主控制器,由单片机内部根据传递来的信号进行分析、运算得出物体的重量。期间可以人为的输入物体单价,单片机主控制器可以确定键盘输入的单价值,并在内部运算得出出总的金额。然后可以将的总价和重量单价等信息传递到显示屏显示出来,使信息能够直观方便的被人们所得到。电子秤整体框图如1-1所示。
图1-1 整体框图
2 器件的选择
2.1 传感器的选择
在该设计中,压力传感器是一个必不可少元件,因此传感器的选择是十分慎重的,要注意选择的传感器的各项指标,还需考虑内部电路的设计性价比和难易等。传感器主要参数是自身的灵敏值大小、产生的总的误差和漂移现象。
1.灵敏度:压力传感器输出电压载满负荷运行时与激励电压的比值。
2.总误差:称量时输出的误差大小和规定的额定误差比值。
3.漂移:压力传感器工作时输出会随着时间温度相关变动。
通常使用有压电、电容压力、电阻应变等一些传感器。在进行压力传感器的选择时,要尊重一些使用规范,选择时要按照稳定行、精度、寿命和安装环境的要求进行全面的考虑。常用传感器各自的主要特点如下:
1.压电式特点:是一种有源传感器。也称为自发电传感器。原理是一些材料在受到力的作用后会在特定表面产生电荷。优势为小巧、轻便、简单,适合动态力学量测量,不适合频率低和静态量测量。弱点是:分布电容及噪声会影响输出特性,且输出能量和功率较小,内阻较大。
2.电容式特点:将荷载变化转为电容变化的一种传感器。优点为简单、灵敏、响应动态。缺点是稳定性差,灵敏但怕污损寿命短,环境要求苛刻,长距离传输困难。
3.电阻应变式特点:利用电阻应变原理,将力学信号变化转换为电信号。其优点是应用测量范围广、灵敏度高、精度高、结构轻小、对复杂环境适应性强;工作无特殊的要求。
通过对各类传感器综合分析,该设计的压力传感器选择电阻应变式十分合适。应变传感器测量原理图如图2-1所示。
图2-1 应变传感器测量原理
当荷载P正作用于弹性材料的横梁,产生了形变,材料上的R1、R3应变片拉伸阻值增加;R2、R4形变压缩阻值减小;电桥失衡。应变电压随之产生,此时的不平衡电压与正压力成正比关系。电阻应变片组成惠更斯电桥,电桥抗干扰能力很强但输出信号较小,不易测量,所以需要较高增益的放大器放大。
图2-2为惠更斯电桥,U接直流电源E。
图2-2 惠更斯电桥原理图
当输出端口U0接一个近似无穷大电阻时,可认为此时输出端口开放断路。这时直流惠更斯电桥仅有电压输出。当不考虑电源的内阻时,根据串联分压则有:
UoUBDUABUAD
E(
(2.1)
= E 1324 R1R4)R1R2R3R4
RRRR(R1R2)(R3R4)
当电阻应变片满足R1R3R2R4时,则有:
R12R4R3(2.2) 当输出端口电压为0,电桥平衡。式(2.2)是平衡条件。若测量之前电桥平衡,测量中输出的Uo就只与电阻应变片的变化有关系。
当系统工作,R1R3RR、R2R4RR,按计算公式(2.1),得
到电桥输出电压为:
(RR)2EUo(RR)(RR)(RR)(RR)RER
kE (RR)2 (2.3)
2.2 A/D转换器的选择
转换器是该设计中非常重要的一个环节。常用类型主要有逐次逼近、并行比较、积分、压频变换等方法研制的转换器。有多种模数转换器可以供设计选择:
1.逐次比较型A/D转换器
由一个比较器和转换器构成。运用主次比较逻辑,按顺序把每位电压与转换器的输出比较,多次比较后输出数字值。优点是快速,低耗,分辨率小于12位时,价格较低。缺点:14位分辨率以上,价格较高不经济实用;还需要将输入在之前处理。
2.并行比较型A/D转换器
由多个比较器构成仅作一次比较。又称为快速型转换器。是当今速度最快的A/D转换器。具有超高的转换速率,显而易见得缺点是有n位就需要2n-1个比较器。需价格较高的大规模电路,仅仅适用于速速率要求特别高的领域。
3.积分型A/D转换器
是将输入转换成脉冲宽度信号等,最后通过计时等工作获得数字信号。优点是简单电路获得高分辨率,抑制干扰能力强,能够有效地抑制电网的工频干扰。缺点是转换速率比较低。主要适用测量速率要求不高的精密领域,比如数字电压表等。
4.压频变换转换器
通过间接的方式来实现转换,首先将信号转换成频率,然后可以通过计数器将频率转换成数字量。优点是:价格低廉、功耗小、同时有一定的高精度;但是还需外部计数设备进行辅助完成。
因为该设计中对物体重量的测量和应用的场合的限制,转换速率要求较高,精度要求比较严格,根据系统综合性能和总的技术指标的实现来分析,设计采用
了24位积分型转换器HX711。
2.3 CPU的选择方案
该设计使用了单片微控制器作为系统的主控制器。由单片机与计算机技术组成的“智能化测量控制系统”非常适合时代的需求,系统的更新只需改变单片机的内部程序。这种系统的使用使得测量方便快捷,更加自动智能化。
单片机选择规范主要是:市场的供应货源、单片机自身性能和设计研制周期。选择的单片机必须能够保证能够稳定的获得供应。而且选择最容易实现设计系统指标的单片机型号,并且能达到较高的性价比。
由于该设计中系统程序部分内容较多容量较大,基于整体设计的分析,选用的单片微控制器内部最好自带EPROM,这样应用程序可直接存储在微控制器内部,电路可以被简化。AT89系列与MCS-51相比有两大优势:存储器为片内闪存,写入程序非常快捷。52单片机是一个低电压、高性能的单片微控制器,内含8k闪存字节可反复擦写的存储单元,有40个引脚,32个外部双向输入输出端口,16位可编程定时计数器有三个,全双工串行通信口,它拥有十分强大的功能来适应各种工作场合。所以该设计选用了52单片机作为单片主控制器。
2.4 键盘的选择
键盘输入是人机界面中重要构成成分,内部系统接受指令的最直接途径就是通过键盘。通过键盘可以直接输入其指令,键盘输入可以直接影响到系统实现功能的稳定性。键盘由许多按键构成,按键的多少根据系统要实现的功能制定。每个键相当于一个机械开关,当键被按下,开关闭合,当键被释放,开关断开。单片机控制器接收到按键的通断信号后内部进行各功能处理。所以系统接收到的键盘接口信号就是系统输入信号
电子秤设计需要设置数字按键、确认、删除、取消键等功能键,所以经过综合考虑,设计选择了4×4矩阵键盘。矩阵式的键盘分行和列,行列线交叉点不直接连接的而是通过一个按键连接。这样单片微控制器的一个端口就可以形成矩阵式键盘,比之直接用端口线用于键盘要多出许多按键。因为,该设计需要设置的功能键较多,所以采用矩阵式键盘是非常合理的。
2.5 显示器部分的选择
显示器通常也被称作监视器它是人机交互系统中重要的组成部分,显示屏将测得的数据通过CPU内部处理处理后直观的显示出来方便人们读取。设计中数据显示屏的选择有两种:数码管显示的显示屏和液晶构成的显示显示屏。
LED实际为发光二极管。通过控制半导体发光二极管的显示,通过发光二极管芯片的恰当连接(并串联)和适当地光学结构来显示各种信息的显示屏幕。LED主要特点如下:能在低电压、小电流条件下驱动发光、响应时间极短(
LCD 液态晶体显示器是一种极低压微功耗显示器,构造是液晶夹在两片平行玻璃中。液晶是介于固体与液体之间的一种有机物质,它是一种分子具有方向性的液体我们称之为“液态晶体”。在不同的电流电场作用下,液晶分子会做规律排列产生透光度差别,从而可以构成所显示的图像。液晶显示器具有小轻薄的特点、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,并且无电磁辐射安全可靠,被动显示无眩光不刺激人眼。所以该设计选择了LCD液晶显示器。
综合考虑价格和性能的良好,液晶显示器更适合设计中的电子秤。经过匹配选择最终选择128×64 液晶显示屏。
3 硬件电路的设计
3.1 传感器电路设计
3.1.1 传感器的定义
是一种感受所规定测量量的装置,传感器将感受信号按一定规律转变成为电信号或其他形式的信号。传感器相当于身体感官的延伸,不过传感器要比人自身的感官更加灵敏。其构造通常由弹性敏感材料、电阻应变片以及电路组成。系统原的理框图如图3-1所示。传感器输出信号幅度变化较小,不方便被后级电路系统测量,而且信号还混有干扰等。为了方便后级系统的处理,感受信号要经过滤波等塑造性处理,将模拟信号转换成数字信号这样系统可以更好的识别。随后数字信息被送到内部单片主控制器进行处理。人为了从外界获取信息要通过感官,在研究自然现象和规律以及生产活动中的各项数据人类本身是做不到的,传感器作为人类感官的延伸,被人们形象的称为电五官。传感器把信息转换为易传输和处理的信号,以供我们人类识别。现今传感器已经渗透到社会中的各个方面,可以毫不夸张地说几乎每一个现代化项目都离不开各色传感器。因此,传感器在生产生活有着十分重要的作用,未来传感器将达到一个崭新水平。
图3-1 传感器原理框图
3.1.2 压力传感器
该设计中,设计选用压力传感器,量程定为10kg。实物图如图3-2所示。传感器中的应变片具有金属应变效应,外力下形变也会带动阻值发生变化。半导体应变片具有灵敏度高度优势,很适合该设计的要求。传感器与后级的转换模块相连,因转换模块自带放大,所以外部无需加放大电路。
图3-2 10kg的压力传感器
3.2 放大和A/D转换电路设计
3.2.1 HX711的介绍和引脚
HX711是一种24位A/D转换器芯片,内部自带128dB增益放大。芯片内集成了稳压电源、片内时钟振荡器和一定的电路等。它的集成度高、响应快、抗干扰强可以提高电子秤的可靠性。并且芯片后端单片微控芯片的接口和程序非常简单,直接由管脚驱动控制信号,芯片内部的寄存器可以不用编程。可任意选取通道A或通道B作为输入选择开关,A为128dB或64dB增益值,满额度输入幅值分别为±20mV或±40mV。通道B为32dB固定增益值。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源。内部的时钟振荡器不需要外接辅助器件。系统开机初始化的过程芯片自动上电复位,简化操作步骤。图3-3为芯片内部结构图,图3-4为芯片外部管脚图。
图3-3 HX711内部结构图
图3-4 HX711芯片外部管脚图
使用芯片内部的时钟振荡器用到14管脚15管脚,当15管脚等于0时的输出速率为10Hz。电源直接取用2.7V~5.5V,并与单片机微控芯片相连通。传感器连接通道A,通道B通过外部分压电阻与电池连接,用于检测电池电压。由于芯片内部自带128dB的增益放大功能,所以电路得到了简化,就可以省略放大电路的设计。由于是自带放大电路简化所以系统的精度得到提高,降低了系统的干扰。管脚功能如表3-1所示。芯片主要参数如表3-2所示。
表3-1 HX711芯片管脚功能表
表3-2 HX711芯片主要参数表
3.2.2 A/D电路的电路图
由于HX711自带放大电路,所以只需要加入外部电路,就能完成放大和A/D转换的过程从而满足系统的需求,电路图如图3-5所示。
图3-5 HX711电路
3.3 单片机控制电路
该设计用单片机作为主控制器。单片微控制器根据输入信号得出出物体的重量,随后将信息输送到显示部分。单片机是一个重要的环节,是系统必不可少的部分。该设计选用的是STC89C52型的单片机,该单片机的实物图如图3-6所示。其内部结构图如图3-7所示。
图3-6 STC89C52实物图
时钟源
01
图3-7 单片机内部结构图
3.3.1 STC89C52RC的介绍
单片主控制器,是一种高度集成的芯片。单片机内部集成了包括运算存储、控制、输入输出等设备。单片机具有体积小、控制功能强、功耗微小、有较强的适应环境能力、使用灵活方便等优点。STC89C52RC/RD系列单片机是新一代高速、低功耗的单片机。代码完全兼容51单片机。单片机的实物如图3-7所示。
STC89C52单片机特点:
增强型51单片机,可以任意选择6周期或12周期,兼容51指令代码; 工作电压:5V或3V两种;
工作频率范围:0~40MHz,实际工频可达到48MHz; 用户应用程序空间8K字节; 片上集成512字节RAM;
32个通用输入输出口,复位后P0~3是准双向口/弱上拉,P0口是漏极开路输出。P0作为普通端口,需加上拉电阻;当总线扩展用,不加; 在系统、应用均可编程,不需要专用编程器/仿真器;
任意输入输出口驱动能力都可达到20mA,但整个单片机最大不超过120mA;
有EEPROM功能;具有看门狗;外部晶体20M以下可省外部复位电路;
可选择外晶体/时钟或R/C振荡器在下载程序时; 常温下振荡器频率:5.0V单片机为:11MHz~17MHz; 16位定时器有三个,其中一个还可以当做两个8位定时器使用; 外部中断P0~3共四个,下降沿或低电平触发; 工作温度范围值:0~75℃/-40~+85℃; PDIP封装、PLCC封装; STC89C52 单片机管脚及封装:
STC89C52自身的封装形式有多种,设计中选用的是DIP-40封装,其管脚定义如图3-8所示。52单片机的管脚功能如下表3-3所示。
图3-8 STC89C52管脚图 表3-3 89C52引脚功能表
3.3.2 单片机最小系统
单片机最小应用系统,简称最小系统。是指单片机正常工作情况所必须的最少元器件基本配置电路。对于内部资源已满足设计系统需要时,可以直接采用单片机最小系统。
89C52最小系统由有四部分构成:晶振其作用用于计时一般与两个电容并联使用、复位电路其作用是用于复位、电源用于供电、烧写程序串口。初始状态电源接通或复位后单片机复位。运行时,开关通断单片机也可操作其复位。控制系统的第一步系统复位,随后控制系统回到初始默认状态下。
该设计单片机电路图如图3-9所示:
图3-9 STC89C52单片机电路
3.4 液晶屏显示电路
液晶显示屏与单片微控制器相连。液晶屏电路图如图3-10所示。管脚8、9、10、11、12为显示屏单片机接口的控制线。1、2、3和4端口为内部字库和单片机接口的控制线。
该液晶显示屏为128×64汉字屏JLX12864G-086-PC。此显示模块可以显示
普通图像型,也可以用内部字库IC,从字库IC中读出内置点阵数据写入LCD驱动IC中,最终显示图像。
图3-10 LCD显示电路
显示屏接口引脚功能介绍如表3-4所示。
表3-4 显示屏引脚功能表
3.5 矩阵键盘电路
键盘电路矩阵式键盘数字输入按键和功能按键。设置矩阵式键盘,分行线和列线这样可以节约单片机端口。键盘行扫描为ROW1—ROW4,列扫描为COL1—COL4。行线上按键的通断信号为输入,低电平有效;列线上信号为输出信号。键盘无按键输入时,初始位置时即使行扫描输入信号为低电平,但列信号
仍高电平无输出;当行线扫描信号为低信号,同时又有按键按下,电平同时为低电平时,此时对应的列输出信号才为低电平信号。按键前1和2、3和4是相通的,按键按下时则1和4、2和3相同。根据输出低电平信号得出按键位置。
矩阵键盘电路如图3-11所示,键盘功能定义如表3-5所示。
图3-11 矩阵键盘电路 表3-5 4×4矩阵键盘定义
3.6 声光报警电路
在实际测量当中量程不是无限大的。当荷载超过传感器的量程,继续加重就会对系统造成伤害,可以通过系统程序设置超量程警报。蜂鸣器和发光二极管电路与单片主控制器连接,当测量荷载超过规定量程时,内部系统程序会给出低电平信号,鸣器鸣响,报警灯点亮。
声光报警电路如图3-12所示。
图3-12 声光报警电路
3.7 电源电路
该设计应用于一些普通的场合。需要供电实用简单快捷,供电采用数据线接口可以用手机充电器等广泛设备给电使用,供电电压5V满足系统需求同时又安全可靠。其供电电路原理图如图3-13所示。
图3-13 供电电路
系统总体电路连接图见附录1。
4 软件电路的设计
程序设计是一项需要多方面全面协调的工作,为了使设计更具条理化,需要相应的方法。其步骤可概括为三步:一是分析控制要求确定算法:对问题进行具体的分析,从而确定能够达到控制要求所要编写程序的步骤,这一步是能否编写出满足控制要求的高质量程序的关键步骤。二是根据第一步画出程序框图:程序框图可以把控制要求和制定的算法具体化,达到减少出错的要求。三是最终编写程序:选用适当的指令排列起所需要的算法和步骤,构成一个有机的程序整体。
4.1 系统的应用软件组成
目前,常用的设计软件是Protel,软件将多个实用工具组合后构成一个工作平台。其软件主要有三块功能,同时99SE还增加了新功能,使用更加简洁。
原理图设计功能:设计电路原理图是表示电路工作原理和电路的个部分组成;PCB板生成功能:这一部分是由文件到实际板制作的重要连接。电路仿真功能:提供功混合信号仿真。软件中进行模拟,只需选择好元器件随后连接原理图。就自动进行仿真。
单片机程序编写软件是Keil uVision4,其软件针对单片机编程的专用软件。Keil uVision4功能强大、使用方便、兼容不同类型的单片机编程,编程语言包括汇编和C语言。并且可以对编程中的一些语法进行检错,这样可以减少大量人工检错的时间和降低人工检错的困难。所以其单片机编程软件受到广大编程者的好评。
系统主程序程序由几个子程序组合构成的,各个模块相互配合实现系统目标的完成。主程序结构框图如图4-1所示。
图4-1 程序结构框图
4.2 系统的主程序设计
系统设计的主要目标是能够实现电子秤的称量计价功能,键盘键入单价、转换器转换数字信号传入微处理器。程序处理后,显示荷载的质量和总价。该电子秤包括:初始化、数据处理、键盘处理、显示设计。主程序流程如图4-2所示。
图4-2 主程序流程图
4.3 按键电路程序设计
4×4的矩阵式键盘作为输入接口,输入接口分别接在P1口和P3口的4个I/O上,按键处理流程如图4-3所示。
图4-3 按键处理流程图
4.4 显示屏的显示程序设计
显示屏程序主要判断是否显示,以及通过显示表达的内容,十分重要。并且显示程序会被其他程序所调用使用,显示程序的流程如图4-4所示。
图4-4 显示屏显示流程图
该设计的主程序使用了定时器功能,可以实现循环称重间隔时间为0.5秒钟每次,运用定时器的键盘扫描程序如图4-5所示。
图4-5 扫描程序流程图
由于系统软件程序较长,具体软件主程序及其他子程序见论文附录2。
5 安装与调试
5.1 硬件的调试
硬件调试是整个调试过程第一步十分关键,开头错了随后的全错。首先判断各个元器件本身是否已经损坏,然后按照画好的电路图进行焊接电路,安装完毕。根据原理图查看元件连接是否有误,例:电容、集成模块的安装方向错误等,利用万用表检测电路板是否存在虚焊等。所需元件如表5-1所示,焊接好的硬件实物如图5-1所示。
表5-1 材料清单
图5-1 硬件实物图
5.2 软件的调试
软件调试部分应用Keil uVision4软件进行C语言的编译/连接、调试。选择STC-ISP-483软件做为单片机程序烧写软件,本软件为不同类型的单片机烧写程序都适用。在程序的烧制过程中必须通过计算机中的设备管理器找到对应的COM端口,然后找到要烧写的文件,文件的后缀必须为.HEX。安装后插入USB下载线后,连接顺序[开始]至[控制面板]至[打印机和其他硬件]最后[设备管理器],在“端口”分支下有COMN。N表示为串口序列号,串口驱动没有安装成功,须重新安装。成功安装图如图5-2所示。
图5-2 成功安装串口驱动示意图
下载系统程序打开烧写程序软件,点击运行STC_ISP_V481.exe程序,下载窗口。然后按要求操作。烧写软件窗口如图5-3所示。
图5-3下载软件
选择正确的MCU 类型为89C52单片机,COM号需要一致,选择高速最高波特率和最低波特率,不成功则需尝试降低拨特率,.HEX数据文件选择想要下载的文件。
点击“Download/下载”按下下载板上的上电按钮,然电路版有一个才从失电到上电的过程,然后程序开始烧录至单片机内部。
5.3 综合调试
硬软件调试确认无问题以后,就开始进行系统综合调试。综合调试采用全速断点调试运行方式,主要是排除错误,使系统的动态性能得到提高。设计的重要指标测量精度和可靠性,软件数据处理的应用,可弥补各环节的弱点。数据处理主要环节为:
1.处理零漂
受温度或其它因素引起的零位值波动现象。零漂可用零位补偿处理,数据采集时减去储存的零漂值,从而得到有效信号。
2.无效物理量消除
称重系统中,称重传感器输出的信号时托盘、支架和要称物体的转换信号,实际所要测的是被测物的重量。可用软件设置方法去除这些物理量。
3.非线性补偿
传感器的输入输出特性仅仅在一定区域内近似呈现为线性。整体是离散性的,还可能有温漂、滞后。也常用软件方法进行补偿。
4.标度变换
在实际测量中,模拟信号转化为数字信号后,还需要转换成工程量。即必须转换成带有量纲的数值,方便运算显示,又称标度变换。
对于一般线性系统来说,标度变换的公式为:
Y=Kx+B
5.4 运行和使用
1.上电运行
单片机程序烧写完成后完成后能自动运行,或者通电运行复位后自动运行。
运行图如图5-4所示。
图5-4 电子秤通电运行图
2.使用步骤
按下通电开关系统开始运行。开始时重量和单价均为0,没有荷载则没有金额显示;
键入单价是通过数字、小数点按键输入,设置完后按下确定单价; 在压力传感器放上荷载,则屏幕显示重量和总的计算价格;
量程为0-10kg,单价范围为0.01-9999.99,总金额范围为0-9999.99;单价与总价的单位均为元,如果荷载超过量程则声光报警器报警。
3.电子秤设计称量演示
荷载称量选择一瓶定量瓶装水,实物如图5-5所示。
图5-5 瓶装水实物图
如图所示瓶装水555毫升,重量换算为555克,实际称量如图5-6、5-7所示。
图5-6 实际称量瓶装水图
图5-7 实际称量空瓶图
实际称量瓶装水重量为575克,去除空瓶称量重量为14克。由此电子秤称量水的质量为561克,实际水质量为555克。经过多次测量得到电子秤误差范围
在5克左右。
实际称量中显示总价称量如图5-8所示,荷载为瓶装水,单价定为9元每千克。
图5-8 计量总价图
实际称量瓶装水为0.575Kg、单价为9元时,总计量价格为5.17元。
总 结
智能化电子秤在当今的社会中因其可靠、准确、技术先进和简单以及其他众多优点,受到人们的广泛好评。在商业活动中更是被广泛地应用,给经济生活、社会活动带来了诸多便利。通过这一段时间段努力,最终按要求完成了电子秤的设计。在毕业设计制作的过程中,运用了系统的分析方法,进行分析最终按照总体设计目标完成。
在设计制作过程中,对大学这四年的学习内容做了一个系统的回顾和总结,运用了许多四年中学到的专业知识例如单片机技术,传感器知识等。设计充分运用单片机这种微处理芯片,减低成本提高系统的精密度,同时高精度传感器的运用是设计总体的精度进一步得到提高,设计中详细介绍了所选择器件的标准和选择器件的参数。单片机通过比较采用了52单片机,传感器采用了压力传感器。总体设计符合设计规范。
参考文献
[1] Adel S.Sedra,Kenneth C.Smith:Microelectronics Circuits,3rd Edition,Holt Rinehart and Winston,Inc.,1991
[2] Theodore Wildi.Electrical machine,and power system[M],2002.3
[3] 宋文续,扬帆.传感器与检测技术[M].北京:高等教育出版社,2005.4
[4] 常健生.检测与转换技术[M].北京:机械工业出版社,2004.6
[5] 凌志浩.智能仪表原理与设计技术[M].上海:华东理工大学出版社,2003.8
[6] 丁元杰.单片微机原理及应用[M].北京:机械工业出版社,1999.8
[7] 周航慈.单片机应用程序设计技术[M].北京:北京航空航天大学出版社,2002.11
[8] 孙涵芳.单片机原理及应用(修订版)[M].北京:北京航空航天大学出版社,1996
[9] 何立民.单片机应用技术选编(1)-(8)[M].北京:北京航空航天大学出版社,2002
[10] 赵茂泰.智能仪器原理及应用[M].北京:电子工业出版社,2004
[11] 张毅刚.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,2003
[12] 贾伯年,俞朴.传感器技术[M].东南大学出版社,2000
[13] 单成祥.传感器理论设计基础及其应用[M].北京:国防工业出版社,1999
[14] 李道华,李玲,朱艳.传感器电路分析与[M].武汉:武汉大学出版社,2000
[15] 沙占友,王彦朋等.智能传感器系统设计与应用[M].北京:电子工业出版社,2004.6
[16] 何希才,薛永毅.传感器及其应用实例[J].北京:机械工业出版社,2004.1
[17] 周立功.单片机实验与实践[M].北京航空航天大学出版社,2004.6
大学四年的时光匆匆过去,感觉时间是如此的短暂。大四这一段时间的忙碌毕业设计论文的任务也已完成,其过程中遇到了不少的困难,但都在指导老师和周围同学的帮助下顺利度过了,非常感谢我的指导老师史老师的无私的帮助,没有史老师和同学们的帮助想要完成这个毕业设计是十分困难的。
在平常虽然指导老师的工作很多很辛苦但是指导老师史老师间来给我们进行认真指导,帮助我们进行论文的修改和专业知识上的扩充。在此要各位指导老师辛勤工作致敬。过程中无私帮助我的同学,也给了我很多的帮助和启发。
同时论文中引用了许多著作。学者们研究文献资料无场地供整理和分析,如果没有这些学者研究的发表,完成该论文是有一定困难的。许多专业学者的发表论文和参考文献的阅读
在此还要感谢大学四年中所有专业课老师,夯实了专业知识的基础;不断的完善的过程中,使我明白“一份耕耘才有一份收获”的道理。师恩伟大,无以回报。所以只能衷心祝愿老师们能够工作顺利健康开心。
1.系统总体电路连接图
2.系统软件程序,包括主程序及其他子程序
#include
#include
#include
#include "lcd.h"
#include "hx711.h"
#include "keyboard.h" //定义量程系数
#define RATIO 2114/1623
(2) 管脚、常量、变量定义 //定义标识
volatile bit FlagTest = 0; //定时测试,每0.5秒置位,测完清0
volatile bit FlagKeyPress = 0; //是否有键按下,处理清0
volatile bit FlagSetPrice = 0; //价格设置状态,设置完为1。
sbit LedA = P2^2; //管脚定义
sbit beep = P1^0;
sbit alert = P1^1;
int Counter; //显示用变量
uchar idata str1[6] = "000000";
int i, iTemp;
unsigned long idata FullScale; //满量程AD值/1000 称重用变量
unsigned long AdVal; //AD采样值
unsigned long weight; //重量值,单位g
unsigned long idata price; //单价,长整型值,单位为分
unsigned long idata money; //总价,长整型值,单位为分
uchar keycode; //键盘处理变量
uchar DotPos;
(3) 函数声明
void int2str(int, char *);
void Data_Init();
void Port_Init();
void Timer0_Init();
//小数点标志及位置
void Timer0_ISR () ;
void INT1_Init();
void KeyPress(uchar);
void To_Zero();
void Display_Price();
void Display_Weight();
void Display_Money();
(4) 各子程序
void int2str(int x, char* str) //函数整型转为字符串,范围0--65536
{
int i=1;
int tmp=10;
while(x/tmp!=0)
{ i++;
tmp*=10; }
tmp=x;
str[i]='\0';
while(i>1)
{ str[--i]='0'+(tmp%10);
tmp/=10; }
str[0]=tmp+'0';
}
void To_Zero() //重新找回零点,每次测量前调用
{
FullScale=ReadCount()/1000;
price=0;
}
void Display_Price() //显示单价,单位为元,四位整数,两位小数 {
unsigned int i,j;
display_GB2312_string(5,44," ");
i = price/100; //得到整数部分
j = price - i*100;//得到小数部分
int2str(i,str1);
if (i>=1000) //显示整数部分
{display_GB2312_string(5,44,str1);}
else if (i>=100)
{display_GB2312_string(5,52,str1);}
else if (i>=10)
{display_GB2312_string(5,60,str1);}
else
{display_GB2312_string(5,68,str1);}
display_GB2312_string(5,76,"."); //显示小数点
int2str(j,str1); //显示小数部分
if (j
{display_GB2312_string(5,84,"0");
display_GB2312_string(5,92,str1);}
else
{display_GB2312_string(5,84,str1);}
}
void Display_Weight() //重量显示,kg为单位,整数位是两位,小数位三位 {
unsigned int i,j;
display_GB2312_string(3,60," ");
//weight单位是g
i = weight/1000; //得到整数部分
j = weight - i*1000;//得到小数部分
int2str(i,str1);
if (i>=10)
{display_GB2312_string(3,60,str1);}
else
{display_GB2312_string(3,68,str1);}
display_GB2312_string(3,76,".");
int2str(j,str1);
if (j
{ display_GB2312_string(3,84,"00");
display_GB2312_string(3,100,str1);}
else if (j
{display_GB2312_string(3,84,"0");
display_GB2312_string(3,92,str1);}
else
{display_GB2312_string(3,84,str1);}
}
void Display_Money() //显示总价,单位为元,四位整数,两位小数 {
unsigned int i,j;
display_GB2312_string(7,44," ");
if (money>999999) //超出显示量程
{display_GB2312_string(7,44,"-------");
return; }
i = money/100; //得到整数部分
j = money - i*100;//得到小数部分
int2str(i,str1);
if (i>=1000) //显示整数部分
{display_GB2312_string(7,44,str1);}
else if (i>=100)
{isplay_GB2312_string(7,52,str1);}
else if (i>=10)
{display_GB2312_string(7,60,str1);}
else
{display_GB2312_string(7,68,str1);}
display_GB2312_string(7,76,"."); //显示小数点
int2str(j,str1); //显示小数部分
if (j
{display_GB2312_string(7,84,"0");
display_GB2312_string(7,92,str1);}
else
{display_GB2312_string(7,84,str1);}
}
void Data_Init() //数据初始化
{
price = 0;
DotPos = 0;
beep = 1;
alert = 1;
}
void Port_Init() //管脚配置
{
}
void Timer0_Init()//定时器0初始化
{
}
void Timer0_ISR (void) interrupt 1 using 0 //定时器0中断
{
TL0 = 0x06;
ET0 = 1; //允许定时器0中断 TMOD = 1; //定时器工作方式选择 TL0 = 0x06; TH0 = 0xf8; //定时器赋予初值 TR0 = 1; //启动定时器
TH0 = 0xf8; //定时器赋予初值
Counter ++; //每0.5秒钟刷新重量
if (Counter >= 200)
{
FlagTest = 1;
Counter = 0;
}
}
void KeyPress(uchar keycode) //按键响应程序,参数是键值,返回键值: {
switch (keycode)
{
case 0: // 7 8 9 10(清0) case 1: // 4 5 6 11(删除) • // 1 2 3 12(未定义) • // 14(未定义) 0 15(.) 13(确定价格) case 9:
if (DotPos == 0) //目前在设置整数位,要注意price是整型,存储单位为分
{ if (price
} DotPos++;
else if (DotPos==2) { price=price+keycode; } Display_Price(); break;
case 10: //清零键
To_Zero(); Display_Price(); FlagSetPrice = 0; DotPos = 0; break; case 11: //删除键,按一次删除最右一个数字 if (DotPos==2) { price=price/10; } else if (DotPos==1) { price=price/100; } else if (DotPos==0) { price=price/1000; }
price=price*10; DotPos--; price=price*100; DotPos--; price=price*100;
Display_Price();
break;
case 13: //确认键
}
}
//===============main program===================// void main(void)
{
Rom_CS=1;
initial_lcd();
EA = 0;
Data_Init();
Port_Init();
Timer0_Init();
EA = 1; //初始化完成,开中断
LedA = 1; //背光
clear_screen(); //clear all dots
display_GB2312_string(1,1,"电子秤初始化....");
To_Zero();
display_GB2312_string(1,1,"电子秤初始化成功"); FlagSetPrice = 1; break; case 15: //小数点按下 if (DotPos == 0) { } DotPos = 1; //小数点后第一位 break;
display_GB2312_string(3,1,"重量: kg"); display_GB2312_string(5,1,"单价: 元"); display_GB2312_string(7,1,"金额: 元"); Display_Price();
while(1)
{
if (FlagTest==1) //每0.5秒称重一次 { AdVal=ReadCount(); //称重,得到重量值weight,单位为g weight=FullScale-AdVal/1000; if (weight>0x8000) weight=0; weight=10000*weight/FullScale; weight=weight*RATIO; //如果超量程,则报警 if (weight >= 10000) { beep = 0; alert = 0; display_GB2312_string(3,60,"------"); display_GB2312_string(7,44,"--------"); } //如果不超量程 else { beep = 1; alert = 1; //显示重量值 Display_Weight(); //单价设定完毕,计算价格 if (FlagSetPrice == 1)
{ money = weight*price/1000; //money单位为分 //显示总金额 Display_Money(); }
else { display_GB2312_string(7,44," "); }//清测试标志 FlagTest = 0; } } //获取按键 keycode = Getkeyboard(); //有效键值0-15 if ((keycode
}
}