测量 XW-HLR26-24G 微波雷达模块的性能测试

举报
tsinghuazhuoqing 发表于 2022/02/08 22:16:29 2022/02/08
【摘要】 简 介: 利用ESP32 MicroPython 模块中的UART1对于 雷达模块性能进行测试。验证了它的基本通信格式,能够读取对应的数据,它的数据更新速率为每秒钟4个测量数据。 关键词: 雷达...

简 介: 利用ESP32 MicroPython 模块中的UART1对于 雷达模块性能进行测试。验证了它的基本通信格式,能够读取对应的数据,它的数据更新速率为每秒钟4个测量数据。

关键词 雷达模块ESP32

微波雷达
目 录
Contents
接口定义
测试电路板
ESP32串口测试
连接ESP32与
XW-HLR26-24G
信号连接
初步测试
通信测试
读取测试信息
测量范围
更多测试
测试手臂
前后移动
测量代码
测量结果
测试总结

 

§01 波雷达


  XW-HLR26-24G毫米波测距测速雷达传感器模块移动侦测传感器可调距离TTL输出 中的微波雷达进行功能测试。

1.1 接口定义

  SW-HLR26的接口如下图所示。这是对应的2mm间距的PIN4接口。

▲ 图1.1 XW-HLR26-24G微波雷达模块

▲ 图1.1 XW-HLR26-24G微波雷达模块

1.2 测试电路板

  利用 ESP32-S模块转接板设计与实现 中的ESP32UARTUART1XW-HLR26-24G进行测试。
▲ 图1.2.1 ESP32-S 转接板的接口定义

▲ 图1.2.1 ESP32-S 转接板的接口定义

1.2.1 ESP32串口测试

from machine                import UART,Pin
import utime

led  = Pin(5, Pin.OUT)
uart = UART(1, 115200)

while True:
    led.on()
    utime.sleep_ms(100)
    led.off()
    utime.sleep_ms(100)
    uart.write(b'\x55')

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

  下面是测TXD1输出信号。验证了:

  • 这个管脚是ESP32TXD1 输出信号;
  • 初始化的115200的波特率是正确的的;

▲ 图1.2.2 ESP32 TXD1管脚信号

▲ 图1.2.2 ESP32 TXD1管脚信号

1.3 连接ESP32与XW-HLR26-24G

1.3.1 信号连接

  将XW-HLR26ESP32连接。由于ESP32工作电压为3.3V。所以需要另外增加+5V的工作电源。

▲ 图1.3.1  测试XW-HLR26模块的ESP32测试电路板

▲ 图1.3.1 测试XW-HLR26模块的ESP32测试电路板

  XW-HLR26 的串口具有 3.3V/5V兼容的信号。
▲ 图1.3.2  XWS-HLR26 接口定义

▲ 图1.3.2 XWS-HLR26 接口定义

1.3.2 初步测试

  该模块施加+5V工作电源。模块工作流大约:84mA

(1)模块上电信息

  根据XW-HLR26的使用手册可以知道模块上电后主动上报模块的版本号。使用示波器检测模块的TX管脚,在上电后并没有看到任何发送的数据信号。同样在RX管教也没有发送数据信号信息。

(2)读数信息

uart.write(b'\x55\x5a\x02\xD3\x84')
utime.sleep_ms(50)

readb = uart.read(uart.any())
print(readb)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
Test XW-HLR26.
5
b'U\xa5\n\xd3\xff\xff\x00\x00\x00\x00\x00\x00\xd5'

  
 
  • 1
  • 2
  • 3

1.4 通信测试

1.4.1 读取测试信息

def readXW():
    uart.write(b'\x55\x5a\x02\xD3\x84')
    utime.sleep_ms(10)

    readb = uart.read(uart.any())
    distance = 0
    speed = 0
    gesture = 0
    intensity = 0

    if readb[0:3] != b'\x55\xa5\n':
        return distance,speed,gesture,intensity

    print(readb)
    distance = int.from_bytes(readb[4:6], 0)
    speed = int.from_bytes(readb[6:8], 0)
    intensity = int.from_bytes(readb[8:10], 0)
    gesture = readb[10]

    return distance,speed,intensity,gesture

d,s,i,g = readXW()
print(d,s,i,g)

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

1.4.2 测量范围

(1)查询雷达测量范围

def readRange():
    uart.write(b'\x55\x5a\x02\xD5\x86')
    utime.sleep_ms(10)
    readb = uart.read(uart.any())

    print(readb)

