电子称

更新时间:2024-06-10 13:12:01 阅读量: 综合文库 文档下载

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

单片机技术及其应用原理

课 程 设 计 报 告

设计题目: 基于单片机的电子称设计 专业年级: 10电子信息工程本科 指导教师: 曲培树 小组成员: 张 琳 201000802033 许孟君 201000802037

董晓亚 201000802080 教学单位:物理与电子信息学院 成 绩: 完成时间:2012.07.02

目录

摘要 ..................................................... 1 一、设计要求 ............................................. 2 二、设计过程 ............................................. 2 2.1 方案设计 .......................................... 2 2.2 器件选择 ......................................... 4

2.3

系统电路设计 ....................................... 5

2.3.1 传感器 ................................................ 5 2.3.2 前级放大器部分 ........................................ 9 2.3.3 信号转换 ............................................. 11 2.3.4 控制单片机的选型 ..................................... 14 2.3.5 显示模块 ............................................. 15 2.3.6 键盘输入 ............................................. 19 2.3.7 电源模块 ............................................. 20

2.4 软件设计 .......................................... 22

2.4.1主程序流程图 ......................................... 22

2.4.2 子程序设计 ........................................... 23

三、结果分析 ............................................ 26 四、设计总结 ............................................ 26

4.1 存在的问题 ................................................ 26

4.2

个人体会 .................................................. 27

参考文献 ................................................ 27 附录 .................................................... 29

基于单片机的电子称设计

摘 要

电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合成为一种方便、快捷、称量精确的工具,广泛应用于商业、工厂生厂、集贸市场、超市、大型商场、及零售业等公共场所的信息显示和重量计算。

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

本系统针对电子称的自动称重、数据处理等进行了设计和制作。为了阐明用单片机是如何对采样数据进行处理,对数据的采集和转换、计算问题进行了研究,讨论了单片机控制系统中关键的计算问题。本文在给出智能电子称硬件设计的基础上,详细分析了电子称的软件控制方法。单片机控制的电子称结构简单,成本低廉,深受人们的喜爱,本文将对此进行详细讨论。

关键词:电子称;单片机;称重传感器

一、设计要求

(1)设计一款电子秤,用LED液晶显示器显示被称物体的质量

(2)可以设定该秤所称的上限 (3)当物体超重时,能自动报警

二、设计过程

2.1 方案设计

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

结构简图如下:

图2.1 数码管显示方案

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

结构简图如下图所示:

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

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

方案三 前端信号处理时,选用放大、信号转换等措施,尤其在显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容。

结构简图如下图所示:

图2.3 LCD显示的方案

目前单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入单片机,由单片机对测量信号进行处理并根据相应的数据关系译码显示出被测物体的重量。单片机控制适合于功能比较简单的控制系统,而且其具有成本低,功耗低,体积小算术运算功能强,技术成熟等优点。但其缺点是外围电路比较复杂,编程复杂。使用这种方案会给系统设计带来一定的难度。 方案四 采用现场可编程门阵列(FPGA)为控制核心

采用现场可编程门阵列(FPGA)为控制核心,利用EDA软件编程,下载烧制实现。系统集成于一片Xilinx公司的SpartanⅡ系列XC2S100E芯片上,体积大大减小、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规

模的集成电路。

采用FPGA测频测量精度高,测量频率范围大,而且编程灵活、调试方便,设计要求的精度较高,所以要求系统的稳定性要好,抗干扰能力要强。

从下图中可以看到系统的基本工作流程和各单元电路所用到的核心器件。其中控制器采用Xilinx公司可编程器件FPGA为核心,基于ISE软件平台,采用VHDL编程实现数据处理、LED和LCD驱动、时钟芯片的I2C通讯、键盘控制等模块。

结构简图如下图所示:

图2.4 电子称系统的组成结构图

FPGA的逻辑容量密度大,集成度高,可大大减少印刷电路板的空间,减低系统功耗,同时还可以提高设计的工艺性和产品的可靠性。

虽然以FPGA为核心的电子称系统很优化,但只有在大规模和超大规模集成电路中其高集成度才能更好得以体现。其主要在PC机接口卡的总线接口、程控交换机的信号处理与接口、雷达声纳系统的成像控制与数字处理、数控机床的测试系统等方面有广泛应用。鉴于本电子称的设计并不太复杂,单片机完全能实现所需功能,所以在具体设计时,采用了第三种设计方案。 2.2 器件选择

AT89C51单片机、专用仪表放大器INA126、V/F转换器LM331、4×4键盘

选择依据:根据以上设计方案,硬件部分采用51系列单片机AT89C51为控制核心部件,实现电子秤的基本控制功能。AT89C51是一款8位的内带4K程序存储器的微控制器,考虑到用软件实现电子秤系统的各项功能时,所需的软件量并不是很大,不需要太大的程序存储空间,因此在对AT89C51实际设计时不需要在片外再扩展程序存储器,这样不仅节省了硬件资源,也优化了电路的设计。系统的硬件部分不仅包括以单片机AT89C51为核心的最小系统部分,而且还包括数

据采集、人机接口界面、系统电源部分。

