爲什麼使用RLC表測量電感在不同的頻率測量值不同呢?

■ 問題的提出


爲什麼 使用RLC表測量電感在不同的頻率下所測量得到的電感不同呢? .

▲ TH2821A RLC表以及測量電感|電感來自於一個繼電器的線圈

▲ TH2821A RLC表以及測量電感|電感來自於一個繼電器的線圈

選取了 一個繼電器線圈 使用便攜RLC表 TH2821A 對其進行電感測量。使用不同的頻率測量的結果如下:

測量頻率 電感值
100Hz 337.5mH
120Hz 301.7mH
1kHz 156.7mH
10kHz 75.74mH

選取另外一個小型的工字型磁芯電感進行測量。

▲ 一個小型10mH的磁芯電感

▲ 一個小型10mH的磁芯電感

測量頻率 電感值
100Hz 64.7mH
120Hz 47.82mH
1kHz 10.19mH
10kHz 9.55mH

從前面兩個例子來看,無論是鐵芯的繼電器電感,還是磁芯的電感,它們的電感值都與所使用測量頻率有關係。隨着測量頻率的提高,對應的電感量下降。那麼這究竟爲什麼呢?

 

01問題的解釋


爲網站eevblog 有一個帖子 LRC Meter - Different readings at different frequencies - Why? - Page 1 給出了一些答案。下面的回覆我認爲是比較全面的概括了不同的頻率對測量電感的影響。也比較符合前面測量的結果的分析:

  • 網頁摘抄

If the inductor being measured is not an air core type, the permeability of the core material may well change with frequency. And, for that matter, the permeability may change with the applied test signal level. Ferrite material is perhaps the most well known for permeability change with frequency, but it’s not the only material.

Second order effects also causes change in inductance with frequency - for example as the frequency increases, the current distribution on the wire an inductor is wound with changes. Skin effect drives the current to the outside of the conductor and proximity effect drives current away from the conductors surfaces that are adjacent. These effects are small in many cases but they alter the equivalent dimensions of the inductor and hence the physical flux linkages and therefore the inductance.

Finally, as has been mentioned, all practical inductors have self-capacitance. At some frequency, the inductor becomes self-resonant where the distributed capacitance and inductance form a parallel resonant circuit. As you measure an inductor with a variable frequency source, the closer you are to the SRF, the greater the indicated inductance. At the SRF, the indicated inductance is 0 and above the SRF, the sign inverts and the instrument indicates you are measuring a capacitor, not an inductor.

It is possible to “de-embed” these various parasitic effects and model a real inductor as a network of theoretically perfect parts, none of which change with frequency. So in one sense, it is correct to say that the “inductance does not change with frequency” provided that you mean one part of the model of a real world inductor. However, if one conceptualizes the real world inductor as a black box it is just as accurate to say that the box contains an inductor with parameters that are a function of frequency (and applied test signal level, etc.)

 

02實驗


使用 AD5934阻抗變換模塊實驗電路板 來測量前面的繼電器線圈以及10mH工字型電感在不同頻率下的電感值。

所使用的方法與 AD5934阻抗變換模塊實驗電路板中相同,只是修改分壓電阻的組織大小,使得它與被測量電感在測量頻率範圍的感抗大體相同。這樣便可以得到最大的精度。

1.測量繼電器電磁線圈的電感

採用分壓電阻R=1kR = 1k,測量頻率範圍在100Hz到5kHz。測量得到的數據曲線如下:
▲ 繼電器線圈的感抗

▲ 繼電器線圈的感抗

電感的感抗2πfL2\pi fL與電阻RLR_L形成最終的幅值和相角之間的計算公式:

因此,根據上面所測量得到阻抗幅值,相角以及相應的頻率,可以求得對應的電感L,電阻RL等數值。

根據上面公式計算出繼電器線圈在不同頻率下的電感與電阻的數值。如下圖所示。

可以看到,隨着頻率的增加,電感量逐步減少,電阻值則逐步增加。

▲ 繼電器線圈在不同的頻率下的電感和電阻

▲ 繼電器線圈在不同的頻率下的電感和電阻

2.測量工字型10mH電感

設置分壓電阻R1=R2=100ΩR_1 = R_2 = 100\Omega
▲ 測量10mH工字型電感的感抗幅度好の相角

▲ 測量10mH工字型電感的感抗幅度好の相角

