在 高斯计磁场测试仪磁力检测仪磁场测磁仪手持磁通计特斯拉计td8620 中测量了方形磁铁表面的磁感应强度B,发现这类磁铁表面的磁场强度并不是均匀的。下面通过 线性HALL 3503 来测量几种典型永磁铁表面的磁场强度的变化。
00测量方法
1.测量方法
使用 单轴步进驱动模块SH-20403 的滑轨带动线性HALL从磁铁表面划过,测量不同位置的磁场强度B。
▲ 丝杠滑轨带动HALL从磁铁表面划过
2.磁铁磁场范围
使用 高斯计磁场测试仪磁力检测仪磁场测磁仪手持磁通计特斯拉计td8620 对于长方形的磁铁测量,在边缘测量到的磁场最大: B M a x = 2600 G B_{Max} = 2600G BMax=2600G
在磁铁的中心测量到的磁场强度最小:
B
M
i
n
=
1100
G
B_{Min} = 1100G
BMin=1100G
3.HALL输出分析
如果使用线性HALL 3503进行测量,根据3503 的灵敏度为:
η
=
1.3
m
V
/
G
\eta = 1.3mV/G
η=1.3mV/G
那么Bmax对应的输出电压变化应该是:
Δ
U
=
η
⋅
B
max
=
1.3
×
2600
=
3380
m
V
=
3.380
V
\Delta U = \eta \cdot B_{\max } = 1.3 \times 2600 = 3380mV = 3.380V
ΔU=η⋅Bmax=1.3×2600=3380mV=3.380V
如果HALL传感器工作在5V,它的中点为2.5V。那么此时输出的电压 V max = 2.5 + 3.38 = 5.88 V V_{\max } = 2.5 + 3.38 = 5.88V Vmax=2.5+3.38=5.88V
这已经超过了HALL器件输出的最大的电压,一般在 V r a n g e = [ 1.2 V , 4.2 V ] V_{range} = [1.2V,\,\,4.2V] Vrange=[1.2V,4.2V]。
如果按照输出电压最大 V max = 4.2 V V_{\max } = 4.2V Vmax=4.2V,那么输出电压变化最大为: Δ U max = 4.2 − 2.5 = 1.7 V \Delta U_{\max } = 4.2 - 2.5 = 1.7V ΔUmax=4.2−2.5=1.7V
对应的磁场强度不应该超过: B max = Δ U max 1.3 × 1 0 − 3 = 1.7 1.3 × 1 0 − 3 = 1307 G B_{\max } = {{\Delta U_{\max } } \over {1.3 \times 10^{ - 3} }} = {{1.7} \over {1.3 \times 10^{ - 3} }} = 1307G Bmax=1.3×10−3ΔUmax=1.3×10−31.7=1307G
01测量结果
由于磁铁表面的磁场强度远超过HALL3503的线性范围,所以下面分为两次测量:
- 紧贴磁铁表面测量;
- 原理磁铁表面测量;
1.紧贴磁铁表面
下面是测量一次HALL传感器通过磁铁长轴通过时的变化曲线,其中可以看到在磁铁表面时,HALL传感器几乎就饱和了。
▲ 磁铁表面的磁场变化
▲ 磁铁表面的磁场变化
2.远离磁铁表面测量
将HALL传感器提高到距离磁铁表面1厘米的高度位置。重新测量磁场变化的曲线。
▲ 磁铁表面的磁场变化
3.HALL1308测量
更换1308测量磁铁表面的磁场强度。其中大部分的磁场表面的强度使得HALL1308出现了饱和。
▲ 磁场表面的磁场强度
4.改变HALL角度
为了避免HALL输出饱和,将HALL的角度改动大约45°倾斜角度,这样可以将进入HALL的磁场强度降低大约0.71倍。
▲ 磁铁表面的磁场强度
通过这次测量,可以看到的确在磁铁表面的磁场强度的变化情况。特别是,在磁铁的中心的磁场强度是最弱的。
但是,磁场的变化表没有向TD8620磁力计所测量的变化那么大。
02特殊磁铁
1.机械硬盘音频电机磁铁
在 拆开机械硬盘看一看 中获得了机械硬盘音频电机的磁极。根据房分析,它的表面的磁极应该是左右分别为N-S对称的。
▲ 机械磁盘音频电机磁极
▲ 磁铁表面的磁场强度
2.磁性角度传感器
▲ 磁性角度传感器
▲ 磁性角度传感器表面的磁场
.结论
通过线性霍尔传感器对于几种典型磁铁表面的磁场进行测量,获得了更加精细的磁场分布的特性。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST2.PY -- by Dr. ZhuoQing 2020-09-26
#
# Note:
#============================================================
from headm import *
from tsmodule.tsstm32 import *
import LSCM8
#------------------------------------------------------------
LSCM8.lscm8mb(100000)
time.sleep(2)
#------------------------------------------------------------
outdim = []
for i in range(90):
meter = meterval()
outdim.append(meter[0])
LSCM8.lscm8mf(1000)
time.sleep(1)
tspsave('data1', out=outdim)
LSCM8.lscm8mb(100000)
plt.plot(outdim)
plt.xlabel("Step")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
printf('\a')
#------------------------------------------------------------
# END OF FILE : TEST2.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# LSCM8.PY -- by Dr. ZhuoQing 2020-01-14
#
# Note:
#============================================================
from head import *
import serial
#------------------------------------------------------------
cmdportdef = 'COM2'
cmdport = serial.Serial(cmdportdef, baudrate=115200, timeout=0.1)
cmdport.setDTR(False)
#cmdport.setRTS(False)
printf("Open %s for LSCM8."%cmdportdef)
#------------------------------------------------------------
COMMAND_FRAME_HEAD = 0x56
COMMAND_FRAME_TAIL = 0x65
COMMAND_STATUS_WAIT = 0x0
COMMAND_STATUS_COMMAND = 0x1
COMMAND_STATUS_LENGTH = 0x2
COMMAND_STATUS_DATA = 0x3
COMMAND_STATUS_CHECK = 0x4
COMMAND_STATUS_TAIL = 0x5
#------------------------------------------------------------
COMMAND_HELLO_ECHO = 0x20
COMMAND_BEEP_ON = 0x21
COMMAND_BEEP_OFF = 0x22
COMMAND_DIR_ON = 0x23
COMMAND_DIR_OFF = 0x24
COMMAND_REL_ON = 0x25
COMMAND_REL_OFF = 0x26
COMMAND_PUL_SET = 0x27
COMMAND_PUL_STOP = 0x28
COMMAND_GOTO_HEAD = 0x29
COMMAND_GOTO_TAIL = 0x2A
COMMAND_GET_STATE = 0x2B
COMMAND_GET_PULSEOUT = 0x2C
COMMAND_CLEAR_PULSEOUT = 0x2D
#------------------------------------------------------------
def lscm8cmd(cmd, cmddata):
checksum = cmd + len(cmddata)
for cd in cmddata:
checksum = checksum + cd
checksum = (checksum & 0xff) ^ 0xff
cmdstr = b'' + byte(COMMAND_FRAME_HEAD) + byte(cmd) + byte(len(cmddata)) +\
cmddata + byte(checksum) + byte(COMMAND_FRAME_TAIL)
# printf(cmdstr)
cmdport.write(cmdstr)
def lscm8hello():
lscm8cmd(COMMAND_HELLO_ECHO, b'')
def lscm8beepon():
lscm8cmd(COMMAND_BEEP_ON, b'')
def lscm8beepoff():
lscm8cmd(COMMAND_BEEP_OFF, b'')
#------------------------------------------------------------
def lscm8relon(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_REL_ON, cmd)
#------------------------------------------------------------
# bits:0:relay0, 1:relay1
def lscm8reloff(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_REL_OFF, cmd)
def lscm8diron(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_DIR_ON, cmd)
def lscm8diroff(bits):
cmd = bits.to_bytes(1, byteorder='big')
lscm8cmd(COMMAND_DIR_OFF, cmd)
#------------------------------------------------------------
def lscm8setpulse(bits, pulse):
cmd = bits.to_bytes(1, byteorder='big') +\
pulse.to_bytes(4, byteorder='big')
lscm8cmd(COMMAND_PUL_SET, cmd)
def lscm8stoppulse():
lscm8cmd(COMMAND_PUL_STOP, b'')
def lscm8gotohead():
lscm8cmd(COMMAND_GOTO_HEAD, b'')
def lscm8gototail():
lscm8cmd(COMMAND_GOTO_TAIL, b'')
def lscm8clearpulseout():
lscm8cmd(COMMAND_CLEAR_PULSEOUT, b'')
def lscm8mf(steps):
lscm8diron(3)
lscm8reloff(3)
lscm8setpulse(3, steps)
def lscm8mb(steps):
lscm8diroff(3)
lscm8reloff(3)
lscm8setpulse(3, steps)
#------------------------------------------------------------
if __name__ == "__main__":
time.sleep(.5)
# lscm8diron(3)
# lscm8reloff(3)
# lscm8gotohead()
# lscm8gototail()
# lscm8setpulse(3, 1000)
# lscm8diron(3)
lscm8mb(100000)
# lscm8mf(1900000)
tspbeep(1500, 100)
printf('End of the command')
#------------------------------------------------------------
# END OF FILE : LSCM8.PY
#============================================================
■ 相关文献链接: