[原创] ST VL6180X试用【ST主题月】

lb8820265   2016-6-3 11:00 楼主
     VL6180XSTTOF芯片,可以测量亮度和距离,测试使用的板子是:NUCLEO-F401REX-NUCLEO-6180XA1VL6180X-SATEL
  打开RangingAndALS工程编译烧录,程序中有距离测量光度测量,通过拨码开关切换,
可以在60cm以内精确的测距,在20cm内精度到达1毫米级,20-40cm精度达到2毫米级,40-60cm精度达到3毫米级。如下图:
MVI_1508.MP4_1464920811.gif
  亮度测量如下图:
MVI_1506.MP4_1464920011.gif
      VL6180X可以设置IIC地址,可以通过一个IIC来控制多个VL6180X,烧录代码中的RangingWithSatellites例程,结果如下图:
MVI_1510.MP4_1464920459.gif
      多个VL6180X可以进行简单的手势姿势检测,ST也提供相关的算法,有兴趣的同学可以自己试试。
      VL6180X性能真是甩掉常用的超声波测距和红外测距几条街啊,实测测距相当准确,也不需要进行转换,从寄存器里读出来就是距离值。就是测距距离小了点,不过ST马上要出的VL53L0测距达到200cm,非常期待。

QQ:252669569

回复评论 (18)

想买都联系不到ST啊
http://www.jslaser.com高性价比激光测距传感器
点赞  2016-6-3 11:46
精度还是比较差的,特别是跟激光传感器比起来
http://www.jslaser.com高性价比激光测距传感器
点赞  2016-6-3 11:48
不是有个红外的也能测距的
点赞  2016-6-3 12:12
引用: kangkls 发表于 2016-6-3 11:46
想买都联系不到ST啊

你可以去ST的指定供应商看看,包括:贸泽电子,Digi-Key,力源芯城
QQ:252669569
点赞  2016-6-3 13:46
引用: kangkls 发表于 2016-6-3 11:48
精度还是比较差的,特别是跟激光传感器比起来

如果跟超声波和红外比起来还是不错的,也小巧,精度和距离与激光比起来估计还是不行
QQ:252669569
点赞  2016-6-3 13:48
引用: zfz0122 发表于 2016-6-3 12:12
不是有个红外的也能测距的

红外也是可以用来测距的,你是说的哪款
QQ:252669569
点赞  2016-6-3 13:49
距离太近了。ISL29501红外测距可以到2m
点赞  2016-6-3 15:37
可以申请个过来玩下吗?
各类不锈钢产品加工定制 CNC加工 激光切割 线切割 水切割   生活不易,我要努力。
点赞  2016-6-3 17:38
怎么申请试用?
点赞  2016-6-5 09:04
200cm + 手势姿势会玩的很high!!!!
点赞  2016-6-5 22:41
引用: cat3902982 发表于 2016-6-3 17:38
可以申请个过来玩下吗?

暂时没听说有这款板子的申请,不过可以去ST指定的芯片商城去购买
QQ:252669569
点赞  2016-6-5 23:17
引用: lovedarling 发表于 2016-6-5 09:04
怎么申请试用?

暂时没听说有这款板子的申请,不过可以去ST指定的芯片商城去购买
QQ:252669569
点赞  2016-6-5 23:18
引用: DavidZH 发表于 2016-6-5 22:41
200cm + 手势姿势会玩的很high!!!!

恩,如果是200cm,支持手势的话确实会很好玩,不过这个芯片只能检测到简单的手势比如上滑,左滑等。要是能像kinect和realsence一样支持动作检测,拥有深度视觉那就更好玩了,不过听说realsence的激光阵列技术也是用的ST的相关芯片。
QQ:252669569
点赞  2016-6-5 23:23
你好,请问用ardinuo应该怎么控制VL6180测距呢~~谢谢
点赞  2016-11-2 17:52
引用: zzy999 发表于 2016-11-2 17:52
你好,请问用ardinuo应该怎么控制VL6180测距呢~~谢谢