根據電感的阻抗和相角計算得到對應的電感值以及等效串聯電阻值。如下圖所示:

從中可以看到,對於具有鐵氧體磁芯的普通電感,在頻率大於500Hz以後,電感量就基本上維持在9mH以上了。在前期100只500Hz之間由於感抗過於低,所以出現了比較大的測量誤差。

等效電阻的數值隨着頻率增加而逐步增加。
▲ 計算測到對應的電感和電阻的數值

▲ 計算測到對應的電感和電阻的數值

下面將分壓電阻重新設置爲R1=R2=20ΩR_1 = R_2 = 20\Omega在進行測試:
▲ 在分壓電阻爲20Ω下的測試結果曲線

▲ 在分壓電阻爲20Ω下的測試結果曲線

通過前面公式(2)計算出電感與電阻輸入如下所示。可以看到在這個分壓下對應的結果誤差更大了。
▲ 在分壓電阻爲20Ω下計算得到的電感和電阻

▲ 在分壓電阻爲20Ω下計算得到的電感和電阻

下面在分壓電阻爲R1=R2=200ΩR_1 = R_2 = 200\,\Omega重新測試。

▲ 在分壓電阻200歐姆下測量的數據

▲ 在分壓電阻200歐姆下測量的數據

▲ 計算出的電感與電阻的數值

▲ 計算出的電感與電阻的數值

→ 出現這種情況的原因,以後再分析吧。太奇怪了。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# EXEC1.PY                     -- by Dr. ZhuoQing 2020-07-06
#
# Note:
#============================================================
from headm import *
f, xabs, xphase = tspload('Impedance', 'f', 'xabs', 'xphase')
theta = [a * pi / 180 for a in xphase]
printf(xabs)
lf = [x*sin(-a) / (2*pi*f)*1000 for x,a,f in zip(xabs, theta, f)]
rf = [x*cos(a) for x,a in zip(xabs, theta)]
plt.subplot(211)
plt.plot(f, lf, label="Inductance")
plt.xlabel("Frequency(Hz)")
plt.ylabel("L(mH)")
plt.grid(True)
plt.subplot(212)
plt.plot(f, rf, label='Resistor')
plt.xlabel("Frequency(Hz)")
plt.ylabel("R(Ohm)")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : EXEC1.PY
#============================================================

 

※ 結論


根據前面討論,可以知道一個具有導磁磁芯的電感,特別是鐵芯電感會因爲不同的頻率而具有不同的電感值。因此,最好是使用在實際工作中相同或者相近的頻率來測量電感的電感量。

也可以使用在 磁鐵與懸浮 中根據波形來測量電感的數值。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2020-06-25
#
# Note:
#============================================================

from headm import *
import ad5933
from tsmodule.tsstm32       import *
from tsmodule.tsvisa        import *
from tsmodule.tsdraw        import *

#------------------------------------------------------------
printf('Begin testing:\a')

#------------------------------------------------------------
calflag = 0
if len(sys.argv) > 1:
    calflag = int(sys.argv[1])

calname = 'testcal'
SWEEP_MODE = 1

Resistor=1e2
fosc = 1

startf = 100
stepf = 10
numf = 500

#------------------------------------------------------------
if calflag == 0:
    f1, R1, I1, A1 = tspload(calname, 'f', 'R', 'I', 'A')
    R1 = list(R1)
    I1 = list(I1)

    if len(f1) != numf+1:
        printf("NUMF is not equal to calibrate length:(%d,%d)"%(len(f1), numf))
        exit()

#------------------------------------------------------------
ad5933.init(20, 1)

#------------------------------------------------------------

while True:
    f = ad5933.setsweep(startf, stepf, numf, oscf=fosc, div=16)
    time.sleep(1.5)

    ad5933.sweep(SWEEP_MODE)

    while True:
        time.sleep(.5)
        val = stm32val()
        if val[12] > 0: break

    printf('\a')

    R,I = stm32memo(2)

    if len(R) == len(f): break
    else:
        printf('ERROR: %d != %d.\a'%(len(R), len(f)))
        if len(R) < len(f) / 2: continue;

        if calflag == 0:
            f = linspace(f[0], f[-1], len(f1))
            R = linspace(R[0], R[-1], len(f1))
            I = linspace(I[0], I[-1], len(f1))

            break

