基于单片机的数字万用表设计_第1页
基于单片机的数字万用表设计_第2页
基于单片机的数字万用表设计_第3页
基于单片机的数字万用表设计_第4页
基于单片机的数字万用表设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机的数字万用表设计 摘要 本次设计用单片机芯片 AT89C52 设计一个数字万用表,能够测量直流电压 值、直流电流、直流电阻,四位数码显示。此系统由分流电阻、分压电阻、基准 电阻、电容测试芯片电路、 51单片机最小系统、显示部分、报警部分、 AD 转换 和控制部分组成。 为使系统更加稳定, 使系统整体精度得以保障, 本电路使用了 AD0809 数据转换芯片, 单片机系统设计采用 AT89C52 单片机作为主控芯片, 驱 动液晶显示管显示。程序每执行周期耗时缩到最短,这样保证了系统的实时性。 关键词 数字万用表 AT89C52 单片机 AD 转换与控制 Abstract This des

2、ign is design a digital universal meter with chip AT89C52o f one-chip computer, can measure and hand in , direct current pressing value direct current flow , the direct current is hindered, four numbers show. This system is shunted resistance, resistance of partial pressure, basic resistance, minimu

3、m system of 51 one-chip computers, shown that some , warning part , AD change and control making up partly. In order to make the system more steady, make the whole precision of the system be ensured, this circuit has used AD0809d ata to change the chip, the one-chip computer system is designed to ad

4、opt AT89C52 one-chip computer as the top management chip, urge 4 numbers to be in charge of showing. The every execution cycle consuming time of procedure contracts to get shortest, in this way the real-time character of the security system. Keyword: Digital universal meter AT89S52 one-chip computer

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

6、字万用表,能 够测量直流电压值,直流电流、直流电阻,四位数码显示。实现多级量程的直流 电压测量,其量程范围是 5V 、 ,20V,.实现多级量程的直流电流测量,其量程范 围是 2mA ,20mA, 200mA.实现多级量程的电阻测量,其量程范围是200、 1k ,10k。”由此设想出以下的解决方法,即数字万用表的系统由分流电阻、分压 电阻、基准电阻、电容测试芯片电路、 51 单片机最小系统、显示部分、报警部 分、 AD 转换和控制部分组成。为使系统更加稳定,使系统整体精度得以保障。 三、设计任务 31设计目的 采用 8位 8路A/D 转换器 ADC0809 和AT89S52单片机,设计一台数字

7、多 用表,能进行电压、电流和电阻的测量,测量结果通过液晶显示管显示,通过按 键进行测量功能转换。 32设计指标及要求 电压测量范围 05, 020V,电流测量范围 12,120,1200mA,电阻测 量范围 0200,01K,010K。 四、设计思路与总体框图 41 设计思路 首先利用 P0 口数据地址复用,将地址通过 P0 口输入到单片机中。再利用 模数转换将模拟信号转换成数字信号, 再次利用 P0 口将其输入到单片机。 最后, 充分利用单片机强大的运算转化功能将其转成适当的二进制信号控制数显以确 保正确的显示被测量的读数。 42 总体框图 振荡电路 89S52 复位电路 液晶显示管 显示

8、ADC0809 待测电阻电路 待测电流电路 待测电压电路 图 1 1 五、MCU 主控制器的选择与论证 方案一 此方案采用凌阳公司的 16 位单片机 SPCE061A作为主控制器,它 具有体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、 中断处理能力强、 处理速度高等特点, 尤其适用于语音处理和识别等领域。 但是 其软件设计相对复杂,故我们放弃此方案。 方案二 此方案采用 STC 公司的 8 位单片机 STC89C52作为主控制器,具 有与 MCS-51 指令集完全兼容的 CIP-51 内核,但其同样时钟下运行速度和抗干 扰能力军比普通 8051 8位单片机要高,而且开发环境

