激光测距用户手册
1.简介
本系列激光测距模块可以更快更确切的测量距离,即使在恶劣的测试环境中,比如较差的反射面。
2.核心参数
参数名 | 参数值 |
---|---|
精度 | ± 3毫米 |
单位 | 毫米 |
测试距离 | 0.03-5米 |
测量时间 | 0.4-4秒 |
激光分类 | Class II |
激光标准 | 520nm,<1mW |
尺寸 | 40 64 18mm |
重量 | 约15g |
额定电压 | DC3.3-4.3v |
工作温度 | 0-40℃ |
存储温度 | -25-60℃ |
线序 | 红:VIN 黑:GND 黄:RX 蓝:TX |
注意:
1、 不良测量条件下测量精度会有约±3mm+40PPM的误差。
2、 使用环境温度尽量保持在工作温度内。
3、 使用电压不能超过额定电压,否则会损坏模块。
3.操作协议
采用usart接口。
波特率:自动侦测(推荐9600bps ~115200bps) 默认波 特率19200bps
起始位:1位
数据位:8 位
停止位:1 位
校验位:无
流量控制:无
默认波特率19200bps可以在以下条件使用
注意:
在初始状态下,激光测距仪初始状态处于掉电模式。上电以后,模块需要大概100毫秒的时间完成自启动,然后进入自动检测波特率阶段。主机传输1字节固定数据0x55给从机进行自动侦测波特率,如果成功,从机将向主机回复1字节数据,这表示从机本身的地址。在一个主机多个从机通信情况下,从机的地址应答可能导致USART总线冲突,请记住该字节应该被忽略。在成功检测到波特率后,主机和从机之间的通信已经建立,主机可以发送命令帧给从机。
4. 控制指令
控制命令框架由6部分组成。如
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
---|---|---|---|---|---|---|---|---|---|---|
位数 | 8 | 1 | 7 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
名称 | Head | R/W | Address | Register | Payload count | Payload | checksum | |||
数据 | 0xAA | 0 | 0x51 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x00 | 0x72 |
请求始终以固定的头字节0xAA开始,在从从机到主机的错误应答帧期间,该字节也可以为0xEE,
R/W表示位,0:主机写入从机,1:主机从从机读取。
从机地址为0x51,地址只有7位,所以地址为0x00〜0x7F,0x00是主机发布模块地址变更命令前的默认地址,0x7F是为单主机到多机网络保留的广播地址;
从机寄存器为0x0020(REG_MEA_MODE,详见寄存器列表);
写入寄存器0x0020的有效载荷数据计数为0x0001,当R / W = 1时,此段可能不存在,主机从从机读取;
写入寄存器0x0020的单个数据为0x0000,当R/W = 1时,该部分可能不存在,主机从从机读取;
校验和为0x72,校验和=地址字节+寄存器字节+有效负载计数字节+所有有效负载字节,忽略字节溢出。
5.控制寄存器
序号 | 寄存器 | 名称 | 作用 |
---|---|---|---|
1 | 0x0000 | REG_ERR_CODE | 系统状态代码 |
2 | 0x0006 | REG_BAT_VLTG | 输入电压 |
3 | 0x0010 | REG_ADDRESS | 模块地址 |
4 | 0x0012 | REG_OFFSET | 模块测量结果偏移量 |
5 | 0x0020 | REG_MEA_START | 初始测量 |
6 | 0x0022 | REG_MEA_RESULT | 测量结果 |
7 | 0x01BE | REG_CTRL_LD | 激光二极管控制 |
6.控制指令
6.1.读取模块最新状态
字节 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Checksum | |
数据 | 0xAA | 0x80 | 0x00 | 0x00 | 0x80 |
类别:读取命令
从机地址:0x00
寄存器地址:0x0000
作用:主机在执行完上一个命令之后读出模块的状态。
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x80 | 0x00 | 0x00 | 0x00 | 0x01 | 0xYY | 0xZZ | Checksum |
字节0xZZ是从机返回的状态码
6.2.读取硬件版本
字节 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Checksum | |
数据 | 0xAA | 0x80 | 0x00 | 0x0A | 0x8A |
类别:读取命令
从机地址:0x00
寄存器地址: 0x000A
作用:主机读取模块硬件版本信息;
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x80 | 0x00 | 0x0A | 0x00 | 0x01 | 0xVV | 0xYY | sum |
硬件版本号是0xVVYY.
6.3.读取软件版本号
字节 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Checksum | |
数据 | 0xAA | 0x80 | 0x00 | 0x0C | 0x8C |
类别:读取命令
从机地址:0x00
寄存器地址: 0x000C
作用:主机读取模块的软件版本信息;
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x80 | 0x00 | 0x0C | 0x00 | 0x01 | 0xVV | 0xYY | sum |
软件版本号是0xVVYY.
6.4.读取模块序列号
字节 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Checksum | |
数据 | 0xAA | 0x80 | 0x00 | 0x0E | 0x8E |
类别:读取命令
从机地址: 0x00
寄存器地址: 0x000E
作用:主机读取模块序列号;
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | Register | Payload count | Payload | Checksum | ||||
数据 | 0xAA | 0x80 | 0x00 | 0x0E | 0x00 | 0x01 | 0xSS | 0xNN | sum |
硬件版本号是0xSSNN.
6.5.读取输入电压
字节 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Checksum | |
数据 | 0xAA | 0x80 | 0x00 | 0x06 | 0x86 |
类别:读取命令
从机地址: 0x00
寄存器地址: 0x0006
功能:主模块以BCD编码读取模块的输入电压(mV);
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x80 | 0x00 | 0x06 | 0x00 | 0x01 | 0x32 | 0x19 | sum |
输入电压 = 3219mV
6.6.读取测量结果
字节 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Checksum | |
数据 | 0xAA | 0x80 | 0x00 | 0x22 | 0xA2 |
类别:读取命令
从机地址:0x00
寄存器地址:0x0022
功能:主机读取测量结果
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6:9 | 10:11 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/ Address | Register | Payload count | Payload Distance | Payload SQ | Check sum | ||
数据 | 0xAA | 0x00 | 0x00 | 0x22 | 0x00 | 0x03 | 0xAABBCCDD | 0x0101 | Check sum |
6.7.设置模块地址
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x00 | 0x10 | 0x00 | 0x01 | 0x00 | 0xYY | sum |
类别:写入命令
从机地址: 0x00
寄存器地址: 0x0010
功能:主机设置从机地址,该地址在模块断电后不会消失;
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x00 | 0x10 | 0x00 | 0x01 | 0x00 | 0xYY | sum |
从地址设置为0xYY(!!!注意:地址只取位[6:0],其他位将被忽略)。
注意:不要将从机地址设置为广播地址0x7F,该地址预留给一个主机到多个从机网络,它需要
所有从机同时测量距离,并且直到主机要求一个从机测量才会进行测量。
6.8.设置模块测量偏移
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x00 | 0x12 | 0x00 | 0x01 | 0xZZ | 0xYY | sum |
类型:写入命令
从机地址: 0x00
寄存器地址: 0x0012
功能:主机设置从机的测量偏移量。例如,如果偏移量为0xZZYY = 0x7B(+123),则表示测量结果的最终输出将增加123毫米,如果偏移量为0xZZYY = 0xFF85(-123),则表示测量结果的最终输出将减少123毫米。
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x00 | 0x12 | 0x00 | 0x01 | 0xZZ | 0xYY | sum |
6.9.激光开启和关闭
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x01 | 0xBE | 0x00 | 0x01 | 0x00 | 0xZZ | Checksum |
类别:写入命令
从机地址: 0x00
寄存器地址: 0x01BE
功能:开启或者关闭激光, 0xZZ = 0x01 激光开启, 0xZZ = 0x00 激光关闭.
从机返回
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x01 | 0xBE | 0x00 | 0x01 | 0x00 | 0xZZ | Checksum |
6.10开启一次自动模式测量
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x00 | 0x21 |
类别:写入命令
从机地址: 0x00
寄存器地址:0x0020
功能:启动从机在自动模式下进行单次测量
从机返回:
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6:9 | 10:11 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/ Address | Register | Payload count | Payload Distance | Payload SQ | Check sum | ||
数据 | 0xAA | 0x00 | 0x00 | 0x22 | 0x00 | 0x03 | 0xAABBCCDD | 0x0101 | Check sum |
类别:从机返回
从机地址:0x00
寄存器地址:0x0022
功能:将测量结果返回给主机,测量结果= 0xAABBCCDD毫米(帧字节6 = 0xAA,字节7 = 0xBB, 字节8 = 0xCC,字节9 = 0xDD),信号质量= 0x101,信号质量数越小表示激光信号越强, 距离结果越可靠
6.11.开启一次慢速距离测量
字节 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
名称 | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
数据 | 0xAA | 0x00 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x01 | 0x22 |
类别:写入命令
从机地址:0x00
寄存器地址:0x0020
功能:启动从机在慢速模式下进行一次测量
从机返回:同上面的一次自动距离测量
6.12.开启一次快速测量
Bytes | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
Name | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
Data | 0xAA | 0x00 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x02 | 0x23 |
类别:写入命令
从机地址: 0x00
寄存器地址: 0x0020
功能:启动从机在快速模式下进行一次距离测量。
从机返回:同单次自动距离测量。
6.13.开启自动模式连续测量
Bytes | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
Name | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
Data | 0xAA | 0x00 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x04 | 0x25 |
类别:写入命令
从机地址: 0x00
寄存器地址: 0x0020
功能:启动从机在自动模式下进行连续测量。
从机返回:同单次自动距离测量。
6.14.开启慢速模式连续测量
Bytes | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
Name | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
Data | 0xAA | 0x00 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x05 | 0x26 |
类别:写入命令
从机地址: 0x00
寄存器地址: 0x0020
功能:启动从机在慢速模式下进行连续测量。
从机返回:同单次自动距离测量.
6.15.开启快速模式连续测量
Bytes | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
Name | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
Data | 0xAA | 0x00 | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x06 | 0x27 |
类别:写入命令
从机地址: 0x00
寄存器地址: 0x0020
功能:启动从机在块速模式下进行连续测量。
从机返回:同单次自动距离测量。
6.16.从机错误报告
如果在测量阶段发生任何错误,激光测距仪模块将返回错误报告:
Bytes | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
Name | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
Data | 0xEE | 0x00 | 0x00 | 0x00 | 0x00 | 0x01 | 0x00 | 0x0F | 0x10 |
类型:从机返回
从机地址:0x00
寄存器地址:0x0000
功能:向主机报告错误状态,错误码= 0x000F,请参考6.6节错误代码的含义。
6.17.退出连续测量
主机传输一个字节0x58(大写字符'X',)立即停止连续测量模式。
6.18.开启多从机测量
主机向从机地址0x7F发出一次测量命令,这将使所有在线从机同时测量距离,但它们都不会将其测量结果返回给主站,直到主机要求每个从机返回测量结果。在主机发出读取测量结果命令,之前,主机应读取从机的状态码,以确保在从机测量期间不会发生错误。
Bytes | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
Name | Head | RW/Address | Register | Payload count | Payload | Checksum | |||
Data | 0xAA | 0x7F | 0x00 | 0x20 | 0x00 | 0x01 | 0x00 | 0x00 | 0xA0 |
类别:写入命令
从机地址:0x00
寄存器地址:0x0020
功能:启动所有的从机在自动模式下进行单次测量
从机返回:无返回
发送此命令后,主机轮询每个从机地址的状态,如果从机返回以0x0000,则表示没有错误,然后发送读取测量结果命令开始测量距离。每个从机的测量结果不会被覆盖,直到下一个成功的测量命令和新的距离结果。
测量模式
有两种测量模式:单次测量和连续测量。
单次测量一次测量命令一个结果。
如果主机不中断连续测量,连续测量距离结果高达255次,要中断连续测量,主机需要在测量期间发送1个字节的0x58(ASCII中的大写字符'X')。
每种测量模式都有三个工作模式:
自动模式, 模块返回测量结果和信号质量(SQ),较小的SQ值代表更可靠的距离结果,在此模式下模块根据激光反射水平调整读取速度。
慢速模式, 更高的精度。
快速模式,更高频,低精度。
7、状态代码
状态码 | 描述 |
---|---|
0x0000 | 无错误 |
0x0001 | 输入电压过低,输入电压应该大于等于2.2V |
0x0002 | 内部错误,可忽略。 |
0x0003 | 模块温度过低(< -20℃) |
0x0004 | 模块温度过高(> +40℃) |
0x0005 | 测量目标超出量程 |
0x0006 | 无效测量结果 |
0x0007 | 背景光太强 |
0x0008 | 反射信号太弱 |
0x0009 | 反射信号太强 |
0x000A | 硬件错误1 |
0x000B | 硬件错误2 |
0x000C | 硬件错误3 |
0x000D | 硬件错误4 |
0x000E | 硬件错误5 |
0x000F | 反射信号不稳定 |
0x0010 | 硬件错误6 |
0x0011 | 硬件错误7 |
0x0081 | 无效结构 |