#------------------------------------------------------------
A = [sqrt(r**2+i**2) for r,i in zip(R,I)]
if calflag == 1:
    tspsave(calname, f=f, R=R, I=I, A=A)

#------------------------------------------------------------
if calflag != 0:
    plt.plot(f, R, label="Real")
    plt.plot(f, I, label="Imaginary")
    plt.plot(f, A, label='Amplitude')
    plt.xlabel("Frequency(Hz)")
    plt.ylabel("Value")
    plt.grid(True)
    plt.legend(loc="upper right")
    plt.show()
    exit()

#------------------------------------------------------------
Xabs = []
Xphase = []
for Rc,Ic,Rm,Im in zip(R1,I1,R,I):
    a = Resistor * Rm
    b = Resistor * Im
    c = 2*Rc - Rm
    d = 2*Ic - Im
    ccdd = c*c+d*d
    x = a*c/ccdd + b*d/ccdd
    y = -a*d/ccdd + b*c/ccdd

    Xabs.append(sqrt(x*x+y*y))
    Xphase.append(arctan2(y, x)*180/pi)

tspsave('Impedance',f=f, xabs=Xabs, xphase=Xphase)

#------------------------------------------------------------
plt.subplot(311)
plt.plot(f, R, label="Real")
plt.plot(f, I, label="Imaginary")
plt.plot(f, A, label='Amplitude')
plt.xlabel("Frequency(Hz)")
plt.ylabel("Value")
plt.grid(True)
plt.legend(loc="upper right")

plt.subplot(312)
plt.plot(f, Xabs)
plt.xlabel("Frequency(Hz)")
plt.ylabel("Amplitude(ohm)")
plt.grid(True)

plt.subplot(313)
plt.plot(f, Xphase)
plt.xlabel("Frequency(Hz)")
plt.ylabel("Phase")
plt.grid(True)

#------------------------------------------------------------
plt.show()

#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# AD5933.PY                    -- by Dr. ZhuoQing 2020-06-25
#
# Note:
#============================================================

from head import *
from tsmodule.tsstm32       import *

#------------------------------------------------------------

def init(settletime=100, extclock=0):
    if extclock > 0:
        stm32cmd('writeb 81 8')
    else:
        stm32cmd('writeb 81 0')

    time.sleep(0.02)
    stm32cmd('writeb 80 b1')    # Enter standby mode
    stm32cmd('writei 8a %x'%settletime)
    time.sleep(0.02)

def temperature():
    data = stm32cmdata('readt', wait=200)
    if len(data) > 0:
        return data[0] / 32
    else: return 0

def setsweep(startf, incf, num=100, oscf=16.557, div=4):
    startn = int(startf * (2**27) * div / (oscf*1e6))
    incn   = int(incf * (2**27) * div / (oscf*1e6))

    stm32cmd('writel 82 %x'%startn)
    time.sleep(.02)
    stm32cmd('writel 85 %x'%incn)
    time.sleep(.02)
    stm32cmd('writei 88 %x'%num)
    time.sleep(.02)

    stm32cmd('writeb 80 b1')        # Standby

    time.sleep(.02)
    stm32cmd('writeb 80 11')
    time.sleep(.02)

    fdim = []
    for n in linspace(startn, startn + incn * num, num+1, endpoint=True):
        fdim.append(n * oscf * 1e6/div/(2**27))

    return fdim

def startf(resultflag = 0):
    if resultflag > 0:
        stm32cmd('writeb 80 21 1')
    else:
        stm32cmd('writeb 80 21')

def incf(resultflag = 0):
    if resultflag > 0:
        stm32cmd('writeb 80 31 1')
    else:
        stm32cmd('writeb 80 31')

def repeatf(resultflag = 0):
    if resultflag > 0:
        stm32cmd('writeb 80 41 1')
    else:
        stm32cmd('writeb 80 41')

def readdata():
    return stm32cmdata('readd', wait=100)

def sweep(code=0x1):
    stm32cmd('CLEAR')
    time.sleep(.02)

    stm32cmd('sweep %x'%code)

#------------------------------------------------------------

if __name__ == '__main__':

    tdim = []

    for i in range(10):
        data = temperature()
        tdim.append(data)
        time.sleep(.1)

    printf(tdim)

#------------------------------------------------------------
#        END OF FILE : AD5933.PY
#============================================================
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章