数字电压表的设计.doc

上传人:仙人指路1688 文档编号:4149133 上传时间:2023-04-07 格式:DOC 页数:27 大小:327.50KB
返回 下载 相关 举报
数字电压表的设计.doc_第1页
第1页 / 共27页
数字电压表的设计.doc_第2页
第2页 / 共27页
数字电压表的设计.doc_第3页
第3页 / 共27页
数字电压表的设计.doc_第4页
第4页 / 共27页
数字电压表的设计.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《数字电压表的设计.doc》由会员分享,可在线阅读,更多相关《数字电压表的设计.doc(27页珍藏版)》请在三一办公上搜索。

1、单片机课程设计 院系: 工学院 专业:机械设计制造及其自动化 班级: 10机电三班 姓名: * 学号: 0000000000 数字电压表的设计 摘 要数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,不仅精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的

2、生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本文设计了一款基于AT89C51单片机的数字电压表,设计中采ADC0809逐次逼近式A/D转换电路,可实现直流05V的电压测量,并将测量结果通过3位LCD数码管进行显示。该电路设计新颖、功能强大、可扩展性强,系统采用C语言进行程序设计,并通过Proteus仿真实现。关键词:数字电压表,单片机,AT89C51,ADC0809目 录1 设计总方案11.1设计任务11.2设计要求11.3设计思路12 硬件电路设计12.1 A/D转换模块ADC0809逐次逼近式电路说明22.1.1 工作原理22.1

3、.2 典型应用22.1.3 引脚及使用说明42.2 控制模块单片机电路说明62.3 显示模块LED数码显示电路说明82.4 数据转换电路接口说明92.5 数据显示电路接口说明103 系统的软件设计103.1 数据接收程序设计103.2 主程序设计113.3 数据转换程序设计113.4 延时程序设计123.5 数据显示程序设计134 部分模块仿真134.1 部分模块电路设计134.2 部分模块电路仿真144.3 仿真结果分析16总结16参考文献17附录A 源程序18附录B 仿真原理电路231 设计总方案1.1设计任务设计一种基于AT89C51单片机的数字电压表。1.2设计要求(1)采用1路模拟量

4、输入,能够测量05V之间的直流电压值。(2)电压显示用4位一体的LED数码管显示,至少能够显示两位小数。(3)以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。(4)尽量使用较少的元器件。1.3设计思路(1)根据设计要求,选择AT89C51单片机为核心控制器件。(2)A/D转换采用ADC0809实现,与单片机的接口为P1口和P2口的高四位引脚。(3)LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位产生。(4)电压显示采用3位一体的LED数码管。2 硬件电路设计本采用模块化设计,主要由A/D转换模块、控制模块和LED显示模块组成(如图2.1)。 图2.1

5、系统总体硬件框图2.1 A/D转换模块ADC0809逐次逼近式电路说明2.1.1 工作原理ADC0809集成了一个8位的A/D转换器、一个8路通道和一个兼容控制逻辑的微处理器。其中,8位的A/D转换器采用了连续逼近的转换技术,具有高阻抗稳定的断续比较器特性,包括一个带模拟开关树的256R的分压器和一个逐次逼近寄存器;而由ADC0809中的8路通道,可直接从8个单一模拟信号中获取任何一个作为输入信号。(1)复用器,这个器件包括一个8通道单端模拟信号复用器。通过使用地址解码器,选择一个输入通道。在地址锁存能使信号由低到高变化时,地址被锁存住。(2)转换器,这个器件的数据获取系统的关键部分是它的8位

6、模/数转换器。转换器的数字输出是正实数,这个转换器被设计成能在宽的温度范围内达到快速、精确、可重复的转换。该转换器分成3个主要部分:256R的阶梯网络、连续逼近的电阻和比较器。256R的阶梯网络用逼近的办法替代了传统的R/2R阶梯,其本身的单一性保证了不会丢失数字编码在闭环反馈系统中,这种单一性尤其重要(一个非单一性的关系可能引起振荡,这种振荡对于系统可能是灾难性的)。同时,256R的阶梯网络不会在参考电压上引起负载变化,对于ADC0809,使用256R网络就可以把逼近技术延伸到8位。A/D转换器的连续逼近寄存器(SAR)在起始转换(SC)脉冲的上升沿复位,转换在起始转换脉冲下降沿开始,处理过

