数字电子秤实训报告.doc
数字电子秤实训报告数字电子秤实训报告数字电子秤实训报告一:实训目的:1、通过设计来更好地理解电阻应变式传感器的实际应用2、电路由测量电桥,差动放大电路,A/D转换电路,显示电路组成3、根据我们已学的知识,设计一数字电子秤,掌握电子秤的构造和工作原理,深化并巩固我们学过的知识,将理论与实践结合二:实训地点:理工实训楼409三:实训内容:制作数字电子秤的测量部分四:电子称原理图五:实训总结:这次作品由以下四部分组成:电阻应变传感器、信号放大系统、模数转换系统、显示器。在经过几天的努力,从开始的电路选择到买元器件,再到焊接、测试,终于顺利的完成了数字电子秤的制作。最开始的两天,我们对电路图的各个参数进行了解,仔细的计算将每个元器件的大小参数,为后来的买元器件打下基础,在买完元器件后,只经过节课,就焊接完成,焊接对我们三校生来说并不是什么难事,只是接下来的调试对我们来说不是一件简单的是,由于要求相同的电阻的阻值大小有些偏差,导致精确度不是很高,在老师的指导下和我们自己的研究下终于解决了这个问题,这次的实训将电子与传感器联系在一起,让我们回顾了上学期所学的知识,学习是一个循序渐进的过程,我们还有很多要学习也要全面掌握这些东西!XX年X月X日扩展阅读:数字电子秤实验报告温州大学瓯江学院WENZHOUUNIVERSITYOUJIANGCOLLEGE复杂电子系统设计课程实践报告书数字电子秤班级:姓名:姓名:姓名:指导老师:温州大学瓯江学院信息与电子工程分院2021年6月目录摘要.3一、设计方案论证.4二、理论分析及调试.62.1、压力传感器:.62.2、放大电路部分:.82.2.1运放电路.82.2.2计算公式.82.2.3运放差分放大电路特点.82.2.4放大电路的元件清单.92.2.5OP07管脚图:.92.2.6传感器的输出信号放大后的数据及放大倍数表.102.2.7调试过程中的心得:.102.2.8参考资料:.102.3、AD转换部分.112.3.1主要特性.112.3.2内部结构.122.3.3外部特性(引脚功能).122.3.4AD单独测试电路图.122.3.4AD单独测试调试程序:.132.3、液晶显示部分.142.4蜂鸣器部分.15三、测试方法、测试数据.163.1、重量与电压的对应关系.163.2、数据拟合示意图.163.3、拟合数据方程.17四、程序及分析.17五、结果与分析.27参考文献:.27附件:总电路图.摘要在生活中经常都需要测量物体的重量,于是就用到秤,但是随着社会的进步、科学的发展,我们对其要求操作方便、易于识别。随着计量技术和电子技术的发展传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。电子秤向提高精度和降低成本方向发展的趋势引起了对低成本、高性能模拟信号处理器件需求的增加。大多数电子秤是以1:3,000或1:10,000的分辨率输出最终的称重值,使用12bit14bit的模数转换器很容易满足要求。设计中主要考虑峰峰值(PP)噪声分辨率、ADC的动态范围、增益漂移和滤波。通过分析近年来电子衡器产品的发展情况及国内外市场的需求,电子衡器总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。一、设计方案论证在实验开始的最初,我组成员根据有限的知识对本课题实验进行了分析,最终有两个方案候选,方案电路图如下。方案一:放大部分两个方案运用一致,放大信号进入AD转换以后,AD将数字信号输给单片机,有程序控制将相应的单价在数码管上显示出来,本方案的缺点是1、IO口不够用需要扩展;2、数码管显示不能明白的表明是质量、单价还是总价。方案二:选用1602液晶显示屏,不仅可以显示数据还可以显示中英文,重要的是可以同步显示,相对方案一还不需要IO口扩展,所以最终选用方案二。部件方案讨论方案讨论一:人机对话部分我们选定独立键盘方案和矩阵键盘方案方案一:独立键盘独立键盘是人机对话部分常用的按键方式,其优点表现为硬件电路简单,整体单元风格大方简洁,所占的空间相对较少,最重要的是所要编写的程序代码少。其缺点在于实现的功能也就相对的简单。因而对于一个大的系统,并不适合独立键盘。方案二:矩阵键盘矩阵键盘作为另一种人机对话中按键的方式来讲,它的优点在于能实现的功能较为强大,适合大中系统。缺点在于矩阵键盘一般采用4*4矩阵类型,其不仅一次性就用掉了51单片机中的一个组合口,占的硬件资源比较大,重要的是不仅所要编写的程序代码很多,而且对于那些对编写程序不是很好的同学来说,很容易出错,而且不知道如何修改。由于此次课程设计中硬件资源有限,且为使整体硬件风格显得简单得体,最重要的是不是大系统,所以我们选择独立键盘进行对电子称中单价的进行修改。方案讨论二:显示部分我们选定液晶显示方案和LED七段显示方案方案一:液晶显示液晶显示是显示部分常用的显示方式,其优点表现为硬件电路简单,整体单元风格大方简洁,所占的空间相对较少,能实现的功能较为强大,适合各种系统。其缺点在于所要编写的程序代码多。方案二:LED七段显示方案LED七段显示方案是显示部分常用的显示方式,其优点表现为我们接触的多,程序什么的也写过,所要编写的程序代码少。其缺点在于硬件电路复杂,所占的空间相对较多,实现的功能也就相对简单,如果对于一个大的系统,那肯定不适合LED七段显示方案。由于此次课程设计中所要显示的东西多,而且由于很多参考书中都有类似的程序,易于借鉴参考,且为使整体硬件风格显得简单得体,我们选择液晶显示。二、理论分析及调试电路由压力传感器,放大电路,AD转换部分,单片机,按键控制乘法运算,液晶显示,蜂鸣器报警7部分组成,为了保证总电路能够正常工作分别对七个模块进行了调试,以下做一一介绍。2.1、压力传感器:本次设计使用的是电阻应变式压力传感器,它主要由弹性体、电阻应变片、电缆线等组成,内部路线采用惠更斯电桥,当弹性体承受载荷产生形变时,电阻应变片收到拉伸或压缩应变片变形后,她的阻值将发生变化,从而是电桥失去平衡,产生相应的差动信号,共后续电路测量和处理。电气参数:为了解已知重量的物体放在压力传感器上使其产生相应的电压变化的具体情况,特制作了水瓶砝码。而其输出的相应电压值如下:质量压力传感器输出电压00.28mV200g0.45mV400g0.66mV500g0.76mV600g0.86mV1kg1.26mV1.2kg1.47mV1.4kg1.67mV1.57kg1.84mV2kg2.27mV3.14kg3.44mV3.64kg3.94mV5.14kg5.45mV6.14kg6.45mV由于实验材料有限,实验数据重量在0-6.14KG之间。2.2、放大电路部分:2.2.1运放电路:2.2.2计算公式:OuR42R2uI1uI2(1)R3R1设定此运放放大倍数为500,并将各电阻值代入公式如下,可算出R1阻值为306,因为条件限制,没有306我用300的来替代。500=-10(1+15/R1)R1=3062.2.3运放差分放大电路特点:1)高输入阻抗。被提取的信号是不稳定的高内阻源的微弱信号,为了减少信号源内阻的影响,必须提高放大器输入阻抗。一般情况下,信号源的内阻为100k,则放大器的输入阻抗应大于1M。2)高共模抑制比CMRR。信号工频干扰以及所测量的参数以外的作用的干扰,一般为共模干扰,前置级须采用CMRR高的差动放大形式,能减少共模干扰向差模干扰转化。3)低噪声、低漂移。主要作用是对信号源的影响小,拾取信号的能力强,以及能够使输出稳定。选用OP07的原因:传感器在不加负荷时,桥路的电阻应平衡,也就是电桥初始平衡状态输出应为零。但实际上桥路各臂阻值不可能绝对相同,接触电阻及导线电阻也有差异,致使输出不为零。因此必须设置调零电路使初始状态达到平衡。而OP07的特点就是只有非常低的输入电压(最大为25uv),所以用OP07在很多应用场合不需要额外的调零措施。用OP07即可以省去调零这一实验步骤,为传感器输出数据成线性关系做贡献2.2.4放大电路的元件清单:元件名称元件编号元件型号电阻R1300电阻R27.5K电阻R31K电阻R410K运放A1OP07运放A2OP07运放A3OP07对传感器与运放电路的拟合:电路连接:将传感器信号输出端与运算放大电路的信号输入端相连,在这两个电路连接的时候,输出端与输入端可以随便连接,不用考虑方向。传感器的红色电线接10V电压,黑色电线接地。运算放大电路中的运放OP07的4脚接-10V,7脚接10V2.2.5OP07管脚图:1和8为偏置平衡(调零端),2为反向输入端,3为正向输入端,4接地,5空脚6为输出,7接电源+电路测试:我们组用塑料瓶代替砝码,在砝码数量不足时,用多个塑料瓶累加称重,可以代替砝码,让称量的重量提高。然后记录放大电路的输入电压和放大后的电压,进行计算,利用软件,根据称重物体的重量与放大信号的曲线设定软件程序中的系数。(实验中,称量的质量越大,放大电路的放大倍数越接近设计值)2.2.6传感器的输出信号放大后的数据及放大倍数表称重物体的重量(g)0202100500600100012021400157020213140364051406140输出信号(mv)0.280.450.660.760.861.261.471.671.842.273.443.945.456.45放大信号(v)0.090.1860.2770.31960.36060.54630.6420.7320.8131.0031.5331.7622.4432.903放大倍数321413419.7420.5419.3433.6436.7438.3441.8441.8445.6447.2448.3450.12.2.7调试过程中的心得:在实验开始阶段我们组直接焊接了三级放大电路,由于对电路和运放缺少了解使用的运放是单级放大类型的,导致实验出现了很大的问题。在老师的指导下,用LM324制作了一个一级放大电路,放大的目的达到了,可是接入后续的电路时由于输入阻抗太小,直接影响了放大电路的效果。在调整后,采取了二级放大电路。即先用LM324放大100倍,然后在放大的基础上用LM324再放大10倍。使放大结果的输入电压很明显,但是这样的二级放大电路放大的稳定度很差,在重量小于1KG的称量范围内几乎失调。最后在老师的指导下用了OP07的三级放大电路。这样的电路能达到高精度,低失真的效果,而且基本上可以认为是线性的。最后用软件拟合时基本上达到了设计时的效果。在这次的实验中,对运算放大器的认识加深了很多,对电路的布局焊接时的焊接线头等问题上得到了很大的提高。2.2.8参考资料:下面是op07参数资料的中文简明说明:产品型号:OP07CP通道数:1关断功能:No工作电压Max.(V):36工作电压Min.(V):6每通道IQ(典型值)(mA):5带宽GBW(典型值)(MHz):0.600转换速率(典型值)(V/us):0.300输入失调电压(25)(Max.)(mV):0.150失调漂移(典型值)(uV/):0.500输入偏置电流(Max.)(pA):7000共模抑制比(Min.)(dB):100噪声电压(典型值):9.800单电源供电:No满幅:No封装/温度():PDIP-8/070描述:精密,低噪声运放2.3、AD转换部分为使硬件部分顺利完整工作,特对各个部分进行单独的调试,以下是AD转换部分:由于实验条件限制本次实验选用ADC0809芯片,内部结构示意图及管脚参数如下:2.3.1主要特性1)8路输入通道,8位A/D转换器,即分辨率为8位。2)具有转换起停控制端。3)转换时间为100s(时钟为640kHz时),130s(时钟为500kHz时)4)单个+5V电源供电5)模拟输入电压范围0+5V,不需零点和满刻度校准。6)工作温度范围为-40+85摄氏度7)低功耗,约15mW。2.3.2内部结构ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图1322所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。2.3.3外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装,如图1323所示。下面说明各引脚功能。IN0IN7:8路模拟量输入端。2-12-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路ALE:地址锁存允许信号,输入,高电平有效。START:A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。REF(+)、REF(-):基准电压。Vcc:电源,单一+5V。GND:地。2.3.4AD单独测试电路图电路仿真及连接如图所示:由于此次使用AD是一路信号输入,八路信号输出,而AD0809基准电压为5V。5/256=0.195所以输入电压每增加0.195V输出的BCD码就加1,在该次调试中由LED的亮灭直观的现实。2.3.4AD单独测试调试程序:#includeunsignedchardispcount;sbitST=P30;sbitOE=P31;sbitEOC=P32;unsignedcharchannel=0xbc;/IN3unsignedchargetdata;unsignedinti;voidmain(void)P3=channel;while(1)ST=0;ST=1;ST=0;for(i=0;iwhile(EOC=0);OE=1;getdata=P0;OE=0;P1=P0;2.3、液晶显示部分液晶显示相对比较简单,利用单片机输入数据后即可显示唯有亮度需要调节,如图在三脚初加了滑动变阻器,旋动它是液晶显示在比较适合的亮度,最后的阻值的1.7k欧姆引脚1符号VSS功能说明接地23VDDV0接电源(+5V)液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(或EN)端为使能(enable)端,下降沿使能。低4位三态、双向数据总线0位(最低位)低4位三态、双向数据总线1位低4位三态、双向数据总线2位低4位三态、双向数据总线3位高4位三态、双向数据总线4位高4位三态、双向数据总线5位高4位三态、双向数据总线6位高4位三态、双向数据总线7位(最高位)(也是busyflag)背光电源正极背光电源负极45678910111213141516RSR/WEDB0DB1DB2DB3DB4DB5DB6DB7BLABLK2.4蜂鸣器部分蜂鸣器电路与仿真电路不同,因为单片机提供的电流不足以使得蜂鸣器鸣叫,所以需要加NPN三极管,电路如图原先不加NPN时进入蜂鸣器的电流为0.016mA,加了以后为16.96mA.三、测试方法、测试数据3.1、重量与电压的对应关系测试方法:给压力传感器通上需要的电压,连接上放大电路,在压力传感器上放上不同重量的砝码,用万用表测量,记录相应的数值称重物体的重量(g)输出信号(mv)放大信号(v)放大倍数00.280.093212021.450.1864134000.660.277419.75000.760.3196420.56000.860.3606419.310001.260.5463433.612021.470.642436.714001.670.732438.315701.840.813441.820212.271.003441.831403.441.533445.636403.941.762447.251405.452.443448.361406.452.903450.13.2、数据拟合示意图测量完相应的数据时候将数据拟合示意图如图所示:3.3、拟合数据方程weight=2.18V-0.2四、程序及分析#include#include#include#defineOUTPORTP2/AD与C51接口#defineLCDPORTP0/液晶与C51接口bitb_DATransform=0;typedefbitBOOL;sbitSTART=P34;/地址锁存允许信号(ALE)与转化启动信号(START),0->1->0:启动AD转换sbitEOC=P33;/输出允许信号sbitLCDRS=P35;/寄存器选择信号:0-数据寄存器;1-指令寄存器sbitLCDRW=P36;/读写信号:1-读LCD;0-写LCDsbitLCDE=P37;/片选信号sbitkeyadd=P10;/单价上调sbitkeydown=P11;/单价下调sbitbeep=P13;/报警接口unsignedcharuc_Clock=0;/定时器0中断计数unsignedintuiResult;/电压unsignedinttemp;unsignedcharsetdanjia=50;/单价5.0元/千克unsignedchardanjiashi,danjiage;/单价个位,十分位unsignedintjiage;/价格unsignedintprice,weight;unsignedintpricedata3;unsignedcharucaNumber3,ucCount;floatweightc;unsignedintshuju4;unsignedinti,j;/*-LCD的延迟子程序-*/voidvDelay()unsignedintuiCount;for(uiCount=0;uiCountwhile(EOC=0);/等待转换结束。uiResult=OUTPORT;/出入转换结果。uiResult=(100*uiResult)/51;/处理运算结果。电压的100倍,是为了显示小数后两位temp=uiResult;returnuiResult;/*-LCD的判忙程序-*/BOOLlcd_bz()BOOLresult;LCDRS=0;LCDRW=1;/RS为低,RW为高时-判忙LCDE=1;_nop_();_nop_();_nop_();_nop_();result=(BOOL)(P0 LCDE=0;returnresult;/*-LCD的写指令程序-*/voidvWriteCMD(unsignedcharucCommand)while(lcd_bz();LCDRS=0;LCDRW=0;/RS为低,Rw为低时-可以写入指令或显示地址LCDE=0;LCDPORT=ucCommand;vDelay();LCDE=1;vDelay();LCDE=0;/*-LCD的写数据程序-*/voidvWriteData(unsignedcharucData)while(lcd_bz();LCDRS=1;LCDRW=0;/RS为高,Rw为低时-可以写入数据LCDE=0;LCDPORT=ucData;vDelay();LCDE=1;vDelay();LCDE=0;/*-LCD的初始程序-*/voidvdInitialize()vWriteCMD(0x38);/工作方式:00111000,总线8位,显示2行,5*7总针delay1ms(1);vWriteCMD(0x06);/写入数据后光标右移delay1ms(1);vWriteCMD(0x01);/清屏delay1ms(1);vWriteCMD(0x0c);/开启光标,闪烁delay1ms(1);/*-LCD的字符表程序-*/voidvShowOneChar(unsignedcharucChar)switch(ucChar)/1602液晶模块内部的字符存储器(CGROM)/存储的点阵字符图形,且每一个字符都有一个固定的代码case"":vWriteData(0x20);break;case"!":vWriteData(0x21);break;case""":vWriteData(0x22);break;case"#":vWriteData(0x23);break;case"$":vWriteData(0x24);break;case"%":vWriteData(0x25);break;case"&":vWriteData(0x26);break;case">":vWriteData(0x27);break;case"(":vWriteData(0x28);break;case")":vWriteData(0x29);break;case"*":vWriteData(0x20);break;case"+":vWriteData(0x2A);break;case"-":vWriteData(0x2D);break;case"/":vWriteData(0x2F);break;case"=":vWriteData(0x3D);break;case"case".":vWriteData(0x2E);break;case":":vWriteData(0x3A);break;case"0":vWriteData(0x30);break;case"1":vWriteData(0x31);break;case"2":vWriteData(0x32);break;case"3":vWriteData(0x33);break;case"4":vWriteData(0x34);break;case"5":vWriteData(0x35);break;case"6":vWriteData(0x36);break;case"7":vWriteData(0x37);break;case"8":vWriteData(0x38);break;case"9":vWriteData(0x39);break;case"A":vWriteData(0x41);break;case"B":vWriteData(0x42);break;case"C":vWriteData(0x43);break;case"D":vWriteData(0x44);break;case"E":vWriteData(0x45);break;case"F":vWriteData(0x46);break;case"G":vWriteData(0x47);break;case"H":vWriteData(0x48);break;case"I":vWriteData(0x49);break;case"J":vWriteData(0x4A);break;case"K":vWriteData(0x4B);break;case"L":vWriteData(0x4C);break;case"M":vWriteData(0x4D);break;case"N":vWriteData(0x4E);break;case"O":vWriteData(0x4F);break;case"P":vWriteData(0x50);break;case"Q":vWriteData(0x51);break;case"R":vWriteData(0x52);break;case"S":vWriteData(0x53);break;case"T":vWriteData(0x54);break;case"U":vWriteData(0x55);break;case"V":vWriteData(0x56);break;case"W":vWriteData(0x57);break;case"X":vWriteData(0x58);break;case"Y":vWriteData(0x59);break;case"Z":vWriteData(0x5A);break;case"a":vWriteData(0x61);break;case"b":vWriteData(0x62);break;case"c":vWriteData(0x63);break;case"d":vWriteData(0x64);break;case"e":vWriteData(0x65);break;case"f":vWriteData(0x66);break;case"g":vWriteData(0x67);break;case"h":vWriteData(0x68);break;case"i":vWriteData(0x69);break;case"j":vWriteData(0x6A);break;case"k":vWriteData(0x6B);break;case"l":vWriteData(0x6C);break;case"m":vWriteData(0x6D);break;case"n":vWriteData(0x6E);break;case"o":vWriteData(0x6F);break;case"p":vWriteData(0x70);break;case"q":vWriteData(0x71);break;case"r":vWriteData(0x72);break;case"s":vWriteData(0x73);break;case"t":vWriteData(0x74);break;case"u":vWriteData(0x75);break;case"v":vWriteData(0x76);break;case"w":vWriteData(0x77);break;case"x":vWriteData(0x78);break;case"y":vWriteData(0x79);break;case"z":vWriteData(0x7A);break;default:break;/*-字符串的显示子程序-*/voidvShowChar(unsignedcharucaChar)unsignedcharucCount;for(ucCount=0;ucCount+)vShowOneChar(ucaCharucCount);/输出连续一串字符if(ucaCharucCount+1="0")break;/*-电压显示子程序-*/voidvShowVoltage(unsignedintuiNumber)if(uiNumber>999)uiNumber=999;/当电压大于1000,电压输出就是1000/把计算数字的每个位存入数组ucaNumber0=uiNumber/100;/得到电压的个位ucaNumber1=(uiNumber-100*(int)ucaNumber0)/10;得到电压的个位ucaNumber2=uiNumber-100*(int)ucaNumber0-10*ucaNumber1;得到电压的百分位for(ucCount=0;ucCountshuju0=temp/1000+"0"/重量的十位shuju1=(temp%1000)/100+"0"/重量的个位shuju2=(temp%1000)%100)/10+"0"/重量的十分位shuju3=(temp%1000)%100)%10)+"0"/重量的百分位/*-重量显示子程序-*/voidshowweight()vWriteCMD(0x