《数字电压表课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字电压表课程设计报告.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字电压表课程设计报告 湖南科技大学 信息与电气工程学院 课程设计报告 课程单片机原理及应用 题目:数字电压表 专业: 班级: 姓名: 学号: 任务书 1数字电压表的概述 数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化
2、测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。 数字电压表的诞生打破了传统电子测量仪器的模式和格局。它显示清晰直观、读数准确,采用了先进的数显技术,大大地减少了因人为因素所造成的测量误差事件。数字电压表是把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式,并加以显示的仪表。数字电压表把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起,成为仪器、仪表领域中独立而完整的一个分支,数字电压表标志着电子仪器领域的一场革命,
3、也开创了现代电子测量技术的先河。本设计采用了以单片机为开发平台,控制系采用 AT89C52单片机,A/D转换采用ADC0809。系统除能确保实现要求的功能外,还可以方便进 行8路其它A/D转换量的测量、远程测量结果传送等扩展功能。简易数字电压测量电路由 A/D转换、数据处理、显示控制等组成。 模拟式电压表具有电路简单、成本低、测量方便等特点,但测量精度较差,特别是受表头精度的限制,即使采用级的高灵敏度表头,读测时的分辨力也只能达到半格。再者,模拟式电压表的输入阻抗不高,测高内阻源时精度明显下降。数字电压表作为数字技术的成功应用,发展相当快。数字电压表(Digital VoIt Me-ter,D
4、VM),以其功能齐全、精度高、灵敏度高、显示直观等突出优点深受用户欢迎。特别是以A/D转换器为代表的集成电路为支柱,使DVM向着多功能化、小型化、智能化方向发展。DVM应用单片机控制,组成智能仪表;与计算机接口,组成自动测试系统。目前,DVM多组成多功能式的,因此又称数字多用表(Digital Multi Meter,DMM)。 DVM是将模拟电压变换为数字显示的测量仪器,这就要求将模拟量变成数字量。这实质上是个量化过程,即将连续的无穷多个模拟量用有限个数字表示的过程,完成这种变换的核心部件是A/D转换器,最后用电子计数器计数显示,因此DVM的基本组成是A/D转换器和电子计数器。 DVM最基本
5、功能是测直流电压,考虑到仪器的多功能化,可将其他物理量,如电阻、电容、交流电压、电流等,都变成直流电压,因此,还应有一个测量功能选择变换器,它包含在输入电路中。DVM对直流电压直接测量时的测量精度最高,其他物理量在变换成直流电压时,受功能选择变换器精度的限制,测量精度有所下降。 2、工作原理 系统采用12M晶振产生脉冲做8031的内部时钟信号,通过软件设置单片机的内部定时器T0产生中断信号。利用中断设置单片机的口取反产生脉冲做8031的时钟信号。通过键盘选择八路通道中的一路,将该路电压送入ADC0809相应通道,单片机软件设置ADC0809开始A/D转换,转换结束ADC0809的EOC端口产生
6、高电平,同时将ADC0809的EO端口置为高电平,单片机将转换后结果存到片内RAM。系统调出显示子程序,将保存结果转化为分别保存在片内RAM;系统调出显示子程序,将转化后数据查表,输出到LED显示电路,将相应电压显示出来,程序进入下一个循环。 3、系统结构框图 4、8031的结构及其功能 在本次课题设计中我们选择了8031芯片。8031和8051是最常见的mcs51系列单片机,是inter公司早期的成熟的单片机产品,应用范围涉及到各行各业,下面介绍一下它的引脚图等资料。 8031内部结构及其功能概述 8031引脚功能 (1)主电源引脚Vss和Vcc Vss接地 Vcc正常操作时为+5伏电源 (
7、2)外接晶振引脚XTAL1和XTAL2 XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。 XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。 (3)控制或与其它电源复用引脚RST/VPD,ALE/ ,和 /Vpp RST/VPD 当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位 在Vcc掉电期间,此引脚可接上备用电源,由VPD向内部提供备用电源,以保持内部RAM 中的数据。 ALE/ 正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,AL
8、E 引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE 脉冲,ALE 端可以驱动(吸收或输出电流)八个LSTTL电路。对于EPROM型单片机,在EPROM 编程期间,此引脚接收编程脉冲(功能) 外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效。同样可以驱动八LSTTL输入。 /Vpp 、 /Vpp为内部程序存储器和外部程序存储器选择端。当 /Vpp为高电平时,访问内部程序存储器,当 /Vpp 为低电平时,则访问外部程序存储器。 对于EPROM型单
9、片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。8031引脚功能: Vcc:+5V电源电压。 Vss:电路接地端。 :通道0,它是8位漏极开路的双向I/O通道,当扩展外部存贮器时,这也是低八位地址和数据总线,在编程校验期间,它输入和输出字节代码,通道0吸收/发出二个TTL负载。:通道1是8位拟双向I/O通道,在编程和校验时,它发出低8位地址。 通道1吸收/发出一个TTL负载。 :通道2是8位拟双向I/O通道,当访问外部存贮器时,用作高8位地址总线。通道2 能吸收/发出一个TTL负载。 :通道3准双向I/O通道。通道3能吸收/发出一个TTL负载,P3通道的每一根线还有
10、另一种功能: :RXD,串行输入口。 :TXD,串行输出口。 :INT0,外部中断0输入口。 :INT1,外部中断1输入口。 :T0,定时器/计数器0外部事件脉冲输入端。 :T1,定时器/计数器1外部事件脉冲输入端 :WR,外部数据存贮器写脉冲。 :RD,外部数据存贮器读脉冲。 RST/VpD:引脚9,复位输入信号,振荡器工作时,该引脚上2个机器周期的高电平可以实现复位操作,在掉电情况下(Vcc降到操作允许限度以下),后备电源加到此引脚,将只给片内 RAM供电。 ALE/PROG:引脚30,地址锁存有效信号,其主要作用是提供一个适当的定时信号,在它的下降沿用于外部程序存储器或外部数据存贮器的低
11、8位地址锁存,使总线P0输出/输入口分时用作地址总线(低8位)和数据总线,此信号每个机器出现2次,只是在访问外部数据存储器期间才不输出ALE。所以,在任何不使用外部数据存贮器的系统中,ALE以1/6振荡频率的固定速率输出,因而它能用作外部时钟或定时,8751内的EPROM编程时,此端输编程脉冲信号。 PSEN:引脚29,程序选通有效信号,当从外部程序存贮器读取指令时产生,低电平时,指令寄存器的内容读到数据总线上。 EA/VPP:引脚31,当保持TTL高电平时,如果指令计数器小于4096,8051执行内部ROM的指令,8751执行内部EPROM的指令,当使TTL为低电平时,从外部程序存贮器取出所
12、有指令,在8751内的EPROM编程时,此端为21V编程电源输入端。 XTAL1:引脚18,内部振荡器外接晶振的一个输入端,HMOS芯片使用外部振荡源时,此端必须接地。 XTAL2:引脚19,内部振荡器外接晶振的另一个输入端,HMOS芯片使用外部振荡器时,此端用于输入外部振荡信号。 5、显示器 本次设计中有显示模块,常用的显示器件比较多,有数码管,LED点阵,1602液晶,12864液晶等。 数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,
13、寿命长。但数码管只能是显示09的数据。不能够显示字符。这也是数码管的不足之处。经过性能的比较和根据本设计的要求以及价格的考虑,选择数码管显示器。 单位数码管如图所示。 6、模数(A/D)芯片ADC0809 A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成 数字量再处理。此次设计的是利用逐次逼近式ADC0809进行模数转换。 ADC0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存 译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允 许8 路模拟量分时输入,共用A/D 转换器进行转换。些A/D转换器是的特点
14、是8位精度, 属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。 综合上述,逐次逼近型A/D转换既兼顾了转换速度,又具有一定的精度,这里选用的是 逐次逼近型的A/D转换芯片ADC0809。 图 ADC0809内部结构图 ADC0809引脚图 7、8279接口芯片 8279的功能及工作原理 8279是Intel公司生产的通用可编程键盘和显示器IO接口部件。利用8279,可实现对键盘显示器的自动扫描,并识别键盘上闭合键的键号,不仅可以大大节省CPU对键盘显示器的操作时间,从而减轻CPU的负担,而且显示稳定,程序简单,不会出现误动作,由于这些优点,8279芯片日益被设计者所采用。 8
15、279的引脚及内部结构 (1) IO控制和数据缓冲器 双向的三态数据缓冲器将内部总线和外部总线DB o DB 7 ,用于传送CPU和 8279之间的命令,数据和状态。 S C为片选信号。当S C为低电平时,CPU才选中8279读写。 A。用以区分信息的特性。当A。为1时,CPU写入8279的信息为命令,CPU 从 8279读出的信息为8279的状态。当A。为0时,IO信息都为数据。 图1 8279的引脚图 (2) 控制逻辑 控制与定时寄存器用以寄存键盘及显示器的工作方式,锁存操作命令,通过译码产生相应的控制信号,使8279的各个部件完成一定的控制功能。 定时控制含有一些计数器,其中有一个可编程
16、的5位计数器,对外部输入时钟信号进行分频,产生100kHz的内部定时信号。外部时钟输入信号的周期不小于500ns。 (3) 扫描计数器 扫描计数器有两种输出方式。一种为外部译码方式(也称编码方式),计数器 以二进制方式计数,4位计数状态从扫描线SL。SL 3 输出,经外部译码器译码出16位扫描线,另一种为内部译码方式(也称译码方式),即扫描计数器的低二 位经片内译码器译码后从SL。一SL 3 输出。 (4) 键输入控制 这个部件完成对键盘的自动扫描,锁存RL。RL 7 的键输入信息,搜索闭合键,去除键的抖动,并将键输入数据写入内部先进先出(FIFO)的存储器RAM。 (5)FIFO RAM和显
17、示缓冲器RAM 8279具有8个先进先出(FIFO)的键输入缓冲器,并提供16个字节的显示缓冲器RAM。 8279将段码写入显示缓冲器RAM,8279自动对显示器扫描,将其内部显示缓冲器RAM中的数据在显示器上显示出来。 IRQ为中断请求输出线,高电平有效。当FIFO RAM缓冲器中存有键盘上闭合键的编码时,IRQ线升高,向CPU请求中断,当CPU将缓冲器中的输入键的数据全部读取时,中断请求线下降为低电平; SHIFT、CNTLSTB为控制键输入线,由内部拉高电阻拉成高电平,也可由外部控制按键拉成低电平。 RL。RL 7 为反馈输入线,作为键输入线,由内部拉高电阻(或称为上拉电阻)拉成高电平,
18、也可由键盘上按键拉成低电平。 SL。SL 3 为扫描输出线,用于对键盘显示器扫描。 OUT B。- 3、OUTA。- 3 为显示段数据输出线,可分别作为两个半字节输出,也 可作为8位段数据输出口,此时OUTB。为最低位,OUTA 3 为最高位。 BD为消隐输出线,低电平有效,当显示器切换时或使用显示消隐命令时,将显示消隐。 RESET为复位输入线,高电平有效。当RESET输入端出现高电平时,8279被初始复位。 8、硬件原理图 9、c语言程序编写 #include #include #include #define A_DPORT XBYTE0x8100 /0809通道0地址 #define
19、DAT XBYTE0xFF80 /8279 数据口地址 #define COM XBYTE0xFF82 /8279 状态/命令口地址 #define uchar unsigned char #define uint unsigned int bit bdata bz=0;/定义标志 long int val; uchar idata diss4=0,0,0,0;/显示缓冲区 uchar code ledseg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/LED显示常数表 void delay(uint z) uint x,y; for(
20、x=z;x0;x-) for(y=110;y0;y-); /-8279初始化子程序- void init8279() COM=0x00; /置8279工作方式 COM=0x2f; /置键盘扫描速率 COM=0xc1; /清除 LED 显示 delay(200); /等待清除结束 /-显示函数- void disled(d) uchar idata *d; uchar i; COM=0x80; for(i=0;i4;i+) COM=i+0x80; DAT=ledseg*d; d+; if(i=3) DAT=ledseg*d|0x80; /-显示缓冲区内容显示- void disp(void) d
21、isled(diss); /-显示处理- void display(long second) diss0=second%10; /低位先存 diss1=second/10%10; diss2=second/100%10; diss4=second/1000; disp(); main() IT0=1; EX0=1; EA=1; delay(100); /延时 init8279(); while(1) A_DPORT=val; /启动 A_D while(bz=0); /等待 A_D 转换结束 display(val); delay(10); bz=0; /清读数标志 void int_0(void) interrupt 0 val=A_DPORT; /读 A_D 数据 val=val*5000/256; bz=1; /置读数标志