本文主要介绍VL6180X距离、光线传感器模块的一些基本特点、参数及简单的上手Demo,新手上路,老司 机谨防追尾。
文章的章节编写按照如下顺序进行:
VL6180X开箱体验
基本功能概述
功能简介及说明
Demo上手测试
结语
参考资料
VL6180X开箱体验
VL6180X是一款比较迷你的传感器模块,拿到手后就是这样的,如图1所示:
图1. 开箱图
包装中一共两个,其中一个已经被我强拆了,外包装采用了ST评估板的惯用包装设计,因此还是备有 亲切感的。取出模块后跟一角硬币对比了一下,还是非常短小的,如图2所示:
图2. 模块尺寸对比图
即使如此,该模块还是可以进一步变小,翻看其背面可以看到,VL6180X芯片的供电要求是2.8v,因 此上半身是3.3v->2.8v降压电路,如果不需要电压转换的话,可以从中间一排小孔处将其掰歪,不对,是掰 断。。。 基本功能概述
讲了这么多废话,读者可能还是一脸蒙B:这TM什么玩意?借用ST官方的话说:The VL6180X is a proximity, gesture and ambient light sensor based on ST’s patented FlightSense™ technology. 简单的 说就是:这是一款传感器,它能检测距离及光强度,甚至还有姿态。
因此它的基本特性如下:
1. 距离测量,提供三种量程选择:
a. 量程:20CM,精度:1MM ;
b. 量程:40CM,精度:2MM;
c. 量程:60CM,精度:3MM;
2. 环境光测量,多种采样增益及测量范围调节;
3. 环绕滤波器,滤除强反射物体所带来的测量错误;
4. 偏移校准,保证设备在不同的环境下的准确度。
5. 串扰补偿,使用盖玻片进一步提高距离检测的精确度;
6. 三种采样方式:
a. 轮询下的单次距离测量
b. 非轮询下的单次距离测量
c. 硬件中断下的持续距离测量
功能简介及说明
典型的距离输出特性
理论上来讲,VL6180X的输出值应该与目标物体之间的距离呈线性关系,但实际上并不是酱紫。在黑 暗环境中,测试VL6180X与不同反射率的物体之间的距离,真实距离与实际测量距离的输出对比关系如图3
所示:
图3. 原始测量值与实际值对比
从图3中可知,测量数据的实际输出存在偏移错误,且数据抖动剧烈,其中偏移错误可通过偏移校准 来修正。而为了进一步提高VL6180X的输出精度及稳定性,官方推荐使用盖玻片来增加串扰信号,并在之 后进行串扰补偿来修正盖玻片带来的距离错误。如图4所示:在使用了盖玻片并做了串扰补偿修正后,真实 距离与实际测量距离的误差减少稳定性也进一步增强。
图4. 串扰补偿后的测量值与实际距离对比
捕获收敛时间
需要注意的是,VL6180X计算与物体之间的距离所需要的时间花费并不是固定的,它与测量距离及目 标物体的光反射率有关。如图5所示:在10MM内,模块测量的距离值是无意义的,所花费的转换时间也较 长;而当测量距离逐渐增大后,所花费的时间也逐渐增大,反射率越低,消耗的时间越长。
图5. 收敛时间与测量距离及物体反射率之间的关系
由于收敛时间与物体反射率及无标物体的实际距离有关,因此可以使用简单的收敛估计(Early convergence estimate, ECE)来降低模块的功耗。例如,判断0.5ms内VL6180X模块所接收到的反馈信号 数,当其低于某个理想中的阈值时,可认定在设定的量程内,周围没有检测到有效物体,因此可中止接下 来的测量以节省功耗,如图6所示。反之,当接收到的反馈信号数高于设定的理想阈值时,系统才启动测 量,在这种情况下,只有高反射率的金属物体靠近VL6180X模块时,系统才会开始工作,达到了降低功耗 的效果,如图7所示。
图6. 量程范围内无目标时的阈值设置
图7. 检测金属物体时的阈值设置
环境光传感器模式
VL6180X模块可以在一个相当宽泛的范围内测量所接收到的环境光,其测量的原理为计算单位时间 (100ms)内光孔所接收到的光量,至于为啥是100ms,因为大多数应用都是这么设置的(嗯,手册上说 的)。因此,若要测量不同的光强度,推荐设置模块的测量量程,而不是修改采样时间。
此外模块接收到的实际光量值会受模块光孔的角度影响,如图8所示:模块接收光量的最佳范围在一个 圆锥体内,超过该圆锥体,测量的实际值也会受到较大的影响,整体的值也呈现一个正态分布的效果。
图8. 光孔位置及接收角度示意图
对于偏移校准及串扰补偿方法,此处不再过多详述,始终铭记这是评测,这是评测,不是教程,打住。
Demo上手测试
为试验VL6180X的实际测量效果,此处使用STM32F0308-Discovery开发板驱动该模块,如图9所示:
图9. 评估板测试准备
选好板子连好线后,首先需要建立一个新工程,因此需要去ST官网下载STM32F0308-Discovery的软 件支持包en.stm32cubef0.zip及VL6180X模块的软件支持包ja.STSW-IMG003。为加快测试效率,可以直接 把STM32F0308-Discovery的I2C例程搬过来修改,这样就不用从零开始配置环境了。
完成第一步之后将VL6180X软件支持包中的相关文件导入进工程,这里我们需要添加的文件如图10所示:
图10. 工程文件结构
其中vl6180x_app.x、vl6180x_i2c.x及vl6180x_gpio.x是额外创建的新文件,这几个文件与平台有关, 针对不同的处理器,需要做对应的移植修改。将相应文件添加进来后,再配置工程的头文件路径,完成后 的工程如图xx所示:
接下来要做的就是移植vl6180x到f0308平台,这也是测试过程中的主要工作,描述代码的过程始终觉 得是比较蛋疼的一件事,简单的说,就是:1. 照着例程依葫芦画瓢的修改了I2C的底层驱动代码以及引脚配 置的一些代码;2. 额外增加了一个vl6180x_app.c文件,用于实现4个小demo中的一些打印信息函数及模 块初始化函数。感兴趣的同学可以直接访问我的代码库获取该工程:测试Demo URL
完成上述工作后,编译-烧写-调试-打印,距离测试的打印结果如下:
图11. 距离测试打印
在图11测试过程中,系统上电时用手遮住了传感器,返回错误6,表示没有检测到有效物体(太 近);之后慢慢将手拿开,返回有错误11、13、16,表示模块在量程内未识别有效物体或者目标过多(太 远)。更多的错误详情可查阅模块用户手册。
图12. 光照强度测试打印
在图12的测试中可知,系统上电后检测到了周围的环境光强度,用手遮住后检测值立马下降,模块的 光照强度减弱。
结语
VL6180X是一款专业、精准的传感器模块,不论是距离检测还是环境光检测,其稳定、可靠性要远远 高于普通的超声波模块及光传感器)。因此,其上手难度也高于一般的传感器模块。感兴趣的话,读者不 妨购买回来研究一下,用在自己的玩具小车、飞行器等智能硬件领域也是极好的。
参考资料
本文的编写主要参考了以下相关文档:
1. 《VL6180X-SATEL》:产品描述
2. 《UM1983 User manual》:用户手册
3. 《VL6180X》:数据手册
4. 《VL6180X API Integration Guide》:API编程手册
并参考了以下软件资源:
1. ja.STSW-IMG003 : VL6180X软件支持包
2. en.stm32cubef0.zip:STM32F0308-Discovery软件支持包