7、程中的转换将被新的起始转换脉冲中断。把转换结束标示(EOC)输出连接到SC输入,这样可以达到连续转换的目的。假如使用这个模式,则在上电后,需要从外部输入一个起始转换脉冲,在起始转换脉冲的上升沿后08个时钟脉冲之间EOC将变低。A/D转换器最重要的部分是比较器,它负责整个转换器的最终精度。一个稳定断续比较器提供了符合所有转换器要求的最有效方法。这个稳定断续比较器把DC输入信号转换成一个AC信号,这个信号通过一个高增益AC放大器反馈,并且能回复DC电平。既然漂移的是DC分量,它不会通过AC放大器,因此这个技术就限制了放大器的漂移分量,使得整个A/D转换器对于极端的温漂、长期漂移和输入偏移误差都不敏

8、感。2.1.2 典型应用(1)比例制转换,ADC0809可设计成一个比例制转换系统的完整数据获取系统(DAS)。在比例制系统中,被测量的物理变量是用一个对全量程的百分比来表达的,不需要有一个绝对标准相关。下面公式描述了ADC0809的输入电压: (2.1) 其中,VIN 为ADC0809的输入电压,Vfs 为全量程电压,VZ为0电压,DX 为被测试的数据点,DMAX 为最大数据极限,DMIN 为最小数据极限。一个比例制转换器的最好例子就是作为位置传感器的电位计,滑变点的位置就是通过电位计的全量程电压的一部分。由于数据是全量程的一部分,这样涉及的要求就大大减少,对于许多应用就消除了很多误差源和费

9、用。ADC0809的最大优点是输入电压范围等于供电范围,以至于变换器能直接和电源相连,其输出又可以直接与复用器输入相连。 (2)电阻阶梯限制,在转换中来自电阻阶梯组的电压被按照设定的电压比较8次,电压通过一个模拟开关树与比较器相耦合,这些模拟开关树是以供电电源作为参考的。该阶梯电阻组的上部、中部与底部都必须被严格控制,以保持正确地操作。阶梯电阻组的顶部电压(Ref(+))不能高于供电电压,底部电压(Ref(-))不能低于地,而中部电压必须接近供电电压的中心,因为在这个点上模拟开关树由N通道变到P通道。上述条件在比例制系统中可以自动得到满足,并且在以地为参考的系统中很容易获得。ADC0809需要

10、的供电电流小于1个毫安,因此对于参考端的要求很容易达到。下图(2.2)显示了一个地参考系统,该系统由参考电压供电。 图2.2 地参考系统(3)转换器等式,在相邻码N和N+1之间的转变可通过以下公式给出: (2.2)输出编码N的中心可通过以下公式给出: (2.3)对于任意输入的输出代码N,它应是以下公式范围描述范围内的整数: (2.4)上述公式中,VIN 为比较器输入电压,VREF(+) 是Ref(+)端的电压,而VREF(+)是Ref(-)端的电压,VTUE 为不可调节的误差总和,其典型值一般为VREF(+)/512。(4)模拟比较器输入,动态比较器的输入电流是由偏移电容的周期性开关引发的,这

11、些电流作为断续稳定比较器的操作部分,交替连接到电阻阶梯/开关树网络的输出端和比较器的输入端。比较器输入电流的平均值是直接随着时钟频率和VIN 而变化的。假如在模拟输入端没有滤波电容,同时信号源的阻抗为低,那么比较器的输入电流就不会引入到转换器的误差,这是因为电容的瞬时放电现象在比较器输出被探测到之前就已经消失了。若为了减少噪音和信号调节需要加输入滤波电容时,它们会平衡动态比较器的输出电流,然后呈现出DC偏移电流的特性,这时电流的影响一般可以被预测出来。2.1.3 引脚及使用说明ADC0809是CMOS集成工艺制成的逐次比较逼近型A/D转换芯片。分辨率8位,输入模拟电压范围0至5V,片内含8通道

12、多路开关,单电源+5V工作。引脚排列见图2.3所示。各引脚功能为:(1)IN0IN7(第15 脚,第26 28脚):8路模拟量输入脚,可以从8个脚输入0V至+5V待转换模拟电。(2)CLOCK(第10脚):时钟CP输入端,ADC0809只有在CP信号同步下,才能进行A/D转换。时钟频率的上限是640KHZ。(3)ALE(第22脚):地址锁存允许端。当ALE=1时地址锁存和译码部分把外部数据的值输入和译码并接通IN0IN7之一。当 ALE=0时,把此值锁存起来。 图2.3 ADC0809引脚图(4)START(第6脚):启动脉冲输入端,启动脉冲的上升沿清除逐次逼近寄存器SAR,下跳沿启动ADC开