你说的ardinuo是ST的这个NUCLEO还是那个意大利款的呢?如果是ST的那就方便了,直接有接口使用,如果是那个意大利款的话,需要移植一下库文件,主要是IIC的接口需要重新配置下。
QQ:252669569
点赞  2016-11-2 20:49
引用: lb8820265 发表于 2016-11-2 20:49
你说的ardinuo是ST的这个NUCLEO还是那个意大利款的呢?如果是ST的那就方便了,直接有接口使用,如果是那 ...

我的是Ardinuo mega2560...接口应该如何配置呢?  谢谢!!
点赞  2016-11-3 09:40
引用: zzy999 发表于 2016-11-3 09:40
我的是Ardinuo mega2560...接口应该如何配置呢?  谢谢!!

我不得不说你这个问题问得有点大啊,移植不是一件简单的事,不过我喜欢。
1. 先移植库文件,路径是STM32CubeExpansion_VL6180X_V1.2.0\Drivers\BSP\Components\vl6180x将这个路径下的文件全部复制到你的工程下面就好。
2. 了解IIC接口位置,你需要明白所有的API操作都是在操作IIC,因此只要IIC接口弄好了,基本就没问题了,在vl6180x_i2c.c文件中,你需可以看到VL6180x_I2CWrite和VL6180x_I2CRead是外部调用的,也就是IIC接口处。
3. 重写接口,这两个接口函数可以写在任何地方,例程中写在了main.c中,全部如下:
  1. #define i2c_bus      (&hi2c1)
  2. #define def_i2c_time_out 100
  3. int VL6180x_I2CWrite(VL6180xDev_t dev, uint8_t *buff, uint8_t len) {
  4.     int status;
  5.     status = HAL_I2C_Master_Transmit(i2c_bus, dev->I2cAddr, buff, len, def_i2c_time_out);
  6.     if (status) {
  7.         XNUCLEO6180XA1_I2C1_Init(&hi2c1);
  8.     }
  9.     return status? -1 : 0;
  10. }
  11. int VL6180x_I2CRead(VL6180xDev_t dev, uint8_t *buff, uint8_t len) {
  12.     int status;
  13.     status = HAL_I2C_Master_Receive(i2c_bus, dev->I2cAddr, buff, len, def_i2c_time_out);
  14.     if (status) {
  15.         XNUCLEO6180XA1_I2C1_Init(&hi2c1);
  16.     }
  17.     return status? -1 : 0;
  18. }

这个函数里面的内容,不同的控制器会有不同的IIC接口函数,不过大体差不多,替换为使用的控制器的库函数即可。
4. 简单的API,这个你可以参考例程,或者参考使用API使用说明书,说明书位置STM32CubeExpansion_VL6180X_V1.2.0\Documentation\VL6180X_API_Documentation.chm
这里将里面的简单使用贴出来,详细的请参考文档或例程。
  1. void Sample_SimpleRanging(void)
  2. {    VL6180xDev_t myDev;   
  3. VL6180x_RangeData_t Range;   
  4. MyDev_Init(myDev);           // your code init device variable   
  5. MyDev_SetChipEnable(myDev);  // your code assert chip enable   
  6. MyDev_uSleep(1000);          // your code sleep at least 1 msec   
  7. VL6180x_InitData(myDev);   
  8. VL6180x_Prepare(myDev);   
  9. do {        VL6180x_RangePollMeasurement(myDev, &Range);     
  10.    if (Range.errorStatus == 0 )           
  11. MyDev_ShowRange(myDev, Range.range_mm,0); // your code display range in mm     
  12.    else         
  13.   MyDev_ShowErr(myDev, Range.errorStatus); // your code display error code   
  14. } while (!MyDev_UserSayStop(myDev)); // your code to stop looping
  15. }

QQ:252669569
点赞  2016-11-4 01:17
引用: lb8820265 发表于 2016-11-4 01:17
我不得不说你这个问题问得有点大啊,移植不是一件简单的事,不过我喜欢。
1. 先移植库文件,路径是STM32 ...

楼主好强大!然而我还是有点晕,得好好研究下~ardinuo有个加载库,可是vl6180x下面那些文件都不符合他加载的要求呢
点赞  2016-11-4 12:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复