1、中国电子学会认证EDP-电子设计工程师基于89C52的数字万用表题 目: 基于89C52的数字万用表 姓 名: 考 号: 基于89c52的数字万用表李志鹏测控1601 摘 要:近几年来,电子行业的发展速度相当快,电子行业的公司企业数目也不断增多。这个现象带来的直接结果是电子行业方面的人才需求不断增多。所以,现在大多数高校都开设与电子类相关的专业及课程,为社会培养大量的电子行业的人才。做过电路设计的工作人员或者学生大多数使用万用表来测量一些元件参数或者电路中的电压电流。然而万用表有一定的局限性,它只能测量有限种类的元器件的参数,对于电容和电感等一些电抗元件就无能为力了。所以制作一种简便的电容电感
2、测量仪显得尤为重要,方便电路设计人员或者高校电子类专业的学生测量电路中需要用到的电容及电感的具体值。本次设计的思想是基于以上原因提出来的。该系统以STC89C52单片机为控制核心,搭配必要的外围电路对电阻、电容和电感参数进行测量。系统的基本原理是将电阻阻值、电容容值、电感感值的变化均转换成方波脉冲频率的变化,利用计数器测频后通过单片机做运算,最后计算出待测元件的各个参数并显示在1602液晶屏幕上。系统使用按键选择被测元件类型,使用1602液晶屏作为显示部分。测量时,只需将待测元件引脚放在测试仪的输入端,用按键操作需要测量的参数,便可以很快测出被测元器件的参数,简便易用。实验测试结果表明,本系统
3、性能稳定,测量精度高。关键词:STC89C52单片机、电阻测量、电压测量、电容测量目 录引 言 3第一章 电路方案的比较与论证 3 1.1 电阻测量电路方案的比较与论证 3 1.2 电容测量电路方案的比较与论证 6 1.3 电压测量电路方案的比较与论 8第二章 核心元器件介绍 9 2.1 STC89C52介绍 9 2.2 ADC0809介绍 10 2.3 LM324介绍 12 2.4 NE555介绍 13 2.5 LM7805介绍 15 2.6 1602液晶的介绍 16第三章 电路设计 18 3.1 电源电路设计 18 3.2 电阻测量电路设计 18 3.3 电容测量电路设计 19 3.4 电
4、压测量电路设计 19 3.5 显示电路设计 20 3.6 总体框图 21第四章 程序设计 22 4.1 主程序流程图 22 4.2 电阻测量流程图 23 4.3 电容测量流程图 24 4.4 电压测量流程图 25第五章 电路板制作 27 5.1 PCB电路布线 27 5.2 PCB板制作 27 5.3 元器件焊接 27第六章 电路仿真 27 6.1 电阻测量电路仿真27 6.2 电容测量电路仿真 28 6.3 实验数据记录 28 第七章 心得与体会 30参考文献 31附录一 程序 32附录二 原理图 17附录三 PCB板图 35附录四 元器件清单 36引 言在现代化生产、学习、实验当中,往往需
5、要对某个元器件的具体参数进行测量,在这之中万用表以其简单易用,功耗低等优点被大多数人所选择使用。然而万用表有一定的局限性,比如:不能够测量容,所以制作一个简单易用的电抗元器件测量仪是很有必要的。现在国内外有很多仪器设备公司都致力于低功耗手持式电抗元器件测量仪的研究与制作,而且精度越来越高,低功耗越来越低,体积小越来越小一直是他们不断努力的方向。该类仪器的基本工作原理是将电阻器阻值的变化量,电容器容值的变化量和电压值的变化量通过一定的调理电路统统转换为电压的变化量或者频率的变化量等等,再通过高精度AD采集或者频率检测计算等方法来得到确定的数字量的值,进而确定相应元器件的具体参数。第一章 电路方案
6、的比较与论证1.1 电阻测量电路方案的比较与论证方案一:利用串联分压原理的方案 R0RxGNDVCC 图1-1串联分压电路图根据串联电路的分压原理可知,串联电路上电压与电阻成正比关系。测量待测电阻Rx和已知电阻R0上的电压,记为Ux和U0.方案二:利用直流电桥平衡原理的方案 R2R1GNDVCCGRxR3图1-2 直流电桥平衡电路图根据电路平衡原理,不断调节电位器R3,使得电表指针指向正中间,再测量电位器电阻值。 方案三:利用555构成单稳态的方案 图1-3 555定时器构成单稳态电路图 根据555定时器构成单稳态,产生脉冲波形,通过单片机读取高低电平得出频率,通过公式换算得到电阻阻值。 由
7、得 上述三种方案从对测量精度要求而言,方案一的测量精度极差,方案二需要测量的电阻值多,而且测量调节麻烦,不易操作与数字化,相比较而言,方案三还是比较符合要求的,由于是通过单片机读取转化,精确度会明显的提高。故本设计选择了方案三。1.2 电容测量电路方案的比较与论证方案一:利用串联分压原理的方案(原理图同图1-1)通过电容换算的容抗跟已知电阻分压,通过测量电压值,再经过公式换算得到电容的值。原理同电阻测量的方案一。方案二:利用交流电桥平衡原理的方案(原理图同图1-2) 通过调节Z1、Z2使电桥平衡。这时电表的读数为零。通过读取Z1、Z2、Zn的值,即可得到被测电容的值。方案三:利用555构成单稳
8、态原理的方案图1-4 555定时器构成单稳态电路图 根据555定时器构成单稳态,产生脉冲波形,通过单片机读取高低电平得出频率,通过公式换算得到电容值。由 若R1=R2,得 上述三种方案从对测量精度要求而言,方案一的测量精度极差,方案二需要测量的电容值多,而且测量调节麻烦、电容不易测得准确值,不易操作与数字化,相比较而言,方案三还是比较符合要求的,由于是通过单片机读取转化,精确度会明显的提高。故本设计选择了方案三。1.3 电压测量电路方案的比较与论证方案一:直接将被测电压值输入给模数转换器ADC0809,转换成数字量,再通过单片机计算,可的出被测电压值的大小。方案二:将被测电压分为三个不同的级别
9、:0.000.200、0.2002.00、2.0020.00,分别将这三个档位的电压放大不同的倍数,使其输入模数转换器ADC0809的值在05V直接,便于模数转换器工作。这三个档位可以通过比较输入电压值的大小来自动选择用哪一级的放大倍数。其中输入电压调理电路如图:图1-5 电压输入信号调理电路上述俩种方案从对测量精度要求而言,方案一的测量精度极差,而且测量范围只有05V,范围太小。相比较而言,方案二还是比较符合要求的,由于是通过单片机读取转化,并且通过不同的放大倍数,精确度会明显的提高。故本设计选择了方案二。第二章 核心元件介绍2.1 STC89C52介绍STC单片机的优点:加密性强,很难解密
10、或破解超强抗干扰:1 、高抗静电(ESD保护) 2 、轻松过 2KV/4KV快速脉冲干扰(EFT 测试)3 、宽电压,不怕电源抖动4 、宽温度范围,-4085 5 、I/O 口经过特殊处理 6 、单片机内部的电源供电系统经过特殊处理7 、单片机内部的时钟电路经过特殊处理 8 、单片机内部的复位电路经过特殊处理 9 、单片机内部的看门狗电路经过特殊处理超低功耗:1 、掉电模式:典型功耗0.1 A2 、空闲模式:典型功耗2mA 3 、正常工作模式:典型功耗4mA-7mA 4 、掉电模式可由外部中断唤醒,适用于电池供电系统,如水表、气表、便携设备等.STC89C52单片机最小系统原理图:2.2 AD
11、C0809介绍 (1)AD0809 的逻辑结构ADC0809是8 位逐次逼近型A/D转换器。它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁存器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。(2)AD0809 的工作原理IN0IN7:8 条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持
12、电路。地址输入和控制线:4条ALE 为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A, B,C 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B 和C 为地址输入线,用于选通IN0IN7 上的一路模拟量输入。通道选择表如下表所示。C B A 选择的通道0 0 0 IN00 0 1 IN10 1 0 IN20 1 1 IN31 0 0 IN41 0 1 IN51 1 0 IN61 1 1 IN7数字量输出及控制线:11 条ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST 应保持
13、低电平。EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7D0 为数字量输出线。CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF()为参考电压输入。(3)、ADC0809 应用说明 a ADC0809 内部带有输出锁存器,可以与AT89S51 单片机直接相连。b 初始化时,使ST 和OE信号全为低电平。c 送要转换的哪一通道的地
14、址到A,B,C 端口上。d 在ST 端给出一个至少有100ns 宽的正脉冲信号。e 是否转换完毕,我们根据EOC 信号来判断。f 当EOC变为高电平时,这时给OE 为高电平,转换的数据就输出给单片机了。2.3 LM324介绍LM324系列运算放大器是价格便宜的带差动输入功能的四运算放大器。电压范围是3.0V-32V或+16V.LM324的特点:1. 短跑保护输出2. 真差动输入级3.可单电源工作:3V-32V4.低偏置电流:最大100nA(LM324A)5.每封装含四个运算放大器6.具有内部补偿的功能。7. 共模范围扩展到负电源8. 8.行业标准的引脚排列9. 输入端具有静电保护功能10. L
15、M324引脚图(管脚图)2.4 NE555介绍555集成电路开始是作定时器应用的,所以叫做555定时器或555时基电路。但后来经过开发,它除了作定时延时控制外,还可用于调光、调温、调压、调速等多种控制及计量检测。此外,还可以组成脉冲震荡、单稳、双稳和脉冲调制电路,用于交流信号源、电源变换、频率变换、脉冲调制等。它由于工作可靠、使用方便、价格低廉,目前被用于各种电子产品中,555集成电路内部有几十个元器件,有分压器、比较器、基本R-S触发器、放电管以及缓冲器等,电路比较复杂,是模拟电路和数字电路的混合体。555集成电路内部结构图:引脚图:管脚介绍:555集成电路是8脚封装,双列直插型,如图(A)
16、所示,按输入输出的排列可看成如图(B)所示。其中6脚称阈值端(TH),是上比较器的输入;2脚称触发端,是下比较器的输入;3脚是输出端(VO),它有0和1两种状态,由输入端所加电平决定;7脚是放电端(DIS),它是内部放电管的输出,有悬空和接地两种状态,也是由输入端的状态决定;4脚是复位端(MR),加上低电平时可使输出为低电平;5脚是控制电压端(VC),可用它改变上下触发电平值;8脚是电源端,1脚是接地端。典型应用555震荡器电路:由555构成的多谐振荡器如图(a)所示,输出波形如图(b)所示。2.5 LM7805介绍三端稳压集成电路LM7805。电子产品中,常见的三端稳压集成电路有正电压输出的
17、lm78 系列和负电压输出的lm79系列。顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。它的样子象是普通的三极管,TO- 220 的标准封装,也有lm9013样子的TO-92封装。如图2.6 1602液晶的介绍本设计使用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符集字库,只有并行接口,无串行接口。1602与单片机接口:接口说明:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据口2VDD电源正极10D3数据口3VQ液晶显示对比度调节11D4数据口4RS数据/命令选择端(H/
18、L)12D5数据口5R/W读写选择端(H/L)13D6数据口6E使能信号14D7数据口7D0数据口15BLA背光灯电源正极8D1数据口16BLK背光灯电源负极基本操作时序:读状态 输入:RS=L,R/W=H,E=H输出:D0D7=状态字读数据 输入:RS=H,R/W=H,E=H输出:无写指令 输入:RS=L,R/W=L,D0D7=指令码,E=高脉冲输出:D0D7=数据写数据 输入:RS=H,R/W=L,D0D7=指令码,E=高脉冲输出:无1602写操作时序图:第三章 电路设计3.1 电源电路设计由于系统需要+5V、+12V、-12V、0V的电 ,所以电源供电是一个很关键的问题,经过不断的调试,
19、最后选定了如下的电路供电3.2 电阻测量电路设计P12P15P15接一独立按键,当其按下时,NE555的3引脚输出方波,3脚与P12相接,可通过程序测出其频率,进而求出Rx的值,显示在1602液晶屏上。3.3 电容测量电路的设计P13P16P16接一独立按键,当其按下时,NE555的3引脚输出方波,3脚与P13相接,可通过程序测出其频率,进而求出Cx的值,显示在1602液晶屏上。3.4电压测量电路设计 3.5 显示电路设计 3.6 总体框图 第四章 程序设计4.1 主程序流程图4.2 电阻测量流程图 4.3 电容测量流程图 4.4 电压测量流程图 第五章 电路板制作5.1 PCB电路布线 使用
20、AD软件绘制电路原理图,待检查无误后生成PCB板图,裁剪板子尺寸大小为10*15,将元器件排步在板子上,注意其合理性与美观性,然后就进行布线。由于采用的是双面布线,所以一定要仔细。5.2 PCB板制作 将绘制好的PCB板打印纸转印纸上,一定要注意打印正面是要镜像。然后现将覆铜板打磨干净,再将印有图的转印纸固定在覆铜板上,用款头烙铁加热松香滴至转印纸,再用烙铁将转印纸上的图烫至覆铜板。将需要的洞打好。准备好腐蚀液,保持其温度为60度左右,进行腐蚀。腐蚀完以后进行打磨、清洗,PCB板就制作好了,接下来就可以焊接了。5.3 元器件焊接 焊接时一定要注意,先焊接小元器件,再焊接大元器件,有些元器件要进
21、行双面焊接,一定要注意。焊接完,待检查无误后,就可以进行调试了。第六章 电路仿真6.1 电阻测量电路仿真仿真电路图:输出波形:6.2 电容测量电路仿真仿真电路图:输出波形:6.3 实验数据记录 待 测 元 件示 波 器 测 量 结 果单 片 机 显 示 结 果待 测 电 阻标 称 值()频 率(Hz)计 算 值()相对误差(%)频 率(Hz)计 算 值()相对误差(%)R100058821064.366.44579610949.40200032892021.741.09323320814.05240028412364.211.49280124251.04510013894992.452.111
22、36551340.671000007309634.743.6571699240.761200061011559.603.67600118721.073900018438669.880.85182394841.2410000070101890.821.89681059305.9333000020356992.868.18203605239.25待测电容标 称 值(pF)频 率(Hz)计 算 值(pF)相对误差(%)频 率(Hz)计 算 值(pF)相对误差(%)C1007813119.5119.51761612323.004701953478.091.7219654791.911000089104
23、91.094.9187108388.38待测电压输 入 值(V)万用表测量值V0.016 0.01580.16 0.1591.6 1.60116 15.98第七章 心得与体会这次课题的论文和设计是我这大学期间干的最有意义的事之一。从最初的选题,开题到写论文直到完成论文。其间,查找资料,老师指导,与同学交流,反复修改论文,每一个过程都是对自己能力的一次检验和充实。通过这次实践,我了解了简易电阻、电容和电压测试仪的用途及工作原理,熟悉了其的设计步骤,锻炼了设计实践能力,培养了自己独立设计能力。这次课程设计收获很多,比如学会了查找相关资料相关标准,分析数据,提高了自己的制作能力。这么一次锻炼可以学到
24、书本里许多学不到的知识,坚韧、独立、思考等。但是课程设计也暴露出自己专业基础的很多不足之处。比如缺乏综合应用专业知识的能力,对材料的不了解等等。由于能力有限,未能做到准确测量电阻、电容和电压,某些测量结果误差,测量范围较小,感到有点儿遗憾。这次实践是对自己所学知识的一次大检阅,使我明白自己知识还很不全面。本设计是在老师的精心指导和鼓励下完成的。在此,谨向老师和帮助我的同学表示衷心的感谢!此外,我还要感谢在我的论文中所有被援引过的文献的作者们,他们是我的知识之源!最后,再次向所有给予我帮助和鼓励的同学和老师致以最诚挚的谢意!参考文献 1 江晓安,董秀峰.模拟电子技术.陕西:西安电子科技大学出版社
25、,2008.32 张金,左修伟,黄国锐,周生.电子设计工程师之路.北京:电子工业出版社,2014.13 王昊,李昕.集成运放应用电路设计360例.北京:电子工业出版社,2007.14 张新,陈跃琴.51单片机应用开发25例.北京:电子工业出版社,2013.105 江晓安.数字电子技术.陕西:西安电子科技大学出版社,2008.66 潘明.单片机原理与应用技术.北京:清华大学出版社,2011.1附录一 程序#include #define LEDDATA P0#define v20_onADC=0;ADB=0;ADA=1; /宏定义不同量程,不同的开关状态#define v2_onADC=0;AD
26、B=1;ADA=0;#define v02_onADC=0;ADB=0;ADA=0;#define uint unsigned int#define uchar unsigned char#define ulong unsigned long#definePI 3.1415926uchar code table016=Welcome!; /初始化显示uchar code table116= Voltmeter;uchar code table216=Value= V;uchar table316=f(HZ)=;uchar table416=R(ohm)=;uchar table516=C(pf
27、)=;uchar code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;uchar dispbuf8=0,0,0,0,0,0,0,0;uchar getdata,i,k,l,m;uchar i,k,l,m;uchar num,th0,tl0;ulong temp,f,R;uint C;sbit ADC = P35;/A/D地址输入引脚sbit ADB = P36;sbit ADA = P37;sbit OE = P33;/A/D输入允许控制端sbit EOC = P34; /A/D转换结束输出信号引脚sbit
28、ST = P32; /A/D转换启动信号输入端sbit lcden= P27; /液晶使能端 sbit lcdrs= P26; /液晶数据命令选择端sbit key_R= P21; /测量电阻按键sbit key_C= P23; /测量电容按键sbit key_V= P20; /测量电压按键sbit R_out= P22; /测量电阻信号输入sbit C_out= P24; /测量电容信号输入void delay(uint z) /延时子函数1msunsigned int x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_com(uchar c) /写
29、命令子函数lcdrs=0; /低电平选择为“写指令”lcden=0;LEDDATA=c; /把指令写入P0口delay(5);lcden=1; /开启使能delay(5);lcden=0; /关闭使能void write_data(uchar d) /写数据子函数lcdrs=1;LEDDATA=d;delay(5);lcden=1;delay(5);lcden=0;void initialize()lcden=0;write_com(0x38); /设置162显示,57点阵,8位数据接口write_com(0x0c); /设置开显示,不显示光标write_com(0x06); /写一个字符后地
30、址指针加1write_com(0x01); /显示清0,数据指针清0 /频率显示函数void display_f(ulong f) uchar count=0; ulong f0; f0=f; while(f) f=f/10; count+; for(num=5+count;num5;num-) table3num=f0%10+48;f0=f0/10; write_com(0x80); for(num=0;num6;num-) table4num=R0%10+48;R0=R0/10; write_com(0x80+0x40); for(num=0;num5;num-) table5num=C0
31、%10+48;C0=C0/10; write_com(0x80+0x40); for(num=0;num6+count;num+) write_data(table5num);delay(5); /电压显示函数void display_value()write_com(0x01);write_com(0x80);for(num=0;num12;num+)write_data(table1num);delay(10);write_com(0x80+0x40);for(num=0;num13;num+)write_data(table2num);delay(10);/电压值显示函数void dis
32、play_valuezhi(uchar add,uchar dat)write_com(0x80+0x47+add);if(l=3&add=2|l!=3&add=1)write_data(0x2e);elsewrite_data(0x30+dat); /定时器0初始化函数void t_init() TMOD=0x01;/设置定时器0工作方式1(M1M0=0x0001) TH0=0;/装初值 TL0=0; EA=1;/开总中断 ET0=1;/开定时器0中断 TR0=1;/启动定时器0/电阻测量函数void dianzu() initialize(); t_init(); write_com(0x
33、01); while(2) while(R_out); while(!R_out); TH0=0;TL0=0;while(R_out);while(!R_out);th0=TH0;tl0=TL0;TR0=0;f=1000000.0/1.075069/(th0*256+tl0);R=(ulong)(5000000.0/0.6931472/f-235);display_f(f); display_R(R);break; /电容测量函数void dianrong() initialize(); t_init(); write_com(0x01); while(2) while(C_out); whi
34、le(!C_out);TH0=0;TL0=0;while(C_out);while(!C_out);th0=TH0;tl0=TL0;TR0=0;f=1000000.0/0.782897/(th0*256+tl0); C=(int)(100000000.0/300/0.6931472/f);display_f(f); display_C(C);break; /电压测量函数void dianya() initialize();display_value(); while(1)_20v: v20_on;ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P1;OE=0;
35、if(getdata21)goto _2v;l=3;temp=getdata;temp=(temp*1000/51)/2;goto disp;_2v: v2_on;ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P1;OE=0;if(getdata204)goto _20v;l=2;temp=getdata;temp=(temp*1000/51)/2;goto disp;_02v: v02_on;ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P1;OE=0;if(getdata204)goto _2v;l=1;temp=getdata;temp=(temp*1000/51)/2;m=temp%10;if(m5)temp=temp/10+1;elsetemp=temp/10;goto disp;disp: for(i=0;i=3;i+) dis