1、简易电阻、电感和电容的测试仪摘 要:本系统以MSP430单片机作为控制核心,由555构成多谐振荡电路实现对电阻和电容的测量,采用电容三点式振荡电路实现对电感的测量。控制继电器实现电阻、电容测量的档位自动切换,使测量精度满足指标要求;为使单片机精确测量待测频率,在电感测量模块中先进行整形和分频,然后测量,以提高测量精度。该系统设计简单,成本低,操作简单,在测量范围内误差很小,经电路仿真分析可达到题目要求的指标。关键词:555多谐振荡电路,电容三点式振荡,MSP430单片机,继电器一、系统方案论证1.1 电阻测量模块方案论证方案一:伏安法。如图1-1所示,分别用电流表和电压表测出通过电阻的电流和电
2、阻两端的电压,根据公式R=U/I求得电阻。这种测量方法虽然电路简单,但要同时测出两个模拟量,不易实现自动化,而电压表与电流表都存在内阻,测量误差大,精度不高。A RxV图1-1 伏安法测量原理 方案二:电阻分压法。如图1-2所示,将待测电阻Rx和基准电阻R串联在电路中,由于电阻分压的作用,当串联到电路上的电阻Rx的值不同时其Rx上分的压降也不同。通过测量上Vx便可由公式 求得。RxRGNDVccVx图1-2 电阻分压电路该方案原理简单,理论上只要参考电阻精确,就可以测量任何阻值的电阻,但实际上由于AD的分辨率有限,当待测电阻很大或是很小时就很难测出Rx上的压降Vx,从而使测量范围缩小,要提高测
3、量范围和精度就需要对电阻分档测试和提高AD的分辨率。这无疑会增加系统的复杂性和成本,所以也不可行。方案三:RC和555定时器组成的多谐振荡电路。很多仪表都是把较难测量的物理量转变成精度较高且较容易测量的物理量。基于此思路,我们把电阻阻值转换成频率信号,通过测量输出振荡频率的大小即可求得电阻的大小,如果固定电阻值,该方案硬件电路实现简单,通过选择合适的电容值即可获得适当的频率范围,同时输出波形为TTL电平的方波信号所以不需要再对信号做电平变换,即可直接供数字电路处理,这种处理一方面便于使仪表实现智能化,另一方面也避免了由指针读数引起的误差。综合比较,基于对精度要求较高,并从测量时操作的简便程度考
4、虑,本设计采用方案三,用RC和555定时器组成的多谐振荡电路来实现要求。1.2 电容测量模块方案论证方案一:利用RC充电原理,根据电路原理电容充电的时间常数=RC。通过选择适当的参考电容,通过测量充电到一个固定电压时所需的时间即可以测量出相应的电容大小。此方案下测量大电容较准,但在电容容量较小时,电容在极短的时间内就能充满,即充电时间较短,所以很难测准。方案二:电桥法是另一种经典的方法,如图1-3所示,可利用交流电桥来测量电容。Z1Z2GNDGVCCZnZx图1-3 直流电桥平衡电路电桥的平衡条件为: 通过调节阻抗Z1、Z2使电桥平衡,这时电表读数是零。根据平衡条件及一些已知的电路参数就可以求
5、出被测参数。用这种测量方法,参数的值还要通过联立方程求解,调节电阻值一般只能手动,电桥平衡的判别亦难以用简单的电路实现。这样,电桥法不易实现自动测量。方案三:同样利用RC和555定时器组成的多谐振荡电路,通过测量输出振荡频率的大小即可求得电容的大小,如果固定电阻值,该方案硬件电路实现简单,能测出较宽的电容范围,完全满足题目的要求。同时输出波形为TTL电平的方波信号所以不需要再对信号做电平变换。即可直接输入单片机处理。综合比较,基于对精度要求较高,并从测量时操作的简便程度考虑,本设计采用方案三,用RC和555定时器组成的多谐振荡电路来实现要求。1.3 电感测量模块方案论证方案一:采用电桥法测量电
6、感。将待测电感和已知标准电阻电容组成电桥,通过单片机控制调节电阻参数使电桥平衡,电感的大小由电阻和电桥的本征频率求得,该方案测量精准,同时可以测量电容和电阻的大小,但其电路复杂,实现起来较为困难。方案二:用555定时器和被测电感利用电感储能以及充放原理构成多谐振荡器,通过测频率值确定被测电感的值。该方案电路结构简单,输出波形为TTL电平的方波信号,简单分频后可获得较为理想的测试频率范围,方便单片机精确测量。方案三:采用LC配合三极管组成三点式振荡电路,通过测输出频率大小的方法来实现对电感值测量。该方案成本最低,但其输出波形为正弦波,需要将其波形整形后才能交给处理器处理,成本稍微高了。综合比较,
7、基于方案二的设计误差太大,最终采用了方案三。1.4 频率测量方案论证方案一:直接测频法。该测量方法是把被测频率信号经过脉冲形成电路,计数器计数被测信号的脉冲周数,从而通过计算频率的公式得到被测信号的频率。此方案对低频信号的测量精度不是很高,对于高频信号的测量也不是很准确,只在一定范围的频率内才能测得比较准确的数值。因此只适用于一定范围内的频率测量。方案二:测周期法。该测量方法是通过测量被测信号的周期来计算频率。被测信号经脉冲形成电路变成方波通过单片机的计数器计数,再根据计算公式即可获得被测信号的频率。该方案对低频信号的测量比较准确,但对于高频信号,测量误差较大,故只适合低频信号的测量。在比较两
8、种方案之后,决定采用第一种方案来进行频率的测量。1.5 系统方案概述量程切换F1 MSP430 单 片 机 DIP开关电阻谐振式测量数字显示量程切换频率 F2电容谐振式测量电感三点式测量 F3整形电路分频电路 图1-4 系统设计总框图系统设计总框图如图1-4所示,本设计将电阻、电容和电感测量模块产生的不同频率的方波信号经整形和分频电路分别送至通道选择模块,根据测试的元件类型,单片机通过按键的输入选择相应的测试电路,并自动检测出待测元件的值所对应的频率范围,控制继电器实现对元件测量的自动换挡。同时单片机通过一定的计算后,在液晶显示屏上显示出元件的类型和测量值。二、理论分析与计算2.1 电阻测量的
9、分析与计算电阻测量原理图如图2-1所示,是由555定时器和R1、R2、C1组成的多谐振荡电路。电路振荡产生的频率由R1、Rx、C1确定。Vout图2-1 电阻电容测量原理图C1R1Rx电容C1的充电所需的时间,即脉冲维持时间: 放电所用时间,即脉冲低电平时间: 所以脉冲周期时间为: 故输出脉冲频率为: 所以只要已知R1、RX、C1中的其中两项的参数再通过单片机测出振荡频率的大小就可以计算出剩下第三项的参数。本设计中通过固定R1和C1的参数将待测量的电阻作为R2接入电路中的方法来测量电阻。 为使振荡频率保持在10-20kHz这一段单片机计数的高精度范围内,需选择合适的C1和R1的值,同时不能使电
10、阻功耗太大。所以我们设计了两路电路,第一个量程选择;第二个量程选择; 这样,在第一个量程中,若时(下限),;在第二个量程中,若时(上限),。因为RC振荡的稳定度可达1/1000,单片机测频率最多误差一个脉冲,所以由单片机测频率值引起的误差在百分之一以下。量程自动转换原理:单片机在第一个频率的记录中发现频率过小,即通过继电器转换量程。再测频率,求的值。 误差分析 : 因为相当小,在左右,远小于仪表所需要的精度,可忽略。这样,的精度取决于,即电容的稳定性。电路中采用了稳定性良好的独石电容,理论上说,只要小于,所测电阻的精度亦能在以下。由于单片机程序中采用了多位数的浮点运算,计算精度可远高于。2.2
11、电容测量的分析与计算电容测量的原理图也如图2-1,同样由555电路构成的多谐振荡电路,通过计算振荡输出的频率来计算被测电容的大小。由2.1的分析知其振荡周期为: 得出: ,即: 为使频率在单片机高精度测量范围内,我们同样设计了两路电路,取值分别为:第一量程:;第二量程:;这样的取值使电容档的测量范围很宽,同样可通过继电器转换量程。误差分析:同的测量,有,已知能满足以下的精度,而精密的金属膜电阻其阻值的变化亦能满足左右的精度。这样,电容的精度也可以做得很高。2.3 电感测量的分析与计算电感的测量是采用电容三点式振荡电路来实现的。三点式振荡电路是指:LC回路中与发射极相连的两个电抗元件必须是同性质
12、的,另外一个电抗元件必须为异性质的,而与发射级相连的两个电抗元件同为电容式的三点式振荡电路,其振荡频率为: 即: 如图3-3所示, C1和C2分别采用100nF和1uF的独石电容,其电容值远大于晶体管的极间电容,可以把极间电容忽略,则单片机的高精度测量范围有限,因此在测电感这一档时,只能分频后送单片机计数。误差分析: 由此可见,因为相当小,的精度主要取决于电容值的稳定性,从理论上讲,只要小于,也就能达到相当的水平。一般而言,电容的稳定性,特别是像独石电容一类性能比较好的电容,能满足小于的要求,这样误差精度就能保持在以内。三、硬件电路设计3.1 测量电阻电路的设计电阻的测量分为两个量程:第一个量
13、程,开关S1和S3闭合; 第二个量程,开关S2和S4闭合。电路图如图3-1所示:图3-1 电阻测量电路图3.2 测量电容电路的设计电容的测量同样设计了两路电路,取值分别为:第一量程:,开关S2和S4闭合;第二量程:,开关S1和S3闭合;电路图如图3-2所示:图3-2 电容测量电路图3.3 测量电感电路的设计因为电感测量模块产生的信号是正弦信号,所以必须先整形成方波,又由理论分析可知电路的输出频率很高,所以也要对输出的信号分频,单片机才能处理。3.3.1 电感测量电路图3-3 电感测量电路3.3.2 整形电路图3-4 整形电路3.3.3 分频电路图3-5 10分频电路3.4继电器的设计电阻与电容
14、的测量电路中均需要自动换挡,我们采用继电器来实现。继电器是一种电子控制器件,通常应用于自动控制电路中。当测量电路中所测频率过低时,单片机就会控制继电器转换量程。如图3-6所示为继电器的原理图,其中,二极管是对其有保护作用,三极管有放大电流的作用。在具体电路中,继电器是1伏和3伏换挡,通过单片机来实现其自动化。 图3-6 继电器原理图3.5 按键部分通道的选择可以通过MSP430单片机上面的键盘控制。通道选择见表3-1 .表3-1 按键通道选择按键对应测试项KEY1测试RKEY2测试CKEY5测试LKEY6返回 四、 程序设计 开始时钟、液晶屏、键盘初始化扫描键盘获得键值Check_Key2电容
15、测量3电感测量1 电阻测量转换量程f=30Hz转换量程C 0;i-); / 稳定时间 while(IFG1 & OFIFG) != 0); / 如果振荡器失效标志存在 BCSCTL2 |=SELM_2+SELS; / SMCLK LFXT2CLK /*捕获设置*/void Init_cap() P1DIR&=BIT3;/P1.3输入 P1SEL|=BIT3;/p1.3复用为TA2 TACCTL2=CM_2+SCS+CCIS_0+CAP+CCIE;/下降沿捕获+同步捕获+CCIxA(P1.3)+捕获中断使捕获模式能 CCR0=TIMER; TACTL=TASSEL_1+MC_1+TAIE+TAC
16、LR;/时钟源ACLK+增计数模式+TAIFG中断请求使能 /timer_B设置。void Init_TB() P1DIR=0xfe; P1SEL|=BIT0; /闸门法测频输入口为P1.0 TBCCTL0 = CCIE; /使能CCR0中断 TBCCR0 = 1023; /设定周期0.25S TBCTL = TBSSEL_1 + ID_3 + MC_1; /定时器b的时钟源选择ACLK,增计数模式 CCTL0=CCIE; TACTL = TASSEL_0+MC_2; /外部引脚TACLK信号+连续计数模式 TAR=0; /*显示界面*/const uchar hang1 = R L C 测量
17、:;const uchar hang2 = 电阻请按:1;const uchar hang3 = 电容请按:2;const uchar hang4 = 电感请按:5;/*测量界面*/const uchar hang5 = 电阻测量: ;const uchar hang6 = R= ;const uchar hang7 = 退出测量请按: 6 ;const uchar hang8 = 电容测量: ;const uchar hang9 = C= ;const uchar hang10 = 电感测量: ;const uchar hang11 = L= uH;/const uchar hang22 =
18、 ;const uchar hang17 = K;const uchar hang_f = f= Hz;const uchar hang_99 = *;/*主函数*/void main( void ) /int p=0; int K; / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_clk(); /初始化时钟 Ini_Lcd(); /初始化液晶 Init_Keypad(); /初始化键盘端口c huanying(); P6DIR=0xff; P6OUT=0x00; while(1) I
19、ni_Lcd(); P6OUT=0x00; Disp_HZ(0x80,hang1,7); Disp_HZ(0x90,hang2,5); Disp_HZ(0x88,hang3,5); Disp_HZ(0x98,hang4,5); Key_Event(); Check_Key(); if(key_Flag=1) key_Flag=0; K=key_val; /*电阻计算*/ if(K=1) int i=0; P6OUT=0x40; Init_cap(); /初始化CAP TBCCTL0 = CCIE; /关闭CCR0中断 Ini_Lcd(); double Rc=0,RA=0; Disp_HZ(0
20、x80,hang5,8); Disp_HZ(0x90,hang_f,8); Disp_HZ(0x88,hang6,8); Disp_HZ(0x98,hang7,8); _EINT(); /打开中断 while(1) Key_Event(); Check_Key(); if(key_Flag=1) key_Flag=0; K=key_val; while(flag) _DINT(); flag=0; /清楚捕捉标志 f=pulse; if(f26) const uchar hang22 = ; f=f*100; Value=(unsigned long)(f); Disp_ShuZhi(0x92
21、,Value); f=f/100; P6OUT=0x40; Rc=1;RA=500; R=1.4427/(Rc*1e-6)*f)-RA; R=R/2; if(R30)R=R-R*0.30; if(30R&R2400)i=1; f=f*100; Value=(unsigned long)(f); Disp_ShuZhi(0x92,Value); f=f/100; Rc=0.01;RA=20000; const uchar hang22 = K; R=1.4427/(Rc*1e-6)*f)-RA; R=R/1000; R=R/2; if(25R&R550)R=R+R*0.04; /if(100R&
22、R450)R=R+R*0.07; /if(R4500)R=R-R*0.06; R=R*100; Value=(unsigned long)(R); Disp_ShuZhi(0x8A,Value); Disp_HZ(0x8E,hang22,2); Init_cap(); /初始化CAP _EINT(); delay_1ms(1000); /else i=1;f=0;break; if(K=6) break; if(K=6) break; if(i=1) i=0;f=0;break; if(K=6)_DINT();f=0;pulse=0;Value=0;TAR=0; break; /*电容计算*/
23、 else if(K=2) int i=0; P6OUT=0x80; Init_cap(); /初始化CAP TBCCTL0 = CCIE; /关闭CCR0中断 Ini_Lcd(); double R1=0,R2=0; Disp_HZ(0x80,hang8,8); Disp_HZ(0x90,hang_f,8); Disp_HZ(0x88,hang9,8); Disp_HZ(0x98,hang7,8); _EINT(); /打开中断 while(1) if(i=0)P6OUT=0x80; Key_Event(); Check_Key(); if(key_Flag=1) key_Flag=0; K
24、=key_val; TBCCTL0 = CCIE; /关闭CCR0中断 _EINT(); while(flag) _DINT(); flag=0; /清楚捕捉标志 f=pulse; f=f*100; Value=(unsigned long)(f); Disp_ShuZhi(0x92,Value); f=f/100; R1=1000;R2=1000000; const uchar hang23 = pF; CZ=1.4427/(R1+2*R2)*f*1e-6); CZ=CZ*1e+6; _EINT(); if(CZ950) i=1; P6OUT=0x84; _DINT(); flag=0; /清楚捕捉标志 f=pulse; f=f*100; Value=(unsigned long)(f); Disp_ShuZhi(0x92,Value); f=f/100; R1=465500;R2=461000; const uchar hang23 = nF; CZ=1.4427/(R1+2*R2)*f*1e-6); CZ=CZ*1e+3; if(1.5CZ&CZ40)CZ=CZ-CZ*0.07; CZ=CZ*100;