9、是我们很熟悉的 Keil C51 , 编译效率高,非常适合 C 语言开发人员,因此我们采用该方案。 六、A/D 转换器的选择与论证 方案一 此方案选用 12 位串行 A/D 转换集成 AD ,只需要根线就 能够很好的与相通信组成测量系统, 但其输入电压不能为负值, 故使用范 围受到了限制, 不适合用作负压测量电路中而且价格较高。 因此,我们放弃此方 案。 方案二 此方案选用双积 A/D 转换器 AD0809 ,它的性能比较稳定,转换 精度高,具有很高的抗干扰能力,电路结构简单,其缺点是工作速度较低。它的 特点是在每次 A/D 转换前,内部电路都自动进行调零操作,可保证零点在常温 下的长期稳定。

10、 U3 ST OE IN0 CLOCK IN1 START IN2 IN3 EOC IN4 IN5 OUT1 IN6 OUT2 IN7 OUT3 OUT4 ADD A OUT5 ADD B OUT6 ADD C OUT7 ALE OUT8 VREF(+) VREF(-) OE ADC0808 0 2 14 78 22 3 2 av +5V DN DN 图 2 1AD 转换电路 七、测量电路的选择与论证 7.1 电阻测量 图 1 所示为数字多用表的电阻测量输入电路。运算放大器的反馈电阻Rx 作 为待测量电阻,通过 R14,R2,R15 及多路开关接到电源 -5V。假定运算放大器 理想,那么放大器

11、的输出电压 RV=5 Rx ,将RV送给 ADC0809,转换后得到数 R RV 255 字量为 DV= 5 。单片机读取 A/D 转换数据,再经过逆向运算可得 DV R19 Rx = 255 ,注意此时得到的 Rx 为二进制数,需要转化为十进制数后才能送 给液晶显示管显示。程序中采用 4字节专利号除法,连续进行 4次除以 10 的除 法。为使电路所求电阻更加精确, 故采用了一个单刀三掷开关, 当所测电阻处于 千欧级别时,闭合开关一,由所得电压得出待测电阻。当待测电阻处于 200 至 一千欧时,如果再次以 10千欧作为比例电阻, 则所测待测电阻准确度大大下降, 顾此时应闭合开关二,以一千欧电阻

12、作为比例电阻,可大大扩大所测电阻精度。 同理当所测电阻为 0至 200欧时,闭合开关三,此时所测电阻才能更加精确。 -5V 10k R2 1k R15 R14 200 12V 待测电阻 +12V 图 1 电阻测量原理图 72 电压测量输入电路 图 3 所示为数字多用表的电压测量输入电路。 待测电压经过低通滤波器滤除 高频干扰,再送给 ADC0809,电压测量范围为 05,020V, ADC0809 的分辨率 为 8 位 .当待测电压为为 05V,关闭开关一,经过滤波电路后此时输出的电压 VV=Vx, 将 VV 送给 ADC0809,转换后得到数字量为 DV= VV 255 。单片机读取 5 A

13、/D 转换数据,再经过逆向运算可得 Vx= VV 注意此时得到的 Vx 为二进制数, 255 需要转化为十进制数后才能送给液晶管显示。 当电压为 520V 时,因为 AD0809 的工作电压为 5V,所以需降压,闭合开关二,输出的电压为待测电压的五分之 一。 图二 直流电压的测量 7. 3 直流电流的测量 测量电流的原理是: 根据欧姆定律, 用合适的取样电阻把待测电流转换为相 应的电压,再进行测量。如下图为直流电流的测量原理图,当输入一个电流时, 先判断待测电流大概在哪个范围内, 然后根据下图中的开关, 来控制待测电流的 精确度和准确度。如输入一个待测电流时,集成运放正相端电压即为 V+=R