数据采集部分由压力传感器、信号放大处理和V/F转换部分组成。在具体选择传感器时,考虑到在称量物品时必要的精度、准确性要求,所称物品的重量误差必须要控制在一定的范围之内。另外由于秤台的自身重量、振动和冲击分量,以及还要避免物体超重时对传感器的损坏,所以在选择传感器时要保证有一定的承重裕量,所选的传感器量程应该比系统设计要求的要大。一般选择满量程时候的误差不能大于规定量。由于传感器的输出信号中含有一定的干扰噪声,所以必须要对传感器的输出信号进行滤波,在滤波电路的设计时利用普通小电容滤除高频干扰,利用大的电解电容滤除低频干扰。传感器输出的电信号比较微弱,一般为毫伏级,必须采用适当的电路进行信号放大处理,这样才能保证整个系统的精度和稳定性能。这时需要共模抑制比高,差模输入阻抗大,增益高,精度好,而且外部接口简单的专用仪表放大器INA126。在选择V/F转换器时根据系统精度的要求,选择了具有很强抗干扰能力V/F转换器LM331,虽然转换速度慢,但精度高,输入阻抗高,可自动调零,具有超量程信号,全部输出的TTL电平信号兼容。作为电子秤,系统对V/F转换的速度要求不高,而且LM331的转换精度足以满足系统的误差要求。

人机交互部分的键盘在系统中,可以输入数字和已经固定的控制命令等。在这次设计中我们采用了4×4键盘控制。显示用的LCD我们根据要求选用了字符点阵式液晶显示器LCD1602,可以一次满屏幕显示多个个中文字符或英文字符,满足电子秤在称物时的购物清单显示要求。 2.3系统电路设计 2.3.1 传感器

传感器的定义:能感受规定的被测量,并按照一定规律转换成可用输出信号的器件或装置。通常传感器由敏感元件和转换元件组成。其中敏感元件指传感器中能直接感受被测量的部分,转换部分指传感器中能将敏感元件输出量转换为适于传输和测量的电信号部分。现代科技的快速发展使人类社会进入了信息时代,在信息时代人们的社会活动将主要依靠对信息资源的开发和获取、传输和处理,而传感器处于自动检测与控制系统之首,是感知获取与检测信息的窗口;传感器处于研究对象与测控系统的接口位置,一切科学研究和生产过程要获取的信息,

都要通过它转换为易传输与处理的电信号。因此,传感器的地位与作用特别重要。

传感器的作用是人们为了从外界获取信息,必须借助于感觉器官。而单靠人们自身的感觉器官,在研究自然现象和规律以及生产活动中它们的功能就远远不够了。为适应这种情况,就需要传感器。因此可以说,传感器是人类五官的延长,又称之为电五官。 传感器早已渗透到诸如工业生产、宇宙开发、海洋探测、环境保护、资源调查、医学诊断、生物工程、甚至文物保护等等极其之泛的领域。可以毫不夸张地说,从茫茫的太空,到浩瀚的海洋,以至各种复杂的工程系统,几乎每一个现代化项目,都离不开各种各样的传感器。

传感器的静态特性是指对静态的输入信号,传感器的输出量与输入量之间所具有相互关系。因为这时输入量和输出量都和时间无关,所以它们之间的关系,即传感器的静态特性可用一个不含时间变量的代数方程,或以输入量作横坐标,把与其对应的输出量作纵坐标而画出的特性曲线来描述。表征传感器静态特性的主要参数有:线性度、灵敏度、迟滞、重复性、漂移等。

传感器动态特性是指传感器在输入变化时,它的输出的特性。在实际工作中,传感器的动态特性常用它对某些标准输入信号的响应来表示。这是因为传感器对标准输入信号的响应容易用实验方法求得,并且它对标准输入信号的响应与它对任意输入信号的响应之间存在一定的关系,往往知道了前者就能推定后者。最常用的标准输入信号有阶跃信号和正弦信号两种,所以传感器的动态特性也常用阶跃响应和频率响应来表示[3]。 方案一 压电传感器

压电传感器是一种典型的有源传感器,又称自发电式传感器。其工作原理是基于某些材料受力后在其相应的特定表面产生电荷的压电效应。

压电传感器体积小、重量轻、结构简单、工作可靠,适用于动态力学量的测量,不适合测频率太低的被测量,更不能测静态量。目前多用于加速度和动态力或压力的测量。压电器件的弱点:高内阻、小功率。功率小,输出的能量微弱,电缆的分布电容及噪声干扰影响输出特性,这对外接电路要求很高。 方案二 电容式传感器

电容式传感器是将被测非电量的变化转换为电容变化的一种传感器。它有结构简单、灵敏度高、动态响应好、可实现非接触测量、具有平均效应等优点。电

容传感器可用来检测压力、力、位移以及振动学非电参量。

电容传感器的基本工作原理可用最普通的平行极板电容器来说明。两块相互平行的金属极板,当不考虑其边缘效应(两个极板边缘处的电力线分布不均匀引起电容量的变化)时,其电容量为

??AC?rod (2.1)

式(2.1)中

