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

举报
tsinghuazhuoqing 发表于 2021/12/26 23:18:48 2021/12/26
【摘要】 ■ 问题的提出 为什么 使用RLC表测量电感在不同的频率下所测量得到的电感不同呢? . ▲ TH2821A 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 = 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工字型电感的感抗幅度好の相角

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

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

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

等效电阻的数值随着频率增加而逐步增加。
▲ 计算测到对应的电感和电阻的数值

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

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

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

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

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

下面在分压电阻为 R 1 = R 2 = 200   Ω R_1 = R_2 = 200\,\Omega R1=R2=200Ω重新测试。

▲ 在分压电阻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
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

 

※ 结论


根据前面讨论,可以知道一个具有导磁磁芯的电感,特别是铁芯电感会因为不同的频率而具有不同的电感值。因此,最好是使用在实际工作中相同或者相近的频率来测量电感的电感量。

也可以使用在 磁铁与悬浮 中根据波形来测量电感的数值。

#!/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
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
#!/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
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107143340

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。