1、 31 / 31数字电子秤摘要本课程设计制作的电子称以89c52单片机为控制器,利用电阻应变式称重传感器的全桥式称重原理,及通过受力改变内部应变片的阻值使,电路的输出电压与传感器所受压力成线性关系,建立相应的数学模型。设计思路为将传感器所测得的电压值进行模数转换,并将此转换数值与具体重量相对应,再将最终数值通过1602液晶屏显示。由于此称重传感器在受压时形变量小,使输出电压信号十分微弱,于是本设计采用运放连接成差分放大电路将其微弱的信号进行放大处理,再通过AD0809将此模拟量转化为数字量,输送给单片机,由单片机来控制其重量的显示。关键词:89c52,全桥式称重传感器,AD0809。The D
2、igital Electronic ScaleAbstract:The design of digital electronic scale uses the chip 89c52 as its monitor, and sets up the mathematical model that bases the principles of Full Bridge system weighing sensor, whose characteristic is the output voltage change is linearity with the pressure on the foil
3、gage .The design thought is making the analog output of voltage into digital quantity ,then make it match with the weight specific ,finally display the data through the 1602LCD .As the change of the resistance value on foil gage is very small so as the original output voltage ,so uses the operationa
4、l amplifier to amplify the signal and then input to the AD0809 chip to transform it into digital quantity , which finally inputted into 89c52 microcontroller ,and the 89c52 microcontrollers task is manipulating the date and making the LCD display the number.Key words: 89c52 microprocessor , semi-bri
5、dge system weighing sensor, AD0809 chip.目 录1 系统设计31.1 设计要求31.2 总体设计方案31.2.1 设计思路31.2.2 方案论证与比较31.2.3 模块组成52 硬件电路设计62.1 模拟信号处理部分62.1.1 信号采集部分62.1.2 信号的放大处理72.2 模数转换102.3 数字信号的处理部分112.3.1 单片机控制LCD显示123 软件设计144系统测试154.1 测试使用的仪器及工具154.2 指标测试及测试结果154.3 结果分析155结论16参考文献17附录1元器件清单:18附录二 电路原理图及印制板图191信号放大部分电
6、路原理图及PCB图192信号处理部分电路原理图及PCB图21附录三 程序清单231 系统设计1.1 设计要求设计制作一个电子称的电路,称重范围分为三档,0-1.999kg、0-19.99kg、0-199.9kg。用三位半数字表头显示称重结果。具有量程自动转换功能。1.2 总体设计方案1.2.1 设计思路应变式称重传感器是将电阻的变化转化为电压变化,但电阻因受力变化很小,使传感器输出的信号较小,需要先进行放大处理,并且输出的信号是电压量,为模拟信号,而单片机能处理的信号是数字信号,因此需先将信号进行模数转换再输入单片机中进行处理并控制1602LCD显示其重量。1.2.2 方案论证与比较(一)控制
7、部分的方案论证与选择方案一:采用89C52作为控制核心。51单片机具有主频12M,三十二个I/O引脚,8K flash程序存储空间,256 byte RAM , 三个定时、计数器,五个中断源,且价格低廉,C语言程序编写容易,控制方便。方案二:采用FPGA(现场可编程门阵列)作为系统的控制器。FPGA可以实现各种复杂的逻辑功能,规模大,密度高。由于其集成度高,使其成本偏高,同时其芯片引脚较多,实物硬件电路板布线复杂,加重了电路设计和实际焊接的工作。方案三:采用ARM7芯片LPC2148,具有512K flash程序存储空间、主频达48M、三个定时器、四个外部中断、内部RTC、采用三级流水线模式运
8、行程序,拥有I2C、SPI、UART等通信接口。同时其芯片引脚也较多,不便控制。且价格较贵。方案选择:本系统可以采取89C52 、FPGA、ARM三种控制器。ARM比89C51单片机具有更强大的控制功能、更快的运行速度,可更快捷地进行高精度的测量,但本设计运行速度要求不高,89C52就能满足所需要的功能。因此综合考虑选择89C52作为控制部件。(二)模数转换及显示部分的方案论证与选择方案一 :将放大后的信号输入A/D转换芯片TCL2573进行A/D转换,由于此芯片可直接用于数字显示,故转换后的数字量直接用数码显示器进行显示。此方案的优点是外部电路非常简单,能实现较高的精度。缺点是无法对A/D转
9、换进行控制。其方案图如图1.1。基于TCL2573的AD转换数码管显示图1.1 方案一方框图方案二:将放大后的信号输入到AD0809进行模数转换,再将得到的数字信号送至单片机进行处理并送入液晶显示。此方案的优点是可控制性好,可通过软件的编程实现换挡,电路简单,液晶的硬件电路也比数码管的简单,且技术领先于数码管,可显示的内容也比数码管多。采用单片机对数据稍加处理,能通过软件在一定程度上弥补与调试硬件所无法避免的数据抖动,使最终所测得的数据更可靠、参考性更强,而且价格也不贵。其方案图如图1.2。基于AD0809的模数转换单片机液晶屏显示换挡控制图1.2 方案二方框图1.2.3 模块组成本设计模块主
10、要分为三个部分,信号采集放大部分与模数转换和信号的处理显示部分。其中信号采集部分主要是运算放大器对信号的放大,数据处理及显示部分主要是用AD进行对模拟数据的转换及用液晶对数据的显示。其模块方框图如图1.3称重传感器信号采集放大模数转换单片机控制液晶屏显示图1.3 模块框图2 硬件电路设计2.1 模拟信号处理部分2.1.1 信号采集部分 电阻应变式传感器是把电阻应变计粘贴在弹性敏感元件上,然后以适当的方式组成电桥的一种将力(重量)转换成电信号的传感器。电阻应变式称重传感器包括两个主要部分,一个是弹性敏感元件:利用它将被测的重量转化为弹性体的应变值;另一个是电阻应变计:它作为传感元件将弹性体的应变
11、同步的转换为电阻的变化。电阻应变片的电阻变化率大约在10e-6到10e-2数量级之间。这样小的电阻变化用一般测量电阻的仪表很难测出,必须用一定形式的测量电路将微小的电阻变化率转变成电压或电流的变化,才能用二次仪表显示出来,在电阻应变式称重传感器中,通过桥式电路将电阻的变化转换为电压的变化,电阻应变式称重传感器的原理框图如图2.1应变片测量电桥敏感元件载荷P 应变x 电阻变化 输出图2.1 电阻应变式称重传感器的原理框图因为单个称重传感器的量程是50KG,如果要达到设计要求,就要用四个称重传感器构成全桥测量,其连接后的电路等效图见图2.2图2.2 称重传感器全桥式连接上图中,B传感器红色引线接电
12、源正,D传感器红色引线接电源负,为此传感器提供工作电源。A传感器红色引线输出正信号,B传感器红色引线输出负信号。作为原始输出信号。2.1.2 信号的放大处理鉴于用示波器测得称重传感器输出电压信号非常小,为毫伏级,不便于处理,需加外部放大电路来获得足够的增益,综合考虑一些常用运放电路的特点,差动放大电路具有输入阻抗为无穷大,对小信号的放大影响小,因此,选择差动放大器进行前级放大,然后,再用两级放大提高放大倍数,以便进行量程切换。差动放大电路的连接电路图如图2.3 图2.3 前级差动放大根据理想运算放大虚短、虚断的特点,可推出此差动放大电路的放大倍数为:A=-R6/R4*(1+2R1/R3)图2.
13、4 后级放大前一部分的放大倍数A1=10,后一部分的放大倍数也为10。OUT1是作为20kg200kg量程的模拟信号输出,OUT2作为2kg20kg量程的模拟信号输出,OUT3作为0kg2kg量程的模拟信号输出。仿真图如2.5。图2.5 信号放大仿真图 2.2 模数转换模拟量要输入到单片机中进行处理,首先要进过模拟量到数字量的转换,单片机才能接收,处理。在此,采用AD0809。ADC0809 是8 位逐次逼近型A/D转换器。它由一个8路模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态
14、输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。ADC0809 要求输入模拟量的信号为单极性的,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。其引脚图2.6图2.6 AD0809引脚图其中IN0IN7为8 条模拟量输入通道 ALE 为地址锁存允许输入线,高电平有效。当ALE 线为高电平时,地址锁存译码器将A, B,C 三条地址线的地址信号进行锁存,将译码后被选中的通道的模拟量输入转换器进行转换。A,B 和C 为地址输入线,用于选通IN0IN7 上的一路模拟
15、量输入。通道选择表如下表所示: C B A 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 ST 为转换启动信号。当ST为上升沿时,所有内部寄存器清零;下跳沿时,开始进行A/D 转换;在转换期间,ST 应保持低电平。EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。 D7D0为数字量输出线。 CLK为时钟
16、输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(),VREF()为参考电压输入。鉴于AD0809的特点及工作原理,其所需的时钟信号可通过将从单片机的31脚输出的2MHz的信号经74ls290进行4分频来获取。由于ADC0809 内部带有输出锁存器,可以与AT89S51 单片机直接相连。此外,由于传感器部分只有三路信号的输出,因此只需将三路模拟信号进行转换,只需两根地址输入线来控制所需数量的通道的开启,在此选用A、B地址线分别与单片机引脚P10和P11相连,而C地址线始终接地电平,此时由通道选择表可知,只有IN0IN4会循环开启
17、。编程实现模数转换功能时应注意:初始化时使ST 和OE信号全为低电平,将要转换的通道的地址送到A,B,C端口上,在ST 端给出一个至少有100ns 宽的正脉冲信号。根据EOC 信号来判断是否转换完毕,当EOC变为高电平时,这时给OE 为高电平,转换的数据就输出给单片机了。其实际电路的连接,及程序的编写请见后文附录。 2.3 数字信号的处理部分将AD0809的DOD7引脚与单片机的片P3口相连,将由AD0809转换后的信号输入到单片机中,单片机接收到信号后,在内部程序的控制下,实现相应的功能。单片机与AD0809引脚之间的连接如2.7所示:图2.7 单片机与AD芯片引脚连接图由于ST引脚与ALE
18、引脚的控制信号在此是同步的,因而可以将其连接在一起,由一路信号控制。 2.3.1 单片机控制LCD显示1602可显示16*2的内容,即可以显示两行,每行16个字符。其指令代码的操作如下:基本操作时序:1 读状态:输入:RS=L,RW=H,E=H 输出:D0D7=状态字2 写指令:输入:RS=L,RW=L, D0D7=指令码,E=高脉冲 输出:无3 读数据:输入:RS=H,RW=H,E=H 输出:D0D7=数据4 写数据:输入:RS=H,RW=L, D0D7=数据,E=高脉冲 输出:无初始化过程:1 延时 15ms2 写指令 38H(不检测忙信号)3 延时5ms4写指令 38H(不检测忙信号)5
19、延时5ms6写指令 38H(不检测忙信号)7(以后每次写指令、读/写数据操作之前均需检测忙信号)8 写指令 38H;显示模式设置9 写指令 08H;显示关闭10 写指令 01H;显示清屏11 写指令 06H;显示光标移动设置12 写指令0CH;显示开及光标设置3 软件设计 基于调试的方便性和可靠性,程序采用模块化、结构化的程序设计方法,把总的编程过程逐步细分,分解成一个个功能子模块,每个功能模块相互独立,每个模块都能实现某个具体的功能。本设计按任务模块划分的程序主要有LCD初始化程序,主程序,A/D转换子程序、显示子程序。程序流程图如下:开始初始化测量AD0通道数据是否大于20kg 否 是采样
20、AD0通道数据50次采样AD1通道数据50次取平均值显示图3.1程序设计流程图4系统测试 4.1 测试使用的仪器及工具 标准电子秤 4.2 指标测试及测试结果采用电子秤模块测物体体重,所得数据结果如表4.1所示。表4.1 测试结果实际重量(kg)0.813.128.0033.2056.01测量重量(kg)00.803.208.0033057测量误差(kg)0.010.0800.201.01 4.3 结果分析基本达到所要求的指标,但测量的精度不是很高,测量值与实际值有一定的误差。误差分析:1.受传感器本身的影响,因此是利用应变片受力发生形变而将电阻的变化转化为电压输出,其形变量与所受力不可能完全
21、成线性关系,且其弹性形恢复慢,受压后可能无法恢复到原来状态,这就可能引入很大的误差,所以使用一段时间后必须调零。2受AD转换芯片的影响,8位的AD0809的分辨率有限,对于小的电压变化无法分辨出来,导致最终结果有一定的偏差。5结论本设计实现了用电阻应变式称重传感器测量物体重量的功能,能将所测物体的重量通过液晶屏明了的显示,并可实现自动转换量程的功能,比较理想的实现了设计指标的要求,除此之外,该模块还可以实现手动调零的功能。心得体会:通过设计该课程设计学到了很多东西,除了对软件、硬件的设计还包括对电子称的安装设计。因为量程达到200kg,所以电子称本身要结实,反反复复找了几次材料,最终总算是做出
22、个简易电子称。考虑到传感器本身的性能,在自动切换量程方面,大量程(0-200.0kg)的设计难度不算太大,小量程(0-2.000kg)最为困难,因为传感器本身就不是很灵敏,在受到很大压力时形变也很小,对于小的压力感应不出来。再说如果真把AD采样精确到0.001kg,则相应的AD芯片的转换的频率就要达到19位,尚且不说有无19位的AD,即使有也因直流放大后的信号也没那么稳定,才用高转换频率的AD也无多大的意义,所以采用了八位AD,且只利用其3路放大信号输出,这也是本设计精髓的地方。参考文献(1) 黄智伟全国大学生电子设计竞赛制作实训北京:北京航空航天大学出版社,2007(2) 黄智伟全国大学生电
23、子设计竞赛系统设计北京:北京航空航天大学出版社,2006(3) 黄智伟全国大学生电子设计竞赛电路设计北京:北京航空航天大学出版社,2006(4) 黄智伟等.基于multisim2001的电子电路计算机仿真设计与分析.北京:电子工业出版社,2004(5) 黄智伟.印制电路板(PCB)设计技术与实践. 北京:电子工业出版社,2009(6) 康华光. 电子技术基础.数字部分(第五版). 北京:高等教育出版社,2006(7) 康华光.电子技术基础.模拟部分(第五版).北京:高等教育出版社,2006(8) 黄智伟单片无线收发集成电路原理与应用北京:人民邮电出版社,2005(9) 杨宝清.实用电路手册.北
24、京:机械工业出版社.2002 (10) 集成电路查询网:(11) 电子电路查询网:附录1元器件清单: 附录二 电路原理图及印制板图1信号放大部分电路原理图及PCB图原理图图1.1 信号放大部分原理图PCB图图1.2 信号放大部分 底层PCB图图1.3信号放大部分 顶层PCB图2信号处理部分电路原理图及PCB图 原理图图1.4 信号处理部分原理图PCB图图1.5 信号处理部分 底层PCB图图1.6 信号处理部分 顶层PCB图附录三 程序清单/电子秤.c#include 1602.hsbit st=P12;sbit eoc=P13;sbit oe=P14;uchar mydat50,dat0=0;
25、uint dat1=0;void delayms(uint t)uint i=0,j=0;for(i=0;i110;i+)for(j=0;j=23)for(i=0;i50;i+)ad(2);mydati=dat0;dat1+=dat0;dat0=dat1/60;dat1=0;lcd_pos(0); /在液晶屏上显示位置lcd_wdat(0x30+dat0/100);/在液晶屏上显示数据lcd_pos(1); lcd_wdat(0x30+dat0/10%10);lcd_pos(2);lcd_wdat(0x30+dat0%10);lcd_pos(3);lcd_wdat(k);lcd_pos(4);
26、lcd_wdat(g);elsefor(i=0;i50;i+)ad(1);mydati=dat0;dat1+=dat0;dat0=dat1/54;dat1=0;lcd_pos(0);lcd_wdat(0x30+dat0/100);lcd_pos(1);lcd_wdat(0x30+dat0/10%10);lcd_pos(2);lcd_wdat(.);lcd_pos(3);lcd_wdat(0x30+dat0%10);lcd_pos(4);lcd_wdat(k);lcd_pos(5);lcd_wdat(g);delayms(200);/1602c#include 1602.hsbit LCD_RS
27、 = P37; sbit LCD_RW = P36;sbit LCD_EN = P15;void delay1(int ms) unsigned char y; while(ms-) for(y = 0; y250; y+) _nop_(); _nop_(); _nop_(); _nop_(); /*/* */*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */* */*/ bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result
28、= (bit)(P0&0x80); LCD_EN = 0; return(result); /*/* */*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */* */*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=
29、数据。 */* */*/void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */* LCD初始化设定 */* */*/void lcd_init() delay1(15); lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x38); delay1(5
30、); lcd_wcmd(0x0c); /显示开,关光标 delay1(5); lcd_wcmd(0x06); /移动光标 delay1(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay1(5);/*/* */* 设定显示位置 */* */*/void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80); /数据指针=80+地址变量/1602H#ifndef _1602_H#define _1602_H#include #include #define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();void delay1(int ms);bit lcd_busy();void lcd_wcmd(uchar cmd);void lcd_wdat(uchar dat);void lcd_init();void lcd_pos(uchar pos);#endif 31 / 31