d——两极板间的距离;

A——两平行极板相互覆盖的有效面积;

?r——介质的相对介电常数; ?o——真空中介电常数。

若被测量的变化使式中d、A、?r三个参量中任一个发生变化,都会引起电容量的变化,通过测量电路就可转换为电量输出[4]。

虽然电容式传感器有结构简单和良好动态特性等诸多优点,但也有不利因素:

(1)小功率、高阻抗。受几何尺寸限制,电容传感器的电容量都很小,一般仅几皮法至几十皮法。因C太小,故容抗XC=1/?C很大,为高阻抗元件,负载能力差;又因其视在功率P=uo?C ,C很小,则P也很小。故易受外界干扰,信号需经放大,并采取抗干扰措施。

(2)初始电容小,电缆电容、线路的杂散电路所构成的寄生电容影响很大。 方案三 电阻应变式传感器

电阻应变式传感器是一种利用电阻应变效应,将各种力学量转换为电信号的结构型传感器。电阻应变片式电阻应变式传感器的核心元件,其工作原理是基于材料的电阻应变效应,电阻应变片即可单独作为传感器使用,又能作为敏感元件结合弹性元件构成力学量传感器。

导体的电阻随着机械变形而发生变化的现象叫做电阻应变效应。电阻应变片把机械应变信号转换为△R/R后,由于应变量及相应电阻变化一般都很微小,难以直接精确测量,且不便处理。因此,要采用转换电路把应变片的△R/R变化转

2

换成电压或电流变化。其转换电路常用测量电桥。

直流电桥的特点是信号不会受各元件和导线的分布电感及电容的影响,抗干扰能力强,但因机械应变的输出信号小,要求用高增益和高稳定性的放大器放大。

下图为一直流供电的平衡电阻电桥,Ein接直流电源E:

图2.5 传感器结构原理图

当电桥输出端接无穷大负载电阻时,可视输出端为开路,此时直流电桥称为电压桥,即只有电压输出。

当忽略电源的内阻时,由分压原理有:

uo?uBD?uAB?uAD

?E(R1R4?)R1?R2R3?R4R1R3?R2R4E?= (2.2) (R1?R2)(R3?R4)当满足条件R1R3=R2R4时,即

R1R2?R4R3

(2.3)

uo=0,即电桥平衡。式(2.3)称平衡条件。

应变片测量电桥在测量前使电桥平衡,从而使测量时电桥输出电压只与应变片感受的应变所引起的电阻变化有关。

若差动工作,即R1=R-△R,R2=R+△R,R3=R-△R,R4=R+△R,按式(2.2),则

电桥输出为

?(R??R)2Euo??(R??R)?(R??R)??(R??R)?(R??R)??R??ER?(R??R)2??k?E (2.4)

应变片式传感器有如下特点:

(1)应用和测量范围广,应变片可制成各种机械量传感器。 (2)分辨力和灵敏度高,精度较高。

(3)结构轻小,对试件影响小, 对复杂环境适应性强,可在高温、高压、强磁场等特殊环境中使用,频率响应好。

(4)商品化,使用方便,便于实现远距离、自动化测量[5]。

通过以上对传感器的比较分析,最终选择了第三种方案。题目要求称重范围0~5Kg,满量程量误差不大于?0.005Kg,考虑到秤台自重、振动和冲击分量,还要避免超重损坏传感器,所以传感器量程必须大于额定称重5Kg。我们选择的是电阻应变片压力传感器,量程为5Kg,精度为0.01% ,满足本系统的精度要求。 2.3.2 前级放大器部分

经由传感器或敏感元件转换后输出的信号一般电平较低;经由电桥等电路变换后的信号亦难以直接用来显示、记录、控制或进行信号转换。为此,测量电路中常设有模拟放大环节。这一环节目前主要依靠由集成运算放大器的基本元件构成具有各种特性的放大器来完成。

放大器的输入信号一般是由传感器输出的。传感器的输出信号不仅电平低,内阻高,还常伴有较高的共模电压。因此,一般对放大器有如下一些要求: 1、输入阻抗应远大于信号源内阻。否则,放大器的负载效应会使所测电压造成偏差。

2、抗共模电压干扰能力强。

3、在预定的频带宽度内有稳定准确的增益、良好的线性,输入漂移和噪声应足够小以保证要求的信噪比。从而保证放大器输出性能稳定。

4、能附加一些适应特定要求的电路。如放大器增益的外接电阻调整、方便准确的量程切换、极性自动变换等。

我们考虑了以下几种方案:

方案一 利用普通低温漂运算放大器构成多级放大器。

普通低温漂运算放大器构成多级放大器会引入大量噪声。由于信号转换器需要很高的精度,所以几毫伏的干扰信号就会直接影响最后的测量精度。所以,此种方案不宜采用。

方案二 由高精度低漂移运算放大器构成差动放大器。

差动放大器具有高输入阻抗,增益高的特点,可以利用普通运放(如OP07)做成一个差动放大器,如下图所示:

图2.6 利用普通运放构成的放大器

