直流电压的测量.docx
《直流电压的测量.docx》由会员分享,可在线阅读,更多相关《直流电压的测量.docx(21页珍藏版)》请在冰豆网上搜索。
直流电压的测量
电控学院
08级测控专业综合实验
题目:
直流电压的测量
院(系):
电气与控制工程学院
专业班级:
测控技术与仪器0801
姓名:
王慧君
学号:
0806070108
指导教师:
王党树彭倩孙广清
2012年3月11
直流电压的测量
摘要
电压测量是故障诊断中最常使用的检测方法。
因测量对象的类型不同,可分为直流电压测量和交流电压测量两种:
因使用的工具工作原理的不同,又可分为模拟式电压表测量和数字式电压表测量两类。
模拟电压表为指针式,用磁电式电流表头作为指示器,并在电流表盘上以电压刻度。
由于表头中是以电流流经磁场中的线圈所产生的电磁力,作为指针偏转的动力。
因此测量时需要从被测对象中获取一定量的电流,将不可避免的对被测对象造成一定的影响,其影响的程度与表头的灵敏度有关。
数字式电压表则不同,输入的被测量电压首先经过前端的分压器进行分压实现量程的选择,再将输入的模拟量通过A/D转换器变为数字量送入控制器,并以十进制数字直接显示出来。
一、实验的内容、要求
1.1实验内容
设计一个可变量程的数字式直流电压表,要求及设计指标如下:
(1)测量范围:
20mV-1000V设置4个量程:
200mV-2V,2V-20V,20V-200V,200V-2000V.
(2)测量精度:
200mV
(3)测量误差允许范围:
<=1%。
(4)显示:
用四位七段数码管显示电压读数。
1.2、实验要求
(1)设计方案中能用软件实现的尽量用软件实现,这样可以减少成本,也减少了硬件的一些干扰。
(2)本实验采用STC12C5A32AD单片机,由实验室提供了该单片机的最小系统,线路板,在该线路板上扩展了部分功能,多余的I/O口也扩展出来。
二、主要元器件简介
2.1、STC12C5A32AD芯片简介这是宏晶的mcs-51兼容单片机,最大频率可以达到35HMz,最大速度可以达到35MIPS。
这种单片机有32kBFlash,其中部分可以作为EEPROM使用;有1280BytesRAM,其中256Bytes是基本RAM,其他是扩展RAM,需要采用外部RAM方式访问;有2路10位ADC,可以简化外部硬件;多组PWM输出,可以免除外部DAC;有上电复位电路和看门狗,可以大大降低最简系统成本和体积;有多种封装,可以便于选用。
最大的优势是,STC采用mcs-51构架,拥有极大的软件优势和极多的用户群,使得这个产品的出货量很大,能够保证供货和较低成本。
2.2、继电器的工作原理和特性
继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。
故在电路中
起着自动调节、安全保护、转换电路等作用。
图一、继电器实物图
电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。
只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。
当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。
这样吸合、释放,从而达到了在电路中的导通、切断的目的。
对于继电器的“常开、常闭”触点,可以这样来区分:
继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。
热敏干簧继电器的工作原理和特性
热敏干簧继电器是一种利用热敏磁性材料检测和控制温度的新型热敏开关。
它由感温磁环、恒磁环、干簧管、导热安装片、塑料衬底及其他一些附件组成。
热敏干簧继电器不用线圈励磁,而由恒磁环产生的磁力驱动开关动作。
恒磁环能否向干簧管提供磁力是由感温磁环的温控特性决定的。
固态继电器(SSR)的工作原理和特性
固态继电器是一种两个接线端为输入端,另两个接线端为输出端的四端器件,中间采用隔离器件实现输入输出的电隔离。
固态继电器按负载电源类型可分为交流型和直流型。
按开关型式可分为常开型和常闭型。
按隔离型式可分为混合型、变压器隔离型和光电隔离型,以光电隔离型为最多。
2.3、继电器主要产品技术参数
1)、额定工作电压是指继电器正常工作时线圈所需要的电压。
根据继电器的型号不同,可以是交流电压,也可以是直流电压。
2)、直流电阻是指继电器中线圈的直流电阻,可以通过万能表测量。
3)、吸合电流是指继电器能够产生吸合动作的最小电流。
在正常使用时,给定的电流必须略大于吸合电流,这样继电器才能稳定地工作。
而对于线圈所加的工作电压,一般不要超过额定工作电压的1.5倍,否则会产生较大的电流而把线圈烧毁。
4)、释放电流是指继电器产生释放动作的最大电流。
当继电器吸合状态的电流减小到一定程度时,继电器就会恢复到未通电的释放状态。
这时的电流远远小于吸合电流。
5)、触点切换电压和电流是指继电器允许加载的电压和电流。
它决定了继电器能控制电压和电流的大小,使用时不能超过此值,否则很容易损坏继电器的触点。
三、测量原理及电路设计
3.1、数字式直流电压测量原理
数字式直流电压表的组成结构图如下图所示:
图二、数字直流电压表结构图
直流电压经过输入电路变换为合适的电压后,用A/D转换器将模拟电压变换成数字量,再由电子计数器对数字计数得到测量结果,逻辑控制电路控制电路的协调工作,在时钟的作用下顺序完成整个测量过程。
这次设计采用多的是STC12C5A32AD系列带A/D转换的单片机,电压输入型A/D,可做温度检测,电池电压检测,按键扫描,频谱检测等。
10位A/D转换结果计算公式如下:
(ADC_DATA[7:
0],ADC_LOW[1:
0]=1024*Vin/Vcc.
图三、电压测量原理框图
3.2、直流大电压信号的测量
在AD采样前面加一级分压电路即分压器,可以扩展直流电压测量的量程。
如下图所示:
U0位电压表的量程,r位其内阻,r1,r2位分压电阻U0为扩展后的量程。
3.3、直流小电压信号的测量
图四、直流小信号放大电路
对于直流小信号(20Mv-200Mv)的测量,需要设计信号放大电路将信号适当的放大再进行AD采样。
3.4、多量程分压器原理
图五、多量程分压器原理
采用这种分压电路虽然可以扩展电压表的量程,但在小量程档明显降低了电压表的输入阻抗,着在实际使用中是所部希望的,所以,实际数字万用表的直流电压档为下图所示:
他能在不降低输入阻抗的情况下达到相同的分压效果。
3.5、译码部分的调试
图7,74HC595结构图
译码部分主要是检验74HC595片选和译码是否正常。
我们选用了检测数码管以及74HC595是否完好的程序进行下载并检测,这样不仅可以检测这两部分是否完好,而且还可以检测电路板及单片机是否完好。
我们通过给单片机下载检测程序,结果在数码管上显示的数字与我们预期的结果又很大的出入,经过我们一番检查也没找出原因之所在,最后我们问王老师才知道原来是我们的74HC595芯片给焊接错了,由于我焊接时出心大导致把74HC595的两根管脚短焊了,这才没有达到预期的效果,经过后来的一番改进,终于实现了检测功能。
3.6、单片机与译码部分整体调试
上面是对译码部分单独进行了调试,而74HC595和数码管的工作是要在单片机的控制下工作的,所以我们做了这样一步测试。
我为单片机编写了在数码管上动态点亮数码管并让四个数码管依次显示“0,1,2,3,到9”的程序,烧录并将单片机接入电路后发现数码管上显示的为“0000,1111,….9999.说明一切工作正常。
3.7、整机调试
在进行电路的分局部调试之后,我们又进行了系统整机调试。
首先为LM358接上5V的电压,为其他芯片接上2V的工作电压。
另外还要输入待测的模拟电压,该电压从200mV以下的电压开始输起,依次增大。
直到达到供端电压的上限5V为止,在这过程中,记录测量数据如下表所示。
由于前面的分局部调试进行得还比较顺利,因此整机调试较为顺利。
四、硬件设计图
外围电路的设计如下图所示:
外围电路主要是由几个继电器进行控制,继电器在这里既有限压作用,由起到开关作用,其中的三极管起到驱动作用,输入的测量电压首先经过分压电路分压,在使得相应档位的继电器导通,如果测量电压很小,则继电器打到上面的运放处,对小信号进行放大处理。
基于STC12C5A32AD的外围电路
五、实验心得体会
通过此次课程设计,使我更加扎实的掌握了有直流电压表、单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可。
课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识。
通过这次课程设计,我掌握了常用元件的识别和测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等,掌握了焊接的方法和技术,通过查询资料,也了解了频率计的构造及原理。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
在此也非常感谢王老师和彭老师陪伴着我们,在我们遇到问题时给予我们的指导和帮助。
参考文献:
1、杨将新,李华军,刘东骏.2006.单片机程序设计及应用从基础到实践.北京:
电子工业出版社
2、柴钰,《单片机原理及应用》,西安电子科技大学出版社,2009
3、唐晨光,唐旭伟,覃媛.2010.单片机原理与应用.北京:
清华大学出版社.
4、刘文涛,单片机语言C51典型应用及设计,人民邮电出版社,2005
5、门刚.2005.精通ProtelDXP模块范例篇.北京:
中国青年电子出版社
附录一:
软件程序设计:
#include"reg51.h"
#include"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;
}
RCL2=1;
RCL1=0;//发送位选信号;
for(y=0;y<16;y++)
{
SCL=0;
if((n_LED&0x0001)==0x0001){SDATA=1;}
if((n_LED&0x0001)!
=0x0001){SDATA=0;}
n_LED>>=1;
SCL=1;
}
RCL1=1;
RCL2=0;//发送段信号;
for(y=0;y<8;y++)
{
SCL=0;
if((Data_595&0x80)==0x80){SDATA=1;}
if((Data_595&0x80)!
=0x80){SDATA=0;}
Data_595<<=1;
SCL=1;
}
RCL2=1;
for(yy=0;yy<2000;yy++);//延迟一会;
}
voidData_con(floatx)//数据分离
{
unsignedintresult1;
if(key==0)
result1=(int)(x*10000);
if(key==1)
result1=(int)(x*1000);
if(key==2)
result1=(int)(x*100);
if(key==3)
result1=(int)(x*10);
a[0]=result1/1000;
a[1]=(result1/100)%10;
a[2]=(result1%100)/10;
a[3]=result1%10;
}
/************************************************
函数名:
xianshi()
出口参数:
无
入口参数:
无
功能:
给出显示的数据位码及段码
*************************************************/
/************************************************
函数名:
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]]);
}
if(key==1)
{
Dtat_Out(k23,led2[a[0]]);
Dtat_Out(k22,led1[a[1]]);
Dtat_Out(k21,led1[a[2]]);
Dtat_Out(k20,led1[a[3]]);
}
if(key==2)
{
Dtat_Out(k23,led1[a[0]]);
Dtat_Out(k22,led2[a[1]]);
Dtat_Out(k21,led1[a[2]]);
Dtat_Out(k20,led1[a[3]]);
}
if(key==3)
{
Dtat_Out(k23,led1[a[0]]);
Dtat_Out(k22,led1[a[1]]);
Dtat_Out(k21,led2[a[2]]);
Dtat_Out(k20,led1[a[3]]);
}
if(key==4)
{
Dtat_Out(k23,led1[a[0]]);
Dtat_Out(k22,led1[a[1]]);
Dtat_Out(k21,led1[a[2]]);
Dtat_Out(k20,led1[a[3]]);
}
}
unsignedchargetkey(void)
{
unsignedinti;
if(key1==0)//200mv--2v
{for(i=0;i<5000;i++);
while(key1==0);
key=1;
}
if(key2==0)//2v--20v
{for(i=0;i<5000;i++);
while(key2==0);
key=2;
}
if(key3==0)//20