最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于单片机的数字万用表的设计

来源:动视网 责编:小OO 时间:2025-09-24 10:34:27
文档

基于单片机的数字万用表的设计

毕业论文(设计)题目基于单片机的数字万用表的设计学生姓名王娅学号12******85所在学院物理与电信工程学院专业班级电信1203班指导教师黄朝军完成地点物理与电信工程学院实验室2016年6月5日陕西理工学院本科毕业设计任务书院(系)物理与电信工程学院专业班级电子信息科学与技术(电信1203)学生姓名王娅一、毕业设计题目基于单片机的数字万用表设计二、毕业设计工作自2015年11月9日起至2016年5月18日止三、毕业设计进行地点:四、毕业设计应完成内容及相关要求:数字万用表是用数字化测量技术,
推荐度:
导读毕业论文(设计)题目基于单片机的数字万用表的设计学生姓名王娅学号12******85所在学院物理与电信工程学院专业班级电信1203班指导教师黄朝军完成地点物理与电信工程学院实验室2016年6月5日陕西理工学院本科毕业设计任务书院(系)物理与电信工程学院专业班级电子信息科学与技术(电信1203)学生姓名王娅一、毕业设计题目基于单片机的数字万用表设计二、毕业设计工作自2015年11月9日起至2016年5月18日止三、毕业设计进行地点:四、毕业设计应完成内容及相关要求:数字万用表是用数字化测量技术,


毕业论文(设计)

题    目          基于单片机的数字万用表的设计   

学生姓名        王娅        学号      12******85 

所在学院                 物理与电信工程学院               

专业班级                电信1203班              

指导教师                  黄朝军                 

     完成地点          物理与电信工程学院实验室       

2016年6月5日

陕西理工学院本科毕业设计任务书

院(系) 物理与电信工程学院 专业班级 电子信息科学与技术(电信1203) 学生姓名 王娅   

一、毕业设计题目   基于单片机的数字万用表设计                                                                  

二、毕业设计工作自  2015  年  11  月  9  日 起至  2016  年  5  月  18  日止

三、毕业设计进行地点:                                                                

四、毕业设计应完成内容及相关要求:

    数字万用表是用数字化测量技术,把连续的模拟量转换成不连续的、离散的数字形式并加以显示的仪表。传统的指针式万用表功能单一且精度低,不能满足数字化时代的需求,采用单片机设计的数字万用表,精度高、抗干扰能力强、可扩展性强、集成方便。

本次研究是对不同量程的各种测量内容的转换,各部分电路组合成一个完整的数字万用表,而难点解决的问题就是程序的设计,要保证其可行性从而保证设计的正确性。利用A/D模数转换器将连续的模拟信号、模拟量转换成离散的、不连续的数字量,通过程序利用相应的对应关系显示出简单易懂的数字量,从而完成数字万用表的功能。 

五、毕业设计应收集资料及参考文献:

    1、应收集与课题相关文献至少12篇(其中包括一篇英文文献),文献的发表年限应为2010年至2016年;

2、除了文献之外,所参考的书目不能超过3篇;

3、所有的参考资料要留存电子版,在交论文时一并打包交予指导教师。

六、毕业设计的进度安排:

1、必须查阅大量资料(包括一定数量的外文资料),了解课题的研究背景、意义,熟悉设计中要用到的相关电路知识;完成开题报告;并完成一篇外文文献的全文翻译工作;

(1月10日-3月18日)

2、进行系统的概要设计;(3月19日-4月10日)

3、熟悉设计软件,并提交中期报告;(4月10日-4月20日)

4、系统的设计与实现;准备作品的验收;完成论文第一稿;(4月21日-5月10日)

5、根据要求对对论文及作品进行完善,完成论文第二稿;(5月11日-5月20日)

6、制作答辩PPT,准备答辩材料,准备答辩,并完成后续工作;(5月21日-6月10日)

7、必须定期与指导老师见面,汇报进展情况,按时完成论文的撰写工作。 

指导教师签名    黄朝军     专业负责人签名         

学院领导签名    熊晓军     批准日期    2016-01-11    

基于单片机的数字万用表的设计

王娅

(陕西理工学院物电学院电子信息科学与技术专业电信1203班,陕西汉中 723000)

指导老师:黄朝军

   [摘要] 以STCC52单片机作为主控制芯片,结合电压检测电路、电流检测电路、电阻检测电路、数码管驱动电路、复位电路、震荡电路、52单片机最小系统、显示部分、A/D转换和控制部分电路以及ADC0832数据转换芯片和数码显示装置,实现了数字万用表的设计。所设计的万用表能够测量电压值、电流值以及电阻值,并且以四位数码显示。数字万用表在电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域方面具有一定的实用价值。

   [关键词] 单片机;数字万用表;设计

The design of the digital multimeter based on single chip microcomputer

Wang Ya

(Grade12,Class3,Major Electronic Information Science and Technology,School of Physics and Telecommunication Engineering,Shaanxi University of Technology, Hanzhong,723000 Shaanxi)

Tutor: Huang Chaojun

Abstract :STCC52 microcontroller as the main control chip, combined with a voltage detection circuit, current detection circuit, a resistance detection circuit, digital tube driving circuit, reset circuit, an oscillation circuit, a 52 MCU minimum system, display, A / D conversion and control circuit part and the ADC0832 data conversion chip and digital display device, to realize the digital meter design. The design of the multimeter is able to measurement voltage , current and resistance , and using a four digital display.The digital multimeter has certain practical value in the electronic and electrical measurement, industrial automation instrument, automatic test system and intelligent of measurement field.