电阻R1、R2和电容C1、C2、C3、C4用于滤除前级的噪声,C1、C2为普通小电容,可以滤除高频干扰,C3、C4为大的电解电容,主要用于滤除低频噪声。

优点:输入级加入射随放大器,增大了输入阻抗,中间级为差动放大电路,滑动变阻器R6可以调节输出零点,最后一级可以用于微调放大倍数,使输出满足满量程要求。输出级为反向放大器,所以输出电阻不是很大,比较符合应用要求。

缺点:此电路要求R3、R4相等,误差将会影响输出精度,难度较大。实际测量,每一级运放都会引入较大噪声,对精度影响较大[12]。 方案三 采用专用仪表放大器,如:AD620,INA126等。

此类芯片内部采用差动输入,共模抑制比高,差模输入阻抗大,增益高,精度也非常好,且外部接口简单。

以 INA126为例,接口如下图所示:

10

图2.7 INA126仪表放大结构图

放大器增益 ,通过改变RG的大小来改变放大器的增益。INA126 具有体积小、功耗低、精度高、噪声低和输入偏置电流低的特点。其最大输入偏置电流为20nA,这一参数反映了它的高输入阻抗。INA126在外接电阻RG时,可实现1~1000范围内的任意增益;工作电源范围为±2.3~±18V;最大电源电流为1.3mA;最大输入失调电压为125?V;频带宽度为120kHz(在G=100时)。

基于以上分析,我决定采用制作方便而且精度很好的专用仪表放大器INA126。 2.3.3 信号转换 方案一 采用A/D转换 A/D转换原理: 1、逐次逼近法

逐次逼近式A/D是比较常见的一种A/D转换电路,转换的时间为微秒级。 采用逐次逼近法的A/D转换器是由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成。基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码进行试探。逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,

11

经D/A转换后生成的模拟量送入比较器,称为 Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo<Vi,该位1被保留,否则被清除。然后再置逐次逼近寄存器次高位为1,将寄存器中新的数字量送D/A转换器,输出的 Vo再与Vi比较,若Vo<Vi,该位1被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。逐次逼近的操作过程是在一个控制电路的控制下进行的。

2、双积分法

采用双积分法的A/D转换器由电子开关、积分器、比较器和控制逻辑等部件组成。基本原理是将输入电压变换成与其平均值成正比的时间间隔,再把此时间间隔转换成数字量,属于间接转换。双积分法A/D转换的过程是:先将开关接通待转换的模拟量Vi,Vi采样输入到积分器,积分器从零开始进行固定时间T的正向积分,时间T到后,开关再接通与Vi极性相反的基准电压VREF,将VREF输入到积分器,进行反向积分,直到输出为0V时停止积分。Vi越大,积分器输出电压越大,反向积分时间也越长。计数器在反向积分时间内所计的数值,就是输入模拟电压Vi所对应的数字量,实现了A/D转换。

A/D转换器选用的原则:

1、A/D 转换器的位数。A/D 转换器决定分辨率的高低。在系统中,A/D 转换器的分辨率应比系统允许引用误差高一倍以上。

2、A/D 转换器的转换速率。不同类型的A/D 转换器的转换速率大不相同。积分型的转换速率低,转换时间从几豪秒到几十毫秒,只能构成低速A/D 转换器,一般用于压力、温度及流量等缓慢变化的参数测试。逐次逼近型属于中速A/D 转换器,转换时间为纳秒级,用于个通道过程控制和声频数字转换系统。

3、是否加采样/保持器。

4、A/D 转换器的有关量程引脚。有的A/D 转换器提供两个输入引脚,不同量程范围内的模拟量可从不同引脚输入。

5、A/D 转换器的启动转换和转换结束。一般A/D 转换器可由外部控制信号启动转换,这一启动信号可由CPU提供。转换结束后A/D 转换器内部转换结束信号触发器置位,并输出转换结束标志电平。通知微处理器读取转换结果。

6、A/D 转换器的晶闸管现象。其现象是在正常使用时,A/D 转换器芯片电

12

流骤增,时间一长就会烧坏芯片。为防止这种现象,可采取如下措施:

(1)加强抗干扰措施,尽量避免较大的干扰电流进入电路;

(2)加强电源稳压滤波措施, 在A/D 转换器电源入口处加退耦滤波电路,为防止窄脉冲波窜入在电解电容上再接一高频滤波电容;

(3)在A/D 转换器的电源端接一限流电阻,可在出现晶闸管现象时,有效地把电流限定在允许范围内,以防止烧坏器件。

选择A/D 转换器除考虑上述要点外,为防止对A/D 转换器的技术指标的影响,还要注意以下几个问题:

(1)工作电源电压是否稳定; (2)外接时钟信号的频率是否合适; (3)工作环境温度是否符合器件要求; (4)与其它器件是否匹配; (5)外接是否有强的电磁干扰; (6)印刷线路板布线是否合理。

由上面对传感器量程和精度的分析可知:A/D转换器误差应在3g以下。 12位A/D精度:10Kg/4096=2.44g; 14位A/D精度:10Kg/16384=0.61g;

