简易自动电阻测试仪.docx

上传人:b****5 文档编号:5103562 上传时间:2022-12-13 格式:DOCX 页数:20 大小:214.82KB
下载 相关 举报
简易自动电阻测试仪.docx_第1页
第1页 / 共20页
简易自动电阻测试仪.docx_第2页
第2页 / 共20页
简易自动电阻测试仪.docx_第3页
第3页 / 共20页
简易自动电阻测试仪.docx_第4页
第4页 / 共20页
简易自动电阻测试仪.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

简易自动电阻测试仪.docx

《简易自动电阻测试仪.docx》由会员分享,可在线阅读,更多相关《简易自动电阻测试仪.docx(20页珍藏版)》请在冰豆网上搜索。

简易自动电阻测试仪.docx

简易自动电阻测试仪

 

简易自动电阻测试仪

 

摘要

本设计根据题目要求制作一台简易自动电阻测试仪,能够测量100Ω、1kΩ、10kΩ、10MΩ四档不同的量程,并实现其中前三档的自动量程转换功能,同时自动显示小数点和单位。

基于这些要求,经过讨论,决定利用ADC芯片将电阻参数转化为频率,频率f是单片机很容易处理的数字量,一方面测量精度高,另一方面便于使仪表实现自动化,而且单片机构成的应用系统有较大的可靠性。

通过输入单片机AT89C52控制继电器控制被测频率的自动选择,输入输出控制采用LED指示灯、LCD1602显示系统和蜂鸣器电路组成,能很好的实现各个要求。

单片机具有可编程性,硬件的功能描述可完全在软件上实现,另一方面便于使仪表实现自动化,设计时间短,成本低,可靠性高。

关键字:

AT89C52单片机ADC芯片继电器自动量程转换

一、选择题目

目前电子设备发展迅猛,很多便利仪器出现。

这次设计的仪器具有四个档位量程的简易自动电阻测试仪,量程分别为100Ω、1kΩ、10kΩ、10MΩ四个档,难点在于小电阻的测量的精度。

测量时电阻值为3位数字显示(最大显示数必须为999),能自动显示小数点和电阻单位,如99.9欧姆,并实现前三个档位的自动量程转换。

在本设计中我重点介绍一种把电子元件的参数R转换成频率信号f的方法,之后采用单片机控制,再通过程序处理运算求出R的数值,最后应用LCD1602显示模块限制阻值。

目前市场测量电子元器件参数R的仪表种类繁多,并且方法和优缺点也各有不同。

一般的测量方法都存在计算复杂,不易实现自动测量而且很难实现智能化等缺点。

将电阻参数转化为频率,这样处理一方面使测量精度提高了,另一方面也便于使仪表实现智能化,并能很好的实现各个要求。

二、方案论证

2.1方案论证与选择

方案一:

最基本的就是根据R的定义式来测量。

在如图2-1中,分别用电流表和电压表测出通过电阻的电流和通过电阻的电压,根据公式R=U/I求得电阻。

这种方法要测出两个模拟量,不易实现自动化。

而指针式万用表欧姆档是把被测电阻与电流一一对应,由此就可以读出被测电阻的阻值,如图2-2所示。

这种测量方法的精度变化大,若需要较高的精度,必须要较多的量程,电路复杂。

图2-1定义法测电阻图2-2万用表测电阻

方案二:

把电阻转换成频率信号f,转换的原理是用A/D芯片将连续变化的模拟信号转变为数字信号频率,单片机根据所选通道,向模拟开关送两路地址信号,取得振荡频率,作为单片机的时钟源,通过计数则可以计算出被测频率,再通过该频率,通过公式计算出各个电阻参数。

然后根据所测频率判断是否转换量程,或者是把数据处理后,把电阻的值送显示部分显示出相应的参数值,利用编程实现量程自动转换。

总结:

通过精确度以及方便使用的角度考虑,方案二的方法更好。

2.2设计思路

2.2.1总体方案组成和说明

选择系统的电路设计方框图如图2-3所示,它由四个部分组成:

①管理控制部分的主芯片采用单片机AT89C52;②测量的部分主要是采用A/D芯片实现将被测电阻的阻值转换为频率;③通道的选择部分通过52单片机I/O接口连接继电器来控制自动选择被测电阻的档位;④显示的部分是通过LCD1602、二极管指示灯及蜂鸣器而组成的测量部分。

测量电路

被测电阻

A

D

C

芯片

继电器选择通道量程

52

二极管指示灯

LCD1602显示

蜂鸣器判断是否超出量程

图2-3设计框图

2.2.2组成部分及其说明

第一,控制部分

(1)分析:

本设计采用AT89C52单片机,利用其具备的中断系统和延时程序来控制换挡,以及LCD1602液晶屏的显示等等功能。

(2)原理图

图2-452单片机最小系统设计

第二,测量部分

(1)计算分析:

利用ADC0832实现转换被测电阻的频率,通过52单片机的I/O接口的自动识别电阻量程,来实现自动测量。

(2)仿真图&原理图

图2-5

