设计磁标读写模块-STC8G1K08-HALL

作者:卓晴博士,清华大学自动化系
更新时间:2020-07-26 Sunday

■ 设计背景


用永磁铁的磁场可以给目标位增加可识别标记。需要设计一款基于 线性HALL器件 来识别被检测物品磁标的极性和强度。在 磁铁周围的磁场 对磁铁周围的磁场进行了检测。

被检测的磁铁是一款长方形:它的尺寸为:

  • 长:20mm
  • 宽:9.5mm
  • 厚:1.67mm

▲ 长方形的永磁铁

▲ 长方形的永磁铁

根据 磁铁周围的磁场 中的结果,如果HALL距离磁铁的距离小于10mm,磁铁之间相距10mm,使用HALL可以 比较准确获得对应的磁铁的极性。

01电路设计


1.硬件设计1

设计一个可以检测三个磁铁的电路板,通过单片机STC8G1K来读取HALL的输出值,判断磁铁是否存在以及相应的极性。

通过单片机的AD口直接读取HALL3505的输出电压。从而判断是否存在磁铁。

▲ 实验电路板设计

扫描二维码关注公众号,回复: 11503053 查看本文章
▲ 实验电路板设计

2.单片机软件2

  • OSC:35M, UART:460800bps

(1) 测试LED

将LED限流电阻减少到100欧姆,除了绿色LED之外,红色和黄色的LED闪烁比较明显。

测量绿色和黄色LED对应MCU管脚的波形,可以看到上面的电压波形基本相似。在相同的限流电阻的作用下流经LED的电流相同。这说明不同颜色的LED发光效率不同。

▲ 测量绿色和黄色单片机管脚波形

▲ 测量绿色和黄色单片机管脚波形

(1) 测试ADC

测量三个HALL的输出以及ADC的输出为:

ADC1 ADC2 ADC3
0.110 0.111 0.110
539 519 396

(2) 测量磁铁与HALL之间距离影响ADC

▲ 测量磁铁与HALL之间的距离影响HALL输出

▲ 测量磁铁与HALL之间的距离影响HALL输出

▲ 磁铁距离HALL距离与读书之间的关系

▲ 磁铁距离HALL距离与HALL之间的关系

将磁铁从上往下靠近HALL,重新测量距离对HALL输出的 影响。

▲ 从上往下改变磁铁与HALL之间的距离

▲ 从上往下改变磁铁与HALL之间的距离

▲ 磁铁距离HALL距离与HALL之间的关系

▲ 磁铁距离HALL距离与HALL之间的关系

val=[271.00,274.00,274.00,276.00,275.00,276.00,277.00,277.00,280.00,280.00,284.00,289.00,297.00,305.00,312.00,319.00,327.00,334.00,341.00,348.00,353.00,359.00,366.00,370.00,376.00,383.00,389.00,396.00,399.00,407.00,412.00,417.00,423.00,428.00,432.00,436.00,440.00,445.00,449.00,452.00,455.00,458.00,462.00,463.00,467.00,470.00,472.00,475.00,477.00,480.00,481.00,482.00,484.00,487.00,488.00,490.00,492.00,493.00,496.00,496.00,497.00,498.00,500.00,501.00,503.00,504.00,504.00,506.00,506.00,507.00,508.00,509.00,510.00,510.00,511.00,511.00,511.00,513.00,515.00,514.00,515.00,515.00,516.00,517.00,518.00,519.00,519.00,519.00,519.00,519.00,521.00,521.00,521.00,522.00,522.00,523.00,523.00,524.00,524.00,524.00]
val=[524.00,524.00,524.00,524.00,524.00,523.00,522.00,521.00,521.00,521.00,521.00,519.00,519.00,519.00,519.00,518.00,517.00,517.00,516.00,516.00,515.00,515.00,514.00,513.00,513.00,511.00,511.00,511.00,510.00,509.00,508.00,507.00,506.00,505.00,505.00,504.00,502.00,501.00,500.00,498.00,497.00,496.00,494.00,493.00,492.00,490.00,487.00,486.00,484.00,483.00,480.00,479.00,477.00,474.00,472.00,470.00,467.00,463.00,461.00,459.00,455.00,451.00,448.00,444.00,440.00,435.00,432.00,427.00,422.00,417.00,412.00,406.00,399.00,394.00,388.00,382.00,376.00,370.00,364.00,359.00,352.00,348.00,341.00,334.00,327.00,319.00,312.00,304.00,295.00,287.00,284.00,280.00,280.00,278.00,275.00,276.00,275.00,275.00,274.00,275.00]

▲ 磁铁距离HALL距离与HALL输出之间的关系

▲ 磁铁距离HALL距离与HALL输出之间的关系

val=[878.00,877.00,876.00,876.00,873.00,870.00,867.00,856.00,833.00,812.00,793.00,774.00,759.00,743.00,731.00,718.00,707.00,696.00,688.00,679.00,671.00,664.00,657.00,651.00,646.00,639.00,635.00,631.00,626.00,622.00,619.00,615.00,611.00,609.00,607.00,604.00,600.00,598.00,596.00,593.00,591.00,590.00,588.00,586.00,585.00,583.00,582.00,580.00,579.00,577.00,575.00,575.00,574.00,572.00,572.00,571.00,570.00,569.00,568.00,568.00,566.00,566.00,565.00,564.00,563.00,562.00,563.00,562.00,561.00,560.00,560.00,560.00,559.00,558.00,558.00,558.00,558.00,557.00,557.00,556.00,556.00,556.00,556.00,554.00,553.00,553.00,553.00,553.00,552.00,552.00,551.00,551.00,551.00,551.00,551.00,550.00,550.00,550.00,551.00,550.00]
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST4.PY                     -- by Dr. ZhuoQing 2020-07-26
#
# Note:
#============================================================

from headm import *
import lscm8
from tsmodule.tsstm32       import *
gifid = 9

valdim = []

distdim = linspace(0, 20, 100)

tspgiffirst(gifid)
for i in range(100):
    lscm8.lscm8mb(200)
    stm32cmd('adc')
    time.sleep(.1)
    val = stm32memo(1)
    tspgifappend(gifid)

    valdim.append(val[0])
    printf(val[0])

tspsavenew('Measure', val=valdim)
plt.plot(distdim, valdim)
plt.xlabel("Distance(mm)")
plt.ylabel("Value")
plt.grid(True)
plt.tight_layout()
plt.show()

#------------------------------------------------------------
#        END OF FILE : TEST4.PY
#============================================================

(3) 在不同距离下水平移动对应的HALL输出

▲ 距离6毫米不同偏移量读出的数值

▲ 距离6毫米不同偏移量读出的数值

▲ 距离10毫米不同偏移量读出的数值

▲ 距离10毫米不同偏移量读出的数值

▲ 距离15毫米不同偏移量读出的数值

▲ 距离15毫米不同偏移量读出的数值

※ 结论


通过测量HALL距离磁铁在垂直和水平方向的距离与HALL输出之间的关系,可以确定设置磁铁与HALL传感器之间的几何距离。

  • HALL与磁铁之间距离需要小于10mm;
  • 三个HALL在静态时出现不同的零点读数;需要能够在出厂时对其定标。

相关工作:

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

  1. AD硬件设计工程文件:AD\XQWF\2020\机械臂\MagMarkSTC8K.SchDoc ↩︎

  2. 单片机C51开发工程文件:C51\STC\Project\XQWF\2020\HALLMark\HALLMarkSTC8G1K08.uvproj ↩︎

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/107569206