考虑到其他部分所带来的干扰,12位A/D转换器无法满足系统精度要求。所以我们需要选择14位或者精度更高的A/D转换器[17]。 方案二 采用V/F转换

V-F控制的原理是产生一个震荡频率的电路叫做压控震荡器,是一个压敏电容,当受到一个变化的电压时候它的容量会变化,变化的电容引起震荡频率的变化,产生变频。

列如LM331

LM331是性能价格比较高的集成芯片,可用作精密频率电压转换器、A/D转换器、线性频率调制解调、长时间积分器及其他相关器件。LM331采用了新的温度补偿能隙基准电路,在整个工作温度范围内和低到4.0V电源电压下都有极高的精度。LM331的动态范围宽,可达100dB;线性度好,最大非线性失真小于0.01%,工作频率低到0.1Hz时尚有较好的线性;变换精度高,数字分辨率可达

13

12位;外接电路简单,只需接入几个外部元件就可方便构成V/F或F/V等变换电路,并且容易保证转换精度。

LM331的内部电路组成如图所示。由输入比较器、定时比较器、R-S触发器、输出驱动管、复零晶体管、能隙基准电路、精密电流源电路、电流开关、输出保护管等部分组成。输出驱动管采用集电极开路形式,因而可以通过选择逻辑电流和外接电阻,灵活改变输出脉冲的逻辑电平,以适配TTL、DTL和CMOS等不同的逻辑电路。LM331可采用双电源或单电源供电,可工作在4.0~40V之间,输出可高达40V,而且可以防止Vcc短路[18]。

当前,12位以上的A/D转换器的价格仍较昂贵,用V/F变换器来代替A/D转换器,在要求速度不太高的场合是一种较好的选择。。从传感器来的毫伏级的电压信号经低温漂运算放大器INA126放大到0~10V后加到V/F变换器LM331的输入端,从频率输出端f0输出的频率信号加到单片机的输入端T1上。根据分辨率的要求利用软件处理,最后得到A/D转换的结果。所以我决定采用LM331芯片V/F转换作为信号转换的方案。 2.3.4 控制单片机的选型

选择单片机型号的出发点有以下几个方面: 1、市场货源

系统设计者只能在市场上能够提供的单片机中选择,特别是作为产品大 批量生产的应用系统,所选的单片机型号必须有稳定、充足的货源。

2、单片机性能

应根据系统的功能要求和各种单片机的性能,选择最容易实现系统技术指标的型号,而且能达到较高的性能价格比。单片机性能包括片内硬件资源、运行速度、可靠性、指令系统功能、体积和封装形式等方面。影响性能价格比的因素除单片机的性能价格外,还包括硬件和软件设计的容易程度、相应的工作量大小,以及开发工具的性能价格比。

3、研制周期

在研制任务重、时间紧的情况下,还要考虑所选的单片机型号是否熟悉,是否能马上着手进行系统的设计。与研制周期有关的另一个重要因素是开发工具,性能优良的开发工具能加快系统地研制进程。

14

在众多的51系列单片机中,要算 ATMEL 公司的AT89C51、AT89S51更实用,因他不但和8051指令、管脚完全兼容,而且其片内的4K程序存储器是FLASH工艺的,这种工艺的存储器用户可以用电的方式瞬间擦除、改写,一般专为 ATMEL AT89xx 做的编程器均带有这些功能。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。再着,AT89C51、AT89S51目前的售价比8031还低,市场供应也很充足。

8051系列单片机的内部结构是各种逻辑单元及其之间的互连构成的。其主要由中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、串行接口、并行I/0接口、定时/计数器、中断系统等几大单元,以及数据总线、地址总线和控制总线组成。

AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案[7]。

AT89C51单片机特点能与MCS-51 兼容,有 4K字节可编程闪烁存储

器,寿命能够达到1000写/擦循环,数据可以保留时间长达10年,全静态工作:0Hz-24MHz,三级程序存储器锁定,128×8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。所以AT89C51符合本次设计的主控芯片。 2.3.5 显示模块 方案一 LED显示

LED就是light emitting diode ,发光二极管的英文缩写,简称LED。它是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动

15

画、行情、视频、录像信号等各种信息的显示屏幕。

LED显示器结构:

基本的半导体数码管是由七个条状发光二极管芯片排列而成的。可实现0~9的显示。其具体结构有“反射罩式”、“条形七段式”及“单片集成式多位数字式”等

LED显示器与显示方式:

LED显示块是由发光二极管显示字段的显示器件。通常使用的是七段LED。这种显示块有共阴极与共阳极两种。共阴极LED显示块的发光二极管阴极共地。当某个发光二极管的阳极为高电平时,发光二极管点亮;共阳极LED显示块的发光二极管阳极并接。

在设计中使用LED显示块构成N位LED显示器。N位LED显示器有N根位选线和8*N根段选线。根据显示方式不同,位选线与段选线的连接方法不同。段选线控制字符选择,位选线控制显示位的亮、暗。

LED显示器有静态显示与动态显示两种方式。我们使用的为动态显示方式。在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由响应的I/O口线控制。其中两片74LS244分别用于段信号和位信号的驱动,74LS273用于段信号的锁存,其锁存地址为7FFFH。 方案二 LCD显示