(1)ADC转换电路仿真图

图2-5

(2)ADC转换电路原理图

第三,通道选择部分

(1)分析说明:

本设计通过单片机控制来控制继电器完成自动选择,继电器是一种电子控制器件,它具有输入回路和输出回路,经常应用于自动控制电路中,原理实际上是用较小的电流去控制较大电流的一种“自动开关”。

所以在电路中起着自动调节、安全保护、转换电路等作用。

(2)仿真图

图2-6继电器自动选择电路

第四,显示部分

(1)分析说明:

使用1602液晶显示屏,具有画面效果好,分辨率高,抗干扰能力强等特点,可以显示4行字,符合本次设计任务的要求。

(2)仿真图&原理图

图2-7

(1)1602显示仿真图

图2-7

(2)1602显示原理图

三、设计实现

3.1测量电路设计

根据题目要求,采用ADC芯片,将电阻量转换为相应的频率信号值。

考虑到单片机对频率的灵敏度,具体的讲就是单片机对10HZ~10KHZ的频率计数精度最高。

所以要选择合适的电阻大小,同时又要考虑到不能使电阻的功率过大。

所以首先要确定对应档位时适合的频率,然后在确定电阻,从而算出3个电阻的值以及对应频率范围。

 

档位

电阻R1

频率范围

100Ω~1KΩ

R1=200Ω

8500~9500HZ

1KΩ~10KΩ

R2=10KΩ

3600~6600HZ

10KΩ~10MΩ

R3=500KΩ

11000~16400HZ

表3-1电路对应量程参数

3.2通道选择电路设计

利用继电器类别的转换,继电器型号为943-1C-5DS,5v控制开关关断

 

电路流程图如下:

 

超量程吗?

最高量

程吗?

继电器

 

图3-3量程自动转换流程图

3.3控制电路设计

本设计使用单片机为核心部件,来控制换挡以及显示。

以下是单片机管脚说明:

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

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口也可作为AT89S52的一些特殊功能口,如表1所示:

表1P3特殊功能口

P3口引脚

第二功能

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(外部数据存储器读脉冲输出)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

3.4显示电路

系统的显示部分采用LCD1602液晶显示模块。

3.5软件设计

系统通过频率来控制量程自动切换,并根据换算对应的电阻,然后再控制显示模块输出。

Yes

NO

初始化

通过采样中断计算频率

计算R的值

通过R的范围,确定档位

1602显示

判断是否在规定频率内

开始

结束

一个继电器

至高,其它至低

图3-2程序设计流程图

 

四、测试及结果分析

4.1测试方法及使用的仪器

测量方法:

采用555多谐振荡电路,将电阻量转换为相应的频率信号值。

再利用单片机及有关程序对范围的选择,显示侧量出数值。

测试使用的仪器设备:

数字万用表、示波器。

4.2指标测试和测试结果

表4.1.2测试结果对照分析表

档位

测量值

测量值

实际值

100Ω~1KΩ

101Ω

98.9Ω

1KΩ~10KΩ

1014Ω

998.9Ω

10KΩ~10MΩ

-

989KΩ

五、结论

本设计实现了一种利用52单片机实现的简易电阻测试仪,基于单片机和量程自动切换电路的控制系统,能够根据待测电阻的大小实现适当频率的控制,再分别采样频率,通过程序计算待测电阻Rx并在1602液晶上显示。

并且测量的数据结果较稳定。

设计过程中出现问题有以下:

1.在使用ADC芯片电路中电阻值时,由于单片机对10HZ~10KHZ的频率计数精度最高。

所以要选用合理的电阻大小。

同时又要考虑到不能使电阻的功率过大,这样给我们计算带来了很多的麻烦。

2.我们接收到频率较高,所以通过电路很难控制精确度,产生的误差比较大。

3.继电器在使用时最高位的继电器无法工作导致量程只能在0到1k。

4、在实验过程中时常有捉襟见肘的感觉,一方面是理论不足,很多好的方案,好的思想由于理论的匮乏,无法理解,也不能使用,在以后的学习过程中理论的学习始终是重点;还有就是程序的问题,由于编程水平跟不上,加上思路也不清晰,导致程序的编写存在很大的问题,好的思想,无法在程序中展现出来,这也是以后需要加强的地方。

 

参考文献

1.高吉祥,黄智伟,丁文霞.数字电子技术[M].北京:

电子工业出版社,2003年,第1版

2.邹其洪黄智伟高嵩.电工电子实验与计算机仿真[M].北京:

电子工业出版社,2003年,第1版

3.张友汉.电子线路设计应用手册[M].福建:

福建科学技术出版社.2000.7第一版.

4.黄智伟.电子电路计算机仿真设计[M].北京:

电子工业出版社,2004年第1版

附录

附录1:

主要元器件清单

at89c52单片机

1

12M晶振

2

11.0592M晶振

2

22pf瓷片电容

5

4.7k电阻

2

2.5k电阻

2

200电阻

2

10k电阻

2

500k电阻

2

3.3k电阻

2

AD转换器adc0832

