大学课程设计正文.docx
- 文档编号:28854404
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:22
- 大小:377.01KB
大学课程设计正文.docx
《大学课程设计正文.docx》由会员分享,可在线阅读,更多相关《大学课程设计正文.docx(22页珍藏版)》请在冰豆网上搜索。
大学课程设计正文
基于单片机的小电阻测试仪
摘要:
本文提出了基于单片机的小电阻测量的设计方案,该测试仪通过检测小电阻两端的电压差,经过高精度的电压放大过后,该电压信号经A/D转换器后将模拟信号转化为数字信号。
最后将数字信号送入AT89C51单片机,经过软件滤波和误差处理,在LCD上显示输出相应的电阻值。
该仪器的特点是电路设计简单、测温精度高、实用性强。
关键词:
测试仪,小电阻,A/D,AT89C51,LCD
Abstract:
Thetextproposedrevivificationoftheresistanceofdesigns,thedosimetersthroughdetectingtheelectricalresistanceequaltovoltagewithhighprecision,theenlargementofthesignal,thevoltageconverterbyadtheanalogsignalsintodigitalsignal.thefiguresat89c51monolithicintegratedcircuitsafterthesignalissent,filtersoftwareanderror,theLCDdisplaytheoutputofresistance.theinstrumentisacircuitdesignsimple,temperatureandpracticality.highprecision。
Keywords:
ICTemperatureSensor,TemperatureMeasurement,A/D,AT89C51,LED
目录
1前言2
2整体方案设计3
2.1方案论证4
2.2方案比较5
3单元模块设计6
3.1电阻检测模块6
3.2测量信号转换模块7
3.2.1测量信号转换模块原理7
3.2.2ICL7135介绍8
4软件设计11
5系统调试13
5.1硬件调试13
5.1.1恒流源调试13
5.1.2弱信号放大器调试13
5.2软件调试14
6系统功能和指标参数16
7总结17
7.1设计小结17
7.2设计收获17
7.3设计改进17
8参考文献18
附录1:
电路总图19
附录2:
软件代码20
1前言
在电路测试过程中常常会碰到由于忽略某些小电阻的影响引起实验数据与理论值之间存在较大误差,从而影响测试效果。
例如电感器、变压器中往往存在铜电阻,地铁铁轨的电阻;由于其数值较小,一般的指针万用表无法测量出来;通常实验室里会用电桥进行测量,但电桥操作手续较烦,又不能直接读出被测电阻阻值。
鉴于此,我们采用了单片机,利用单片机的优势设计了该测量仪。
该测量仪可直接从LCD显示屏上读出所测得的电阻值,测量范围为1mΩ~1Ω。
该测试仪的测量精度高达±0.1%,并采用四端测量法,电阻值不受引线长短及接触电阻的影响。
不仅测量简便,读数直观,且测量精度、分辨率也高于一般电桥。
可用于实验室、研究所,尤其适用于工作现场。
2整体方案设计
本设计的整体思路是:
通过测量待测电阻两端的电压,通过集成运放进行放大,再将该电压信号通过A/D转换器转换为数字信号,将数字信号送入AT89C51单片机,进行软件滤波和误差处理,最后通过LCD输出显示测量电阻值。
2.1方案论证
设计中主要采用了两个方案,具体的方案见方案一和方案二。
方案一:
电桥测量方案
采用电桥方法测量方法,其电压变化关系非线性,由于电路工作时,各个电阻产生热量引起温度升高会引起电阻值的变化,这样所测数据不稳定,最后输出的结果不能达到我们所要求的精度。
图2.1测量电阻方案一框图
方案二:
恒流源测量方案
见图2.2.将待测电阻两端通过一恒定电流,这样电阻两端的电压为电阻与电压的积,电路中通过的电流较小,待测电阻的阻值也很小,电阻所产生的热量可忽略不计,这样消除了温度对测量精确性的影响,将测量电压通过差分式放大电路,通过A/D转换电路转换为数字信号,送入单片机中进行处理,最后将测量结果显示在LCD显示器上。
图2.2测量电阻方案二框图
2.2方案比较
由于方案一中测量精度不够,线性度也不好,消耗的功率相对较大。
而方案二中,让待测电阻通过一恒流源,能够产生一稳定的电压,并且线性惯性非常好,精度也能达到要求,因此设计采用了方案二。
3单元模块设计
硬件部分主要分为检测模块和转换模块。
最后将转换的数字信号送入单片机中进行处理,最后显示输出在LCD显示器上。
3.1电阻检测模块
电阻检测模块首先要有一恒流源加在待测电阻两端,恒流源电路图如下:
图3.1恒流源原理图
上图中,恒流源产生的电流大小由,滑动电位器W2和加在两端的电源决定,即:
(1)
在
(1)式中,
为电源电压,在测试仪中取9V,
,
取理论值0.7V,令恒流源电流为0.16A,计算可得出W2为103.75Ω,由于没有此标称值的电阻,可用一1K的滑动电位器代替,调试时应该先从1K往下调节,以避免通过电流过大,损坏元件。
此部分电路可产生一恒定电流,电流大小为0.16A。
电阻检测模块还包括一个电压放大模块,此模块使用差动放大器。
因为差动放大器具有双端输入—单端输出,共模抑制比较高的特点,通常用作传感器或测量仪器的前端放大器。
由于测量的是小电阻电压,属于检测微弱信号,采用差动放大器可获得较高的共模抑制比,增强电路的抗干扰能力。
电路原理图如下:
图3.2弱信号检测放大器原理图
上图为弱信号检测放大器,J2为待测电阻的测量端口,该电路的放大增益为:
(2)
测试仪中取
=
=100K,设计要求检测0.001Ω~1Ω电阻,经过分析放大倍数为30倍时能达到设计要求,且有较好的线性关系和非常小的误差。
,经计算W1=0.827k,取一个大小为10k的滑动电位器能满足要求。
3.2测量信号转换模块
测量信号转换模块将前级检测放大的模拟电压转换为数字信号,最后送入AT89C51单片机处理显示。
3.2.1测量信号转换模块原理
电路原理图如下:
图3.3测量信号转换模块原理图
测量信号转换模块,将放大后的模拟电压信号送入A/D转换器转换为数字信号,该模块使用的AD转换器为ICL7135,其输出信号可由该公式计算,即:
输出数字量=
(3)
在本次设计中,输出量由ICL7135的BUSY端口送入单片机,由于单片机的ALE端口输出信号为单片机在正常工作情晶振频率的六分之一,本系统中,使用12MHz,所以在此处为ALE输出频率2MHz。
再通过两个Q触发器所构成的4分频模块,最后送入ICL7135的CLK管脚的时钟频率为500KHz。
配置好单片机的工作方式为外部信号输入计数模式后,单片机所接收到BUSY端口送入的脉冲数为(3)式中的输出数字量加上10000个脉冲,其中的10000个脉冲是由ICL7135正向积分所决定的。
将接收到的脉冲数进行误差处理,使用拟合方法,可以得到输入电压与脉冲的一个线性关系,经过软件算法的处理,最后通过LCD显示器输出显示出所测得的电阻值。
3.2.2ICL7135介绍
ICI7135是4位双积分A/D转换芯片,可以转换输出±20000个数字量,有STB选通控制的BCD码输出,与微机接口十分方便.ICL7135具有精度高(相当于14位A/D转换),价格低的优点.其转换速度与时钟频率相关,每个转换周期均有:
自校准(调零),正向积分(被测模拟电压积分),反向积分(基准电压积分)和过零检测四个阶段组成,其中自校准时间为10001个脉冲,正向积分时间为10000个脉冲,反向积分直至电压到零为止(最大不超过20001个脉冲).故设计者可以采用从正向积分开始计数脉冲个数,到反向积分为零时停止计数.将计数的脉冲个数减10000,即得到对应的模拟量.图3.5给出了ICL7135时序,由图可见,当BUSY变高时开始正向积分,反向积分到零时BUSY变低,所以BUSY可以用于控制计数器的启动/停止.
ICL7135为DIP28封装,芯片引脚排列如图3.6所示,引脚功能及含义如下:
(1)与供电及电源相关的引脚(共7脚)
.-V:
ICL7135负电源引入端,典型值-5V,极限值-9V;
.+V:
ICL7135正电源引入端,典型值+5V,极限值+6V;
.DGND:
数字地,ICL7135正,负电源的低电平基准;
.REF:
参考电压输入,REF的地为AGND引脚,典型值1V,输出数字量=10000×(VIN/VREF);
.AC:
模拟地,典型应用中,与DGND(数字地)"一点接地";
.INHI:
模拟输入正;
.INLO:
模拟输入负,当模拟信号输入为单端对地时,直接与AC相连.
图3.4ICL7135时序
图3.5ICL7135芯片引脚图
(2)与控制和状态相关的引脚(共12脚)
.CLKIN:
时钟信号输入.当T=80ms时,fcp=125kHz,对50Hz工频干扰有较大抑制能力,此时转换速度为3次/s.极限值fcp=1MHz时,转换速度为25次/s.
.REFC+:
外接参考电容正,典型值1μF.
.REFC-:
外接参考电容负.
.BUFFO:
缓冲放大器输出端,典型外接积分电阻.
.INTO:
积分器输出端,典型外接积分电容.
.AZIN:
自校零端.
.LOW:
欠量程信号输出端,当输入信号小于量程范围的10%时,该端输出高电平.
.HIGH:
过量程信号输出端,当输入信号超过计数范围(20001)时,该端输出高电平.
.STOR:
数据输出选通信号(负脉冲),宽度为时钟脉冲宽度的一半,每次A/D转换结束时,该端输出5个负脉冲,分别选通由高到低的BCD码数据(5位),该端用于将转换结果打到并行I/O接口.
.R/H:
自动转换/停顿控制输入.当输入高电平时;每隔40002个时钟脉冲自动启动下一次转换;当输入为低电平时,转换结束后需输入一个大于300ns的正脉冲,才能启动下一次转换.
.POL:
极性信号输出,高电平表示极性为正.
.BUSY:
忙信号输出,高电平有效.正向积分开始时自动变高,反向积分结束时自动变低.
(3)与选通和数据输出相关的引脚(共9脚)'
.B8~B1:
BCD码输出.B8为高位,对应BCD码;
.D5:
万位选通;
.D4~D1:
千,百,十,个位选通.
图3.6ICL7135典型应用图
4软件设计
软件设计采用C语言进行编程,调试软件使用KEILC的Vision3开发环境和调试环境,仿真使用Protues7的ISIS软件平台。
1、主程序设计:
当A/D转换器输出的数据送入单片机内部后,单片机就采集数据,将数据采集到内部存储器的存储单元存储,将输入的脉冲数经过计算转换为对应的电阻值。
再将所测得的电阻值转换为ASIIC码,输出显示在LCD显示器上。
2、单片机从A/D转换器读取数据的程序设计:
由于单片机是从ICL7135的BUSY端口读入脉冲数,程序初始化后将不断的从该端口读入脉冲数,为了减小由电路原因引起的误差,此处应采用软件滤波方法,本设计中使用中值滤波法,连续采样9次以后,使用中间值作为此次采样的最终数据。
3、码的变换程序:
单片机所读入的数据时A/D转换后的脉冲数,该脉冲数与输入电压有一个线性的对应关系,应将该脉冲数转换为电压数据,再经过电压与电阻的线性对应关系,转换为测量的电阻值大小。
4、显示程序:
因为LCD1602接收的是ASIIC码,所以应将测量的电阻值大小转换为ASIIC码,直接送入LCD1602显示。
程序整体设计框图如下:
图4.1程序整体设计流程图
5系统调试
系统调试主要分为硬件调试和软件调试。
该部分调试,主要采用Proteus7的ISIS软件进行仿真。
5.1硬件调试
硬件部分,恒流源模块和弱信号放大模块的稳定性对本设计起着决定性作用,所以应将调试重心放在这两个模块。
5.1.1恒流源调试
本测试仪中,系统依据待测电阻两端的电压来判断其电阻值的大小,所以该电压要非常的稳定。
根据欧姆定律可知,电压等于电流与电阻之积。
而测量电阻的电阻值可以认为是一常量,所以测量的精度是否达到要求,主要在于恒流源的稳定性。
本设计中,恒流源的电流为0.16A,理论计算值W2=103.75Ω,将该理论值代入仿真软件中进行,仿真结果并不能达到设计要求,最后经过修改,定为101.1Ω,因为在硬件设计时,改电阻使用的是一个1K的滑动变阻器,所以该模块能达到设计要求,在实际制作中,三极管的
不是恒定不变,受到电路中的电路和电源电压多种因素的影响,可改变滑动变阻器的值来使恒流源的电流达到稳定值。
在实际制作过程中,还应考虑三极管功耗的问题,因为改恒流源的电流为0.16A,三极管的功率不够的话,可能造成三极管的损坏,发热过高的话也会造成三极管的不稳定,所以应选用功率高,散热效果好的三极管。
5.1.2弱信号放大器调试
该部分的放大单元使用了运算放大器,运算放大器在使用时应该进行调零,也就是让两端输入型号都为0V时,输出信号要尽量的接近于0V。
该部分的设计要求是,对电压检测的小信号进行30倍放大,理论计算值W1=0.827k,所以在设计时应选用10k的滑动变阻器,即可达到设计要求,在调试该部分时,可以选用一个阻值为1Ω的精密电阻进行调试,改变滑动变阻器的值,将输出电压控制在4.8V,越接近说明精度越高,测量误差也就越小。
该部分的电路仿真图如下:
图5.1硬件调试仿真图
5.2软件调试
首先,将AD采样值送入单片机,单片机经过处理,通过LCD输出显示。
根据理论值计算,单片机接收的脉冲数应该是AD转换数字量加上正向积分时间(10000个脉冲),根据理论输出的脉冲数与AD转换的脉冲数有一定的误差,最后调试得出。
单片机接收的脉冲数减去10002个脉冲较为准确。
考虑本测试仪的测试范围,假如测试电阻大于1Ω,可能造成AD转换输出量的饱和现象,这样会造成较大的测量误差,所以应判断所测电阻是否满足量程,若不满足,应在LCD上输出提示操作人员,测量溢出。
因为,本测量仪要求精度较高,测量信号较弱,应尽量避免环境因素的干扰,所以在数据处理阶段应加入软件滤波模块,本设计中采用的是中值滤波,此滤波方法能有效的滤除毛刺等干扰又能不失真的接收正确信号。
在数据处理模块,由于所接收的脉冲数数值很大,而所测量的电阻数值较小,并且51单片机的C语言所表示的数据范围有限。
在程序处理时应避免使用浮点数运算。
将处理算法经过处理后,进行整数运算为佳。
但是整数运算会造成小数部分的舍去,会对最终的测量显示结果造成一定的误差。
在处理算法上应对该误差进行补偿。
最后,在LCD显示模块。
由于,LCD1602接收的是ASIIC码,所以应将所测电阻的十进制数据转换为ASIIC码,最后输出显示即可。
软件调试模块的仿真图如下:
图5.2软件调试仿真图
6系统功能和指标参数
本文实现了1mΩ~1Ω的电阻测量仪,该测试仪的测量精度高达±0.1%。
并且测量稳定较好,测量模块简单,便于携带。
下表为测量参数记录表:
测量电阻(Ω)
输入电压(V)
AD转换脉冲数(个)
显示结果(Ω)
1.02
4.896
19581
Overflow!
1
4.8
19197
1
0.5
2.4
9595
0.5
0.25
1.2
4795
0.25
0.12
0.576
2298
0.12
0.06
0.288
1145
0.06
0.03
0.144
569
0.03
0.015
0.072
281
0.015
0.007
0.0336
128
0.007
0.003
0.0144
51
0.003
0.001
0.0048
12
0.001
7总结
随着各种高精度传感器的应用与普及,这一技术在科学研究,生产过程等领域中发挥着越来越重要的作用。
7.1设计小结
在本次设计中,我们完成本系统设计的要求及功能。
在设计开始前我们对各个模块进行了详细的分析和设计准备工作,设计过程中,我们相互帮助,积极参与完成各个模块的功能实现。
本次设计主要完成了1mΩ~1Ω电阻的测试,实现了基本单片机的小电阻测量。
7.2设计收获
通过本次设计,多方的查阅资料,懂得了很多种小电阻的测量方法和普通电阻的测量方法。
例如,使用电桥,和提供一个恒定电压,使用继电器控制档位的。
不过对于小电阻测量,电桥测量和继电器控制都难以达到一个高精度的标准,必须采用一种稳定并且线性度高的方法。
在本次设计中,小组成员协调合作。
对设计中的各个模块进行了详细的分析和讨论,是本次设计成功的关键,这锻炼了我们小组合作,相互协调的团队协作能力。
7.3设计改进
由于本次课程设计时间有限和自身能力的欠缺。
设计并没有做出实物来,这也是很遗憾的。
并且我们的设计所测量的小电阻还不够小,这可以通过提高恒流源电流或者提高放大器的放大倍数来实现。
提高恒流源电流以后,就增加恒流源模块的功耗,假如说本测试仪使用的是电池供电的话,这样的使用时间有限。
提高放大器的放大倍数以后,就会缩小电阻的测量范围,这可以通过改进AD转换器的位数来进行改进。
不过,位数越高的AD转换器,其成本就会相应的提高。
综上所述,应采用一种量程转换的方法来达到设计的要求,可在设计中加入数字电位器,通过单片机控制放大器的放大倍数,选用一个8位的AD转换器,通过改变量程的方法,可以实现
测量范围。
8参考文献
[1]万福君、潘松峰.单片微机原理系统设计与应用(第二版)[M].合肥:
中国科学技术大学出版社,2001.
[2]周润景、张丽娜.PROTEUS入门实用教程[M].北京:
清华大学出版社,2007.
[3]康光华.电子技术基础模拟部分(第五版)[M].北京:
高等教育出版社,2005.
[4]谢自美.电子线路设计•实验•测试(第三版)[M].武汉:
华中科技大学出版社,2005.
[5]张培仁.基于C语言编程MCS-51单片机原理与应用[M].北京:
清华大学出版社,2003.
附录1:
电路总图
附录2:
软件代码
#include
sbitE=P2^5;
sbitRW=P2^6;
sbitRS=P2^7;
charbcd[]="00000Ohm";
charoverflow[10]="overflow!
";
unsignedintah,al;
unsignedcharwan,qian,bai,shi,ge;
intk=0;
typedefunsignedcharuchar;
#defineB1
voidDelay(unsignedintt)//delay40us
{
unsignedinti;
for(;t!
=0;t--)
for(i=100;i!
=0;i--);
}
voidscankey(void);
voidSendCommandByte(unsignedcharch)
{
RS=0;
RW=0;
P0=ch;
E=1;
Delay
(1);
E=0;
Delay(5);//delay40us
}
voidSendDataByte(unsignedcharch)
{RS=1;
RW=0;
P0=ch;
E=1;
Delay
(1);
E=0;
Delay(5);//delay40us
}
voidInitLcd()
{SendCommandByte(0x30);
SendCommandByte(0x30);
SendCommandByte(0x30);
SendCommandByte(0x38);//设置工作方式
SendCommandByte(0x0c);//显示状态设置
SendCommandByte(0x01);//清屏
SendCommandByte(0x06);//输入方式设置
}
voidDisplayMsg1(uchar*p)
{
unsignedcharcount;
SendCommandByte(0x80);//设置DDRAM地址
for(count=0;count {SendDataByte(*p++); } }//向液晶显示器第一行发送数据,由全局变量k决定发送长度 voidDisplayMsg2(uchar*p) { unsignedcharcount; SendCommandByte(0xc0);//设置DDRAM地址 for(count=0;count {SendDataByte(*p++); } }//向液晶显示器第一行发送数据,由全局变量k决定发送长度 unsignedintMid_Value(intc[]){ chari,j; unsignedintbuf; for(i=0;i<8;i++){ for(j=0;j<8;j++){ if(c[j+1] buf=c[j+1]; c[j+1]=c[j]; c[j]=buf; } } } return(c[4]); } main() { inttest[9]; chari=0; unsignedintmid; TMOD=0x1D; EA=0; ET1=1; TR1=1;//定时器配置 InitLcd();//LCD1602初始化 while (1){ for(i=0;i<9;i++)//连续9次采样 { while(INT0); while(! INT0); TR0=1; while(INT0); TR0=0; al=TL0; ah=TH0; TL0=0X00; TH0=0X00; ah=(ah*256+al)-10002; test[i]=ah; } mid=Mid_Value(test);//中值滤波 if(mid>19500) { SendCommandByte(0x01); k=10; DisplayMsg1(overflow); } else{//将脉冲数转化为电阻并输出显示 mid=mid/2*5/48+B; wan=mid/10000; qian=(mid-(wan*10000))/1000; bai=(mid-(mid/1000*1000))/100; shi=(mid-(mid/100*100))/10; ge=mid%10; SendCommandByte(0x01); bcd[1]='.'; bcd[0]=qian+48; bcd[2]=bai+48; bcd[3]=shi+48; bcd[4]=ge+48; k=9; DisplayMsg1(bcd); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 课程设计 正文
![提示](https://static.bdocx.com/images/bang_tan.gif)