LCD 液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。比LED要好的多,但是价钱较其贵。

16

图2.8 LED数码管显示方式

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电

子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。

在单片机系统中应用晶液显示器作为输出器件有以下几个优点: (1)显示质量高:由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

(2)数字式接口:液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

(3)体积小、重量轻:液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

(4)功耗低:相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

17

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 液晶显示器各种图形的显示原理

(1)线段的显示:点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,??(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

(2)字符的显示:用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

(3)汉字的显示:汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5??右边为2、4、6??根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节??直到32B显示完就可以LCD上得到一个完整汉字。

1602字符型LCD简介

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,

18

目前常用16*1,16*2,20*2和40*2行等的模块。我们以1602LCD字符型液晶显示器为例。1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,1602LCD主要技术参数:显示容量:16×2个字符,芯片工作电压:4.5—5.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.95×4.35(W×H)mm[19]。

由于本次设计的显示模块需要显示多位数字,如果采用数码管显示的话将会占用多个单片机I/O口,使得电路变得更为复杂。所以选用液晶显示,1602LCD符合基本条件,能够采用。 2.3.6 键盘输入

键盘输入是人机交互界面中重要的组成部分,它是系统接受用户指令的直接途径。操作者通过键盘向系统发送各种指令或置入必要的数据信息。因此键盘模块设计的好坏,直接关系到系统的可靠性和稳定性。键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。键盘由许多键组成,每一个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。单片机接收到按键的触点信号后作相应的功能处理。因此,相对于单片机系统来说键盘接口信号是输入信号。 方案一 专用芯片式设计

专用键盘处理芯片一般功能比较完善,芯片本身能完成对按键的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示接口功能。列如Intel8279是一种为8位微处理器设计的比较成熟的通用键盘/显示器接口芯片,其功能有:接收来自键盘的输入数据,并作预处理;数据显示的管理和数据显示器的控制。专用键盘处理芯片的优点很明显,可靠性高,口简单,使用方便,适合处理按键较多的情况。但在很多应用场合,考虑成本因素,可能并不是最佳选择。 方案二 矩阵式键盘设计

矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,按键设置在 行列的交点上。例如,用2×2的行列结构可构成4个键的键盘,4×4行列结构可构成16个键的键盘。因此,在按键数量较多时,可以节省I/O口线。相对于专用芯片式可以节省成本,且更为灵活。缺点就是需要用软件处理消抖、重键等问题。

19

图2.9 4×4矩阵键盘

考虑到成本方面,我决定采用矩阵键盘。 2.3.7 电源模块

系统需要多种电源,单片机需要+5V电源,运放需要±5V,V/F转换器需要±12V,传感器需要+5V以上的线性电源。

稳压电源的设计,是根据稳压电源的输出电压Uo、输出电流Io、输出纹波电压ΔUop-p等性能指标要求,正确地确定出变压器、集成稳压器、整流二极管和滤波电路中所用元器件的性能参数,从而合理的选择这些器件。

稳压电源的技术指标分为两种:一种是特性指标,包括允许的输入电压、输出电压、输出电流及输出电压调节范围等;另一种是质量指标,用来衡量输出直流电压的稳定程度,包括稳压系数、输出电阻、温度系数及纹波电压等[16]。

此次设计的稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成,如图

图2.10 稳压电源组成图 方案一 采用LM317、LM337共地可调式三端稳压器电源

20

LM317可调式三端稳压器电源能够连续输出可调的直流电压,不过它只能允许可调的正电压,稳压器内部含有过流,过热保护电路;由一个电阻(R)和一个可变电位器(RP)组成电压输出调节电路,输出电压为:Vo=1.25(1+RP/R)。LM337输出为负的可调电压,采用两个独立的变压器分别和LM317及LM337组装,操作比较简单。电路图如下所示:

图2.11 LM317与LM337组装电路 方案二: 采用7805,7905,7812和7912组成稳压电路

7805,7905固定式三端稳压器可输出±5V,固定式三端可调稳压器7812和7812组装电路可对称输出±12v,其电路图如图所示.

图2.12 LM317与LM337组装电路

21

方案一的电路由三端可调式稳压器LM317和LM337组装而成,可输出范围为±1.25 -±12连续可调,通过对滑动变阻器的调整可输出+5V,±12,(3-9)V连续可调.其电路组装比较简单,但输出所需电压时需要调整可变电阻,不能直接输出,因此使用时不方便.方案二由三端可调式稳压器和三端固定式稳压器共同组成,所用器件比方案一多,但电路组装简单,不会增添麻烦,在方案二中可直接得到+5v和±12的输出电压.使用时比较方便,综上所述,方案二比方案一合理,因此选择方案二。 2.4 软件设计

电子称软件设计均采用模块化设计,整个程序包括主程序、定时中断程序、INTO中断程序按键程序、数据处理子程序(双字节乘法、二一十进制转换程序及逆转换程序)、LCD十六位液晶静态显示子程序等模块。所有程序均采用C汇编语言编写。电子计价秤的软件设计思路说明如下:主程序的作用为程序初始化,计算单价木单重(单价和单重分别在定时中断程序和INT0外部中断程序中获得),并时时显示十进制的单重,单价,总价。设定T0为计数工作方式,T1为定时工作方式。其中R0为标志位寄存器当为OOH时为正常显示方式。当为01H时为累计显示方式,在T1定时中断程序中。一秒钟采样物料重量(已转成脉冲频率),并赋值重量计算RAM区和显示RAM区。在INTO外部中断程序中,采样单价并赋值单价计算。

2.4.1主程序流程图

主程序流程图给出了系统工作的基本过程,描述了信号的基本流向,起到一个向导的作用。

22

图2.13主程序流程图

2.4.2 子程序设计

系统子程序主要包括A/D转换启动及数据读取程序设计、键盘输入控制程序设计及显示程序设计等。

a V/F转换启动及数据读取程序设计

V/F转换子程序主要是指在系统开始运行时,把称重传感器传递过来的模拟

23

信号转换成数字信号并传递到单片机所涉及到的程序设计。设计流程图如下图所示。

图2.14 V/F信号读取及处理程序 b显示子程序设计

显示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之一。设计流程图如图所示。

24

图2.15 显示子程序流程图

c键盘扫描子程序的设计

键盘电路设计成4X4矩阵式,在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。设计流程

25

图如图所示。

图2.16 键盘扫描子程序流程图

三、结果分析

(1)可以用LED液晶显示器显示被称物体的质量 (2)可以按需要设定该秤所称的上限。 (3)当物体超重时,能自动报警

四、设计总结

4.1 存在的问题

1、电子电路的设计中对各种影响因素的考虑不够完全,比如在对过电压情况的处理中未作防范措施。

2、系统设计不够优化,有待改善。比如系统的超量程信号直接由单片机送入报警电路,没有设计保护电路再入单片机处理后送入报警电路。

3、没有扩展更多电路,如日历时钟电路、通讯接口电路等。日历时钟电路可以显示购货日期,通讯接口电路可以与上位机(PC机)进行通讯,从而将大量的商品数据存于上位机,然后通过串口或并口通讯与电子称相连,达到远距离控制的目的。

4、对各种实用芯片价格了解不够,选择上任有欠缺,如所选的称重传感器

26

价格较贵。

5、动手能力不强,电子秤的精确度有待提高。 4.2个人体会

在整个设计过程中,我们对所学的知识有了一个系统的认识和理解,尤其是对本课题所用到的单片机及其相关知识有了进一步的掌握,对利用单片机进行控制系统的设计与开发又及对系统的分析和问题的解决有了切身的认识和体会,正所谓学以致用,在此实践过程中增长了知识、丰富了经验,提高了解决问题的能力。系统的分析与设计过程是对学习的总结过程,更是进一步学习和探索的过程。控制系统的开发设计是一项复杂的系统工程,必须严格按照系统分析、系统设计、系统实施、系统运行与调试的过程来进行。系统的分析和设计是项很辛苦的工作,同时也是一个充满乐趣的过程,在设计过程中,要边学习,边实践,遇到新问题就不断探索和努力即可使问题得到解决。理论和实际必须紧密结合,在设计中要针对不同的系统根据理论给与不同的方案,综合考虑各方面的因素和需要,选择出最佳的方案与结论。要大量广泛的收集资料,然后认真地研究其思路,和指导老师保持联系,和同学共同研究遇到

参考文献

[1] 宋文续,扬帆.传感器与检测技术.北京:高等教育出版社,2010.4 [2] 常健生.检测与转换技术.北京:机械工业出版社,2009.6

[3] 凌志浩.智能仪表原理与设计技术.上海:华东理工大学出版社,2012.8 [4] 于永权.89系列(MCS-51兼容)Flash单片机原理及应用.北京:电子工业出版社,2013

[5] 李朝清.单片机原理及接口技术.北京:北京航空航天大学出版社,2012.8 [6] 丁元杰.单片微机原理及应用.北京:机械工业出版社,2013.8 [7] 周航慈.单片机应用程序设计技术.北京:北京航空航天大学出版社,2012.11

[8] 孙涵芳.单片机原理及应用(修订版).北京:北京航空航天大学出版社,2009年

[9] 何立民. 单片机应用技术选编(1)-(8).北京:北京航空航天大学出版社,2012

27

[10] 于海生.微型计算机控制技术.北京:清华大学出版社,2009年

28

附录

#include #include #include\#include\#define uint unsigned int #define uchar unsigned char

sbit adrd=P3^7; //IO口定义 sbit adwr=P3^6; sbit adcs=P0^7; sbit diola=P2^5; sbit beep=P2^3; sbit setkey=P3^7;

uchar key_num,num; uchar RMB_s,RMB_g,RMB; long date,ren,dat; int add_i2c,bianma;

uchar code table[]=%uchar table1[4];

/********************************************************************

蜂鸣器驱动

********************************************************************/ void BEEP() { uchar i;

for(i=0;i<180;i++)

29

{

delayB(5); beep=!beep; } beep=1; }

/********************************************************************

ADC0804 起始信号

********************************************************************/ void ad_start() { adcs=0; _nop_(); adwr=0; _nop_(); adwr=1; _nop_(); adcs=1; }

/********************************************************************

ADC0804 读操作

********************************************************************/ uchar ad_read() {

uchar temp; adcs=0; _nop_();

30

adrd=0; _nop_(); temp=P1; _nop_(); adrd=1; _nop_(); adcs=1;

return(temp);

}/*******************************************************************

矩阵键盘扫描

********************************************************************/ uchar getkey() {

static unsigned char flag = 0; unsigned char key; P3=0x0f; if(P3!=0x0f) {

if(flag==0) {

flag=1; key=P3|0xf0; P3=key; switch(P3) {

case 0xee:return 0; break; case 0xde:return 1; break;

//松手检测

case 0xbe:return 2; break;

31

{ }

case 0x7e:return 3; break;

case 0xed:return 4; break; case 0xdd:return 5; break; case 0xbd:return 6; break; case 0x7d:return 7; break;

case 0xeb:return 8; break; case 0xdb:return 9; break; case 0xbb:return 10;break; case 0x7b:return 11;break;

} else

}

}

case 0xe7:return 12;break; case 0xd7:return 13;break; case 0xb7:return 14;break; case 0x77:return 15;break;

}

flag=0;

return 0xff;

/********************************************************************

控制按键设置

********************************************************************/ void keyscan()

32

{

static uchar i=0,flag = 0,flag1=0,flag2=0; static bit flag_frist = 1; static uchar p; uchar pri; num = getkey(); if(num != 0xff) {

if((num>=0)&&(num<10)&&(flag==0)) {

//

if(flag1==0) {

flag1=1; if(i==0) {

Lcd_dis_str(12,1,\

} } else {

}

display(0x8c+i,table[num]); table1[i]=num; i++; if(i==4) {

i=0;

Lcd_dis_str(4,2,\

33

if(flag_frist)

{

RMB_s = num; flag_frist = 0;

display(0xc4,table[RMB_s]);

}

} }

else {

RMB_g = num; flag_frist = 1; flag = 0; flag1=0;

RMB=RMB_s*10+RMB_g;

display(0xc5,table[RMB_g]); }

//////////////////////////////////////////

if(num==10) {

if(flag2==0) { } else {

flag2=1; flag1=1;

Lcd_dis_str(12,1,\

34

}

}

flag2=0; flag1=0;

Lcd_dis_str(12,1,\

/////////////////////////////////////////////

if(num==15) { }

flag = 1;

Lcd_dis_str(4,2,\

////////////////////////////////////////////////

if(num==12) { }

RMB=0;

Lcd_dis_str(12,1,\Lcd_dis_str(4,2,\Lcd_dis_str(11,2,\

/////////////////////////////////////////////////////

if(num==11) {

write_24c02(add_i2c,RMB); Lcd_dis_str(4,2,\delay1(600);

p=read_24c02(add_i2c);

display(0xc4,table[p/10]); }

display(0xc5,table[p]);

35

}

///////////////////////////////////////////////////// if(num==14) { }

////////////////////////////////////////////////////// if((num>=0)&&(num<10)&&(flag==1))//改变编码价格输入键 }

{ }

if(flag_frist) { } else {

RMB_g = num; flag_frist = 1; flag = 0;

RMB=RMB_s*10+RMB_g; RMB_s = num; flag_frist = 0;

display(0xc4,table[RMB_s]);

pri=read_24c02(add_i2c); RMB=pri;

display(0xc4,table[pri/10]); display(0xc5,table[pri]);

display(0xc5,table[RMB_g]); }

36

void datdeal() //I2C地址处理函数 { }

/********************************************************************

显示函数

bianma=table1[0]*1000+table1[1]*100+table1[2]*10+table1[3]; add_i2c=bianma+1;

********************************************************************/ void Lcd1602_dis() {

date=ad_read();

date=date*1000/255;

ren=date*RMB; //重量

//总额

display(0xcc,table[ren00/100]); Lcd_dis_char(13,2,'.');

display(0xce,table[ren000/10]); display(0xcf,table[ren]);

//超重报警

Lcd_dis_char(6,1,'.');

display(0x87,table[date0/10]); display(0x88,table[date]); display(0xcb,table[ren/1000]) ;

display(0x85,table[date/100]) ;

if(date>=500) }

void dis_init()

BEEP();

37

{

lcd_init();

Lcd_dis_str(5,1,\Lcd_dis_str(2,2,\delay1(500);

Lcd_clean(); }

/********************************************************************

主函数

delay(1);

Lcd_dis_str(0,1,\Lcd_dis_str(0,2,\Lcd_dis_str(7,2,\Lcd_dis_str(9,1,\Lcd_dis_str(12,1,\Lcd_dis_str(4,2,\

********************************************************************/ void main() { }

dis_init(); while(1) { }

ad_start() ; delay1(100); Lcd1602_dis(); keyscan(); datdeal();

38

39

本文来源:https://www.bwwdw.com/article/96b6.html

Top