文章目录
- 一、GY-56 简介
- 二、引脚功能
- 三、通信协议
- 1.串口协议: 当 GY-56 PS 焊点开放时候使用(默认)
- (1)串口通信参数(默认波特率值 9600bps)
- (2)模块输出格式,每帧包含 8-13 个字节(十六进制)
- (3)命令字节,由外部控制器发送至 GY-56 模块(十六进制)
- 2.IIC协议:当 GY-56 模块硬件 PS 焊点焊上时候使用,CT 为 SCL,DR 为 SDA
- 四、SET、OUT 引脚使用说明
- 五、串口模式下 GY56 模块校准说明
- 六、测试现象及程序
- 1.串口模式直接输出
- 2.IIC模式OLED显示(PS焊点短接)
- (1)程序
- (2)现象
一、GY-56 简介
GY-56 模块由测距传感器(VL53L0X)和一个 MCU 组成 。工作电压 3-5v,功耗小,体积小,安装方便。 其工作原理是,红外 LED 发光,照射到被测物体后,返回光经过 MCU 接收,MCU 计算出时间差,得到距离。此模块,有两种方式读取数据,即串口 UART(TTL 电平)+IIC(2 线)模式,串口的波特率有 9600bps 与 115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。GY-56 可以设置上下限距离报警值,开关量输出,在设定的区间内有被测物体挡住,直接输出高电平。IIC 模式下,如果需要,可以设置内部 IIC 地址不同,以便多个传感器直接接在同一个总线。
二、引脚功能
VCC | 电源正极 (3v-5v) |
---|---|
GND | 电源地 |
CT | 串口 USART_TX / IIC_SCL |
DR | 串口 USART_RX / IIC_SDA |
SET | 设置上下限距离报警值(电压 0~3.3V) |
OUT | 报警值状态输出 |
三、通信协议
1.串口协议: 当 GY-56 PS 焊点开放时候使用(默认)
(1)串口通信参数(默认波特率值 9600bps)
波特率:9600 bps 校验位:N 数据位:8 停止位:1
波特率:115200 bps 校验位:N 数据位:8 停止位:1
(2)模块输出格式,每帧包含 8-13 个字节(十六进制)
①.Byte0: 0x5A 帧头标志
②.Byte1: 0x5A 帧头标志
③.Byte2: 0x15 本帧数据类型
④.Byte3: 0x03 数据量
⑤.Byte4: 0x00~0xFF 数据前高 8 位
⑥.Byte5: 0x00~0xFF 数据前低 8 位
⑦.Byte6: 0x00~0xFF 模块测量模式
⑧.Byte7: 0x00~0xFF 模块温度
⑨.Byte8: 0x00~0xFF 校验和(前面数据累加和,仅留低 8 位)
数据计算方法:
距离长度计算方法
Distance= (Byte4<<8) | Byte5 单位 cm
Mode= Byte6
Temp= Byte7(MCU 温度)
例:一帧数据
< 5A-5A-15-04-00-0A-02-1A-F3>
Distance =(0x00<<8)|0x0A =10cm
Mode=2 高精度模式
Temp=0x1A=26℃
(3)命令字节,由外部控制器发送至 GY-56 模块(十六进制)
命令格式:0xA5+功能指令+指令值+sum
例 1:设置串口连续输出数据,(如需掉电保存,请发送掉电保存指令)
连续输出指令=0xA5+0x65+0x01+0x0B
例 2:设置在 10cm-50cm 的区间范围内 OUT 引脚输出高电平(如需掉电保存,请发送掉电保存指令)
设置上限阀值 50CM=0xA5+0x98+0x32+0x6F
设置下限阀值 10CM=0xA5+0xA9+0x0A+0x58
例 3: 掉电保存指令 = 0xA5+0x87+0x01+0x2D
2.IIC协议:当 GY-56 模块硬件 PS 焊点焊上时候使用,CT 为 SCL,DR 为 SDA
IIC 时钟:250K 以下,模块默认 8bit IIC 地址为 0XE0,1bit write:0,1bit read: 1
四、SET、OUT 引脚使用说明
为了便于表示在此特此声明如下:
S 表示模块与被测物体之间的距离;
S1 表示设定的最大警界阀值(上限阀值);
S2 表示设定的最小警界阀值(下限阀值);
S3 表示解除最大警界状态值;S3 和 S1 的关系,S3+3≤S1。例如 S1=100,则 S3≤97;
S4 表示解除最小警界状态值;S4 和 S2 的关系,S4-3≥S2。例如 S2=50,则 S3≥53;
OUT 引脚的状态为高电平和低电平两种。高电平表示 S2<S<S1;低电平表示 S>S1 或 S<S2。
1、OUT 由高电平变低电平。当模块 S>S1 或 S<S2 时,OUT 引脚变成低电平,模块 LED灯将由亮变灭。
2、OUT 由低电平变高电平。当 S>S1,让 S≤S3 时(即当实际距离低于最大警界阀值 3cm时),OUT 引脚由低电平变高电平,模块 LED 灯将由灭变亮。当 S<S2,让 S≥S4 时(即当实际距离大于最小警界阀值 3cm 时),OUT 引脚由低电平变高电平,模块 LED 灯将由灭变亮。设置最大警界阀值:可通过发送指令外,也可通过 SET 引脚手动来设置。
1、模块连续输出模式下,例如设置最大警界阀值 S1 为 100cm,则将模块放置在据被测物体 97cm 的位置进行 SET 引脚设置,或者发送指令:(A5 98 64 A1)0x64 是十进制的 100。
2、手动 SET 引脚接入 3.3V 高电平,大约 3 秒,待模块 LED 指示灯闪速 2 下,此时断开 SET 引脚 3.3V 连接,断开后大约 5 秒,待 LED 闪烁 3 下,则设置成功。如果 LED 闪烁 4
下,表示设置失败。失败原因有两种,一种是,接入高电平时间不够,另一种是设置的距离值小于最小警界阀值。 设置最小警界阀值:可通过发送指令外,也可通过 SET 引脚来设置。
1、模块连续输出模式下,例如设置最小警界阀值 S2 为 50cm,则将模块放置在据被测物体 53cm 的位置,进行 SET 引脚设置, 或者发送指令:(A5 A9 32 B2)0x32 是十进制的 50。
2、手动 SET 引脚接入 GND,大约 3 秒,待模块 LED 指示灯闪速 2 下,此时断开 SET 引脚 GND 连接,断开后大约 5 秒,待 LED 闪烁 3 下,则设置成功。如果 LED 闪烁 4 下,表示设置失败。失败原因有两种,一种是,接入低电平时间不够,另一种是设置的距离值大于最大警界阀值。
五、串口模式下 GY56 模块校准说明
串口下 GY56 模块校准说明:
1、SPADs 修正: 当测距传感器上方被透明材质物体覆盖,模块需进行一次该修正,并上电后加载 SPADs 修正参数。默认情况下,模块在每次上电后会进行一次 SPADs 修正操作,如用户手动执行一次 SPADs 修正后,设置了上电加载 SPADs 修正参数则模块不进行上电后 SPADs 修正操作,这样可以缩短模块初始化时间;通过上位机发送十六进制 A5 0A 01 B0 给模块,模块 LED 亮起,待熄灭校准完成。
2、温度修正:当模块工作环境温度变化超过 8 摄氏度,测距传感器灵敏度会发生改变,需进行一次温度修正;默认情况下,模块在每次上电后会进行一次温度修正操作,如模块工作环境温度恒定,可进手动进行一次温度修正后,设置模块上电后加载温度修正参数,这样可以缩短模块初始化时间;如用户开启了自动温度修正,则模块根据 MCU 温度超过 8度后,自行进行一次温度修正;通过上位机发送十六进制 A5 10 01 B6 给模块,模块 LED亮起,待熄灭校准完成。
3、偏差校准:当模块测距值与实际值之间存在一个固有的偏差时,可执行此操作。偏差校准的指令=0xA5+0x21+指令值+sum,指令值为实际距离值。例如:模块测距值为13CM,而实际值为 10CM,则指令中的指令值为十进制的 10;如需重新上电后加载该补偿值,需设置上电后加载偏差校准参数。通过上位机发送十六进制指令给模块,模块 LED 亮起,待熄灭校准完成。
4、窗口校准:当测距传感器上方被透明材质物体覆盖,模块在全量程测距的值不是线性的情况下,执行该操作。如下图所示:
X 轴为实际值,Y 轴为测量值。绿色虚线说明该材质对测距无影响或是传感器表面无任务材质覆盖,蓝色线表明为轻度影响,红线为中度影响,绿色实线为重度影响。窗口校准的指令=0xA5+0x32+指令值+sum;指令值的选取:使用 17%灰色的反射率目标,则设模块与被测目标的距离为 S。对于轻度影响的情况下,参见下图左侧蓝线,只要 S 在 AB 之间即可。指令值为实际距离值。中度影响的选取右测红线 AB 之间区域。如需重新上电后加载该补偿值,需设置上电后加载窗口校准参数。通过上位机发送十六进制指令给模块,模块 LED 亮起,待熄灭校准完成。
六、测试现象及程序
1.串口模式直接输出
Distance =(0x00<<8)|0x14 =20cm
2.IIC模式OLED显示(PS焊点短接)
(1)程序
main.c
#include <STC89C5xRC.H>
#include <delay.h>
#include <IIC.H>
#include <oled.H>void Read_VL53L0(unsigned int * distance)//读VL53L0
{unsigned char REG_data[2]={0,0};IIC_Start();IIC_SendByte(0xE1);IIC_ReceiveAck();//这里没有对应答做判断delay_1us(50);REG_data[0] = IIC_ReceiveByte();IIC_SendAck(0);REG_data[1] = IIC_ReceiveByte();IIC_SendAck(1);IIC_Stop();distance[0]=REG_data[0]<<8|REG_data[1];
}void Write_VL53L0()//写VL53L0
{IIC_Start();IIC_SendByte(0xE0);IIC_ReceiveAck();delay_1us(40);IIC_SendByte(0x51);//发送测量命令IIC_ReceiveAck();delay_1us(40);IIC_Stop();
}
void main()
{unsigned int diatance=0;OLED_Init();//初始化OLEDOLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示OLED_Clear();//清屏Delay_x_ms(1000);//系统启动延时while(1){Write_VL53L0();Delay_x_ms(500);//测量转化延时Read_VL53L0(&diatance);OLED_ShowString(70,3,"cm",16);OLED_ShowNum(40,3,diatance,3,16);Delay_x_ms(1000);}
}
(2)现象
盒子放置于直尺15cm以及20cm位置测试,OLED 分别显示距离 15cm 及 20cm
本文测试结束,需要整个资料工程的可以在评论区留言邮箱哦!