简介
TFS20-L是一款全集成单通道dToF测距小型模组,集成高灵敏红外增强SPAD传感器,量程可达20m。采用SPAD芯片全集成方案、直方图统计算法以及快速TDC架构等,实现高精度测距的同时,具备15m@100 Klux的抗阳光能力,并具有反射率校正功能。
小体积,高性能
尺寸小、重量轻、测得准而远,强环境光下测距能力依旧优异,是微小型dToF应用的绝佳选择。
功能丰富,应用场景广
TFS20-L集成电源模块,采用3.3 V单电源供电,内置温度补偿功能。支持I2C、UART接口,易于集成和使用,并采用紧凑可靠的光学封装,适用于无人机定高、无人机辅助降落、机器人防跌落,智能设备触发。
特性
- 体积小、重量轻,易集成
 - 抗环境光强,室内外皆可稳定测量
 - UART、I2C、两种种输出方式
 
应用场景
- 无人机定高
 - 无人机辅助降落
 - 机器人防跌落
 - 智能设备触发
 
技术规格
- 性能参数
- 测量范围:0.2-20m@90%反射率0Klux,0.2-12m@10%反射率0Klux,0.2-15m@90%反射率100Klux,0.2-9m@10%反射率100Klux
 - 准确度:±6cm@0.2-6m,1%@≥6m
 - 精度:2cm(0.2-6m)
 - 距离分辨率:1cm
 - 帧率:0/20/50/100(默认)/250Hz
 - 抗环境光能力:100Klux
 
 - 光学性能
- 光源:VCSEL
 - 中心波长:905nm
 - 视场角:<2°
 - 激光安全等级:Class 1 Eye-safe [EN60825]
 
 - 机械电气参数
- 平均功耗:≤0.43W
 - 峰值电流:< 130mA@3.3V
 - 供电电压:DC 3.3±9%V
 - 通信电平:LVTTL(3.3V)
 - 工作温度:-20℃ ~ +60℃
 - 存储温度:-40℃ ~ +85℃
 - 尺寸:21x15x7.87mm
 - 重量:1.35g
 - 硬件接口:0.8mm-6Pin(型号WF08006-01207)
 
 
引脚示意图
| 线序 | 颜色 | 功能描述 | 
|---|---|---|
| PIN1 | 红线 | 3.3V激光器供电 | 
| PIN2 | 黑线 | 3.3V电源正极 | 
| PIN3 | 黄线 | TXD(3.3V)/SDA | 
| PIN4 | 绿线 | RXD(3.3V)/SCL | 
| PIN5 | 蓝线 | GPIO 通信片选 | 
| PIN6 | 白线 | GND | 
TFS20-L通过硬件切换输出模式,PIN5接地为UART模式,PIN5悬空为I2C模式。
尺寸图
接入Arduino使用教程
硬件准备
- Arduino UNO R3开发板 x1
 - Arduino UNO IO 传感器扩展板 x1
 - TFS20-L LiDAR x1
 - 0.8mm转2.54mm杜邦连接线x1
 
 
软件准备
- 下载Arduino IDE: 点击下载Arduino IDE
 - 下载DFRobot_TFmini库,该库为TF系列单点激光雷达通用库。
 
UART模式硬件连接
TFS20-L 5脚接GND为UART模式,将Arduino UNO R3开发板的VCC电压调至3.3V,TFS20-L 切勿5V供电,长时间5V供电发烫。

演示代码
#include <DFRobot_TFmini.h>
SoftwareSerial mySerial(8, 9); // RX, TX
DFRobot_TFmini  TFmini;
uint16_t distance, strength;
void setup() {
  Serial.begin(9600);
  TFmini.begin(mySerial);
}
void loop() {
  if (TFmini.measure()) {                    
    distance = TFmini.getDistance();       
    strength = TFmini.getStrength();       
    Serial.print("Distance = ");
    Serial.print(distance);
    Serial.println("cm");
    Serial.print("Strength = ");
    Serial.println(strength);
    delay(100);
  }
  delay(100);
}
结果
打印采集到的距离值、信号强度值。

I2C模式硬件连接
TFS20-L 5脚悬空为I2C模式,将Arduino UNO R3开发板的VCC电压调至3.3V,TFS20-L 切勿5V供电,长时间5V供电发烫。

演示代码
#include <Wire.h>
#define deviceaddress 0x10
uint16_t data;
uint8_t COM[4] = { 0 };
uint8_t COM1[1] = { 0 };       
uint8_t COM2[1] = { 0x64 };   //帧率值,默认100hz
uint8_t COM3[1] = { 0x01};    //保存寄存器
uint8_t COM4[1] = { 0x02};    //重启寄存器
void i2c_writeN(uint8_t registerAddress, uint8_t *buf, size_t len) {
  Wire.beginTransmission(deviceaddress);
  Wire.write(registerAddress);
  Wire.write(buf, len);
  Wire.endTransmission();
}
int16_t i2c_readN(uint8_t registerAddress, uint8_t *buf, size_t len) {
  uint8_t i = 0;
  Wire.beginTransmission(deviceaddress);
  Wire.write(registerAddress);
  if (Wire.endTransmission(false) != 0) {
    return -1;
  }
  Wire.requestFrom(deviceaddress, len);
  delay(100);
  while (Wire.available()) {
    buf[i++] = Wire.read();
  }
  return i;
}
void setup() {
  Wire.begin();
  Serial.begin(9600);
  /*
   * 修改并保存寄存器,需要修改帧率时打开
   */
  // i2c_writeN(0x26, COM2, 1);
  // delay(200);
  // i2c_writeN(0x20, COM3, 1);
  // delay(200);
  // i2c_writeN(0x21, COM4, 1);
}
void loop() {
  i2c_readN(0x00, COM, 2);
  data = COM[1] << 8 | COM[0];
  delay(200);
  i2c_readN(0x26, COM1, 1);
  Serial.print("Distance =");
  Serial.print(data);
  Serial.print(" cm");
  Serial.print("  FPS =");
  Serial.print(COM1[0]);
  Serial.println(" hz");
  delay(100);
}
结果
打印采集到的距离值、帧率值。

常见问题
- UART、I2C输出模式通过5脚GPIO进行切换
 - TFS20-L工作电压3.3V,切勿5V供电,容易发烫