14、Ix, 同时此电流也经过一个交流滤波电路,滤除交流成分,由于 V+ 最大值为 0.2V, 比较小,若直接输出,则误差较大,因此进行同相放大 4 倍,使输出的电压大大 提高,从而使输出的电流更加准确。 从运放端输出的电压 IV=V+ 4,将 IV 送给 IV 255 ADC0809,转换后得到数字量为 DV= IV 255 。单片机读取 A/D 转换数据,再 5 经过逆向运算可得 Ix= VV 注意此时得到的 Vx 为二进制数,需要转化为十进制 255 数后才能送给液晶显示管显示。根据不同的开关可得到在不同范围内待测电流 值。 DSW2(NO) m2 Am0 R9 9 R10 1 DSW2 R8

15、 90 7. 4 蜂鸣器的设置 如下图所示,为报警部分, 当万用表的外接部分短接时, 则电路出现高电平, 此时蜂鸣器发出声音。 P1.7 Q1 2N3053 LS1 SPEAKER GND 图四 蜂鸣器的设计 八、结论和体会 8. 1 设计结果综述: (1)、数字万用表完成的功能主要是对电压、电流、电阻的测量,它主要由 分流电阻、分压电阻、基准电阻、 51 单片机最小系统、显示部分、报警部分、 AD转换和控制部分组成。 (2)、数字万用表属于一种测量工具,其本身的好坏直接影响到测量结果。 (3)、单片机部分跟 AD 转换部分是整个设计的核心, ADC0809的参考电压 VREFVCC,所以转换

16、之后的数据要经过数据处理,在数码管上显示出电压值。 实际显示的电压值 (D/256*VREF);AT89S52单片机作为主控芯片,配以 RC上电 复位电路和 11.0592MHZ震荡电路,使系统稳定运行。 (4)、在本次软件设计过程中,采用的是 c 语言。 (5)、对于硬件的制作,由于布线麻烦等原因,做起来复杂,对Proteus 仿真软件使用不熟练,使画仿真图时遇到不少问题。 51 单片机基础知识不扎实, 电路分析遇到比较多的问题。捍接也很难,以致未能完全实现设计报告要求。 8. 2 体会 这次课程设计暴露出了很多问题, 但在做课程设计的过程中也学到了很多东 西。比如查阅资料,动手焊接万用板等

17、等,这些都是平时很少做的。此次课程设 计让我对基于单片机的 c 语言有了新的认识,另外对于电子设计也有基本的了 解,这会让我在以后更能有效地去学习这方面的知识, 对单片机学习有很大的助 益,也在激励我们多动手,从实践中去获取新知识。 附录一 电路图仿真图(图 21): LCD1 LM016L RP1 RESPACK-8 21 ST 22 EOC C2 33pF EOC 25 12 C4 0.1uF 33pF R1 K1 1 80C52 R3(1) ALE EA SV VD EV SR RW E 0D 1D 2D 3D 4D 5D 6D 7D 电阻 +5V C1 C3 10u DNG IN0 C

18、LOCK IN1 START IN2 IN3 EOC IN4 IN5 OUT1 IN6 OUT2 IN7 OUT3 OUT4 ADD A OUT5 ADD B OUT6 ADD C OUT7 ALE OUT8 VREF(+) VREF(-) OE 16 23 22 O0 P1.7 GND C5 10u CXR1YSTAL CRYSTAL 29 LS1 SPEAKER XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 XTAL2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 RST P0.7/AD7 P1.0/T2 P1.1/T2EX P1.2 P1.3

19、 P1.4 P1.5 P1.6 P1.7 图 2 1 12 3 4 5 6 7 8 9 O0 39 38 37 O3 35 O4 34 32 O7 0 U4:B P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 24 -12V C6 0.1uF R6 10k GND U1:B 6 5 LM324 C7 0.1uF +12V R7 GND 程序 #include #in