Key words :Microcontroller, STCC52, Design.

1 引言

1.1 设计目的和意义

数字万用表亦称数字多用表,简称DMM(Digtial Multimeter)。它是采用数字化测量技术,把连续的模拟量转换成不连续的、离散的数字形式并加以显示的仪表。传统的指针万用表功能单精度低,不能满足数字化时代的需求,采用单片机的数字万用表,精度高、抗干扰能力强,可扩展尾强,集成方便,目前,由各种单片机芯片构成的数字电万用表,已经被广泛应用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,显示出强大的生命力。

与传统仪表相比数字万用表具有具有以优点:

(1)显示清晰直观,计数准确

为了提高观察清晰度,新型的手持式数字万用表(HDMM)已普遍采用字高为26mm的大屏幕LCD(液晶显示器)。有些数字万用表还增加了背光源,以便于夜间观察读数。

(2)显示位数

数字万用表的显示位数通常为3位半到8位半。

(3)准确度高

准确度是测量结果中系统误差与随机误差的综合。他表示测量结果与真值的一致程度,也反映了测量误差的大小,准确度越高,测量误差越小。数字万用表的准确度远远优于指针万用表。

(4)分辨力高

数字万用用表在最低电压量程上末位1个字所代表的电压值,称作仪表的分辨力,宏观世界反映了仪表灵敏度的高低。分辨力随着显示位数的增加而提高。

(5)测试功能强

数字万用表不仅可以测量直流电压(DCV)、交流电压(ACV)、直流电流(DCA)、交流电流(ACA)、电阻(Ω)、二极管正向压降(Uf)等等。新型数字万用表太多增加了下述测试功能:读数保持(HOLD)、逻辑测试(LOGIC)测试等等。

(6)测量范围宽

数字万用表可满足常规电子测量需要。智能数字万用表的测量范围范围更宽。

(7)测量速率快

数字万用表在每秒钟内对被测电压的测量次数叫测量速率,单位是“次/秒”。它主要取决于A/D转换器上的速率。一般数字万用表的测量速率为2~5次/秒。有的能达到20次/秒以上,另有的一些比这个还要高的多。数字万用表可以满足不同用户对测量速率的需要。

(8)输入阻抗高

数字万用表电压档具有很高的输入阻抗,通常为10~10000MΩ,从被测电路上吸取的电流小,不会影响被测信号源的工作状态,能减小由信号源内阻引起的测量误差。

(9)集成高,微功耗

新型数字万用表普遍采用CMOS大规模集成电路的A/D转换器,整机功耗很小,3位半,4位半手持式数字万用表的整机功耗仅仅几十毫瓦,可用9V叠层电池供电。

(10)保护功能完善,抗干扰能力强

数字万用表具有比较完善的保护电路,过载能力强新型数字万用表还增加了高压保护器件,能防止浪涌电压。

正是基于以上优点本设计就是基于这个基础设计一个基于单片机的数字万用表。该设备具有直观简单的优点。并且能够深入说明万用表的测量原理。能直观的了解万用表各个部分的结构和测试原理。 数字万用表是当前电子、电工、仪器、仪表、和测量领域领域大量使用的一种基本测量,已被广泛利用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测试领域,展示出其强大的生命力。随着时代科技的进步,数字万用表的功能越来越强大,把电量和非电量的测量技术提高到崭新的水平。其主要特点是显示直观、读数准确、精度高、分辨率强、功能完善、性能稳定、过载能力强、耗电省、体积小、便于携带。

1.2 研究现状及发展趋势

    近年来我国对智能仪器的研究到了一个新的层次,无论是在生产还是科研方面都取得了很大的成就[1-3]。随着微电子技术的高速发展,单片机的功能集成化,智能仪器也发展到一个新的阶段。随着单片机技术的广泛应用,数字万用表得到迅速发展,无论是便携式万用表,还是台式万用表在精度、功能和性能上都有较大的提高。进入21世纪以来基于DSP的高精度数字万用表研究、PXI高精度数字万用表的设计与实现以及出现了一些新的特点及新的技术[4-5]。研究现状也出现了一些新的瓶颈和难点,比如财力人力的大量浪费、新技术开发难度大和研发瓶颈等。

    电子领域以后的发展势必是更加系统的集成化以及大量核心技术的运用,比如像万用表一类的产品将会出现功能更加强大,结构更加简单,更易携带和性能更加稳定等特点。由于电子设备的速度越来越快,容量越来越大,成本越来越低,全球电子产品设计朝着人工智能、无线互联、集成化、娱乐化的方向发展。人工智能徜徉在国际消费电子展,随处可见人工智能在产品设计中的各种应用。

1.3 主要研究内容

本次研究探讨了数字万用表的目的和意义,以STCC52单片机作为主控制芯片,结合电压检测电路、电流检测电路、电阻检测电路、数码管驱动电路、复位电路、震荡电路、52单片机最小系统、显示部分、A/D转换和控制部分电路以及ADC0832数据转换芯片和数码显示装置,实现了数字万用表的设计[6-7]。

