简易自动电阻测试仪的制作论文.docx
《简易自动电阻测试仪的制作论文.docx》由会员分享,可在线阅读,更多相关《简易自动电阻测试仪的制作论文.docx(26页珍藏版)》请在冰豆网上搜索。
简易自动电阻测试仪的制作论文
2011年全国大学生电子设计竞赛
(全国二等奖获得者)
简易自动电阻测试仪(G题)
简易自动电阻测试仪
摘要:
本设计以STC89C51RC为主控制器,测量电路采用的是串联分压原理,以标准电阻为基准,用被测电阻与标准电阻上的分压进行比较,然后通过计算得出被测电阻的阻值。
再经过信号处理将测量电路输出的电压送给A/D转换器,用单片机控制器读取A/D转换后的值在其内部转换后输出给液晶进行显示被测电阻值。
按照此种方法计算较为简单,原理清晰,操作方便。
单片机主要完成采集和处理经过转化的数字量信号,完成键盘录入、液晶显示等功能。
此系统性能稳定,精度高,误差在1%以内,具有良好的实用价值。
关键词:
A/D转换,STC89C51RC,液晶显示
4
4
4
4
4
4
5
6
6
7
8
8
8
9
9
10
10
电位器阻值变化曲线装置10
10
10
11
1
测试使用的仪器设备1
测试方案与测试条件1
测试数据1
结果分析3
5结论3
基本部分3
发挥部分3
其它3
4
5
5
7
1系统设计
设计要求
(1)测量量程为100Ω、1KΩ、10KΩ、10MΩ四档。
测量准确度为±(1%读数+2字)。
(2)3位数字显示(最大显示数必须为999),能自动显示小数点和单位,测量速率大于5次/秒。
(3)100Ω、1KΩ、10KΩ三档量程具有自动量程转换功能。
总体设计方案
1.2.1设计思路
题目要求设计一台简易自动电阻测试仪,实现对电阻的测量。
设计主要分为电阻测量电路模块和MCU数据处理模块。
电阻测量电路模块是根据串联分压原理,让被测电阻与标准电阻串联,以标准电阻作为测量量程的基准,用恒压源给电路供电,根据被测电阻的不同,标准电阻两端的电压就会发生改变,将标准电阻两端的电压值经过处理后给A/D转换器,然后送给单片机,在单片机内通过A/D转换的电压值转换成被测电阻的阻值,采用矩阵键盘对需要设置项进行设置,以LCD12864液晶进行显示工作界面。
如图1所示是系统总体框图:
图1系统总体框图
1.2.2系统方案设计
(1)电阻测量方案论证
方案一:
串联分压原理
图2串联分压原理图
根据串联电路的分压原理可知,串联电路上电压与电阻成正比关系。
通过测量Rx和R0上的电压。
由公式Rx=Ux/(U0/R0)可以得到被测电阻Rx的阻值。
此种方案简单可靠,容易操作、精度高。
方案二:
恒流源法
图3恒流源电路
根据欧姆定律可知,将被测电阻接入恒流源电路中,在被测电阻两端产生电压。
此种方案中,在改变负载后电流就可能不稳定,而且制作恒流源的电路比较复杂,调试难度较大。
方案三:
利用直流电桥平衡原理的方案
图4电桥
(其中R1、R2为可变电阻器,R3为已知电阻,R4为被测电阻)
根据电路平衡原理,不断调节电位器,使得电表指针指向正中间。
由R1*R2=R3*R4。
在通过测量电位器电阻值,可得到R4的值。
但是这种方案调试比较困难。
综合以上三种方案的优缺点,按照题目的要求我们最终选定方案一。
方案一的电路简单、易于操作,而且测量精度能满足题目要求。
(2)电机选择方案论证
在题目的辅助装置中用电机与电位器相连,以实现自动测量功能。
对于电机的选择有以下两种方案:
方案一:
直流电机
直流电机易于操作,使用方便,但是直流电机的速度不易控制,如果接到电路中测得数据会出现较大误差。
方案二:
步进电机
采用步进电机控制速度比较精确,但是步进电机的控制程序要多些。
综合以上两种方案,按照题目的要求采用步进电机控制电位器精度较高,而且可以进行逐步调节。
因此,选择方案二。
2理论分析计算与硬件电路设计
电阻测量原理分析计算
电阻测量电路是根据分压原理,电源VCC的电压分别加在被测电阻和标准电阻上,为了系统稳定使测得U0准确,电源VCC采用恒压源。
继电器是用来切换连接到不同阻值的标准电阻,即切换量程。
当继电器切换到不同的量程时,标准电阻分得的电压U0就会不同,如图5所示。
图5电阻测量原理图
A/D采样电路是将测量电路测得U0的值进行模/数转换后送给单片机进行处理,在单片机内部对得到的数据进行计算,算出被测电阻的阻值后送给液晶,在液晶上显示被测电阻当前的阻值。
当检测不同阻值的电阻时,由单片机来进行检测,当检测到的数据发生变化时,同时单片机发出控制信号控制继电器切换到不同的档位。
为了使A/D采到稳定的信号,所以在A/D和测量电路之间用了一个电压跟随器,由于电压跟随器的输入阻抗很高,输出阻抗低,这就使信号在前级电路中的损耗降到最低,保障A/D转换器读到的数值比较准确。
如图6是OP07构成的电压跟随器。
OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。
由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。
OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。
特点:
超低偏移:
150μV最大;
低输入偏置电流:
;
低失调电压漂移:
μV/℃;
超稳定,时间:
2μV/month;
最大高电源电压范围:
±3V至±22V。
图6电压跟随器
A/D数据采样电路
A/D数据采样是用ADC0809为数据采集芯片。
ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
如图7所示是ADC0809的引脚图,图8是ADC0809在电路中的连接图:
图7ADC0809引脚图
图8ADC0809在电路中的原理图
A/D将采集过来的电压值转换成单片机能读取的数据,单片机读取数据后,在单片机内部根据前端的测量原理,将读到的电压值换算成电阻送给液晶显示。
单片机控制系统
本系统采用的处理器是我们常用的STC89C51RC,STC89C51RC是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-5l指令系统,片内置通用8位央处理器和Flash存储单元,功能强大。
在该系统中,对于题目对于系统的要求,用STC89C51RC单片机可以满足要求,而且STC89C51RC单片机是我们最容易使用的、最熟悉的单片机,所以再选择处理器时,我们首先选择的就是该单片机。
如图9所示是STC89C51RC的引脚封装图。
图9STC89C51RC的引脚封装图
单片机最小系统
2.4.1时钟电路
时钟电路用于产生单片机工作所需的时钟信号,时序是指令执行中各信号之间的相互关系。
单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
在STC89C51RC单片机内部带有时钟电路,因此,只需要在片外通过XTAL1和XTAL2引脚接入定时控制元件(晶体振荡器和电容),即可构成一个稳定的自激振荡器。
在STC89C51RC芯片内部有一个高增益反相放大器,而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容。
STC89C51RC的时钟电路如图10所示:
图10STC89C51RC的时钟电路
用晶振和电容构成谐振电路。
电容C1、C2容量在15~40pF之间,大小与晶振频率和工作电压有关。
但电容的大小影响振荡器的稳定性和起振的快速性,为了提高精度,本系统采用30pF的电容作为微调电容。
在设计电路时,晶振、电容等均应尽可能靠近芯片,以减小分布电容,保证振荡器振荡的稳定性。
2.4.2复位电路
复位是单片机的初始化操作,其主要功能是使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化以外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境也需按复位键以重新启动。
STC89C51RC芯片内部有复位电路,RST引脚是复位信号的输入端高电平有效,复位方式有自动复位和手动复位两种。
本单片机系统采用手动复位方式复位。
STC89C51RC的复位电路如图11所示,图中S按键是手动复位按键,输出RST接单片机的9脚(RST):
图11STC89C51RC的复位电路
LCD显示电路
在整个系统中,为了能够更好的显示出测得的结果,使显示界面更突出人性化,所以我们选择的是LCD12864作为显示屏。
LCD12864的显示功能相对来说比较齐全,它不仅能够显示字母和汉字,而且可以显示图片、图形。
在这个系统中要求随着电位器阻值随旋转角度的变化在显示装置中显示电位器阻值随旋转角度变化的曲线,而12864的功能完全能够满足题目的要求,所以在选择显示器时我们首先选择的就是LCD12864。
如图12所示,是LCD12864在电路中的连接图。
图12LCD12864在电路中的连接图
在电路设计中,由于单片机的I/O有限制,所以在液晶显示时,我们采用的是串口显示,图9中PSB端口是单片机串口的输出端。
按键控制电路
由于在该系统中需要通过按键输入要求的电阻值和筛选的误差值,所以在按键控制系统中需要数字键和功能键,为了满足这个要求,按键控制电路我们采用的是4×4的矩阵键盘,一共16个按键,完全能够满足系统的需要。
如图13所示是矩阵键盘的原理图。
图13矩阵键盘的原理图
原理图中矩阵键盘的8个端口与单片机的P2口相连。
电机驱动电路
如图14所示是电路中的步进电机驱动电路,J3连接单片机的I/O口,U8连接步进电机的输入线。
U7是步进电机的驱动芯片ULN2003,它属于高电压、大电流的达林顿管,可以直接用单片机到的I/O口直接驱动步进电机。
图14步进电机驱动电路
电位器阻值变化曲线装置
依据题目说明,本系统应该具备自动测量和显示电位器阻值随旋转角度变化曲线的辅助装置,我们采用步进电机与旋转式单圈电位器相连,为了减小电机转动时与电位器不同轴的情况,我们使用联轴器来连接步进电机和电位器。
3软件程序设计
自动量程转换与筛选功能
电阻测量电路采用的是串联分压式电路,按照题目要求,测量量程分为100Ω、1KΩ、10KΩ、10MΩ四档,为了能够实现量程的自动切换,我们使用的是用单片机控制不同档位继电器的开关实现档位的切换。
对于本系统的筛选功能,我们是通过键盘进行设置需要筛选的电阻值,然后对电阻进行测量,当测量到设置的筛选值时,在液晶屏上显示出提示信息。
软件流程图
如图15所示是软件操作流程图:
图15软件流程图
4测试方案与测试结果
4.1测试使用的仪器设备
测试使用的仪器设备如表所示。
表4-1测试使用的主要仪器设备
序号
名称、型号、规格
数量
备注
1
万用表
2
数字式
2
示波器
1
数字式
3
直流稳压电源
1
测试方案和测试条件
对于本系统的测试方案,我们采用在每个档位内取6个不同阻值的电阻,其中在大于二分之一量程阻值取三个,小于二分之一量程阻值取三个。
然后对六个电阻进行测量,最后选出其中的三个电阻,使这三个电阻接近被测六个电阻的平均值并记录测得数值。
以此类推,在另外三个量程内也选出三个电阻做数据记录。
为了减小外界因素对系统测量时产生误差,所以我们在室温下进行测量。
测试数据
测试方案我们选择的是通过多次测量分析电阻的测量值和实际值之间的差值,如下表所示是通过测量得到的测量数据(误差值=理论值-测试值):
表4-2第1次测得的数据
理论值Ω
178
497
811
测试值Ω
165
483
811
误差值
8%
%
%
%
%
0
%
%
%
%
%
%
表4-3第2次测得的数据
理论值(Ω)
160
K
K
K
测试值(Ω)
107
154
307
K
K
K
误差值
%
%
22%
%
%
%
9%
%
%
%
%
%
表4-4第3次测得的数据
理论值(Ω)
469
692
836
测试值(Ω)
458
713
861
误差值
%
%
%
%
%
%
%
%
%
%
%
%
表4-5第4次测得的数据
理论值(Ω)
256
433
516
10M
测试值(Ω)
255
429
515
10M
误差值
%
%
%
%
%
%
%
%
%
%
%
0
表4-6第5次测得的数据
理论值(Ω)
256
测试值(Ω)
154
255
327
误差值
%
%
%
%
%
%
%
%
%
%
%
%
表4-6第6次测得的数据
理论值(Ω)
745
908
测试值(Ω)
159
741
903
10M
误差值
%
%
%
%
%
%
%
%
%
%
%
1%
结果分析
通过以上6次的实验测量结果比较可以看出,试验的精确度逐步提高,由此可以看出实验原理简单易行,实验结果令人满意,测量精度达到了设计要求。
5结论
本文设计制作的简易自动电阻测试仪系统,通过多次的理论分析和实验后能够满足以下要求:
基本部分
基本要求
最终结果
(1)测量量程为100Ω、1kΩ、10kΩ、10MΩ四档。
测量准确度为±(1%读
数+2字)。
在1kΩ和10kΩ量程内误差均在1%以下;在100Ω和10MΩ量程内偶会出现3%左右误差,其它均在1%以下。
(2)3位数字显示(最大显示数必须为999),能自动显示小数点和单位,
测量速率大于5次/秒。
完全满足
(3)100Ω、1kΩ、10kΩ三档量程具有自动量程转换功能。
完全满足
发挥部分
发挥部分
最终结果
(1)具有自动电阻筛选功能
完全满足
(2)设计并制作一个能自动测量和显示电位器阻值随旋转角度变化曲线的
辅助装置,要求曲线各点的测量准确度为±(5%读数+2字),全程测量时间不大于10秒,测量点不少于15点。
完全满足
其它
(1)在自动量程转换部分可以实现100Ω、1kΩ、10kΩ和10M四档量程内自动量程切换。
(2)自动测量和显示电位器阻值随旋转角度变化曲线的辅助装置中经过测试得出,在10秒内,测量点在20点左右。
参考文献
[1]黄友锐等.单片机原理及应用[M].合肥工业大学出版社,.
[2]潘永雄.新编单片机原理与应用[M].西安电子科技大学出版社,.
[3]朱定华.单片微机原理及接口技术实验[M].北方交通大学出版社,.
[4]付家才.单片机控制工程实践技术[M].化学工业出版社,.
[5]王雷,钟爱琴等.AT89系列单片机原理与接口技术[M].北京航空航天大学,.
[6]康华光.电子技术基础模拟部分(第四版)[M].高等教育出版社,.
[7]李明星.直流稳压电源的设计与制作[M].吉林工程技师学院,邱关源.电路[M].高等教育出版社,.
附录
附录1电路原理图
附图1单片机最小系统和A/D采样电路
附图2量程自动切换和电动机控制电路
附图3矩阵键盘
附图4电源电路
附录2系统部分主要源程序
voidmain()
{
enchl();
Init();
Sdat();
while
(1)
{
gn0();
while(keyval==0)Scankey();
switch(keyval)
{
case1:
gn1();break;
case2:
gn2();break;
case3:
gn3();break;
}
}
}
voidt0()interrupt1
{
uchars;
s++;
if(s==4)
{
s=0;
chuli();
TH0=0x3c;
TL0=0xbe;
}
}
voidgn1()
{
SendCMD(0x01);
hd1();
keyval=0;
while
(1)
{
i=0;
add(1,1);
while(d02[i]!
='\0')
{
SendData(d02[i]);
i++;
}
i=0;
switch(dangwei)
{
case1:
add(2,0);
while(d11[i]!
='\0')
{
SendData(d11[i]);
i++;
}SendData('1');SendData('0');SendData('0');SendData('R');break;
case2:
add(2,0);
while(d11[i]!
='\0')
{
SendData(d11[i]);
i++;
}SendData('1');SendData('k');SendData('');SendData('');break;
case3:
add(2,0);
while(d11[i]!
='\0')
{
SendData(d11[i]);
i++;
}SendData('1');SendData('0');SendData('k');SendData('');break;
case4:
add(2,0);
while(d11[i]!
='\0')
{
SendData(d11[i]);
i++;
}SendData('1');SendData('0');SendData('M');SendData('');break;
}
i=0;
add(3,0);
while(d15[i]!
='\0')
{
SendData(d15[i]);
i++;
}
i=0;
for(i=0;i<4;i++)
SendData(z[zuzhi[i]]);
switch(dangwei)
{
case1:
SendData('R');break;
case2:
SendData('R');break;
case3:
SendData('k');break;
case4:
SendData('M');break;
}
Scankey();
if(keyval==12)return;
}
}
voidgn2()
{
bitzh;
keyval=0;
SendCMD(0x01);
add(1,0);
while(d03[i]!
='\0')
{
SendData(d03[i]);
i++;
}
i=0;
add(2,0);
while(d21[i]!
='\0')
{
SendData(d21[i]);
i++;
}
i=0;
while(!
zh)
{
if(P2!
=0xf0)
{
Scankey();
s1=keyval;
zh=1;
}
}
zh=0;
SendData(z[s1]);
while(!
zh)
{
if(P2!
=0xf0)
{
Scankey();
s2=keyval;
if(keyval==11)
k4=1;
zh=1;
}
}
zh=0;
SendData(z[s2]);
while(!
zh)
{
if(P2!
=0xf0)
{
Scankey();
s3=keyval;
if(keyval==11)
k4=1;
zh=1;
}
}
zh=0;
SendData(z[s3]);
if(k4==1)
{
while(!
zh)
{
k4=0;
if(P2!
=0xf0)
{
Scankey();
s4=keyval;
zh=1;
}
}
zh=0;
}
elses4=11;
SendData(z[s4]);
add(3,0);
while(d22[i]!
='\0')
{
SendData(d22[i]);
i++;
}
i=0;
while(!
zh)
{
if(P2!
=0xf0)
{
Scankey();
if(keyval<13)zh=0;
elsezh=1;
}
}
switch(keyval)
{
case13:
key=1;break;
case15:
key=2;break;
case16:
key=3;break;
}
zh=0;
add(4,0);
while(d31[i]!
='\0')
{
SendData(d31[i]);
i++;
}i=0;
i=0;
while(!
zh)
{
if(P2!
=0xf0)
{
Scankey();
s5=keyval;
zh=1;
}
}
delay(500);
SendCMD(0x01);
while
(1)
{
shaixuan();
Scankey();
if(keyval==12)return;
}
}