readRange()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
b'U\xa5\x0c\xd5\x00\x01\x00\xc8\x00\xb4\x00d\x00\xa0\\'

  
 
  • 1
  • 注意: 在上面的返回中,数据为12个,但在使用说明中,返回的数据应该是6个。

 

§02 多测试


2.1 测试手臂前后移动

2.1.1 测量代码

from machine                import UART,Pin
import utime

led  = Pin(5, Pin.OUT)
uart = UART(1, 115200)

def readXW():
    uart.write(b'\x55\x5a\x02\xD3\x84')
    utime.sleep_ms(10)

    readb = uart.read(uart.any())
    distance = 0
    speed = 0
    gesture = 0
    intensity = 0

    if readb[0:3] != b'\x55\xa5\n':
        return distance,speed,gesture,intensity

    distance = int.from_bytes(readb[4:6], 0)
    speed = int.from_bytes(readb[6:8], 0)
    intensity = int.from_bytes(readb[8:10], 0)
    gesture = readb[10]

    return distance,speed,intensity,gesture

def readRange():
    readb = uart.read(uart.any())
    uart.write(b'\x55\x5a\x02\xD5\x86')
    utime.sleep_ms(2)
    readb = uart.read(uart.any())

def setMaxRange():
    uart.write(b'\x55\x5a\x04\xD6\x01\x00\x8a')
    utime.sleep_ms(10)
    readb = uart.read(uart.any())

NUMBER = 256
dist = [0]*NUMBER

for ii in range(NUMBER):
    d,s,i,g=readXW()
    dist[ii] = d

print(dist)

while True:
    led.on()
    utime.sleep_ms(500)
    led.off()
    utime.sleep_ms(500)

  
 
  • 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

2.1.2 测量结果

from headm import *
from tsmodule.tsstm32       import *

stm32cmd('COPY')
time.sleep(.1)
strall = [s for s in clipboard.paste().split('\r\n') if len(s) > 0]
strnum = array([int(s) for s in strall[-1].replace('[','').replace(']','').split(',')])
strnum[where(strnum == 65535)] = 100

printf(strnum)

plt.plot(strnum)
plt.xlabel("n")
plt.ylabel("Distance")
plt.grid(True)
plt.tight_layout()
plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

▲ 图2.1.1 测量结果

▲ 图2.1.1 测量结果

  从测量结果来看,可以看到XW-HLR26反馈测量值的更新具有一定的周期。在连续读取数值的时候,大约2个数据之后才有更新。这对应的大约022秒。
▲ 图2.1.2 另外一次测量结果

▲ 图2.1.2 另外一次测量结果

  测量 512个数据,消耗 5.515秒,对应每个数据大约时间10.77ms。对应22数据,大约消耗:237ms。由此可以估计出雷达模块大约每秒钟更新 4个数据。

 

试总结 ※


  用ESP32 MicroPython 模块中的UART1对于 雷达模块性能进行测试。验证了它的基本通信格式,能够读取对应的数据,它的数据更新速率为每秒钟4个测量数据。


■ 相关文献链接:

● 相关图表链接:

from machine                import UART,Pin
import utime

led  = Pin(5, Pin.OUT)
uart = UART(1, 115200)

def readXW():
    uart.write(b'\x55\x5a\x02\xD3\x84')
    utime.sleep_ms(10)

    readb = uart.read(uart.any())
    distance = 0
    speed = 0
    gesture = 0
    intensity = 0

    if readb[0:3] != b'\x55\xa5\n':
        return distance,speed,gesture,intensity

    distance = int.from_bytes(readb[4:6], 0)
    speed = int.from_bytes(readb[6:8], 0)
    intensity = int.from_bytes(readb[8:10], 0)
    gesture = readb[10]

    return distance,speed,intensity,gesture

def readRange():
    readb = uart.read(uart.any())
    uart.write(b'\x55\x5a\x02\xD5\x86')
    utime.sleep_ms(2)
    readb = uart.read(uart.any())

def setMaxRange():
    uart.write(b'\x55\x5a\x04\xD6\x01\x00\x8a')
    utime.sleep_ms(10)
    readb = uart.read(uart.any())

NUMBER = 512
dist = [0]*NUMBER

starttime = utime.ticks_ms()
for ii in range(NUMBER):
    for j in range(100):
        d,s,i,g=readXW()
        if d != 65535: break
    dist[ii] = d

print(utime.ticks_ms() - starttime)

print(dist)

while True:
    led.on()
    utime.sleep_ms(500)
    led.off()
    utime.sleep_ms(500)

  
 
  • 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

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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