13、始转换。(5)VDD(第11脚):电源输入端:+5V+6.5V。(6)GND(第13脚):接地。(7)VREF(+)(第12脚)VREF(-)(第16脚):分别为基准电压的高电平和低电平端。(8)EOC(第7脚):转换结束信号端。EOC=0,表示转换正在进行,输出数据不可信。EOC=1表示转换已完成,输出数据可信。(9)B0B7(第8、14、15、1721脚):转换所得八位输出数据,B7是最高位,B0是最低位。(10)OE(第9脚):允许输出端。OE端控制输出锁存器的三态门。当OE=1时,转换所得的数据送到B0B7端,当OE=0时,B0B7脚对外呈高阻状态。(11)ADDA、ADDB、ADDC

14、(第2523脚):通道地址输入端(如表2.1)。 表2.1 通道地址表 SELECTED ANALOG CHANNELADDRESS LINECBAN0N1N2N3N4N5N6N7LLLLHHHHLLHHLLHHLHLHLHLH2.2 控制模块单片机电路说明 AT89C51(如图2.4)是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM)的低电压,高性能CMOS8位微处理器,俗称单片机。主要管脚说明:(1)P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

15、在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 图2.4 单片机外部引脚图(2)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。在FLASH编程和校验时,P1口作为第八位地址接收。 (3)P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。(4)P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。P3口也可作为AT89C51的一些特殊功能口,如:P3.3 /I

16、NT1(外部中断1)。P3口同时为闪烁编程和编程校验接收一些控制信号。(5)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 (6)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被

17、略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。(7)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。(8)XTAL2:来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。2.3 显示模块LED数码显示电路说明四位一体LED数码显示器分别采用位选和段选位来控制,AG为段选位,14为选为位,DP位小数点控制位(如图2.5)

18、。当其为有效信号时则被点亮。 图2.5 三位动态数码管动态数码显示采用循环点亮的方式即假设第一位点亮则其它都不点亮,因此如果要显示数据即要不停的循环点亮,利用余晖效应显示出所有的数据。2.4 数据转换电路接口说明数据转换电路主要由单片机和A/D数据转换模块组成。ADC0809的out端口直接与单片机的P2口相连即将转换后的数据直接并行传入单片机。ADC0809的控制主要由单片机来完成。启动端口(ALE/START)与P3.0口相连;状态显示位(EOC)与P3.2相连;传送控制位(OE)与P3.1相连;时钟信号CP输入端(CLOCK)与P3.3相连(如图2.6)。在CLOCK时钟下当P3.0口出

19、现高低高变化时则启动转换,此时EOC自动变为低电平,当转换完成后则又变回高电平,此时只需将P3.1口置高电平即可将数据传入单片机。 图2.6 ADC0809与单片机连接图 图2.7 数据显示电路连接图2.5 数据显示电路接口说明数据显示电路主要由LED数码显示器和单片机组成。LED数码显示器段选线与P0口直接相连;而位选线则由P1-P4口控制(如图2.7)。单片机将数据分别由P0口传给LED显示器,而由位控线控制循环点亮即达到目的。3 系统的软件设计程序设计(Programming)是指设计、编制、调试程序的方法和过程。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。为了完成上

20、述任务,在进行软件设计时,通常采用模块程序设计法。本系统软件采用模块化结构,由主程序数据接收子程序、数据转换子程序、数据显示子程序构成(程序见附录A)。3.1 数据接收程序设计 图3.1 数据接收子程序流程图3.2 主程序设计 图3.2 主程序流程图3.3 数据转换程序设计 图3.3 数据转换子程序流程图3.4 延时程序设计 图3.4 延时子程序流程图3.5 数据显示程序设计 图3.5 数据显示子程序流程图4 部分模块仿真该设计利用Proteus软件进行仿真。4.1 部分模块电路设计将数据转换、显示模块电气原理图进行Proteus设计。打开Proteus的ISIS编辑环境,从Proteus中选

