资讯详情

为什么使用RLC表测量电感在不同的频率测量值不同呢?

■ 问题的提出


为什么 .

|

▲ TH2821A RLC测量电感|电感来自继电器线圈

选取了 使用便携RLC表 TH2821A 电感测量。不同频率测量的结果如下:

测量频率 电感值
100Hz 337.5mH
120Hz 301.7mH
1kHz 156.7mH
10kHz 75.74mH

选择另一个小工字磁芯电感进行测量。

▲ 一个小型10mH的磁芯电感

测量频率 电感值
100Hz 64.7mH
120Hz 47.82mH
1kHz 10.19mH
10kHz 9.55mH

从前两个例子来看,铁芯的继电器电感和磁芯的电感都与测量频率有关。随着测量频率的增加,相应的电感下降。那么为什么呢?

01问题的解释


为网站 给出了一些答案。我认为下面的回复是对不同频率对测量电感的影响的全面总结。它也更符合上述测量结果的分析:

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实验


使用 测量前继电器线圈和10mH不同频率下工字电感的电感值。

使用的方法和 同样,只修改分压电阻的组织大小,使其与测量频率范围内测量电感的感抗大致相同。这样,就可以获得最大的精度。

1.测量继电器电磁线圈的电感

采用分压电阻 R = 1 k R = 1k R=1k,测量频率范围在100Hz到5kHz。测量得到的数据曲线如下:

▲ 继电器线圈的感抗

电感的感抗 2 π f L 2\pi fL 2πfL与电阻 R L R_L RL​形成最终的幅值和相角之间的计算公式:

因此,根据上面所测量得到阻抗幅值,相角以及相应的频率,可以求得对应的电感L,电阻RL等数值。

根据上面公式计算出继电器线圈在不同频率下的电感与电阻的数值。如下图所示。

可以看到,随着频率的增加,电感量逐步减少,电阻值则逐步增加。

▲ 继电器线圈在不同的频率下的电感和电阻

2.测量工字型10mH电感

设置分压电阻 R 1 = R 2 = 100 Ω R_1 = R_2 = 100\Omega R1​=R2​=100Ω。

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

根据电感的阻抗和相角计算得到对应的电感值以及等效串联电阻值。如下图所示:

从中可以看到,对于具有铁氧体磁芯的普通电感,在频率大于500Hz以后,电感量就基本上维持在9mH以上了。在前期100只500Hz之间由于感抗过于低,所以出现了比较大的测量误差。

等效电阻的数值随着频率增加而逐步增加。

▲ 计算测到对应的电感和电阻的数值

下面将分压电阻重新设置为 R 1 = R 2 = 20 Ω R_1 = R_2 = 20\Omega R1​=R2​=20Ω在进行测试:

▲ 在分压电阻为20Ω下的测试结果曲线

通过前面公式(2)计算出电感与电阻输入如下所示。可以看到在这个分压下对应的结果误差更大了。

▲ 在分压电阻为20Ω下计算得到的电感和电阻

下面在分压电阻为 R 1 = R 2 = 200   Ω R_1 = R_2 = 200\,\Omega R1​=R2​=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
#============================================================

标签: 10mh电感自振频率

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台