1、测电阻简易电阻、电容、电感测试仪方案的选择目前,测量电子元件集中参数R、L、C的仪表种类较多,方法也各不相同,这些方法都有其优缺点。电阻R的测试方法最多。最基本的就是根据R的定义式来测量。在如图1中,分别用电流表和电压表测出通过电阻的电流和通过电阻的电压,根据公式求得电阻。这种方法要测出两个模拟量,不易实现自动化。而指针式万用表欧姆档是把被测电阻与电流一一对应,由此就可以读出被测电阻的阻值,如图2所示。这种测量方法的精度变化大,若需要较高的精度,必须要较多的量程,电路复杂。图2图3图1能同时测量电器元件R、L、C的最典型的方法是电桥法(如图3 )。电阻R可用直流电桥测量,电感L、电容C可用交流
2、电桥测量。电桥的平衡条件为通过调节阻抗、使电桥平衡,这时电表读数为零。根据平衡条件以及一些已知的电路参数就可以求出被测参数。用这种测量方法,参数的值还可以通过联立方程求解,调节电阻值一般只能手动,电桥的平衡判别亦难用简单电路实现。这样,电桥法不易实现自动测量。Q表是用谐振法来测量L、C值(如图4)。它可以在工作频率上进行测量,使测量的条件更接近使用情况。但是,这种测量方法要求频率连续可调,直至谐振。因此它对振荡器的要求较高,另外,和电桥法一样,调节和平衡判别很难实现智能化。图4 用阻抗法测R、L、C有两种实现方法:用恒流源供电,然后测元件电压;用恒压源供电,然后测元件电流。由于很难实现理想的恒
3、流源和恒压源,所以它们适用的测量范围很窄。很多仪表都是把较难测量的物理量转变成精度较高且较容易测量的物理量。基于此思想,我们把电子元件的集中参数R、L、C转换成频率信号f,然后用单片机计数后在运算求出R、L、C的值,并送显示,转换的原理分别是RC振荡和LC三点式振荡。其实,这种转换就是把模拟量进拟地转化为数字量,频率f是单片机很容易处理的数字量,这种数字化处理一方面便于使仪表实现智能化,另一方面也避免了由指针读数引起的误差。器件的选择电阻(20K、510K、100K、2K、1K、470、10K)、电容(1000pF、0.1 uF、22uF、30 pF)、独石电容(2200 pF、1000pF)
4、、三级管(9013)、小按钮、发光二极管、四位共阴LED显示器、555芯片、74LS197、CD4052、89S51、电路原理图设计方案的总体方框图具体的工作电路图六、电路的工作原理测量电阻的电路模块555电路构成的多谐振荡电路,由该电路可以测出量程在1001M的电阻。该电路的振荡周期为其中为输出高电平的时间,为输出低电平的时间。则:为了使振荡频率保持在10100KHz这一段单片机计数的高精度范围内,需选择合适的C和R的值。取,得到测的RC振荡电路测量电容的振荡电路与测量电阻的振荡电路完全一样。取R1=R2=510K,则,其分析过程如测量电阻的方法一样。测的电容三点式振荡电路电感的测量是采用电
5、容三点式振荡电路来实现的,如图所示。三点式电路是指:LC回路中与发射极相连的两个电抗元件必须是同性质的,另外一个电抗元件必须为异性质的,而与发射极相连的两个电抗元件同为电容时的三点式电路,成为电容三点式电路。在这个电容三点式振荡电路中,C4 C5分别采用1000pF、2200pF的独石电容,其电容值远大于晶体管极间电容,可以把极间电容忽略。振荡公式:,其中 则电感的感抗为在测量电感的时候,发现电感起振频率非常的高,大致到达3MHz左右,而单片机的最大计数频率大约为500KHz,在频率方面达不到测量电感频率,于是我们把测电感的电容三点式电路得出的频率经过74LS197对该频率进行二分频满足单片机
6、计数要求。多路选择开关电路利用CD4052实现测量类别的转换,CD4052是双4选一的模拟开关选择器件。当选择了某一通道的频率后,输出频率通过通过IOB4作为CPU定时器的时钟源并开始计数,当计数到3秒后读出计数器的值,除以3就得到了被测R/C/L所对应产生的频率,通过计算得到要被测值。 IOA4IOA3测量类别00Y0-R01Y1-C10Y2-L11*总体的工作原理:测量R、C时用555构成的多谐振荡电路来实现转换成频率信号、,测量L时用电容三点式振荡电路来实现转换成频率,由于输出的频率过大,超过了单片机频率计数的最大范围,因此通过接74LS197(直接接CR0,用Q1直接输出),实现对频率
7、的二分频。三个频率都接到模拟开关CD4052。单片机根据所选通道,向模拟开关送两路地址信号,取得振荡频率,作为单片机的时钟源,通过计数则可以计算出被测频率,再通过该频率计算出各个参数。数据处理后,把R、L、C的值送数码管显示相应的参数值。当要测量电阻、电容、电感的时候按下对应的按钮并使其对应发光二极管亮。实验扩展 测量电阻、电容的时候可以用两个量程来实现测量,这样的话可以提高测量精度,再用继电器来实现对量程的选择。也还可以把测量电阻、电容、电感的测量端接到一个继电器上,这样的话就只需一个测量端,然后通过程序来实现电路的选择。程序:#include sbit led_R=P10;sbit led
8、_C=P11;sbit led_L=P12;sbit button_r=P13;sbit button_c=P14;sbit button_l=P15;sbit led_a=P03;sbit led_b=P05;sbit led_c=P06;sbit led_d=P07;sbit ad_l=P16;sbit ad_h=P17;sbit fff=P30;bit T_flag=0; /时间到标志位unsigned char t0h,t0l;unsigned char led_buf_a=0,led_buf_b=0,led_buf_c=0,led_buf_d=0;unsigned int func=
9、1,counter=4000,N,N_T0;unsigned char led_code=0x3f,0x06,0x5b,0x4f,0x72,0x6d,0x7d,0x07,0x7f,0x6f,0x00; /共阴数码管段码 / 0 1 2 3 4 5 6 7 8 9 全暗unsigned long R,C,L,f,result;/函数声明void button(void);void R_measure(void);void C_measure(void);void L_measure(void);void led(unsigned int x);void display(void);/void d
10、elay1(void);void delay2(void);void initialization(void) /T0初始化设置 TMOD=0x25; /0010 0101 T1,定时器模式2 T0,方式1,计数器模式 IE=0x8a; /1000 1010 开总中断和T1溢出中断 TH1=0x06; /晶振使用12M时,每条指令1uS,T1 1S溢出 250uS*4000=1S TL1=0x06; TH0=0; TL0=0; TCON=0x55; /0101 0101 T0,允许计数,下降沿触发 T1,边沿触发方式 led_C=0; led_L=0; led_R=1; void button
11、(void) button_r=1; if(button_r=0) / delay1(); /防抖动 if(button_r=0) while(button_r=0); func=1; /功能1:测电阻 led_C=0; led_L=0; led_R=1; ad_h=0; ad_l=0; button_c=1; if(button_c=0) / delay1(); if(button_c=0) while(button_c=0); func=2; /功能2:测电容 led_R=0; led_L=0; led_C=1; ad_h=0; ad_l=1; button_l=1; if(button_
12、l=0) / delay1(); if(button_l=0) while(button_l=0); func=3; /功能3:测电感 led_R=0; led_C=0; led_L=1; ad_h=1; ad_l=0; void R_measure(void) /电阻测量,以为单位 while(T_flag=0); if(T_flag=1) T_flag=0; f=N*65536+t0h*256+t0l; /Hz /电阻计算公式 R=721500000/f-10000; led(R); display(); void C_measure(void) /电容测量,以pF为单位 while(T_
13、flag=0); if(T_flag=1) T_flag=0; f=N*65536+t0h*256+t0l; /Hz /电容计算公式 C=942938/f; /pf led(C); display(); void L_measure(void) /电感测量,以uH为单位 while(T_flag=0); if(T_flag=1) T_flag=0; f=N*65536+t0h*256+t0l; /Hz /电感计算公式 f/=100000; L=922/(f*f); /L=922*1010/(f*f) uH led(L); display(); void led(unsigned int x)
14、/BCD代码转换 char exp; if(x=0&x=1000&x=10000&x0;i-) P2=led_buf_a; led_a=1; delay2(); led_a=0; P2=led_buf_b; led_b=1; delay2(); led_b=0; P2=led_buf_c; led_c=1; delay2(); led_c=0; P2=led_buf_d; led_d=1; delay2(); led_d=0; /*void delay1(void) int i; for(i=80;i0;i-); */ void delay2(void) int j; for(j=100;j0
15、;j-); void main(void) P2=0; initialization(); while(1) button(); if (func=1) R_measure(); if (func=2) C_measure(); if (func=3) L_measure(); /T0中断程序void timer0(void) interrupt 1 TF0=0; N_T0+; /T1中断程序void timer1(void) interrupt 3 TF1=0; counter-; if(counter=0) N=N_T0; N_T0=0; t0h=TH0; t0l=TL0; TH0=0; TL0=0; T_flag=1; counter=4000;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1