本设计重点要解决的问题是对不同量程的各种测量的转换,还有就是各部分电路组合成一个完整的数字万用表,所设计的万用表能够测量电压值、电流值以及电阻值,并且以四位数码显示。而难点解决的问题就是程序的设计,要保证其可行性从而保证设计的正确性[7-8]。利用A/D模数转换器将连续的模拟信号、模拟量转换成离散的、不连续的数字量,通过程序利用相应的对应关系显示出简单易懂的数字量,从而完成数字万用表的功能。

2 设计方案

2.1 基本原理

数字万用表的最基本功能是能够测量电压,电流以及电阻,其原理框图如图2.1所示:

图2.1数字万用表的各部分组成

各模块功能如下:

    (1)模数(A/D)转换与数字显示

 常见的物理量都是幅值(大小)变化的模拟量(模拟信号)。指针式的仪表可以直接对模拟信号(电压、电流)进行显示。而对于数字式仪表,需要把数字信号转换成模拟电信号(通常是电压信号),再进行显示和处理(如存储、传输、打印、运算等)。数字信号与模拟信号不通,其幅值(大小)是不连续的。这种情况被称为“量化的”。若最小量化单位(量化台阶)是Δ,则数字信号的大小一定是Δ的整数倍,该整数可以用二进制数码表示。但为了能直观地读出信号大小的数值,需经过数码变换(译码)后由数码管或液晶屏显示出来。例如,设Δ=0.1mV,我们把被测量电压U与Δ比较,看U是Δ的多少倍,并把结果进行四舍五入取整数N(二进制)。一般情况下,N≥1000即可满足测量精度要求(量化误差≤1/1000=0.1%)。最为常见。最常见的数字表头的最大数为1999,被称为三位半数字表。对于上述情况,我们我们把小数点定在最末尾之前,显示出来的就是以mV为单位的被测电压大小。如:U是Δ(0.1mV)的1234倍,即N=1234,显示结果为123.4(mV)。这样的数字表头,再加上电压极性判别显示电路,就可以显示-199.9~+199.9mV的电压,显示精度为0.1mV。由此可见,数字测量仪表的核心是模数(A/D)转换、译码显示电路[9]。A/D转换一般又可以分为量化和编码两个步骤。

    (2)多量程数字电压表原理

 在基准数字电压表头前面加一级分压电路(分压器),可扩展直流电电压测量的量程。如图2.2所示。U0为电压表头的量程(如200mV),r为其内阻(如10MΩ),r1、r2为分压电阻,U10为扩展后的量程。由于r>>r1,所以分压比如式2.1所示:

                          (2.1)

扩展后的量程如式2.1所示:

                                        (2.2)

  

         图2.2 分压电路原理                   图2.3 多量程分压器原理

多量程分压器原理电路图见图2.3所示,5档量程的分压比分别是1、0.1、0.01、0.001和0.0001,对应的量程分别为2000V、200V、20V、2V和200mV。采用图2.3的分压电路虽然可以拓展电压表的量程,但在小量程档明显降低了电压表的输入阻抗,这在实际使用中是所不希望的。所以,实际数字万用表的直流电压档电路为图2.4所示,它能在不降低输入阻抗的情况下,达到同样的分压效果。

                          图2.4直流分压电路

例如:其中200V档的分压比为,如式2.3计算:

                (2.3)

其余各档的分压比可以同样算出。实际设计时根据各挡的分压和总电阻来确定分压电阻的。如先确定R总:

                (2.4)

再计算2000V档的电阻,即为:

                       (2.5)

再逐档计算出R4,R5,R2,R1。尽管上述最高量程档是2000V,但通常的数字万用表出于耐压和安全考虑,规定最高电压量限为1000V。换量程时,多刀量程转换开关可以根据档位自动调整小数点的显示,使用者可方便地直接读出测量结果。

   (3)多量程数字电流表原理

    测量电流的原理是:根据欧姆定律,用合适的取样电阻把待测电流转换为相应的电压,再进行测量,如图2.5所示。

     

      图2.5电流测原理                           图2.6多量程分流器电路

由于r>>R,取样电阻R 上的电压降为:

                           (2.6)

即被测电流为:

                            (2.7)

若数字表头的电压量程为U0,欲使电流档量程为I0,则该档的取样电阻(也称为分流电阻)为:

                            (2.8)

如U0=200mV,则I0=200mA档的分流电阻为R=1Ω。多量程分流器原理电路见图2.6。图2.6中的分流器在实际应用中有一个缺点,就是当换挡开关接触不良时,被测电路的电压可能使数字表头过载,所以实际数字万用表的直流电流档电路为图2.7所示。图2.7中各档分流电阻的阻值是这样计算的:先计算最大电流档的分流电阻R5

                                         (2.9)                                        

再计算下一档的R4:

               (2.10)

因此可以依次计算出R3,R2,R1。图中BX是2A保险丝管,电流过大时会快速熔断,超过流保护作用。两只反向连接且与分流电阻并联的二极管D1、D2为塑封硅整流二极管,他们起双向限幅过压保护作用。正常测量时,输入电压小于硅二极管的正向导通压降,二极管截止,对测量是毫无影响的。一旦输入电压大于0.7V,二极管立即导通,两端电压被住(小于0.7V),保护仪表不被损坏。

        

   图2.7实用分流器电路                                图2.8 AC-DC交换器原理简图

   (4)交流电压电流测量处理

