1、用M8制作电感电容电解电容测量仪表用M8制作电感、电容、电解电容测量仪表 这个电路不同国家和地区很多人制作过,测量精度高,测量范围大,有用不同语言写的程序,我作了一个BASCOM-AVR版本的,并增加了对电解电容器测量。 电感测量范围:0.1H2H 电容测量范围:1pF2.5F 电解电容测量范围:0.1F30000F 一、电容、电感测量原理: 电路是一个由LM393(U3A)组成的LC振荡器。由单片机测量LC震荡回路的频率F1,然后控制继电器K2将标准电容C2与C1并联,测出振荡器频率F2,再用下列式子计算出电容C1电感L1的值。 (原文件名:Gs_1.jpg)这里电容器C2的容量的精确程度,
2、基本上决定了整个测量过程的精度。应该选用稳定性好精度高的电容器,这个制作选用了1800pF的云母电容器。 上述过程可称作为一个校准过程,由M8控制每次开机时自动完成。开机后延时1500ms,测量由U1A、L1、C1组成振荡器频率F1;Portd.3=0,K2吸合,C2接入延时1500ms,测量振荡器频率F2,Portd.3=1,K2断开。M8计算C1、L1完成后按S1进入电容Cx的测量状态。 电容Cx、电感Lx的值,分别用下列式子计算: (原文件名:Gs_2.jpg)二、电解电容测量原理: 电解电容的测量是基于对RC电路的时间常数的计算,由脉冲电路原理可知,电容的充电速度与R和C的大小有关,R
3、与C的乘积越大,过渡时间就越长。这个RC的乘积就叫做RC电路的时间常数,即=RC。若R的单位用欧姆,C的单位用法拉,则的单位为秒。 (原文件名:Gs_4.jpg)图示曲线可以得到充电过程的一般规律:Uc是按指数规律上升的,Uc开始变化较快,以后逐渐减慢,并缓慢地趋近其最终值,当t=时,Uc=0.632E;本测量仪就是利用单片机测量Uc=0到0.632E这段时间,用下列式子计算计算被测电容值: (原文件名:Gs_3.jpg)电路由比较器U3B,放电晶体管Q等组成。设定比较器正输入端为Uc,(Uc=0.632E=0.6325=3.16V,调节RP1获得),反向输入端接被测电容CEx,当D端为高电平
4、时,Q导通电路处于放电状态,这时CEx被放电,比较器U3B输出高电平。当D为低电平时Q截止电容CEx通过R9(R10)充电,CEx两端电压逐步升高,当CEx两端电压Uc时,比较器U3B输出低电平,产生INT0中断(INT0中断设置为下降沿触发),中断服务程序读取定时器值,并计算、显示CEx的值。然后置位PD6为高电平,Q导通,CEx放电,延时100mS是为了保证CEx充分放电,中断返回开始下一个测量周期。为了提高测量精度电解电容测量分两档,由继电器K2切换,R9接入时测量0.1F500F电容,R10接入时测量500F20000F电容。R9(R10)的精度和电压Uc的精度基本上决定了测量结果精度
5、。 这个设计原本加入了一个电解电容漏电流测试功能,由于测量时间太长而放弃,图中的R13、R9(R10)与adc0等组成漏电流测量电路。 三、使用方法: 按下S2接通电源,进入校准状态(此时测量端子不能接入器件): (原文件名:Lcd_1.jpg)校准完成后: (原文件名:Lcd_2.jpg)按动S1进入电容测量状态: (原文件名:Lcd_3.jpg)按动S1进入电感测量状态: (原文件名:Lcd_4.jpg)按动S1进入电解电容(500uF)测量状态: (原文件名:Lcd_6.jpg)再按S1返回到电容测量状态。 这是安装完成的样子: (原文件名:PCB_2.jpg)(原文件名:PCB_3.j
6、pg)电路板被设计成适合热转印: (原文件名:PCB_1.jpg)加了一个铝合金底座: (原文件名:w_3.jpg)这是原理图: (原文件名:lc.jpg)这是热转印图和装配图: 点击此处下载ourdev_433768.rar(文件大小:527K)(原文件名:zp.rar) 这是源程序: * *电感电容电解电容测量仪* *电容:1P-2.5uF* *电感:1uH-2.0H* *电解电容:0.1uF-20000uF* *吕军省天津大港* *junsheng427* *20081217* * $regfile=m8def.dat $crystal=8000000 ConfigLcdpin=Pin,
7、Db4=Portb.2,Db5=Portb.3,Db6=Portb.4,Db7=Portb.5,E=Portb.1,Rs=Portb.0 ConfigLcd=16*2 ConfigTimer1=Counter,Edge=Falling配置T/C1为计数 ConfigTimer2=Timer,Prescale=64配置T/C2定时 ConfigInt0=Falling ConfigTimer0=Timer,Prescale=8 OnOvf0Tim0_isr OnInt0T1_isr OnOvf2Tim2_isr EnableOvf2 OnOvf1Tim1_isr EnableOvf1 Enabl
8、eInterrupts Tcnt2=&H83 StartTimer2 Counter1=0 StartCounter1 DimF1AsLong DimF2AsLong DimC1AsSingle DimCa1AsSingle DimCa2AsSingle DimCxAsSingle DimL1AsSingle DimLxAsSingle DimF11AsSingle DimV1AsString*11 DimV2AsString*11 DimVfAsString*6 DimVsAsString*8 DimZ1AsString*2 DimJAsBit DimIAsByte DimKAsBit Di
9、mMAsBit DimVlAsByte DimTcAsByte DimTc1AsLong DimTeAsLong Ddrd.7=0键初始 Portd.7=1 Ddrd.4=1继电器初始化 Ddrd.3=1 Portd.4=1 Portd.3=1 Ddrd.6=1 Portd.6=1 J=1 K=1 M=1 I=1 Tc1=0 Cls CursorOff /主程序/ Do /按键处理/ IfPind.7=0ThenS1 Waitms40 IfPind.7=0Then IncrI BitwaitPind.7,Set EndIf EndIf /电感L1,电容C1计算/ IfI=1Then IfJ=1
10、Then LcdL_C_CEmeter Lowerline Lcd20081217 Waitms1500等待F1计数 Portd.3=0接入标准电容C2 Waitms1500等待f2计数 Ca1=F1*F1 Ca2=F2*F2 C1=Ca1-Ca2 C1=Ca2/C1 C1=C1*18001800是标准电容C2;单位pF L1=3.1416*3.1416 L1=L1*4 L1=L1*Ca1 L1=L1*C1 L1=1/L1 L1=L1*1000000000000000000单位uH Portd.3=1断开标准电容C2 EndIf J=0 Vf=Str(f1)显示f1 Vf=Format(vf,
11、) Locate1,7 LcdF=;Vf;Hz Locate1,1 LcdSetOK V1=Fusing(c1,#.#) V2=Fusing(l1,#.#) Locate2,1 LcdV1;pF;V2;uH EndIf /电容Cx计算/ IfI=2Then Vf=Str(f1) Vf=Format(vf,) Locate1,7 LcdF=;Vf;Hz F11=F1*F1 Cx=Ca1/F11 Cx=Cx-1 Cx=Cx*C1 V1=Fusing(cx,#.#) Vl=Len(v1) Z1=pF IfVl=6Then V1=Mid(v1,1,4) Z1=pF EndIf IfVl=7Then V
12、1=Mid(v1,1,4) V1=Format(v1,00.00) Z1=nF EndIf IfVl=8Then V1=Mid(v1,1,4) V1=Format(v1,000.0) Z1=nF EndIf IfVl=9Then V1=Mid(v1,1,4) V1=Format(v1,0.000) Z1=uF EndIf Vs=Space(8) Locate2,1 LcdCx=;V1;Z1;Vs Locate1,1 LcdTestC EndIf /电感Lx计算/ IfI=3Then Vf=Str(f1) Vf=Format(vf,) IfF11000Then F11=F1*F1 Lx=Ca1/
13、F11 Lx=Lx-1 Lx=Lx*L1 Else Lx=0 EndIf V1=Fusing(lx,#.#) Vl=Len(v1) Z1=uH IfVl=6Then V1=Mid(v1,1,5) Z1=uH EndIf IfVl=7Then V1=Mid(v1,1,4) V1=Format(v1,0.000) Z1=mH EndIf IfVl=8Then V1=Mid(v1,1,4) V1=Format(v1,00.00) Z1=mH EndIf IfVl=9Then V1=Mid(v1,1,4) V1=Format(v1,000.0) Z1=mH EndIf IfVl=10Then V1=M
14、id(v1,1,4) V1=Format(v1,0.000) Z1=H EndIf Vs=Space(8) Locate2,1 LcdLx=;V1;Z1;Vs Locate1,1 LcdTestL EndIf /电解电容器测量(500uF)/ IfI=4Then Portd.4=1 IfK=1Then DisableOvf1 DisableOvf2 EnableInt0 EnableOvf0 Locate1,1 LcdTestCE500uF Locate2,1 LcdCEx= EndIf M=0 Portd.6=0开始充电 StartTimer0开始计时 EndIf /返回到电容测量/ IfI
15、=6Then I=2返回到电容测量 EnableOvf1 EnableOvf2 DisableInt0 DisableOvf0 Portd.3=1 K=1 M=1 EndIf Loop End /计数中断/ Tim1_isr: IncrTc1这么作可使计数分辩率最高到1Hz Return /定时中断/ Tim2_isr: Tcnt2=&H83定时器T2初值 IncrTc IfTc=250Then定时250mS StopCounter1 Tc1=Tc1*65535 IfPortd.3=1Then F1=Counter1 F1=F1+Tc1 F1=F1*4 EndIf IfPortd.3=0Then F2=Counter1 F2=F2+Tc1 F2=F2*4 EndIf Counter1=0 StartCounter1 Tc=0 Tc1=0 EndIf Return /定时中断,测电解电容/ Tim0_isr: IncrTe定时器0中断次数 Return /外部中断,测电解电容/ T1_isr: StopTimer0 Te=Te*256 Te=Te+Tcnt0 Te=Te/2时间/充电电阻=被测电容 V1=Str(te) Vl=Len(v1) IfPortd.3=1Then充电电阻R9接入,1AndTe10Then