河南科技学院
2010 届本科毕业设计
设计题目:基于单片机的数字电压表的设计
学生姓名:
所在院系:
所学专业:
导师姓名:
完成时间: 2011-05-25
摘要
本文介绍了一种基于单片机的简易数字电压表的设计。该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。A/D转换主要由芯片ADC0832来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片ATC51来完成,其负责把ADC0832传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0832芯片工作。
该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一
个四位一体的7段数码管显示出来。 关键词 单片机;数字电压表;A/D转换;ATC51;ADC0832
Design of Simple Digital Voltmeter Based on Single-chip
Microcontroller
Abstract
This paper which introduces a kind of simple digital voltmeter is based on single-chip microcontroller design. The circuit of the voltage meter is mainly consisted of three mould pieces: A/D converting mould piece, A/D converting is mainly completed by the ADC0832, it converts the collected analog data into the digital data and transmits the outcome to the manifestation controlling mould piece. Data processing is mainly completed by the ATC51 chip, it processes the data produced by the ADC0832 chip and generates the right manifestation codes, also transmits the codes to the manifestation controlling mould piece. Also, the ATC51 chip controls the ADC0832 chip to work.
The voltmeter features in simple electrical circuit, lower use of elements, low cost, moreover, its measuring precision and reliability. The voltmeter is capable of measuring voltage inputs from 1 route ranging from 0 to 5 volt, and displaying the measurements though a digital code tube of 7 pieces of LED.
Keywords Single-chip microcontroller; Digital voltmeter; A/D converter; ATC51; ADC0832
目 录
1绪论 ........................................................................ 1 2设计总体方案 ...................................................... 2 2.1设计要求 ...................................................... 2 2.2设计思路 ...................................................... 2 2.3设计方案 ...................................................... 2 3硬件电路设计 ..................................................... 3 3.1单片机最小系统电路 ............................................ 3 3.2 ADC0832介绍 ................................................... 6 3.2.1 ADC0832 主要特点 ........................................... 7 3.2.2 ADC0832管脚介绍 .......................................... 7 3.2.3单片机对ADC0832的控制原理 ....................................... 8 3.3 LED数码管 .................................................... 10 3.3.1 LED数码管的主要技术参数 ................................. 10 3.3.2 LED数码管的引脚说明 ..................................... 11 3.3.3 LED数码管编码说明 ............................................... 12 3.4单片机最小系统电路 ........................................... 13 3.5 AD0832电路 .................................................. 14 3.6四位数码管显示电路 ........................................... 14 3.7 电路原材料清单 ............................................... 15 3.8使用工具及仪表清单 ........................................................................................................ 16 4软件设计 ......................................................... 17 4.1程序设计总方案 ............................................... 17 4.2 系统子程序设计 .............................................. 17 4.2.1 初始化程 ............................................... 17 4.2.2 AD转换子程序 ........................................... 17 4.2.3显示子程序 .............................................. 18 5电压表的调试及性能分析...................................... 19 5.1调试与测试 ................................................... 19 5.2 性能分析............................................................... 19 6总结 ............................................................. 20 参考文献........................................................... 21 谢辞............................................................... 22 附录............................................................... 23 附录一程序源代码 ................................................. 23 附录二电路图 ............................................................... 27
1.绪论
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。
传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。数字电压表是诸多数字化仪表的核心与基础。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。
最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型。数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC化),另一方面,精度也从0.01%-0.005%。
目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。
本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。其中,A/D转换采用ADC0832对输入的模拟信号进行转换,控制核心ATC51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。
1
2 设计总体方案
2.1设计要求
⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。 ⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。
⑶电压显示用4位一体的LED数码管显示,至少能够显示两位小数。 ⑷尽量使用较少的元器件。
2.2 设计思路
⑴根据设计要求,选择ATC51单片机为核心控制器件。 ⑵A/D转换采用ADC0832实现。
⑶电压显示采用4位一体的LED数码管。
⑷LED数码的段码输入,由并行端口P2产生:位码输入,用并行端口P0产生。
2.3 设计方案
硬件电路设计由6个部分组成; A/D转换电路,ATC51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。
ATC51 P1 P0 P 2 时钟电路 A/D转换电路 测量电压输入 显示系统 复位电路 图1 数字电压表系统硬件设计框图
2
3.硬件电路设计
3.1单片机的介绍
40个引脚,4k bytes flash片内程序存储器,128 bytes的随机存取数据存储器(ram),32个外部双向输入/输出(i/o)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(wdt)电
路,片内时钟振荡器。 ATS52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB可在线编程闪存。该器件采用Atmel公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI串行口改写或用同用的非易失性存储器改写。通过把通用的8位CPU与可在线下载的Flash集成在一个芯片上,ATS52便成为一个高效的微型计算机。它的应用范围广,可用于解决复杂的控制问题,且成本较低。其结构框图如图3.1所示。
图3.1 ATS52结构框图
3
图3.2 ATS52
此外,ATS52设计和配置了震荡频率可为12MHZ并可通过软件设置省电模式。空闲模式下,cpu暂停工作,而ram定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存ram的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有pdip、tqfp和plcc等三种封装形式,以适应不同产品的需求。 主要功能特性:
· 兼容mcs-51指令系统
· 4k可反复擦写(>1000次)isp flash rom · 32个双向i/o口 · 4.5-5.5v工作电压
· 2个16位可编程定时/计数器 · 时钟频率0-33mhz
· 全双工uart串行中断口线 · 128x8bit内部ram
· 2个外部中断源 · 低功耗空闲和省电模式
· 中断唤醒省电模式 · 3级加密位
· 看门狗(wdt)电路 · 软件设置空闲和省电功能
· 灵活的isp字节和分页编程
4
· 双数据寄存器指针
按照功能,ATS52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O口、控制和复位等。
1.多功能I/O口
ATS52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0 ~ P0.7,P1.0 ~ P1.7,P2.0 ~ P2.7,P3.0 ~ P3.7,共32根I/O线。每根线可以单独用作输入或输出。
①P0端口,该口是一个8位漏极开路的双向I/O口。在作为输出口时,每根引脚可以带动8个TTL输入负载。当把“1”写入P0时,则它的引脚可用作高阻抗输入。当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。
②P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。P1口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在对Flash编程和程序校验时,P1口接收低8位地址。
另外,P1.0与P1.1可以配置成定时/计数器2的外部计数输入端(P1.0/T2)与定时/计数器2的触发输入端(P1.0/T2EX),如图3.3所示。
端口引脚 P1.0 P1.1 P1.5 P1.6 P1.7 复用功能 T2(定时器/计算器2的外部输入端) T2EX(定时器/计算器2的外部触发端和双向控制) MOSI(用于在线编程) MISO(用于在线编程) SCK(用于在线编程) 图3.3 P1口管脚复用功能
③ P2端口,该口是带有内部上拉电阻的8位双向I/O端口,P2口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。P2口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在访问外部程序存储器或16位的外部数据存储器时,P2口送出高8位地址,在访问8位地址的外部数据存储器时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。在对Flash编程和程序校验期间,P2口也接收高位地址或一些控制信号。
④ P3端口,该口是带有内部上拉电阻的8位双向I/O端口,P3口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。P3口作输入口使用时,
5
因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 在ATS52中,同样P3口还用于一些复用功能,如表3.2所列。在对Flash编程和程序校验期间,P3口还接收一些控制信号。
端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 复用功能 RXD(串行输入口) TXD(串行输出口) INT0(外部中断0) INT1(外部中断1) T0(定时器0的外部输入) T1(定时器1的外部输入) WR(外部数据存储器写选通) RD(外部数据存储器读选通) 图3.4 P3端口引脚与复用功能表
2.RST 复位输入端。在振荡器运行时,在此脚上出现两个机器周期的高电平将使其单片机复位。看门狗定时器(Watchdog)溢出后,该引脚会保持98个振荡周期的高电平。在SFR AUXR(地址8EH)寄存器中的DISRTO位可以用于屏蔽这种功能。DISRTO位的默认状态,是复位高电平输出功能使能。
3.ALE/PROG 地址锁存允许信号。在存取外部存储器时,这个输出信号用于锁存低字节地址。在对Flash存储器编程时,这条引脚用于输入编程脉冲PROG。一般情况下,ALE是振荡器频率的6分频信号,可用于外部定时或时钟。但是,在对外部数据存储器每次存取中,会跳过一个ALE脉冲。在需要时,可以把地址8EH中的SFR寄存器的0位置为“1”,从而屏蔽ALE的工作;而只有在MOVX或MOVC指令执行时ALE才被激活。在单片机处于外部执行方式时,对ALE屏蔽位置“1”并不起作用。
4.PSEN 程序存储器允许信号。它用于读外部程序存储器。当ATS52在执行来自外部存储器的指令时,每一个机器周期PSEN被激活2次。在对外部数据存储器的每次存取中,PSEN的2次激活会被跳过。
5.EA/Vpp 外部存取允许信号。为了确保单片机从地址为0000H~FFFFH的外部程序存储器中读取代码,故要把EA接到GND端,即地端。但是,如果锁定位1被编程,则EA在复位时被锁存。当执行内部程序时,EA应接到Vcc。在对Flash存储器编程时,这条引脚接收12V编程电压Vpp。
6.XTAL1 振荡器的反相放大器输入,内部时钟工作电路的输入。 7.XTAL2 振荡器的反相放大器输出。 3.2 ADC0832介绍
ADC0832 是美国国家半导体公司生产的一种 8 位分辨率、双通道 A/D 转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,
6
其目前已经有很高的普及率。学习并使用 ADC0832 可是使我们了解 A/D 转换器的原理,有助于我们单片机技术水平的提高。 3.2.1 ADC0832 主要特点 · 8位分辨率; · 双通道A/D转换;
· 输入输出电平与TTL/CMOS相兼容; · 5V电源供电时输入电压在0~5V之间; · 工作频率为250KHZ,转换时间为32μS; · 一般功耗仅为15mW;
· 8P、14P—DIP(双列直插)、PICC 多种封装;
· 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为−40°C to +85°C; 3.2.2 ADC0832管脚介绍
图3.5 ADC0832引脚图
· CS_ 片选使能,低电平芯片使能。
· CH0 模拟输入通道0,或作为IN+/-使用。
7
· CH1 模拟输入通道1,或作为IN+/-使用。 · GND 芯片参考0 电位(地)。 · DI 数据信号输入,选择通道控制。 · DO 数据信号输出,转换数据输出。 · CLK 芯片时钟输入。
· Vcc/REF 电源输入及参考电压输入(复用)。
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。
3.2.3单片机对ADC0832 的控制原理
正常情况下 ADC0832 与单片机的接口应为 4 条数据线,分别是 CS、CLK、DO、DI。但由于 DO 端与 DI 端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将 DO 和 DI 并联在一根数据线上使用。(见图 3)当 ADC0832 未工作时其 CS 输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行 A/D 转换时,须先将 CS 使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟脉冲,DO/DI 端则使用 DI 端输入通道功能选择的数据信号。在第 1 个时钟脉冲的下沉之前 DI 端必须是高电平,表示启始信号。在第 2、3 个脉冲下沉之前 DI 端应输入 2 位数据用于选择通道功能,其功能项见图3.6。
8
图3.6 ADC0832功能图
如图3.5 所示,当此 2 位数据为“1”、“0”时,只对 CH0 进行单通道转换。当 2 位数据为“1”、“1”时,只对 CH1 进行单通道转换。当 2 位数据为“0”、“0”时,将 CH0 作为正输入端 IN+,CH1 作为负输入端 IN-进行输入。当 2 位数据为“0”、“1”时,将 CH0 作为负输入端 IN-,CH1 作为正输入端 IN+进行输入。到第 3 个脉冲的下沉之后 DI 端的输入电平就失去输入作用,此后 DO/DI端则开始利用数据输出 DO 进行转换数据的读取。从第 4 个脉冲下沉开始由 DO端输出转换数据最高位 DATA7,随后每一个脉冲下沉 DO 端输出下一位数据。直到第 11 个脉冲时发出最低位数据 DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第 11 个字节的下沉输出 DATD0。随后输出 8 位数据,到第 19 个脉冲时数据输出完成,也标志着一次 A/D 转换的结束。最后将 CS 置高电平禁用芯片,直接将转换后的数据进行处理就可以了。更详细的时序说明请见图3.6。
9
图3.7ADC0832时序图
作为单通道模拟信号输入时 ADC0832 的输入电压是 0~5V 且 8 位分辨率时的电压精度为 19.53mV。如果作为由 IN+与 IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行 IN+与 IN-的输入时,如果 IN-的电压大于 IN+的电压则转换后的数据结果始终为00H。
3.3 LED数码管
3.3.1 LED数码管主要技术参数
图3.8 数码管
数码管使用条件:
a、段及小数点上加限流电阻
10
b、使用电压:段:根据发光颜色决定; 小数点:根据发光颜色决定 c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA
上面这个只是七段数码管引脚图,其阳极数码管引脚图和共阴极的是一样的,4位数码管引脚图数码管使用注意事项说明: (1)数码管表面不要用手触摸,不要用手去弄引角; (2)焊接温度:260度;焊接时间:5S
(3)表面有保护膜的产品,可以在使用前撕下来。
3.3.2 LED数码管的引脚说明
这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所示。图中的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。
图3.9 共阳数码管内部结构
11
图3.10 共阴数码管内部结构
对于单个数码管来说,从它的正面看进去,左下角那个脚为1脚,以逆时针方向依次为1`10脚,左上角那个脚便是10脚了,上面两个图中的数字分别与这10个管脚一一对应。注意,3脚和8脚是连通的,这两个都是公共脚。 还有一种比较常用的是四位数码管,内部的4个数码管共用a~dp这8根数据线,为人们的使用提供了方便,因为里面有4个数码管,所以它有4个公共端,加上a~dp,共有12个引脚,下面便是一个共阴的四位数码管的内部结构图(共阳的与之相反)。引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,下图中的数字与之一一对应。
图3.11位共阳数码管内部结构
3.3.3数码管编码说明
12
4位数码管编码说明,如图3.12所示:
0 1 2 3 4 5 6 7 8 9 H L - C P2.7 e 0 1 0 1 1 1 0 1 0 1 0 0 1 0 P2.6 d 0 1 0 0 1 0 0 1 0 0 1 0 1 0 P2.5 dp 1 1 1 1 1 1 1 1 1 1 1 1 1 1 P2.4 c 0 0 1 0 0 0 0 0 0 0 0 1 1 1 P2.3 g 1 1 0 0 0 0 0 1 0 0 0 0 0 1 P2.2 b 0 0 0 0 0 1 1 0 0 0 0 0 1 1 P2.1 f 0 1 1 1 0 0 0 1 0 0 0 0 1 0 P2.0 a 0 1 0 0 1 0 0 0 0 0 1 1 1 0 28H EBH 32H A2H E1H A4H 24H EAH 20H A0H 61H 3DH F7H 3CH 图3.12 控制命令表
3.4单片机最小系统电路
13
图3.13 单片机最小系统
(1) 单片机9脚接复位电路,可按复位按钮S1给单片机复位。 (2) 晶振采用12MHZ。
(3) 由于单片机只访问片内Flash ROM并执行内部程序存储器中的指令,因此
单片机的31脚接高电平VCC。 3.5 ADC832电路。
图3.14 ADC0832电路
ADC0832的1脚片选接P1.3,2脚通道0接电位器的抽头,4脚接低,5脚和6脚是数据接P1.2,7脚时钟接P1.0,8脚接VCC。 3.6 四位数码管显示电路
14
图3.15 数码管显示电路
4位数码管为共阳管,由于单片机输出电流比较小,故用4个PNP型的三极管9015来驱动数码管。单片机输出低电平时三极管导通,使数码管的4各公共端1、4、5和12脚为高电平,此时数码管的数据端输入低电平后数码管被点亮,120欧电阻R12到R19为三极管的限流电阻。 3.7电路原材料清单 序号 1 2 3 4 5 6 7 电阻 电阻 传感器 电阻 电阻 电阻 晶振 名称 1KΩ 200Ω DS18B20 510Ω 5.6KΩ 10KΩ 12MHz 型号 支 支 支 支 支 支 支 单位 1 5 1 8 1 4 1 数量 备注 15
8 9 10 11 12 13 14 15 16 普通电容 电解电容 5号电池 小按钮 三极管 三极管 蜂鸣器 数码管 单片机 33pF 10uF/50V 9012 9013 AT89S52 支 支 节 支 支 支 支 支 支 2 1 3 4 4 1 1 1 1 3.8使用工具及仪表清单 序号 1 2 3 4 5 6 名称 万用表 內热式电烙铁 焊锡丝 直流稳压电源 编程烧写器 导线 型号 块 台 台 单位 1 1 若干 1 1 若干 数量 备注
16
4. 软件设计
4.1 程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图4.1所示。
开始 初始化 调用A/D转换子程序 调用显示子程序 结束
图4.1 数字式直流电压表主程序框图
4.2 系统子程序设计 4.2.1 初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。
17
4.2.2 A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图4.2所示。
开始 启动转换 A/D转换结束? 输出转换结果 数值转换 显示 结束
图4.2 A/D转换流程图
4.2.3 显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
18
5电压表的调试及性能分析
5.1 调试与测试
本设计应用Proteus6及KEIL51软件,首先根据自己设计的电路图用Proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后我们用KEIL51软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行,最后进行端口电压的对比测试,测试的第一路对比见图5.1中标准电压值采用Proteus6软件中的模拟电压表测得。
图5.1
从图中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可以完全满足要求。
5.2 性能分析
由于单片机为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH)因此单片机最大的数值分辨率为0.0196V(5/255)。这就决定了该电压表的最大分辨率(精度)只能达到0.0196V。测试时电压数值的变化一般以0.02V的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器。
简易数字电压表测得的值基本上均比标准值偏大0.01-0.02V。这可以通过校正0832的基准电压来解决,因为该电压表设计时直接用7805的供电电源作为基准电压,电压可能有偏差。另外可以用软件编程来校正测量值。
19
6.总结
经过一段时间的努力,毕业论文-基于单片机的简易数字电压表基本完成。但设计中的不足之处仍然存在。这次设计是我第一次设计电路,并用Proteus实现了仿真。在这过程中,我对电路设计,单片机的使用等都有了新的认识。通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。
基于单片机的数字电压表使用性强、结构简单、成本低、外接元件少。在实际应用工作应能好,测量电压准确,精度高。系统功能、指标达到了课题的预期要求、系统在硬件设计上充分考虑了可扩展性,经过一定的改造,可以增加功能。本文设计主要实现了简易数字电压表测量一路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。
通过本次设计,我对单片机这门课有了进一步的了解。无论是在硬件连接方面还是在软件编程方面。本次设计采用了ATC51单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。设计中还用到了模/数转换芯片ADC0832,以前在学单片机课程时只是对其理论知识有了初步的理解。通过这次设计,对它的工作原理有了更深的理解。在调试过程中遇到很多问题,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练。 总之这次电路的设计和仿真,基本上达到了设计的功能要求。在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
20
参考文献
[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998
[2] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994 [3] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,19
[4] 石东海等.单片机数据通信技术从入门到精通.西安:西安电子科技大学出版社, 2002.148~150. [5] 王忠飞,胥芳.MCS一51单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出版社,2007.P268-273
[6]蔡朝洋,单片机控制实习与专题制作[M].北京:北京航空航天大学出版社,2006
[7]张毅刚,彭喜源,谭晓昀等.MSC-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1999
[8]周坚.单片机C语言轻松入门[M].北京:北京航空航天大学出版社,2006 [9]李全利,迟荣强.单片机原理及接口技术[M].北京:高等教育出版社,2004 [10]梅丽凤,王艳秋.单片机原理及接口技术(修订本)[M].北京:清华大学出版社;北京交通大学出版社,2006
[11]阎石.数字电子技术基础 [M].北京:高等教育出版社,1998
[12] 廖常初.现场总线概述[J].电工技术,1999.
[13]王宜怀,刘晓升.嵌入式应用技术基础教程.北京:清华大学出版社,2005.7. [14]邵贝贝等.单片机认识与实践.北京:航空航天大学出版社,2006.8. [15]MC75 AT Command Set V03.Siemens Company,2006. [16]Clark
M,
Service
Business
Strategies
and
ArchItectures[M].Birmingham,UK: Wrox Press,2002.
[17]Dave Crane,Eric Pascarello,Darren James.Ajax IN ACTION[M].Manning Publications CO,2006
21
谢辞
经过几个月的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周的地方,如果没有导师的督促指导。以及一起工作的同学们的支持,想要完成这个设计是难以想象的。 在这里要感谢唐俊英老师,他循导善诱的教导和不拘一格的思路给予我无尽的启迪;他严谨细致,一丝不苟的作风一直是我们工作.学习中的榜样;并将积极影响我今后的学习和工作。然后要感谢大学4年来的所有老师,为我们打下了电子专业知识的基础;同时还要感谢06电气所有的同学们,正是因为有你们的支持和鼓励。我才能在温暖的环境中茁壮成长并顺利完成毕业设计。
附录
附录一 程序源代码: #include #define uchar unsigned char #define uint unsigned int sbit ADCS = P1^3; sbit ADCLK = P1^0; sbit ADDI = P1^2; sbit ADDO = P1^2; sbit DIAN = P2^5; uchar code LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0}; /*****延时子程序*****/ void Delay(uint num) { while( --num ); } void Display(uint dat) //显示的数值为毫伏 { uchar ge,shi,bai,qian; qian = dat/1000%10; bai = dat/100%10; shi = dat/10%10; ge = dat%10; P2 =0x29; //显示U P0 = 0xbf; Delay(300); 22 P0 = 0xff; P2 =LEDData[shi]; //显示小数位 P0 = 0xef; Delay(300); P0 = 0xff; P2 =LEDData[bai]; //显示个位 P0 = 0xfb; Delay(300); P0 = 0xff; P2 =LEDData[qian]; //显示十位 P0 = 0xfe; DIAN =0; //显示小数点 Delay(300); P0 = 0xff; } uchar ADC0832(bit mode,bit channel) //AD转换,返回结果{ uchar i,dat,ndat; ADCS = 0;//拉低CS端 _nop_(); _nop_(); ADDI = 1; //第1个下降沿为高电平 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADDI = mode; //低电平为差分模式,高电平为单通道模式。 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); 23 ADDI = channel; //低电平为CH0,高电平为CH1 ADCLK = 1;//拉高CLK端 _nop_(); _nop_(); ADCLK = 0;//拉低CLK端,形成下降沿3 ADDI = 1;//控制命令结束(经试验必需) dat = 0; //下面开始读取转换后的数据,从最高位开始依次输出(D7~D0)for(i = 0;i < 8;i++) { dat <<= 1; ADCLK=1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); dat |= ADDO; } ndat = 0; //记录D0 if(ADDO == 1) ndat |= 0x80; //下面开始继续读取反序的数据(从D1到D7) for(i = 0;i < 7;i++) { ndat >>= 1; ADCLK = 1;//拉高时钟端 _nop_(); _nop_(); ADCLK=0;//拉低时钟端形成一次时钟脉冲 _nop_(); _nop_(); if(ADDO==1) ndat |= 0x80; } ADCS=1;//拉高CS端,结束转换 ADCLK=0;//拉低CLK端 ADDI=1;//拉高数据端,回到初始状态 24 if(dat==ndat) return(dat); else return 0; } void main() { uint adc,i; i=254; while(1) { i++; if(i==255){ i=0; adc = ADC0832(1,0); //差分模式,CH0-CH1 adc = adc*19.607843; //转换为实际电压便于显示 } Display(adc); } 附录二 电路图 25 26
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务