数字万用表中交流电压,交流电流测量电路是在直流电压、直流电流测量的基础之上,在分压器或者分流器后加入了一级交流—直流(AC—DC)变换器,图2.8为其原理简图。该AC—DC变换器的主要组成部分有:集成运算放大器、RC滤波器以及整流二极管等组成。它还包括了一个电位器,这个电位器的功能是能够很好地调节输出电压的高低,它可以用来对交流电压档进行校准。调接该电位器可以使数字表头的显示值等于被测交流电压的有效值。与直流电压档原理相似,考虑到耐压和安全方面,我们通常把交流电压最高档的限量限定为其有效值,即为700V。

   (5)电阻测量原理

    在万用表中,电阻的测量方法是采用比例测量法,它的原理电路图为图2.9。

图2.9电阻测量

    测量的基准电压是由稳压管ZD提供的,而流过标准电阻R0和被测电阻Rx的电流是基本相等的(数字表头的输入阻抗很高,其取用的电流基本上可以忽略不计)。所以A/D转换器的参考电压URFE和输入电压UIN有如下关系:

                             (2.11)

即有:

                           (2.12)

根据所用的A/D转换器的特性可知,数字显示的是UIN和URFE的比值,当UIN与URFE相等的时候,则显示的数是“1000”。当URFE=2UIN时,显示的数是“500”,由此类推。所以,当Rx与R0相等时表头显示的数是“1000”。当R0=2Rx时,表头显示的数是“500”。把此称作是比例读数特性。因此,只要我们选取不同的标准测量电阻并且对小数点进行适当的定位,便可以得到不同的电阻测量档。如对于200Ω档位时,若取R01=100Ω时,小数点就定在十位上。如果当RX=100Ω时,这时表头就会显示出100.0Ω。当RX变化时,显示值就会作出相应的变化,那么就可以从0.1Ω测到199.9Ω。有如对2KΩ档,取R02=1KΩ,小数点就定到了千位上。当RX变化时,显示值就发生相应的变化,可以从0.001KΩ测到1.999KΩ。其余各档的情况可以以此类推。

在实际应用中电阻测量运用的也是分压分流原理,根据相应的原理进行分析便可以得到不同量程的电阻测量档位,由于和前面的分压原理相似所以在此不做相应的介绍。

2.2 硬件系统设计总体框架图

如图2.11所示,本万用表由以下几个部分功能组成:电流测量电路、电压测量电路、电流测量电路、复位电路、震荡电路、A/D转换、被测量显示以及输入(ADC)。复位电路用来清零,进行下一次的测量;振荡电路用来消除一些外来干扰,使电路工作更加稳定;ADC输入将是将输入量进行A\\D转换;测量显示就是显示测量的数值。

图2.11 数字万用表硬件电路组成

2.3 硬件电路设计方案及芯片

2.3.1 设计方案

用单片机STCS52与ADC0832设计一个数字万用表,运用电阻的分压分流,形成电压测试电路、电流测试电路和电阻测试电路,并且运用四位数码显示。为了设计简单和硬件的易于实现以及可操作性,利于滑动变阻器做分压分流,但是这样做的后果就是使万用表的量程变小。那么实现电压测量的测量范围是0~20V,实现电流测量的范围是0~200mA,实现电阻测量的范围是0~1K。在实际生产工作中这样的量程显然是不能满足我们的实际需要的,但是在毕业设计中为了体现原理和实际操作的可实现性使用本方法。

2.3.2 芯片选择

主控芯片的选择及方案对比

方案1:选用专用电压转换芯片INC7107实现电压的测量和现实。缺点是精度比较低,且内部电压转换和控制部分不可控制。优点是价格低廉。

方案2:选用单片机ATS52和A/D转换芯片ADC0832实现电压的转换和控制,用液晶显示出最后的转换电压结果。缺点是价格稍贵。优点是转换精度高,且转换的过程和控制、显示部分可以控制。基于课程设计的要求,优先选用了:方案2。

显示部件的选择及方案对比

方案1:选用4个单体的共阳数码管,将a—h全部连接起来,然后接到单片机口的I/O上进行控制。缺点是焊接时比较麻烦,容易出错。优点是价格比较便宜。

方案2:选用译码芯片74LS47和74LS138配合一个四联的共阳数码管显示。缺点是价格较贵,焊接麻烦,单片机控制时比较麻烦。优点是有效的节约了单片机的I/O口资源,适用于单片机I/O口不够用的情况下。

方案3:方案三:采用LCD液晶显示器显示。而LCD液晶显示则耗能少,能够显示万用表、电压、电流、电阻等汉字,在显示方面更加灵活,而且改变显示时只要改变软件设计就可以,不用改变硬件电路的设计,易于电路的功能扩展。电路的软件设计也很简单。另外,这种设计硬件更加简洁。采用LCD液晶显示方案的缺点是在显示位数比较少时,价格略显昂贵。

基于现有的元器件和设计应用的可操作性,以及以上方案的要求,优先选用了:方案1。

1.STCC52单片机介绍和概述

STCC52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用STC公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash,使得STCC52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

图2.12 STCS52    

STCC52单片机是宏晶科技生产的单时钟、机器周期为1T的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051单片机,而且速度快8~12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D,应用于电机控制,抗干扰能力强的场合。STCC52的主要特点:

(1)机器周期为1T,指令代码完全兼容传统8051单片机;

(2)STCC52系列的工作电压: 5V;

(3)工作频率范围:0~35MHz;

(4)片上集成1280字节RAM,用户应用程序空间60K字节;