2

mps8098三极管

5

继电器G2RL-1AB-DC5

5

蓝白电位器10k

2

排针

2

8脚排座

2

40脚排座

2

蜂鸣器

2

1n4148二极管

5

2n2222三极管

3

发光二极管

2

 

附录2:

程序清单

#include

#include

#defineucharunsignedchar

uchartable[]={0x00,0x04,0x0A,0x11,0x11,0x0A,0x1B,0x3B,};

uchartable1[]="THERESIS:

";

sbitCS=P1^5;

sbitClk=P1^6;

sbitDI=P1^7;

sbitDO=P1^7;

sbitrs=P2^0;

sbiten=P2^1;

sbitj1=P2^7;

sbitj2=P2^6;

sbitj3=P2^5;

sbitbeep=P1^4;

sbitled=P2^3;

voiddelay(intx)

{intj;

for(;x>0;x--)

for(j=20;j>0;j--);

}

ucharADC0832(ucharCH)

{

uchari,dis0,dis1,date;

Clk=0;//拉低时钟

DI=1;//初始化

delay

(1);

CS=0;//芯片选定

delay

(1);

Clk=1;//拉高时钟

delay

(1);

if(CH==0)//通道选择

{

Clk=0;//第一次拉低时钟

DI=1;//通道0的第一位

delay

(1);

Clk=1;//拉高时钟

delay

(1);

Clk=0;//第二次拉低时钟,ADC0832DI接受数据

DI=0;//通道0的第二位

delay

(1);

Clk=1;

delay

(1);

}

else

{

Clk=0;

DI=1;//通道1的第一位

delay

(1);

Clk=1;

delay

(1);

Clk=0;

DI=1;//通道1的第二位

delay

(1);

Clk=1;

delay

(1);

}

Clk=0;//第三次拉低时钟,此前DI两次赋值决定通道

DI=1;//DI开始失效,拉高电平,便于DO数据传输

for(i=0;i<8;i++)//读取前8位的值

{

delay

(1);

dis0<<=1;

Clk=1;

delay

(1);

Clk=0;

if(DO)

dis0|=0x01;

else

dis0|=0x00;

}

for(i=0;i<8;i++)//读取后8位的值

{

dis1>>=1;

if(DO)

dis1|=0x80;

else

dis1|=0x00;

delay

(1);

Clk=1;

delay

(1);

Clk=0;

}

if(dis0==dis1)//两次结束数据比较,若相等

date=dis0;//则赋值给dat

delay

(1);

CS=1;//释放ADC0832

DI=1;//拉高输出端,方便下次通道选择DI端有效

Clk=1;//拉高时钟

delay

(1);

returndate;

}

 

longdatch(uchara,longst)//计算电阻

{longy;

doublex=1.0*st*(255-a)/a;

y=x;

returny;

}

voidwritecom(ucharcom)

{rs=0;

P3=com;

delay(10);

en=1;

delay(10);

en=0;

}

voidwritedat(uchardate)

{rs=1;

P3=date;

delay(10);

en=1;

delay(10);

en=0;

}

voidinit()

{

en=0;

writecom(0x38);

writecom(0x0c);

writecom(0x06);

writecom(0x01);

}

voiddisplay(longx)

{intj,wei=12;

 

for(j=0;j<18;j++)//qinhkongxianshi

{writecom(0xc0+14-j);

delay(10);

writedat(32);}

for(j=0;x>0;j++)//qinhkongxianshi

{if((j%3==0)&&(j>0))

{writecom(0xc0+wei-j);writedat(44);wei--;}

writecom(0xc0+wei-j);

delay(10);

writedat(x%10+48);

x=x/10;

}

}

longJ1(void)

{j1=1;

j2=0;

j3=0;

delay(40);

returndatch(ADC0832(0),200);

}

longJ2(void)

{j1=0;

j2=1;

j3=0;

delay(40);

returndatch(ADC0832(0),10000);

}

longJ3(void)

{j1=0;

j2=0;

j3=1;

delay(40);

returndatch(ADC0832(0),500000);

}

voidmain()

{

intj;

longx,s=1;

led=1;

beep=0;

init();

j1=1;

j2=0;

j3=0;

for(x=0;x<11;x++)

{

writedat(table1[x]);

delay(10);

}

writecom(0x40);

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

{

writedat(table[x]);

}

delay(10);

writecom(0xc0+15);

writedat(0x00);

while

(1)

{

if(j1==1)

{

s=J1();

if(s>=1900)

s=J2();

if(s>=100000)

s=J3();

}

elseif(j2==1)

{

s=J2();

if(s<=1900)s=J1();

elseif(s>=100000)s=J3();

}

elseif(j3==1)

{

s=J3();

if((s<=100000)&&(s>1900))s=J2();

if(s<=1900)s=J1();

}

j=ADC0832(0);

if(j>=254)beep=1;

elsebeep=0;

if((j==0)||(j==255))led=0;

elseled=1;

if(x!

=s)

{

x=s;

display(s);}}

}

附录3:

实物图

 

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1