直流电压的测量Word文件下载.docx
- 文档编号:22374622
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:19
- 大小:89.58KB
直流电压的测量Word文件下载.docx
《直流电压的测量Word文件下载.docx》由会员分享,可在线阅读,更多相关《直流电压的测量Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
0]=1024*Vin/Vcc.
2.2直流电压测量原理框图如下:
图2电压测量原理框图
2.3直流大电压信号的测量
在AD采样前面加一级分压电路即分压器,可以扩展直流电压测量的量程。
如下图所示:
U0位电压表的量程,r位其内阻,r1,r2位分压电阻U0为扩展后的量程。
以下是各种与直流电压测量相关的原理图及电路图:
2.3.1分压电路原理图:
图3分压电路原理图
2.3.2多量程分压器原理:
图4多量程分压器原理
分压比为:
扩展后的量程为:
采用这种分压电路虽然可以扩展电压表的量程,但在小量程档明显降低了电压表的输入阻抗,着在实际使用中是所部希望的,所以,实际数字万用表的直流电压档为下图所示:
他能在不降低输入阻抗的情况下达到相同的分压效果。
2.4直流小电压信号
图5直流小信号放大电路
对于直流小信号(20Mv-200Mv)的测量,需要设计信号放大电路将信号适当的放大再进行AD采样,放大电路原理如下图所示:
3.硬件电路原理图及调试过程:
图6外接硬件电路原理图
这次课程设计我们花在焊接和程序的编写上的时间并不是太多,电路设计和系统调试才占用了大部分的时间。
调试试过程是按照先局部后整体的思路进行的。
详细叙述如下:
3.1.局部调试:
模拟部分的设计主要是根据我们的检查模拟开关是否工作、调节各量程放大倍数是否到设计指定值等。
①检查模拟开关是否工作:
模拟开关集成了四个开关。
共有四个控制端。
如果某一控制端为高电平则对应的开关将接通。
为测量其是否工作,我们将它的四个控制端用导线引出分别接高低电平,发现测量结果与理论分析结果一致,工作正常。
各量程放大倍数的调节:
这一步调试是建立在上述两步调试的基础上的。
针对不同的档位,我们通过接入不同的待测的模拟输入电压来调节放大电路的放大倍数。
调试测量20到200V档的放大倍数时,我们选择的输入电压为80V,按照设计,该电压在经过衰减电路后不放大。
前面已经说过,我们设定的衰减比例为1/4,因此LM358输出端(7腿)的电压应该为20V,经过万用表测量,电压为20V,调试成功。
在调节20到200V档的放大倍数时,我们选择的电压为30V,该电压应该先衰减到原来值的1/4再经过4倍放大电路后大小不变。
我们通过调节控制放大倍数的电位器使LM358的7腿的电压为30V达到放大倍数调节的目的。
同理,在调节其他档位的放大倍数时也是通过上述方法调节相应的电位器实现的。
3.2整机调试:
在进行电路的分局部调试之后,我们又进行了系统整机调试。
首先为LM358接上5V的电压,为其他芯片接上2V的工作电压。
另外还要输入待测的模拟电压,该电压从200mV以下的电压开始输起,依次增大。
直到达到供端电压的上限5V为止,在这过程中,记录测量数据如下表所示。
由于前面的分局部调试进行得还比较顺利,因此整机调试较为顺利。
4.数据测量及分析
4.1.实验数据测量结果如表1所示:
表1实验数据测量记录表
测量档
测量值
真实值
误差
0-200mV档
50mV
60mV
10mV
100mV
95mV
5mV
150mV
125mV
25mV
200mV-2V档
0.64V
0.62V
20mV
1.16V
1.08V
80mV
1.50V
1.45V
1.90V
1.85V
2V-20V档
3.10V
2.80V
0.3V
3.40V
3.20V
0.2V
4.50V
4.25V
0.25V
4.2实验测试结果分析
从上表可以看出,系统测试结果基本满足200mV精度的测量要求,但精度不是很稳定,有的精度很高,而最高的误差达到了350mV。
造成这种结果的原因主要是系统前端模拟部分的不稳定性和放大倍数的不精确性,另外就是数字部分的TC12C5A32AD进行A/D转换造成的误差。
我们曾经测量过模拟部分中开关调压的电阻,我觉得它的电阻过大可能也是造成误差的一个原因。
5.软件相关源程序及相关程序:
外接电路控制程序:
:
#include"
reg51.h"
intrins.h"
typedefunsignedcharBYTE;
typedefunsignedintWORD;
/*DeclareSFRassociatedwiththeADC*/
sfrADC_CONTR=0xBC;
//ADCcontrolregister
sfrADC_RES=0xBD;
//ADChight8-bitresultregister
sfrADC_RESL=0xBE;
//ADClow2-bitresultregister
sfrP1ASF=0x9D;
//P1secondaryfunctioncontrolregister
/*DefineADCoperationconstforADC_CONTR*/
#defineADC_POWER0x80//ADCpowercontrolbit
#defineADC_FLAG0x10//ADCcompleteflag
#defineADC_START0x08//ADCstartcontrolbit
#defineADC_SPEEDLL0x00//420clocks
#defineADC_SPEEDL0x20//280clocks
#defineADC_SPEEDH0x40//140clocks
#defineADC_SPEEDHH0x60//70clocks
/*************************************************
定义位变量
*************************************************/
sbitSCL=P0^3;
//移位;
sbitRCL1=P0^1;
//RCL1,RCL2位码锁存时钟;
sbitRCL2=P0^2;
sbitSDATA=P0^0;
//数据位;
/************************************************
定义数组
*************************************************/
unsignedcharcodeled1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x38,0x39,0x00};
//0~9,r,l,c不带小数点;
unsignedcharcodeled2[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xb8,0xb9};
//带小数点;
段位代码宏定义
#definek000x8000
#definek010x4000
#definek020x2000
#definek030x1000
#definek100x0800
#definek110x0400
#definek120x0200
#definek130x0100
#definek200x0080
#definek210x0040
#definek220x0020
#definek230x0010
sbitkey1=P2^4;
//200mv--2v
sbitkey2=P2^5;
//2v--20v
sbitkey3=P2^6;
//20v--200v
sbitkey4=P2^7;
//200v--2000v
unsignedstate=0;
floatresult;
floatresult2;
unsignedchara[4]={0};
intkey;
voidInitUart();
voidSendData(BYTEdat);
voidDelay(WORDn);
voidInitADC();
BYTEch=0;
//ADCchannelNO.
/*----------------------------
ADCinterruptserviceroutine
----------------------------*/
voidadc_isr()interrupt5using1
{
ADC_CONTR&
=!
ADC_FLAG;
//ClearADCinterruptflag
state=ADC_RES*4+ADC_RESL;
result2=(state*5)/1023.0;
if(key==0)
result=result2/23;
if(key==1)
result=result2/23*10;
if(key==2)
result=result2/23*100;
if(key==3)
result=result2/23*1000;
if(key==4)
result=result2/23*10000;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0;
}
InitialADCsfr
voidInitADC()
P1ASF=0x01;
//SetallP1asanaloginputport
ADC_RES=0;
//Clearpreviousresult
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
Delay
(2);
//ADCpower-ondelayandStartA/Dconversion
Softwaredelayfunction
voidDelay(WORDn)
WORDx;
while(n--)
{
x=5000;
while(x--);
}
函数名:
Dtat_Out(unsignedintn_LED,unsignedcharData_595)
出口参数:
无
入口参数:
n_led,data_595;
段码及显示的数据
功能:
发送数据并显示
voidDtat_Out(unsignedintn_LED,unsignedcharData_595)
{
unsignedchary;
unsignedintyy;
RCL2=1;
//输出锁存时钟,上升有效
RCL1=1;
RCL2=0;
//段码清零;
for(y=0;
y<
8;
y++)
SCL=0;
//数据输入时钟,上升沿有效
SDATA=0;
SCL=1;
RCL1=0;
//发送位选信号;
16;
y++)
if((n_LED&
0x0001)==0x0001){SDATA=1;
0x0001)!
=0x0001){SDATA=0;
n_LED>
>
=1;
SCL=1;
//发送段信号;
if((Data_595&
0x80)==0x80){SDATA=1;
0x80)!
=0x80){SDATA=0;
Data_595<
for(yy=0;
yy<
2000;
yy++);
//延迟一会;
voidData_con(floatx)//数据分离
unsignedintresult1;
result1=(int)(x*10000);
result1=(int)(x*1000);
result1=(int)(x*100);
result1=(int)(x*10);
a[0]=result1/1000;
a[1]=(result1/100)%10;
a[2]=(result1%100)/10;
a[3]=result1%10;
xianshi()
给出显示的数据位码及段码
/************************************************
voidxianshi_2()//数据显示
if(key==0)//单位是mv
Dtat_Out(k23,led1[a[0]]);
Dtat_Out(k22,led1[a[1]]);
Dtat_Out(k21,led2[a[2]]);
Dtat_Out(k20,led1[a[3]]);
Dtat_Out(k23,led2[a[0]]);
Dtat_Out(k21,led1[a[2]]);
Dtat_Out(k22,led2[a[1]]);
unsignedchargetkey(void)
unsignedinti;
if(key1==0)//200mv--2v
{for(i=0;
i<
5000;
i++);
while(key1==0);
key=1;
if(key2==0)//2v--20v
while(key2==0);
key=2;
if(key3==0)//20v--200v
while(key3==0);
key=3;
if(key4==0)//200v--2000v
while(key4==0);
key=4;
//200mv--20mv
voidmain()
P2=0xFF;
//InitUart();
//InitUART,usetoshowADCresult
InitADC();
//InitADCsfr
IE=0xa0;
//EnableADCinterruptandOpenmasterinterruptswitch
//StartA/Dconversion
while
(1)
getkey();
Data_con(result);
xianshi_2();
6.实习体会
本课程设计跟我以前做过的课程设计都不同,虽然以前也做过类似的设计,但是那次因为条件的原因,并没有真正把做好的设计运用到实际当中,但是这次却运用到实际当中了。
焊接电路已经是我们这次实习的一个基本操作,而又是很重要的一个操作。
焊接电路的好坏直接影响你的实验结果。
实习时间定在每周一到周五的上午8点半到11点半,下午2点半到五点半。
刚开始我感觉时间很充裕就有点坐不住了,但我想到如果连这都不能静下心来好好做实习,那以后真正上班了还怎么办,我一定要认真对待每一次实习锻炼我的机会。
于是我静下心来先好好把实验要求、实验内容好好琢磨了一番,发现我们前期对实习的各方面准备都不足,要想做好实验还很不简单。
于是在这次实验的开头,我们用了两天的时间去图书馆及网上查找和学习有关电压表量程变换的单片机知识并且我和搭档彼此之间进行了多次深入的探讨,初步确定了主攻方向。
实习就是给我们一个在实践中灵活运用知识的机会,我们通过综合运用学到的有关单片机的所有理论知识,在实际的硬件电路设计中实现直流数字式多量程电压表的功能,在实践中发现问题,进而去书本中找相关的知识去解决问题,从而巩固了理论知识,锻炼了动手能力。
那样的知识是你从根本上去认识它,理解它,所以你的记忆时间会很长。
实验的过程全是我和另一名同学软硬件分工,自己动手来完成的,这样,我们就必须要弄懂设计要求及实验原理,自己设计电路图,利用各模块编制程序。
我们首先是在电路板按照设计好的方案图焊接,检查焊接有无问题,再把写好程序写入89ATS51单片机上,进行测试。
当看到数码管数字与电源的数字相差无几时,我们终于送了口气,量程精度基本符合要求,我们总算是弄出来了。
但又经过反复的系统测试,结果基本满足20mV精度的测量要求,但精度不是很稳定,有的精度很高,而最高的误差达到了50mV。
造成这种结果的原因可能主要是系统前端模拟部分的不稳定性和放大倍数的不精确性,另外就是数字部分的ADC0809进行A/D转换造成的误差。
我曾经测量过模拟部分中的电阻,我觉得它的电阻过大可能也是造成误差的一个原因。
在这里我深深体会到哲学上理论对实践的指导作用:
弄懂实验原理,而且体会到了实验的操作能力是靠自己亲自动手,亲自开动脑筋,亲自去请教别人才能得到提高的。
我们做实验绝对不能人云亦云,要有自己的看法,这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。
实验总是与课本知识相关的,在实验过程中,我们应该尽量减少操作的盲目性提高实验效率的保证,有的人一开始就赶着做,结果却越做越忙,主要就是这个原因。
通过这些我了解到实际上,在弄懂了实验原理的基础上,我们的时间是充分的,做实验应该是游刃有余的,但是在没有搞懂其工作原理以及具体细节时盲目做,到最后我们只能白忙一场。
通过学习和总结,在这样的设计实习才更具有挑战性,才能锻炼自我,让自己学到更多的东西。
同时,工作并不是一个人的事情,是一个团队在完成一个项目,在工作的过程中如何去保持和团队中其他同事的交流和沟通也是相当重要的。
要有与别人沟通、交流的能力以及与人合作的能力。
合理的分工可以使大家在工作中各尽所长,团结合作,配合默契,共赴成功。
个人要想成功及获得好的业绩,必须牢记一个规则:
我们永远不能将个人利益凌驾于团队利益之上,在团队工作中,会出现在自己的协助下同时也从中受益的情况,反过来看,自己本身受益其中,这是保证自己成功的最重要的因素之一。
正是在类似基于单片机直流数字式电压表这样的设计中不断地发现问题,解决问题的过程中才使我能不断地提高自己分析问题和解决问题的能力,为以后的学习及设计实践积累下不少宝贵的操作经验,并且为以后主流型号的单片机运用打下了坚实的实践基础。
可以说这次实习是对我学习、独立思考、解决各种错误问题能力的一次极大的锻炼,通过这一实践环节加深了我对理论知识的理解,提高了动手能力,同时使我领略到单片机的各种强大功能以及未来的发展趋势。
正所谓:
“光阴似箭,岁月如梭”,时间过得可真快。
为期一个月的课程设计实习行将结束,除了课本的知识以外,我们遇到了关于单片机的许多新的知识,看到了单片机的许多新的发展,进入了单片机设计的新领域。
课堂上学到的知识和手头现有的资料是远远不够的,整个的实习过程考察了我们方方面面的综合能力,包括查找资料、购选器件、整合资源、独立思考、交流探讨、动手操作、分析问题以及解决问题的能力等等。
可以说在对这些各能力的考查中稍有欠缺就很难完成此
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直流 电压 测量