(5)无需专用编程器或专用仿真器,可通过串口(P3.0和P3.1)直接下载用户程序,数秒即可完成;

(6)有EEPROM功能用于存储;

(7)看门狗;

(8)四个16位定时器;

(9)7路外部中断,下降沿或低电平触发中断,并新增支持上升沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0(P3.2),INT1(P3.3),T0(P3.4),T1(P3.5),;

(10)工作温度范围:-40~+85℃(工业级),0~75℃(商业级);

(11)8路10位精度的A/D转换,转换速度可达250K/S(每秒钟25万次)。

STCC52管脚图如图2.13所示。

图2.13 STCS52管脚结构

VCC:供电电压。

GND:接地。

P0 口:P0口是一个8位漏极开路的双向I/O口。当作为输出用时,每位能驱动8个TTL逻辑电平。向P0口写入命令“1”时,引脚呈现高阻状态输入。当需要访问数据存储器和外部程序时,P0口也可以复用为低8位的地址/数据线。当处于该种模式下时,P0口具有内上拉电阻。

P1 口:P1 口是一个8 位双向I/O 口且其具有内上拉电阻,该口能同时驱动4 个TTL 逻辑电平。对P1 口写入命令“1”时,内上拉电阻将端口拉高,即可作为输入端口来使用。当其为输入口时,外部被拉低的引脚由于内阻的原因,将会输出一定的电流。

P2口:P2口为一个内部上拉电阻的8 位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的 管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给 出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高 八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口作为STCC52的一些特殊功能口,如表2.1所示:

表2.1 STCC52单片机一些特殊功能

引脚号    备选功能

P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0    

