电阻参数单片机测试系统的设计文档格式.docx
《电阻参数单片机测试系统的设计文档格式.docx》由会员分享,可在线阅读,更多相关《电阻参数单片机测试系统的设计文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
![电阻参数单片机测试系统的设计文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/cb4ce9c0-e4ca-4cd6-abff-450a962ec2d0/cb4ce9c0-e4ca-4cd6-abff-450a962ec2d01.gif)
前者电路简单,速度快,但精度低;
后者测量精度高,但速度慢。
随着数字化测量技术的发展,在测量速度和精度上有很大的改善,电容的数字化测量常采用恒流法和比较法。
纵览目前国内外的LRC测试仪,硬件电路往往比较复杂,体积比较庞大,不便携带,而且价格比较昂贵。
例如传统的用阻抗法、Q表、电桥平衡法等测试LRC的过程中不够智能而且体积笨重,价格昂贵,需要外围环境优越,测试操作过程中需要调很多参数,对初学者来说很不方便,当今社会,对LRC的测试虽然已经很成熟了,但是价格和操作简单特别是智能方面有待发展,价格便宜和操作简单、智能化的仪表开发和应用存在巨大的发展空间,本系统正是应社会发展的要求,研制出一种价格便宜和操作简单、自动转换量程、体积更小、功能强大、便于携带的LRC测试仪,充分利用现代单片机技术,研究了基于单片机的智能LRC测试仪,人机界面友好、操作方便的智能LRC测试仪,具有十分重要的意义。
2.方案设计
本设计是以将被测参数模拟转化为频率,并利用单片机实现计算频率,所以,本次设计需要做好以下工作:
(1)学习单片机原理等资料。
(2)学习PROTEUS等工具软件的使用方法。
(3)设计测量电阻的电路。
(4)设计测量LCD动态显示电路。
(5)设计测量频率程序,设置程序。
(6)调试,并进行实际测试,记录测试数据和结果。
2.2设计方案
2.1电阻的系统设计方案比较
(1)电阻测试方案
通过测量输出振荡频率的大小即可求得电阻的大小,如果固定电阻值,该方案硬件电路实现简单,通过选择合适阻值即可获得适当的频率范围,再交由单片机处理。
(2)总体思路
本设计是基于单片机80C51智能处理,根据单片机的外接按键控制测量电路的选择,通过555定时器构成的多谐振荡器产生的一定频率的波。
再通过单片机的I/O口对高低电平的捕获读出频率,再通过程序算法处理换算成电阻电容的值,然后再通过单片机送给液晶显示。
RC简易测量仪设计的关键问题是:
如何完成RC的测量。
RC简易测量仪设计的核心问题是:
如何产生转化电路输出频率。
(3)系统总体框图
1)控制部分:
本设计以单片机为核心,采用51单片机,利用其管脚的特殊功能以及所
具备的中断系统,定时/计数器和LCD显示功能等。
LCD灯:
本设计中,设置了1盏,电源指示灯,采用LCD以共阳极方式来连接,直观易懂,操作也简单。
数码管显示本设计中有1个74HC02、2个74LS573、1个2803驱动和6个数码管,采用共阳极方式连接构成动态显示部分,降低功耗。
2)通道选择:
本设计通过单片机控制CD4052模拟开关来控制被测频率的自动选择。
3)测量电路:
电路实现被测电阻变化。
通过51单片机的IO口自动识别量程切换,实现自动测量。
3.硬件设计
3.1单片机最小系统
内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序。
本电路使用单片机内部振荡器,11.0592MHz的晶体谐振器直接接在单片机的时钟端口X1和X2,电路中C2、C3为振荡器的匹配电容。
该电路简单,工作可靠。
另外本系统的容阻上电复位,就是
利用RC电路的充电过程来给单片机复位。
RC电路的时间常数计算公式:
T=RC即:
T=RC=10u*10k=100ms。
当需要复位时,也可以按下复位按键,进行复位。
3.2显示驱动部分
在本设计中,考虑到单片机构成的应用系统有较大的可靠性,容易构成各种规模的应用系统,且应用系统有较高的软、硬件利用系数。
还具有可编程性,硬件的功能描述可完全在软件上实现。
另外,本设计还需要利用单片机的定时计数器、中断系统、串行接口等等,所以,选择以单片机为核心进行设计具有极大的必要性。
在硬件设计中,选用MS-51系列单片机,其各个I/O口分别接有按键、LCD灯、七位数码管等,通过软件进行控制。
MCS-51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元,以及数据总线、地址总线和控制总线等三大总线,现在分别加以说明:
1)中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
2)数据存储器(RAM):
内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
3)程序存储器(ROM):
共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
4)定时/计数器(ROM):
有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
5)并行输入输出(I/O)口:
共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
6)全双工串行口:
内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
7)中断系统:
具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串口中断,可满足不同的控制要求,并具有2级的优先级别选择。
4软件设计
4.1软件流程
在本设计的模块中,模块是以单片机为核心,再通过按键控制测量的被测参数在数码管显示,按键主流程图如下显示
5.实验结果与讨论
5.1实验仿真
源程序
#include<
reg52.h>
intrins.h>
#defineDATAP0
#defineucharunsignedchar
#defineuintunsignedint
sbitadcs=P2^3;
//可以硬件直接接地
sbitadrd=P2^5;
sbitadwr=P2^4;
sbitRS=P2^0;
//1602写地址
sbitRW=P2^1;
//1602写数据
sbitEN=P2^2;
//1602工作使能
sbitc_test=P3^6;
//开始测量电阻的按键输入
sbit_reset=P3^5;
//555时基芯片工作控制信
uintT_flag,N,D,C,i,Dis1,Dis0;
ucharget_ad();
uintA,F,H,A1,A2;
uintr[]={'
R'
'
='
0'
.'
K'
0Xf4};
//显示R=00.0KΩ
uintData1;
/***********延时1MS******************/
voidDelay1ms(uintmm)
{uinti;
for(;
mm>
0;
mm--)
for(i=0;
i<
100;
i++);
}
voiddelay(uintz)//延时程序
{
uintx,y;
for(x=z;
x>
x--)
for(y=110;
y>
y--);
/***************检查忙否*****************/
voidCheckstates()
uchardat;
RS=0;
RW=1;
do{EN=1;
//下降沿
_nop_();
//保持一定间隔
dat=DATA;
EN=0;
}while((dat&
0x80)==1);
/**************LCD写命令函数*********/
voidwcomd(ucharcmd)
Checkstates();
RW=0;
DATA=cmd;
EN=1;
/**********LCD写数据函数**************/
voidwdata(uchardat)
RS=1;
DATA=dat;
/*****************初始化********************/
voidLCDINIT()
Delay1ms(15);
wcomd(0x38);
//功能设置
Delay1ms(5);
wcomd(0x01);
//清屏
wcomd(0x08);
//关显示
wcomd(0x0c);
//开显示,不开光标
/***********显示函数**************/
voidDisplay1()//显示函数显示电阻
uchari,j;
uchara[12]={0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,
0X54,0X53};
for(i=0;
12;
i++)//写显示第一行
{wcomd(0x80+i);
Delay1ms
(1);
wdata(a[i]);
}
for(j=0;
j<
9;
j++)//写显示第二行
{
wcomd(0xc0+j);
wdata(r[j]);
Delay1ms(1000);
ucharget_ad()//adc0804操作
uchartemp;
adcs=1;
adwr=1;
delay
(1);
adcs=0;
adwr=0;
P1=0xff;
adrd=1;
delay(20);
adrd=0;
temp=P1;
returntemp;
}
voidmain()
IE=0x81;
//打开全外部中断允许
TMOD=0x09;
//T0方式1
IT0=1;
//设置外部中断的触发的方式为脉冲触发
TH0=0x00;
TL0=0x00;
T_flag=0;
LCDINIT();
while
(1)
{
if(!
c_test==1)
Display1();
Data1=get_ad();
A=100*Data1;
H=A/(256-Data1);
A1=H/10;
A2=H%10;
wcomd(0x80+0x43);
wdata(0x30+A1);
wcomd(0x80+0x45);
wdata(0x30+A2);
voidint0(void)interrupt0//第一次中断开始计数,第二个中断停止计数
T_flag=!
T_flag;
if(T_flag==1)
TR0=1;
//开始计时
}
if(T_flag==0)
{
TR0=0;
//停止计时
EX0=0;
//关闭中断
N=TH0*256+TL0;
//计算计数器的值
N=N*5/3;
TH0=0x00;
//恢复初值
TL0=0x00;
7参考文献
[1]彭伟.单片机C语言程序设计实训100例.电子工业出版社.
[2]周景润张丽娜.Proteus入门实用教
[3]电子技术基础(模拟部分)康华光高等教育出版社
[4]数字电路基础崔建宗北京航空航天大学出版社
[5]电路邱关源高等教育出版社