21、取该电路所需要的元器件,放置元器件、放置电源和地、连线得到如图4.1所示的电气原理图,再点菜单栏工具下拉的电气规则检查,当规则检查出现:“NETLIST GENERATED OK NO ERC ERRORD FOUND”,表示通过检查。电路设计完成。图4.1 系统部分电气原理图4.2 部分模块电路仿真用伟福编辑器,实现对汇编程序的编译,其操作步骤是:(1)新建源文件:点菜单文件新建文件,新建“电.ASM” 源文件。(2)程序设计:将将所编写的程序输入到文本中。 (3)源程序编译:点菜单执行全速执行编译汇编源程序,生成目标代码文件“电.HEX”,若编译失败,可对程序进行修改调试直至编译成功。(4

22、)目标代码加载:在Proteus编辑环境双击AT89C51,在Program File一栏中单击打开按钮,选中“电.HEX”文件。在Clock Frequency栏中设置系统工作频率为12MHZ,单击“确定”完成目标程序代码加载。最后,点击运行按钮,启动系统仿真。仿真未出现错误,仿真成功。仿真结果如图4.2所示。 图4.2 仿真结果图当滑动变阻器改变阻值时放着结果如下图: 图4.3 第一次仿真结果图 图4.4 第二次仿真结果图4.3 仿真结果分析通过对上述模块的仿真,可以看出基于单片机控制的电压表在PROTEUS软件上可以很好的实现显示模块、ADC0808逐次逼近式A/D转换模块的仿真。当仿真

23、开始运行时,各个模块处于初始状态。当滑动变阻器改变时,显示的电压值也相应改变。因此,从仿真结果可以看出测量值与标准值相同,本设计可以得到预期效果。总结经过两周的课程设计,让我对单片机这门课有了更进一步的了解。在这次课程设计的过程中我遇到了很多困难,硬件上的理论知识学得不够扎实,对电路的仿真方面也不够熟练,这使得我的这次课程设计进度很慢,同时是也让我认识到平时的不足。在同学的帮助下完成了本次设计。这次课程设计让我对单片机和软件编程有了更深的认识。 这次电路的设计和仿真,基本上达到了设计的功能要求。在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际。 参考文献1 张毅刚.单片机

24、原理及应用M.北京:高等教育出版社,2004.2 吴金戎.8051单片机实践与应用M.北京:清华大学出版社,2003.3 夏路易.单片机技术基础教程与实践M.北京:电子工业出版社,2008.4 皮大熊.单片机课程设计指导书M.北京:北京理工大学出版社,2012.附录A 源程序/*简易数字电压表*#include#define uint unsigned int#define uchar unsigned char unsigned long getdata;code uchar table=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/共

25、阴字型码code uchar table1=0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,;/带小数点的共阴段码0-9sbit K1=P13; /第1位数码管的段选sbit K2=P12; /第2位数码管的段选sbit K3=P11; /第3位数码管的段选sbit K4=P10; /第4位数码管的段选 sbit start=P15; /ADC0809的开始信号sbit oe=P17; /ADC0809的输出允许信号sbit eoc=P16; /ADC0809的转换完成信号sbit CLOCK=P14; /定义0809时钟位/*延时函数*/v

26、oid delay(int z) int x; uint y; for(x=z;x0;x-) for(y=110;y0;y-);/* get_data()从ADC0809获取数据*/void get_data() P2=0xff; /先写1,为读P2口作准备 start=0; /产生一个起始脉冲信号 start=1; start=0; while(eoc=0);/等到转换完成:eoc-0:没完成;eoc-1,完成 oe=1; /允许输出 getdata=P2; /获取数据,并存放在getdata中 oe=0;/* 格式化从ADC0809中获得的数据,并送数码管显示*/void format_d

27、ata(unsigned long dat) unsigned long change_dat=dat; uchar ptr3; change_dat=(change_dat8)+(change_dat7)+(change_dat6)+(change_dat5)+(change_dat4)+(change_dat8;/除以256 ptr0=change_dat/100; /得到个位数字 ptr1=(change_dat-(100*ptr0)/10; /得到十分位数字 ptr2=change_dat-(100*ptr0)-(10*ptr1); /得到百分位数字 /*显示各位数字*/ K2=0;

28、P0=table1ptr0; delay(5); K2=1;/*显示十分位数字*/ K3=0; P0=tableptr1; delay(5); K3=1;/*显示百分位数字*/ K4=0; P0=tableptr2; delay(5); K4=1;/*主函数*/void main() P3=0x07;/选择ADC0809的通道7 /*初始化各ADC0809各使能信号*/ start=0; /start清零 oe=0; /oe清零 eoc=1; /eoc置1 TMOD = 0x02;/定时器工作在方式2:自动重装初值的8位定时器TH0 = 0x14;/定时器初值 TL0 = 0x14;IE = 0x82;/EA=1,ET0=1TR0 = 1; /启动定时器 while(1) get_data(); /调用获得数据函数 format_data(getdata); /转换数据 /*定时器0中断服务函数*/void timer0(void) interrupt 1 using 1 CLOCK=!CLOCK;/提供0809时钟 附录B 仿真原理电路

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号