(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
2.ADC0832A/D转换模块的介绍

ADC0832 是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832 可使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。ADC0832的主要特点是:

(1)输入输出电平与TTL/CMOS相兼容;

(2)5V电源供电时输入电压在0~5V之间;

(3)工作频率为250KHZ,转换时间为32μS;

(4)一般功耗仅为15mW;

(5)8P、14P—DIP(双列直插)、PICC 多种封装;

(6)商用级芯片温宽为0°C ~ +70°C,工业级芯片温宽为−40°C ~ +85°C;

ADC0832A/D转换模块的管脚图如图2.14所示。其各个管脚的功能如下:

2.14 ADC0832A/D转换管脚图

CS_:片选使能,低电平芯片使能。

CH0:模拟输入通道0,或作为IN+/-使用。

CH1:模拟输入通道1,或作为IN+/-使用。

GND:芯片参考0 电位(地)。

DI:数据信号输入,选择通道控制。

DO:数据信号输出,转换数据输出。

CLK:芯片时钟输入。

Vcc/REF:电源输入及参考电压输入(复用)。

ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。

3 硬件设计

3.1 电路模块

1.单片机最小系统

单片机最小系统电路实现对采集数据的处理和输出显示的控制,主控电路由STCC52单片机、晶振电路、复位电路三部分组成,各部分作用如下所述,由其三部分构成的单片机最小系统电路如图2.15所示[10]。

图3.1 单片机最小系统

2.电源部分

由于高压分流电会对弱电系统产生干扰,影响系统的稳定性。为了本次设计简单实用性,以及可操作性采用电池盒构成电池组进行供电,所以本次设计采用外部电池组供电,这样做的目的就是为了方便简单,但是采用电池吃电源存在维护的不方便和电压电流衰减等缺点。当然也可以采用外部稳压电源,这样做使得输出稳定,电压电流衰减对其影响较小,但是在设计电路的时候以及硬件设计时增加电路复杂性。综上所述,采用电池组供电。在用到电池组供电时用到链接电院和电脑的连接线,在连接线上使用DC电源插口。DC电源插口的原理图如图2.16所示。电源插口的外接电路如图2.17所示,其中CON2为电源插针,其中S1为一个开关。

                

图3.2 DC电源插口的原理图                      图3.3 电源插口的外接电路

3.输入端

为了设计简单,没有设计保护装置所以输入端直接为红黑表笔,如图2.18所示。在使用中黑表笔为接地端,根据不同的测量要求(电压、电流、电阻)选择不同的档位进行测量。

图3.4 万用表输入端

4.电压测量电路

由前面的万用表的原理可知,利用电阻的分压原理便可以得到不同测量量程。但是我们设计的电压测量范围是0~20V,对量程要求小所以其原理图如图2.19所示。在实际我们可以采用滑动变阻器来保护电路,通过改变划片位置来实现分压,这样做的目的就是为了是电路设计简单的同时起到保护作用。

图3.5 电压测量电路

5.电流测量电路

利用前面的万用表原理,电阻的分流作用就可以得到不同量程的电流测量范围。本次设计的测量范围是0~200mA,所以直接串联电阻如图2.20所示。在实际设计仿真中往往加入滑动变阻器,滑动变阻器在电路中的作用就是调节和保护作用。

图3.6 电流测量电路

6.电阻测量电路

电阻测量电路如图2.21所示。利用电阻的分压和分流作用可以设计出不同的测量量程,由于本次设计要求电阻测量范围是0~1K,所以直接在测量输入端串联电阻,这个电阻起到保护电路和分压作用。在通常设计仿真时在输入端串联一个滑动变阻器,其作用和电压测量电路以及电流测量电路的作用相同。

图3.7 电阻测量电路

7.显示电路模块

如图3.8所示,本次设计采用4位数码管显示。

8.数码管驱动电路

本次设计显示模块没用采用液晶显示,而是采用了简单数码显示。数码显示的驱动电路是由四个三极管和电阻串联而成的,电路设计如图2.23所示。

    

  图3.8 数码管显示模块                    图3.9 数码管驱动电路

9.ADC0832A/D转换模块

本次设计的A/D转换模块采用的是ADC0832,其电路设计如图3.10所示。

图3.10 ADC0832电路图

10.震荡电路

晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容,这个不能忽略。本次设计的震荡电路如图3.11所示。

图3.11 震荡电路

11.复位电路

单片机需要正常工作,以及系统中的硬件电路可以可靠的工作,复位模块电路是必须的组成部分,复位电路最重要的是上电复位。由于微机电路的构成均是时序电路且是数字电路,它需要一致的时钟脉冲,因此在电源刚上电时,只有当VCC达到标准电压时以及在晶振稳工作在稳定状态之后,复位信号才被撤除,单片机的各部分电路开始正常工作。其次,复位电路还需要在单片机出现异常或者需要手动重置单片机程序时,可以通过按键等进行强行复位单片机的电路,并且复位的优先级会是最高的。本次设计的复位电路如图3.12所示。

图3.12 复位电路

3.2 硬件电路

数字万用表整体硬件结构图。

图3.13 硬件结构图

4 软件仿真

4.1 软件介绍

Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器[11]。

4.2 流程图

图4.1 软件仿真流程图

4.3 仿真图

图4.2 仿真图

4.4仿真结果

4.4.1 电压档仿真结果

在仿真时当将电压档开关打开,仿真结果如图3.1所示。改变滑动变阻器相当于改变红黑表笔接的不同回路进行电压测量(可以在重新测量之前按下复位键进行复位后在进行测量)。通过R2,R3进行分压,设测得的电压U,则实际电压U1=(U/R3)*R2;注:所测电压大于20V讲烧坏AD转换器。

图4.3 电压档仿真仿真结果

4.4.2 电流档仿真结果

在进行电流测量时首先进行电流档复位待显示清零后在进行电流档仿真,改变滑动变阻器相当于改变红黑表笔接的不同回路进行电流测量。如图4.4所示,在测量中若设测得的电压为U:则电路中的电流为I=(U/5)*1000(MA);注:电流过大则会烧坏电阻R4;

图4.4 电流档仿真结果

4.4.3 电阻档位仿真结果

在进行电阻档位仿真时首先进行复位键进行复位,待显示清零以后再进行测量仿真,在仿真过程中改变滑动变阻器的位置相当于改变了红黑表笔所接的不同阻值的电阻。如图4.5所示,设测的电压为U,则电路中电流I=(5-U)/100所测电阻R=U/I=U/((5-U)/100),注:电阻过大,则会造成测量不准确。

图4.5 电阻档位仿真结果

5 结语

通过这次的毕业设计,是我对测量原理有了更深的认识,从理论和实践上都得到了很大的提高,所以这次任务的完成使我学到了很多东西。首先丰富了自己的知识面,学到了以前没有学通的东西,具体了解了怎样去完成一个电路设计:从模块功能图、电路图、焊接电路板、检查电路板、调试分析到最后数据的测量一整套东西。

几个月的毕业设计就要结束了,回想整个毕业设计过程,觉得受益匪浅。通过这次毕业设计,使我对万用表的设计有了更进一步的了解,也加深了对大学四年中所学的基础知识的理解。毕业设计是理论联系实际的有效方法。在具体设计过程中,必须考虑到方方面面的问题,通过毕业设计不但加深了对书本知识的理解,同时还学到了书本上学不到的知识,那就是实际设计中所获得的经验。理论与实际总是存在差距,在理论上准确无误的设计,在实际中往往存在各种问题。这样,在设计时就必须考虑,系统在实际运用中能否正常工作。毕业设计使我学会了从实际出发设计系统,而不仅仅考虑理论上的可行性。

   致谢

本论文是在黄朝军老师的亲切关怀和悉心指导下完成的,他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。黄老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向王老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过毕业论文小组的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。

在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后,再次对关心、帮助我的老师和同学表示衷心地感谢!

参考文献

[1] 秦辉,韩冰,马术才,刘钰,马艳丽.智能数字万用表研制[J],实验技术与管理,2010,27(7):-67.

[2] 徐见炜.基于C8051F340的智能万用表[J],电气与自动化,2012,41(4):1-192.

[3] 刘洋,王厚军,戴志坚.PXI高精度数字万用表的设计与实现[J],电子测量技术,2011,34(10):69-71.

[4] 白雨微,薛巨峰,鲁志军.六位半数字多功能万用表设计[J],林业机械与木工设备,2010,38(12):41-43.

[5] 杨桂林.基于SPCE0612A的智能数字万用表[J],海南大学学报自然科学版,2013,31(3):249-253.

[6] 汤莉莉,黄伟.基于MSP430单片机的多功能数字万用表设计[J],科技创新导报,2012,26:41-42.

[7] 祝凤金.基于单片机的万用表设计[J],电子技术,2011,38(1):50-51.

[8] 周艳.基于单片机的万用表设计[J],科技视界,2015,117-118.

[9] 杰.单片微机原理及应用[M].机械工业出版社.2005.07.

[10] 童诗白.模拟电子技术基础[M].高等教育出版社.2005.01.

[11] 张伟,王力.protel2004入门与提高[M].人民邮电出版社.2005.11.

[12] Wang Lei-gao,Wang Chun-ping,Li Ming.Design of Digital Multimeter Module Based on ARM[J],2010 

[13] International Conference on Computer,Mechatronics,Control and Electronic Engineering(CMCE)[J],2010:110-112.

附录A 

附录B 

110uf直插电解电容1
230P直插瓷片电容2
3F5461BH2.54间距,0.56寸4位共阳数码管1
4Header 4排针4-Pin2
5POWERDC电源插座1
6S9012PNP 三极管4
7100R/2W色环电阻1
85R/2W1
92.2K4
1030K1
1110K2
12SW-PB按键6X6X5MM1
13SWITCH自锁开关4
14ADC0832AD转换器1
15STCC51/5251单片机1
1612MHZ晶振1
附录C

附件D 

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include "intrins.h"                                               

#define     u8              unsigned char

#define     u16           unsigned int

#define     uchar              unsigned char

#define     uint           unsigned int

//按键                 

sbit Key_V=P3^0;                 //电压模式键

sbit Key_R=P1^4;                 //电阻模式键

sbit Key_I=P3^5;                 //电流模式键

#define KEY_V         1        //电压模式

#define KEY_R            2        //电阻模式

#define KEY_I            3        //电流模式

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

数码管显示相关函数

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

#define   SMG_NUM   4

u8 code DisplayNum[16]={

0xc0,        //0

0xf9,        //1

0xa4,        //2

0xb0,        //3

0x99,        //4

0x92,        //5

0x82,        //6

0xf8,        //7

0x80,        //8

0x90,        //9

0x88,        //A

0x83,        //b

0xc6,        //C

0xa1,        //d

0x86,        //E

0x8e        //F

};

//

u8 code DisplayOther[]={

0xff,         //0        空

0x7f,         //1        "."

0xbf,            //2        "-"

0xa7            //3        c

};

void delay_ms(uint q)

{

    uint i,j;

for(i=0;i        for(j=0;j<110;j++);

}

//数码管位选定义

sbit smg_we1 = P2^0;        //东西数码管2

sbit smg_we2 = P2^1;            //东西数码管1

sbit smg_we3 = P2^2;            //南北数码管2

sbit smg_we4 = P2^3;            //南北数码管1

void smg_we_switch(uchar i)

{

    switch(i)

    {

        case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;

        case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;

        case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;

        case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;

    }    

}

void delay_1ms(uint q)

{

    uint i,j;

for(i=0;i        for(j=0;j<110;j++);

}

#define LED_a        0    //数码管段选的a段接在段选IO口的第0位

#define LED_b        2

#define LED_c        6

#define LED_d        4

#define LED_e        3

#define LED_f        1

#define LED_g        7

#define LED_dp    5

u8 ChangeFor(u8 dat)

{

    u8 temp=0;

    if(dat&0x01)        //判断数据的第一位是否为1

        temp|=0x01<    if(dat&0x02)

        temp|=0x01<    if(dat&0x04)

        temp|=0x01<    if(dat&0x08)

        temp|=0x01<    if(dat&0x10)

        temp|=0x01<    if(dat&0x20)

        temp|=0x01<    if(dat&0x40)

        temp|=0x01<    if(dat&0x80)

        temp|=0x01<    return temp;

}

uchar dis_smg[SMG_NUM];                        //显示缓存数组

void DisplayScan()

{

    static uchar i;

    P0 = 0xff;              //消隐 

        smg_we_switch(i);                    //位选

    P0 =    ChangeFor(dis_smg[i]);          //段选      

    i++;

if(i>=SMG_NUM)

        i=0;

}

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

ADC0832相关函数

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

sbit ADCS     =P1^2; //ADC0832 片选

sbit ADCLK  =P1^0; //ADC0832 时钟

sbit ADDI     =P1^1; //ADC0832 数据输入        /*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,

sbit ADDO     =P1^1; //ADC0832 数据输出        /*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上

unsigned int Adc0832(unsigned char channel)

{

    uchar i=0;

    uchar j;

    uint dat=0;

    uchar ndat=0;

    uchar  Vot=0;

    if(channel==0)channel=2;

    if(channel==1)channel=3;

    ADDI=1;

    _nop_();

    _nop_();

    ADCS=0;//拉低CS端

    _nop_();

    _nop_();

    ADCLK=1;//拉高CLK端

    _nop_();

    _nop_();

    ADCLK=0;//拉低CLK端,形成下降沿1

    _nop_();

    _nop_();

    ADCLK=1;//拉高CLK端

    ADDI=channel&0x1;

    _nop_();

    _nop_();

    ADCLK=0;//拉低CLK端,形成下降沿2

    _nop_();

    _nop_();

    ADCLK=1;//拉高CLK端

ADDI=(channel>>1)&0x1;

    _nop_();

    _nop_();

    ADCLK=0;//拉低CLK端,形成下降沿3

    ADDI=1;//控制命令结束

    _nop_();

    _nop_();

    dat=0;

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

    {

        dat|=ADDO;//收数据

        ADCLK=1;

        _nop_();

        _nop_();

        ADCLK=0;//形成一次时钟脉冲

        _nop_();

        _nop_();

        dat<<=1;

        if(i==7)dat|=ADDO;

    }

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

    {

        j=0;

        j=j|ADDO;//收数据

        ADCLK=1;

        _nop_();

        _nop_();

        ADCLK=0;//形成一次时钟脉冲

        _nop_();

        _nop_();

        j=j<<7;

        ndat=ndat|j;

        if(i<7)ndat>>=1;

    }

    ADCS=1;//拉低CS端

    ADCLK=0;//拉低CLK端

    ADDO=1;//拉高数据端,回到初始状态

dat<<=8;

    dat|=ndat;

    return(dat);            //return ad data

}

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

主函数

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

void main (void)

{

    u8 Mode;

    uchar Read_AD;    //用于读取ADC数据

    uchar VIN;            //电压值变量

    u16 RIN;                //电阻值变量

    u16 IIN;                //电流值变量

    u16 i=0;;

    while (1)                      //主循环

    {        

        if(Key_V==0)                //电压按键按下

        {

            Key_V=1;                    //清除按下标记

            if((Key_R==0)||(Key_I==0))//电阻电流按键也有按下

            {

                Key_I=1;

                Key_R=1;

                Key_V=1;

                Mode=4;                    //标记为错误模式

            }

            else                            //电阻电流键都没有按下

            Mode=1;                        //标记为电压模式

        }

        if(Key_R==0)                //同电压键

        {

            Key_R=1;

            if((Key_V==0)||(Key_I==0))

            {

                Key_I=1;

                Key_R=1;

                Key_V=1;

                Mode=4;

            }

            else

            Mode=2;

        }

        if(Key_I==0)                //同电压键

        {

            Key_I=1;

            if((Key_V==0)||(Key_R==0))

            {

                Key_I=1;

                Key_R=1;

                Key_V=1;

                Mode=4;

            }

            else

            Mode=3;

        }

        if((Key_V==1)&&(Key_R==1)&&(Key_I==1))//都没有按下

        {

            Mode=0;            //标记为空闲模式

        }

        if(i==0)

        {

        Read_AD=Adc0832(0);                //读取AD值

        }

        i++;

        if(i>300)

            i=0;

            switch(Mode)

        {

            case 0:

                        //空闲模式

                                dis_smg[0]=DisplayOther[2];//关闭数码管显示

                                dis_smg[1]=DisplayOther[2];

                                dis_smg[2]=DisplayOther[2];

                                dis_smg[3]=DisplayOther[2];

            break;

            case 1:

                        //电压模式

                                VIN=Read_AD*200/255;                                        //换算出电压值

                                dis_smg[0]=DisplayNum[0xa];                            //显示电压标志

                                dis_smg[1]=DisplayNum[VIN/100%10];            //电压十位

                                dis_smg[2]=DisplayNum[VIN/10%10]&0x7f;    //电压个位

                                dis_smg[3]=DisplayNum[VIN%10];                    //电压十分位

            break;

            case 2:

                        //电阻模式        

                                RIN=Read_AD*100/(255-Read_AD);                //换算出电阻值

                                dis_smg[0]=DisplayNum[0xb];               //显示电阻标志

                                dis_smg[1]=DisplayNum[RIN/100%10];    //电阻百位

                                dis_smg[2]=DisplayNum[RIN/10%10];     //电阻十位

                                dis_smg[3]=DisplayNum[RIN%10];        //电阻个位

                                if(RIN>=1000)                                                    //超过或等于1000;

                                {

                                    dis_smg[1]=DisplayOther[2];                    //显示"-"

                                    dis_smg[2]=DisplayOther[2];                    //显示"-"

                                    dis_smg[3]=DisplayOther[2];                    //显示"-"

                                }

            break;

            case 3:

                        //电流模式        

                                IIN=4*Read_AD;//单位mA                                //换算出电流值

                                dis_smg[0]=DisplayNum[0xc];           //显示电流标志

                                if(IIN<=200)                                                    //没有超过范围

                                {

                                    dis_smg[1]=DisplayNum[IIN/100%10];    //电流百位

                                    dis_smg[2]=DisplayNum[IIN/10%10];     //电流十位

                                    dis_smg[3]=DisplayNum[IIN%10];        //电流个位

                                }

                                else

                                {

                                    dis_smg[1]=DisplayOther[2];                    //显示"-"

                                    dis_smg[2]=DisplayOther[2];                    //显示"-"

                                    dis_smg[3]=DisplayOther[2];                    //显示"-"

                                }

            break;

            case 4:

                        //错误模式        

                            dis_smg[0]=DisplayNum[0xe];                    //显示"E"

                            dis_smg[1]=DisplayNum[0xe];         //显示"E"

                            dis_smg[2]=DisplayNum[0xe];         //显示"E"

                            dis_smg[3]=DisplayNum[0xe];         //显示"E"

            break;

            default    :    

            break;

        }

        DisplayScan();        //数码管动态扫描

    }

}

文档

基于单片机的数字万用表的设计

毕业论文(设计)题目基于单片机的数字万用表的设计学生姓名王娅学号12******85所在学院物理与电信工程学院专业班级电信1203班指导教师黄朝军完成地点物理与电信工程学院实验室2016年6月5日陕西理工学院本科毕业设计任务书院(系)物理与电信工程学院专业班级电子信息科学与技术(电信1203)学生姓名王娅一、毕业设计题目基于单片机的数字万用表设计二、毕业设计工作自2015年11月9日起至2016年5月18日止三、毕业设计进行地点:四、毕业设计应完成内容及相关要求:数字万用表是用数字化测量技术,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top