20、clude #define uint unsigned int #define uchar unsigned char uchar code table=0123456789.vAmA ; uint i,j; sbit ST=P20; sbit EOC=P21; sbit OE=P22; sbit k1=P10; sbit k2=P11; sbit k3=P12; sbit x1=P24; sbit x2=P25; sbit x3=P26; sbit E=P15; sbit RS=P14; sbit RW=P13; void delay() _nop_(); _nop_(); _nop_();

21、 _nop_(); _nop_(); void Delay(uint i) uint x,j; for(j=0;ji;j+) for(x=0;x=148;x+); bit Busy(void) 10 bit busy_flag = 0; RS = 0; RW = 1; E = 1; Delay(5); busy_flag = (bit)(P3 E = 0; return busy_flag; void wcmd(uchar del) while(Busy(); RS = 0; RW = 0; E = 0; Delay(5); P3 = del; Delay(5); E = 1; Delay(5

22、); E = 0; void wdata(uchar del) while(Busy(); RS = 1; RW = 0; E = 0; Delay(5); P3 = del; Delay(5); E = 1; Delay(5); E = 0; void L1602_init(void) wcmd(0 x38); 11 Delay(5); wcmd(0 x38); Delay(5); wcmd(0 x38); Delay(5); wcmd(0 x38); wcmd(0 x08); wcmd(0 x0c); wcmd(0 x04); wcmd(0 x01); void L1602_char(uc

23、har hang,uchar lie,char sign) uchar a; if(hang = 1) a = 0 x80; if(hang = 2) a = 0 xc0; a = a + lie - 1; wcmd(a); wdata(sign); void main() uint a1,a2,a3,a4; uchar add; while(1) ST=0; OE=0; P0=0 xff; ST=1; _nop_(); _nop_(); _nop_(); ST=0; _nop_(); _nop_(); _nop_(); _nop_(); while(EOC=0); OE=1;add=P0;

24、_nop_(); OE=0; Delay(30); L1602_init(); if(k2=0) 12 Delay(10); if(k2=0) if(x1=0) Delay(10); if(x1=0) a1=(add*20)/1000; a2=(add*20)%1000/100; a3=(add*20)%100/10; a4=(add*20)%10; L1602_char(2,7,table10); L1602_char(2,6,tablea1); L1602_char(2,8,tablea2); L1602_char(2,9,tablea3); if(x2=0) a1=(add*10)/10

25、00; a2=(add*10)%1000/100; a3=(add*10)%100/10; a4=(add*10)%10; L1602_char(2,8,table10); L1602_char(2,6,tablea1); L1602_char(2,7,tablea2); L1602_char(2,9,tablea3); if(k3=0) if(x1=0) a1=(add*2)/1000; a2=(add*2)%1000/100; a3=(add*2)%100/10; a4=(add*2)%10; L1602_char(2,7,table10); L1602_char(2,6,tablea1)

26、; 13 L1602_char(2,8,tablea2); L1602_char(2,9,tablea3); L1602_char(2,10,tablea4); if(x2=0) a1=add/5/1000; a2=add/5%1000/100; a3=add/5%100/10; a4=add/5%10; L1602_char(2,7,table10); L1602_char(2,6,tablea1); L1602_char(2,8,tablea2); L1602_char(2,9,tablea3); if(x3=0) a1=add/50/1000; a2=add/50%1000/100; a

27、3=add/50%100/10; a4=add/50%10; L1602_char(2,7,table10); L1602_char(2,6,tablea1); L1602_char(2,8,tablea2); L1602_char(2,9,tablea3); L1602_char(2,10,tablea4); if(k1=0) if(x1=0) a1=add*2/5/1000; a2=add*2/5%1000/100; a3=(add*2/5)%100/10; a4=(add*2/5)%10; L1602_char(2,8,table10); L1602_char(2,6,tablea1);

28、 L1602_char(2,7,tablea2); L1602_char(2,9,tablea3); if(x2=0) 14 a1=(add*4)/1000; a2=(add*4)%1000/100; a3=(add*4)%100/10; a4=(add*4)%10; L1602_char(2,7,table10); L1602_char(2,6,tablea1); L1602_char(2,8,tablea2); L1602_char(2,9,tablea3); if(x3=0) a1=(add*80)/1000; a2=(add*80)%1000/100; a3=(add*80)%100/

29、10; a4=(add*80)%10; L1602_char(2,9,table10); L1602_char(2,6,tablea1); L1602_char(2,7,tablea2); L1602_char(2,8,tablea3); L1602_char(2,10,tablea4); 附录二:主要元器件功能介绍 1、 AT89S52芯片功能特性描述 AT89S52引脚框图: 15 图 2.12 AT89S52 芯片引脚图 AT89S52 主要性能: 1、与 MCS-51 单片机产品兼容 2、8K 字节在系统可编程 Flash 存储器 3、1000 次擦写周期 4、全静态操作: 0Hz33

30、Hz 5、三级加密程序存储器 6、32 个可编程 I/O 口线 7、三个 16 位定时器 /计数器 8、八个中断源 9、全双工 UART 串行通道 10、低功耗空闲和掉电模式 l 1 、掉电后中断可唤醒 l2、 看门狗定时器 13、双数据指针 l 4 、掉电标识符 功能特性描述: AT89S52是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编 程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦 适于常规程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可

31、编程 Flash,使 得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节 Flash,256字节 RAM ,32 位 I/O 口 线,看门狗定时器, 2 个数据指针,三个 16 位定时器 /计数器,一个 6 向量 2 16 级中断结构, 全双工串行口, 片内晶振及时钟电路。 另外, AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下, CPU 停止工作, 允许 RAM 、定时器 /计数器、串口、中断继续工作。掉电保护方式下, RAM 内 容被保存, 振荡器被冻结, 单片机一切工作停止, 直

32、到下一个中断或硬件复位为 止。 P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器 能驱动 4 个 TTL 逻辑电平。对 P1 端口写“ 1”时,内部上拉电阻把端口拉高, 此时可以作为输入口使用。 作为输入使用时, 被外部拉低的引脚由于内部电阻的 原因,将输出电流( IIL )。此外, P1.0和P1.2分别作定时器 /计数器 2的外部计 数输( P1.0/T2)和时器/计数器 2的触发输入( P1.1/T2EX),具体如下表所示。 在 flash 编程和校验时, P1 口接收低 8 位地址字节。 表 2.1 P1 口的第二功能 P2 口:P2 口是一个具有内

33、部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器 能驱动 4 个 TTL 逻辑电平。对 P2 端口写“ 1”时,内部上拉电阻把端口拉高, 此时可以作为输入口使用。 作为输入使用时, 被外部拉低的引脚由于内部电阻的 原因,将输出电流( IIL )。在访问外部程序存储器或用 16 位地址读取外部数据 存储器(例如执行 MOVX DPTR )时,P2 口送出高八位地址。在这种应用中, P2 口使用很强的内部上拉发送 1。在使用 8位地址(如 MOVX RI )访问外部 数据存储器时, P2口输出 P2锁存器的内容。在 flash 编程和校验时, P2 口也接 收高 8 位地址字节和一些控制信号

34、。 P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器 能驱动 4 个 TTL 逻辑电平。对 P3 端口写“ 1”时,内部上拉电阻把端口拉高, 此时可以作为输入口使用。 作为输入使用时, 被外部拉低的引脚由于内部电阻的 原因,将输出电流( IIL )。P3口亦作为 AT89S52 特殊功能(第二功能)使用, 如下表所示。在 flash 编程和校验时, P3 口也接收一些控制信号。 2、ADC0809介绍 ADC0809 是带有 8 位 A/D 转换器、 8 路多路开关以及微处理机兼容的控制 逻辑的 CMOS 组件。它是逐次逼近式 A/D 转换器,可以和单片机直接接口。 (1)ADC0809 的内部逻辑结构

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论