|
這個(gè)電路不同國家和地區(qū)很多人制作過,測量精度高,測量范圍大,有用不同語言寫的程序,我作了一個(gè)BASCOM-AVR版本的,并增加了對(duì)電解電容器測量。
電感測量范圍:0.1μH~2H
電容測量范圍:1pF~2.5μF
電解電容測量范圍:0.1μF~30000μF
一、電容、電感測量原理:
電路是一個(gè)由LM393(U3A)組成的LC振蕩器。由單片機(jī)測量LC震蕩回路的頻率F1,然后控制繼電器K2將標(biāo)準(zhǔn)電容C2與C1并聯(lián),測出振蕩器頻率F2,再用下列式子計(jì)算出電容C1電感L1的值。

這里電容器C2的容量的精確程度,基本上決定了整個(gè)測量過程的精度。應(yīng)該選用穩(wěn)定性好精度高的電容器,這個(gè)制作選用了1800pF的云母電容器。
上述過程可稱作為一個(gè)校準(zhǔn)過程,由M8控制每次開機(jī)時(shí)自動(dòng)完成。開機(jī)后延時(shí)1500ms,測量由U1A、L1、C1組成振蕩器頻率F1;Portd.3 = 0,K2吸合,C2接入延時(shí)1500ms,測量振蕩器頻率F2,Portd.3 = 1,K2斷開。M8計(jì)算C1、L1完成后按S1進(jìn)入電容Cx的測量狀態(tài)。
電容Cx、電感Lx的值,分別用下列式子計(jì)算:

二、電解電容測量原理:
電解電容的測量是基于對(duì)RC電路的時(shí)間常數(shù)的計(jì)算,由脈沖電路原理可知,電容的充電速度與R和C的大小有關(guān),R與C的乘積越大,過渡時(shí)間就越長。這個(gè)RC的乘積就叫做RC電路的時(shí)間常數(shù)τ,即τ=R?C。若R的單位用歐姆,C的單位用法拉,則τ的單位為秒。

圖示曲線可以得到充電過程的一般規(guī)律:Uc是按指數(shù)規(guī)律上升的,Uc開始變化較快,以后逐漸減慢,并緩慢地趨近其最終值,當(dāng)t=τ時(shí),Uc=0.632E;本測量儀就是利用單片機(jī)測量Uc=0到0.632E這段時(shí)間,用下列式子計(jì)算計(jì)算被測電容值:

電路由比較器U3B,放電晶體管Q等組成。設(shè)定比較器正輸入端為Uc,(Uc=0.632E=0.632?5=3.16V,調(diào)節(jié)RP1獲得),反向輸入端接被測電容CEx,當(dāng)D端為高電平時(shí),Q導(dǎo)通電路處于放電狀態(tài),這時(shí)CEx被放電,比較器U3B輸出高電平。當(dāng)D為低電平時(shí)Q截止電容CEx通過R9(R10)充電,CEx兩端電壓逐步升高,當(dāng)CEx兩端電壓>Uc時(shí),比較器U3B輸出低電平,產(chǎn)生INT0中斷(INT0中斷設(shè)置為下降沿觸發(fā)),中斷服務(wù)程序讀取定時(shí)器值,并計(jì)算、顯示CEx的值。然后置位PD6為高電平,Q導(dǎo)通,CEx放電,延時(shí)100mS是為了保證CEx充分放電,中斷返回開始下一個(gè)測量周期。為了提高測量精度電解電容測量分兩檔,由繼電器K2切換,R9接入時(shí)測量0.1μF~500μF電容,R10接入時(shí)測量500μF~20000μF電容。R9(R10)的精度和電壓Uc的精度基本上決定了測量結(jié)果精度。
這個(gè)設(shè)計(jì)原本加入了一個(gè)電解電容漏電流測試功能,由于測量時(shí)間太長而放棄,圖中的R13、R9(R10)與adc0等組成漏電流測量電路。
三、使用方法:
按下S2接通電源,進(jìn)入校準(zhǔn)狀態(tài)(此時(shí)測量端子不能接入器件):

校準(zhǔn)完成后:

按動(dòng)S1進(jìn)入電容測量狀態(tài):

按動(dòng)S1進(jìn)入電感測量狀態(tài):

按動(dòng)S1進(jìn)入電解電容(<500uF)測量狀態(tài):

按動(dòng)S1進(jìn)入電解電容(>500uF)測量狀態(tài):

再按S1返回到電容測量狀態(tài)。
這是安裝完成的樣子:


電路板被設(shè)計(jì)成適合熱轉(zhuǎn)。

加了一個(gè)鋁合金底座:

這是原理圖:

這是熱轉(zhuǎn)印圖和裝配圖:
zp.rar
(526.81 KB, 下載次數(shù): 116)
2015-7-18 14:05 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
這是源程序:
'****************************************************
'* 電感電容電解電容測量儀 *
'* 電容:1P-2.5uF *
'* 電感:1uH-2.0H *
'* 電解電容:0.1uF-20000uF *
'* 呂軍省 天津大港 *
'****************************************************
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
Config Timer1 = Counter , Edge = Falling '配置T/C1為計(jì)數(shù)
Config Timer2 = Timer , Prescale = 64 '配置T/C2定時(shí)
Config Int0 = Falling
Config Timer0 = Timer , Prescale = 8
On Ovf0 Tim0_isr
On Int0 T1_isr
On Ovf2 Tim2_isr
Enable Ovf2
On Ovf1 Tim1_isr
Enable Ovf1
Enable Interrupts
Tcnt2 = &H83
Start Timer2
Counter1 = 0
Start Counter1
Dim F1 As Long
Dim F2 As Long
Dim C1 As Single
Dim Ca1 As Single
Dim Ca2 As Single
Dim Cx As Single
Dim L1 As Single
Dim Lx As Single
Dim F11 As Single
Dim V1 As String * 11
Dim V2 As String * 11
Dim Vf As String * 6
Dim Vs As String * 8
Dim Z1 As String * 2
Dim J As Bit
Dim I As Byte
Dim K As Bit
Dim M As Bit
Dim Vl As Byte
Dim Tc As Byte
Dim Tc1 As Long
Dim Te As Long
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
Cursor Off
'/////主程序/////
Do
'/////按鍵處理/////
If Pind.7 = 0 Then 'S1
Waitms 40
If Pind.7 = 0 Then
Incr I
Bitwait Pind.7 , Set
End If
End If
'/////電感L1,電容C1計(jì)算/////
If I = 1 Then
If J = 1 Then
Lcd " L_C_CE meter"
Lowerline
Lcd " 20081217"
Waitms 1500 '等待F1計(jì)數(shù)
Portd.3 = 0 '接入標(biāo)準(zhǔn)電容C2
Waitms 1500 '等待f2計(jì)數(shù)
Ca1 = F1 * F1
Ca2 = F2 * F2
C1 = Ca1 - Ca2
C1 = Ca2 / C1
C1 = C1 * 1800 '1800是標(biāo)準(zhǔn)電容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 '斷開標(biāo)準(zhǔn)電容C2
End If
J = 0
Vf = Str(f1) '顯示f1
Vf = Format(vf , " ")
Locate 1 , 7
Lcd "F=" ; Vf ; "Hz"
Locate 1 , 1
Lcd "SetOK "
V1 = Fusing(c1 , "#.#")
V2 = Fusing(l1 , "#.#")
Locate 2 , 1
Lcd V1 ; "pF " ; V2 ; "uH"
End If
'/////電容Cx計(jì)算/////
If I = 2 Then
Vf = Str(f1)
Vf = Format(vf , " ")
Locate 1 , 7
Lcd "F=" ; Vf ; "Hz"
F11 = F1 * F1
Cx = Ca1 / F11
Cx = Cx - 1
Cx = Cx * C1
V1 = Fusing(cx , "#.#")
Vl = Len(v1)
Z1 = "pF"
If Vl = 6 Then
V1 = Mid(v1 , 1 , 4)
Z1 = "pF"
End If
If Vl = 7 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "00.00")
Z1 = "nF"
End If
If Vl = 8 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "000.0")
Z1 = "nF"
End If
If Vl = 9 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "0.000")
Z1 = "uF"
End If
Vs = Space(8)
Locate 2 , 1
Lcd " Cx=" ; V1 ; Z1 ; Vs
Locate 1 , 1
Lcd "TestC "
End If
'/////電感Lx計(jì)算/////
If I = 3 Then
Vf = Str(f1)
Vf = Format(vf , " ")
If F1 < 50 Then
Vf = " 0"
End If
Locate 1 , 7
Lcd "F=" ; Vf ; "Hz"
Portd.4 = 0 '輸入端切換到測電感
If F1 > 1000 Then
F11 = F1 * F1
Lx = Ca1 / F11
Lx = Lx - 1
Lx = Lx * L1
Else
Lx = 0
End If
V1 = Fusing(lx , "#.##")
Vl = Len(v1)
Z1 = "uH"
If Vl = 6 Then
V1 = Mid(v1 , 1 , 5)
Z1 = "uH"
End If
If Vl = 7 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "0.000")
Z1 = "mH"
End If
If Vl = 8 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "00.00")
Z1 = "mH"
End If
If Vl = 9 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "000.0")
Z1 = "mH"
End If
If Vl = 10 Then
V1 = Mid(v1 , 1 , 4)
V1 = Format(v1 , "0.000")
Z1 = "H "
End If
Vs = Space(8)
Locate 2 , 1
Lcd " Lx=" ; V1 ; Z1 ; Vs
Locate 1 , 1
Lcd "TestL "
End If
'/////電解電容器測量(<500uF) /////
If I = 4 Then
Portd.4 = 1
If K = 1 Then
Disable Ovf1
Disable Ovf2
Enable Int0
Enable Ovf0
Locate 1 , 1
Lcd "TestCE [<500uF]"
Locate 2 , 1
Lcd " CEx= "
End If
K = 0
Portd.6 = 0 '開始充電
Start Timer0 '開始計(jì)時(shí)
End If
'/////電解電容測量(2) /////
If I = 5 Then
If M = 1 Then
Portd.3 = 0
Locate 1 , 1
Lcd "TestCE [>500uF]"
Locate 2 , 1
Lcd " CEx= "
End If
M = 0
Portd.6 = 0 '開始充電
Start Timer0 '開始計(jì)時(shí)
End If
'/////返回到電容測量//////
If I = 6 Then
I = 2 '返回到電容測量
Enable Ovf1
Enable Ovf2
Disable Int0
Disable Ovf0
Portd.3 = 1
K = 1
M = 1
End If
Loop
End
'/////計(jì)數(shù)中斷/////
Tim1_isr:
Incr Tc1 '這么作可使計(jì)數(shù)分辯率最高到1Hz
Return
'/////定時(shí)中斷/////
Tim2_isr:
Tcnt2 = &H83 '定時(shí)器T2初值
Incr Tc
If Tc = 250 Then '定時(shí)250mS
Stop Counter1
Tc1 = Tc1 * 65535
If Portd.3 = 1 Then
F1 = Counter1
F1 = F1 + Tc1
F1 = F1 * 4
End If
If Portd.3 = 0 Then
F2 = Counter1
F2 = F2 + Tc1
F2 = F2 * 4
End If
Counter1 = 0
Start Counter1
Tc = 0
Tc1 = 0
End If
Return
'/////定時(shí)中斷,測電解電容/////
Tim0_isr:
Incr Te '定時(shí)器0中斷次數(shù)
Return
'/////外部中斷,測電解電容/////
T1_isr:
Stop Timer0
Te = Te * 256
Te = Te + Tcnt0
Te = Te / 2 '時(shí)間/充電電阻=被測電容
V1 = Str(te)
Vl = Len(v1)
If Portd.3 = 1 Then '充電電阻R9接入,<500uF
If Vl = 2 Then
V1 = "NO"
End If
If Vl = 3 Then
V1 = Mid(v1 , 1 , 3)
V1 = Format(v1 , "0.000")
End If
If Vl = 4 Then
V1 = Mid(v1 , 1 , 3)
V1 = Format(v1 , "0.00")
End If
If Vl = 5 Then
V1 = Mid(v1 , 1 , 3)
V1 = Format(v1 , "0.0")
End If
If Vl = 6 Then
V1 = Mid(v1 , 1 , 3)
End If
If Vl = 7 Then
V1 = " OL "
End If
End If
If Portd.3 = 0 Then
If Vl = 2 Then
V1 = Mid(v1 , 1 , 2)
V1 = Format(v1 , "0.00")
End If
If Vl = 3 Then
V1 = Mid(v1 , 1 , 3)
V1 = Format(v1 , "0.00")
End If
If Vl = 4 Then
V1 = Mid(v1 , 1 , 2)
End If
If Vl = 5 Then
V1 = Mid(v1 , 1 , 3)
End If
If Vl = 6 Then
V1 = Mid(v1 , 1 , 4)
End If
If Vl = 7 Then
V1 = Mid(v1 , 1 , 5)
End If
End If
Vs = Space(7)
If Te > 1 And Te < 10 Then
Locate 2 , 1
Lcd " CEx=" ; "0" ; "uF" ; Vs
End If
If Te > 10 Then
Locate 2 , 1
Lcd " CEx=" ; V1 ; "uF" ; Vs
End If
Portd.6 = 1 '開始放電
If Portd.3 = 1 And Te > 10 Then
Waitms 100
End If
If Portd.3 = 0 And Te > 10 Then
Waitms 500
End If
Tcnt0 = 0 '定時(shí)計(jì)數(shù)器清零
Te = 0 '定時(shí)中斷次數(shù)清零
Return
|
-
-
433770.rar
2015-7-18 14:03 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
6.52 KB, 下載次數(shù): 86, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|