自制超紧凑ToF激光雷达测距仪:从原理到硬件实现全解析

📅 2026/8/19 9:18:16
自制超紧凑ToF激光雷达测距仪:从原理到硬件实现全解析
1. 项目概述重新定义“紧凑”的激光雷达测距仪最近在捣鼓一个挺有意思的小玩意儿我把它叫做“超紧凑激光雷达测距仪”。这名字听起来有点唬人但说白了就是一个用激光雷达LiDAR技术来测量距离的设备只不过我把它做得特别小。你可能在扫地机器人、手机或者一些高端汽车上听说过LiDAR它通过发射激光束并接收反射光来精确感知周围环境。但市面上的LiDAR模块要么是用于自动驾驶的大块头价格昂贵要么是精度和量程有限的消费级产品。我这个项目的目标就是在一个巴掌大小甚至更小的空间里塞进一个性能足够强悍、成本相对可控的激光雷达测距方案让它能用在更多对空间和成本敏感的场景里。这东西能干什么想象一下你需要给一个微型机器人装上“眼睛”来避障或者给一个手持设备增加精确测距功能来辅助测量、定位甚至是一些创意互动装置里需要非接触式感知距离。传统的超声波传感器容易受环境影响精度一般而高精度激光测距仪又往往体积大、价格高。这个超紧凑的LiDAR测距仪就是想在这中间找到一个平衡点够小、够准、够快而且自己动手就能做出来。无论你是电子爱好者、机器人开发者还是对嵌入式感知技术感兴趣的工程师这个项目都能给你提供一个从原理到实践、从选型到调试的完整参考。2. 核心方案选型与设计思路拆解2.1 为什么选择ToF LiDAR方案激光雷达测距的核心原理主要有三种三角测量法、相位法和飞行时间法。对于超紧凑的设计目标我几乎没怎么犹豫就选择了飞行时间法。三角测量法就像我们的双眼通过计算发射点和接收点之间的基线长度以及反射光的角度来算距离。它的优势是在近距离比如几厘米到几米精度可以很高但需要精密的机械结构来保证发射器和接收器的相对位置而且随着距离增加精度下降很快光学系统也会变得复杂不利于小型化。相位法则是通过测量发射激光和接收反射光之间的相位差来推算时间进而得到距离。这种方法在中等距离上精度不错但电路比较复杂需要处理高频调制信号对系统的稳定性和抗干扰能力要求高同样不太适合极致紧凑的设计。飞行时间法是最直接暴力的方法发出一束极短的激光脉冲然后掐表等它碰到物体反射回来再被接收到停表。光速是已知的时间差测出来距离就等于光速 × 时间差/ 2。这种方法原理简单测量范围可以从几厘米延伸到上百米甚至更远而且随着集成电路技术的发展高精度的时间测量单元已经可以做得非常小。对于追求小体积、中等以上量程和不错精度的项目来说ToF是目前综合最优解。2.2 核心器件选型激光器与探测器确定了ToF方案接下来就是两个最关键的硬件激光发射器和光电探测器。激光器的选择为了人眼安全和便于集成我选择了波长为905纳米的近红外激光二极管。为什么不是可见光首先近红外光在大多数环境中背景噪声更小太阳光中的红外成分虽然也有但可以通过光学滤波来抑制。其次905nm的激光器技术成熟成本相对较低而且有专门针对此波长的探测器。最重要的是这个波长的激光对人眼相对更安全当然任何激光都不能直视符合消费类产品的安全标准。我选用的是TO-38封装的脉冲式激光二极管它的峰值功率可以做到几十瓦但占空比很低平均功率很小既能保证足够的测程信号强度又利于散热和紧凑设计。探测器的选择与905nm激光器配对我选择了硅基的雪崩光电二极管。APD是一种具有内部增益的光电探测器当加上较高的反向偏压时一个入射光子可以激发出成千上万个电子这种“雪崩”效应极大地提高了探测灵敏度这对于检测从远处物体返回的微弱反射光信号至关重要。我选用的是一款专门针对近红外优化、带有温补电路的APD组件它内部已经集成了前置放大器输出的是模拟电压信号大大简化了我的后续电路设计。注意APD对工作电压非常敏感偏压的微小波动会极大影响其增益和噪声。必须为其配备一个极其稳定的高压电源通常需要几十到上百伏并且要做好电压的精细调节和温度补偿这是整个系统稳定工作的基石。2.3 系统架构设计模拟与数字的边界一个完整的ToF LiDAR测距系统除了激光器和APD还需要驱动电路、时刻鉴别电路、时间测量单元以及主控。我的设计思路是“模拟前端数字核心”。模拟前端负责产生干净的大电流激光脉冲以及放大和整形APD输出的微弱回波信号。这里的关键是速度。激光脉冲要尽可能窄我做到了5纳秒左右上升沿要陡峭这样才能提高时间分辨力。回波信号放大链路的带宽要足够避免信号失真。数字核心的核心是一个时间数字转换器。TDC是专门用来测量极短时间间隔的芯片精度可以达到皮秒级。我的方案是采用一款集成TDC功能的微控制器它内部有专门的高精度时钟和比较器可以直接捕捉模拟前端整形成的回波脉冲的上升沿并与激光发射的触发信号进行时间差计算。这样一颗MCU就同时承担了TDC、逻辑控制和通信接口的任务最大程度地节省了空间和元件数量。整个系统的架构可以概括为MCU触发激光驱动电路发射脉冲同时启动内部TDC计时APD接收到回波后信号经过放大、滤波、比较器整形成数字脉冲这个脉冲输入到MCU的特定引脚触发TDC停止计时MCU计算出时间差换算成距离通过串口或I2C输出。3. 硬件设计与核心电路解析3.1 激光驱动电路如何产生一个干净的纳秒脉冲驱动激光二极管发出高峰值功率的窄脉冲是第一个技术难点。普通的MOSFET开关速度不够脉冲边沿太缓会导致测距精度下降。我采用的是“雪崩晶体管脉冲电路”方案。雪崩晶体管是一种特殊工作状态下的晶体管当集电极-发射极电压超过某个值时它会瞬间进入低阻导通状态产生一个非常快速可达纳秒甚至亚纳秒的电流脉冲。我用它来快速对激光管的寄生电容放电从而激发出一个前沿极陡的激光脉冲。具体电路上用一个较小的MOSFET作为预开关来控制给雪崩晶体管基极的充电电容。当MCU发出一个TTL触发脉冲时预开关导通电容迅速充电至雪崩电压以上触发雪崩晶体管瞬间导通储存在高压电容里的能量在极短时间内通过激光管释放。这里有几个关键参数高压电容C1决定脉冲能量。容量太大脉冲尾巴长太小能量不足。需要根据激光管的特性和所需测程反复试验我最终选用的是100pF的C0G材质电容。限流电阻R1防止瞬间电流过大烧毁激光管。需要根据激光管的峰值电流定额计算。雪崩晶体管选型我选用的是专门用于脉冲电路的型号其雪崩电压一致性好开关速度快。这个电路的PCB布局至关重要。所有相关元件雪崩管、激光管、高压电容必须紧挨着摆放走线要短而粗形成最小的回路面积以减少寄生电感和电磁辐射。驱动电路部分最好用接地铜箔包围起来做屏蔽。3.2 信号调理电路从微安级电流到数字脉冲APD输出的信号非常微弱可能是微安甚至纳安级别的电流脉冲并且混杂着各种噪声。信号调理电路的任务就是把它放大、滤除噪声、整形成一个干净的、时间点明确的数字脉冲送给TDC。我的电路分为三级跨阻放大器第一级至关重要。APD输出的是电流信号我需要先把它转换成电压信号。这里使用了一个高速、低噪声的运算放大器构成跨阻放大器。反馈电阻Rf的值决定了转换增益但同时也和反馈电容Cf一起决定了带宽。Rf不能太大否则带宽窄信号上升沿变缓Cf需要仔细调整以补偿APD结电容和布线电容引起的相位滞后防止电路振荡。我选用的是专门为光电应用设计的高速运放。可变增益放大器/滤波器第二级我使用了一个可编程增益放大器。因为不同距离、不同反射率的物体回波信号强度差异巨大可能相差几个数量级。固定增益要么导致近距离强信号饱和要么导致远距离弱信号淹没在噪声里。通过MCU根据信号强度动态调节PGA的增益可以始终保持信号在最佳处理范围内。这一级同时也集成了一个带通滤波器中心频率设在几十兆赫兹以抑制低频噪声如环境光变化和高频噪声。高速比较器最后一级是一个高速电压比较器。它将放大滤波后的模拟回波信号与一个可调的阈值电压进行比较。当信号超过阈值时输出一个数字上升沿。这个阈值电压的设置是另一个关键点设得太高弱信号无法触发设得太低噪声容易引起误触发。我采用了“动态阈值”技术阈值不是一个固定值而是跟随经过低通滤波后的信号基线即背景噪声水平浮动通常设为基线之上几倍噪声标准差的位置。这可以由MCU的DAC输出控制或者用更简单的电路实现。3.3 电源与低噪声设计对于这样一个包含高速模拟电路和精密测量的系统电源质量是生命线。数字与模拟分离MCU、逻辑电路的电源3.3V/5V必须与模拟运放、比较器、APD偏压的电源完全隔离。我使用了独立的LDO稳压器分别为数字部分和模拟部分供电并在PCB布局上严格划分区域单点接地。APD高压偏置电源这是噪声控制的重点。我使用了一个专门的高压DC-DC模块产生一个基础高压如80V然后通过一个由超低噪声运放构成的精密调节电路输出最终供给APD的偏压。这个调节电路可以接受MCU的DAC控制以实现对APD增益的微调温度补偿的一部分。高压输出端必须并联多个不同容值的电容如10uF钽电容、0.1uF和100pF的陶瓷电容来滤除不同频率的噪声。去耦与布局每一个集成电路的电源引脚旁边都必须紧挨着放置一个0.1uF的陶瓷去耦电容。对于高速运放和比较器有时还需要额外并联一个更小容量如10pF的电容到地以滤除更高频的噪声。所有信号走线特别是从APD到跨阻放大器输入端的走线要尽可能短并用地线包围屏蔽。4. 固件开发与核心算法实现4.1 TDC的配置与时间测量我选用的MCU内部TDC模块其工作原理通常是利用内部的高频振荡器或对系统时钟进行倍频来填充两个事件开始和停止之间的时间间隔。配置的关键点在于时间分辨率和量程的权衡。首先需要校准TDC本身。由于工艺偏差其内部振荡器的频率并非绝对准确。我通过测量一个已知长度的精确延时比如利用另一个定时器产生一个固定脉冲来计算出TDC实际每个计数代表的真实时间值存储为校准系数。在测量循环中固件流程如下配置好TDC设置好触发边沿通常停止信号为上升沿触发。发出激光发射触发信号同时这个信号也作为TDC的开始信号。启动TDC测量并等待停止信号即回波信号中断。在停止信号中断服务程序中读取TDC的计数值。将计数值乘以校准系数得到以秒为单位的飞行时间t。计算距离距离 (光速 * t) / 2。光速取299,792,458 m/s但通常为了计算效率可以预先计算好换算系数。例如时间以纳秒为单位则距离米≈ 0.149896 * t_ns。因为光速是0.299792458 米/纳秒来回除以2就是0.149896229。为了提高精度通常不会只发射一次激光就测一次距。我的做法是进行多次测量取平均。例如连续发射100个脉冲测量100个时间值然后剔除明显的异常值比如因噪声导致的极大或极小值再对剩下的有效值取平均。这能有效抑制随机噪声的影响。4.2 信号处理与噪声抑制算法原始的时间测量数据是充满噪声的直接平均有时效果也不好。我在固件中实现了几个简单的数字信号处理算法直方图统计法对于连续N次测量我把时间值换算成距离值然后统计每个距离区间出现的次数。真实的距离信号会集中出现在某个区间形成一个明显的峰而噪声则是随机分布的。我通过寻找直方图的峰值位置来确定最终的距离。这种方法对于抑制偶尔出现的强噪声脉冲会导致测距值突变特别有效。移动平均滤波对于需要快速连续输出的场景比如机器人避障我会使用一个长度为M的先进先出队列。每次新测到一个距离值就放入队列并剔除最旧的值然后计算队列中所有值的算术平均或中值作为输出。这能保证输出的连续性避免跳变。阈值自适应算法正如硬件部分提到的比较器阈值需要自适应。在固件里我可以实现一个简单的算法在两次正式测距之间插入几次“盲测”——即发射激光但不记录可能由信号触发的停止时间而是采样比较器输入端放大后的信号电平通过MCU的ADC来估算当前的背景噪声水平进而动态调整DAC输出的阈值电压。4.3 通信与系统控制测得的距离数据需要通过一种方式输出。我选择了最通用的异步串口配置为常见的波特率如115200输出格式为简单的ASCII字符串例如D:1.234m\n便于任何上位机电脑、树莓派等读取。此外固件还留出了控制接口。例如可以通过串口发送命令来修改测量模式单次/连续、设置平均次数、调整激光发射功率通过改变驱动电路的电压、或请求读取内部的温度传感器值用于APD温补校准。系统上电后固件会执行一系列初始化校准TDC、初始化APD偏压至安全值、读取温度并应用补偿系数、设置默认的测量参数。然后进入主循环等待外部触发或按照设定频率自动进行测距。5. 机械结构设计与集成5.1 光学路径设计超紧凑的设计光学部分不能复杂。我采用了同轴光路设计。也就是说激光发射光束和接收视场的光轴是重合或近乎重合的。这是实现小体积的关键。具体实现上我使用了一个关键器件分束器/合束器更具体地说是一个针对905nm波长优化的二向色镜。它被放置在与光轴成45度角的位置。发射激光从一侧入射由于二向色镜对905nm激光是高反射的光束被90度转折射向目标。从目标反射回来的905nm回波光沿原路返回穿过二向色镜此时它对905nm是高透的到达后面的APD探测器。这样发射和接收就共享了大部分光路只需要在镜头前留出一个通光孔即可极大地节省了空间。发射激光管和APD探测器可以并排安装在分束器的两侧。5.2 外壳与镜头选择为了保护精密的光电元件并屏蔽杂散光一个不透光的紧凑外壳是必须的。我使用3D打印黑色材料来制作外壳内部涂上消光漆以吸收内部反射。镜头的作用是聚焦。对于发射端需要一个准直透镜将激光二极管发出的发散光变成平行光射出去这样光束能量集中测程更远。对于接收端需要一个汇聚透镜将远处物体反射回来的平行光汇聚到APD那个小小的感光面上提高接收到的光功率。为了简化我常常使用一个单透镜同时服务于发射和接收因为同轴光路选择焦距合适的非球面透镜来减小像差。镜筒的设计要保证透镜、分束器、激光管、APD之间的相对位置精确且稳定。3D打印的零件可能会有微小形变所以我在关键定位处设计了调节机构比如使用带螺纹的镜筒来微调透镜焦距或用垫片来微调分束器的角度。整个机械结构的总尺寸我最终控制在了直径不超过30mm长度不超过50mm的圆柱形内真正实现了“超紧凑”。6. 系统校准、测试与性能优化6.1 校准流程一套校准流程是保证测量精度的必要步骤时间零点校准将测距仪对准一个非常近的、反射率高的目标比如几厘米处的白纸。此时测得的“飞行时间”其实包含了激光驱动电路、信号调理电路、比较器等电子器件内部固有的延时这个时间称为“时间零点偏移”。记录下这个近距离下的测量值t_near理论上它应该接近0但实际上是一个固定值t_offset。后续所有测量结果都需要减去这个t_offset。距离标定在光学平台上设置一系列已知精确距离的目标例如从1米到20米每隔1米一个点。用测距仪测量这些距离得到一组测量值D_measure。用最小二乘法拟合D_measure和真实距离D_real的线性关系D_real a * D_measure b。系数a和b就包含了光速常数、时间零点偏移、镜头光学中心偏移等所有系统误差。将a和b存入固件每次计算距离时应用此公式进行修正。温度补偿APD的增益、激光器的波长和输出功率、甚至电路元件的参数都会随温度变化。我在板子上集成了一个高精度数字温度传感器。在不同环境温度下例如5°C, 25°C, 45°C重复上述距离标定得到多组a(T)和b(T)系数。在固件中建立一个查找表或拟合出一个温度补偿公式实时根据温度修正测量结果。6.2 性能测试与瓶颈分析搭建好原型后我对其进行了系统测试测程在晴朗白天对不同反射率的物体从18%灰卡到反光板进行测试。对于标准白板反射率约80%最大测程达到了35米精度开始下降对于低反射物体如深色布料测程约为10-15米。精度与重复性在10米距离上对准固定目标连续测量1000次统计结果的标准差。在室内稳定环境下单次测量精度1σ可以达到±3毫米重复性多次测量的一致性非常好。速度测量速率取决于激光脉冲的重复频率和信号处理时间。我的驱动电路和MCU处理能力允许最高1kHz的脉冲频率但为了信噪比通常工作在500Hz。这意味着每秒可以输出500个距离数据点对于大多数动态场景足够了。测试中发现的主要瓶颈和优化点环境光干扰在室外强阳光下APD会接收到大量太阳光背景噪声虽然光学滤镜可以滤掉大部分非905nm的光但同波段内仍有噪声。这会导致信噪比下降尤其是在测量远距离弱信号时。优化方法是进一步收窄光学接收视场角并使用更窄带宽的光学干涉滤光片。多径干扰当激光束打到透明玻璃或光滑斜面时可能会产生多次反射导致接收到两个或多个回波脉冲TDC可能捕捉到错误的边沿。这在算法上可以通过分析回波脉冲形状或设置合理的距离门限来部分解决。功耗与发热脉冲激光器在发射瞬间电流很大虽然平均功耗不高但在高频率工作时局部发热仍需要注意。紧凑的结构不利于散热长时间连续工作可能需要降低频率或引入散热片。7. 应用场景拓展与未来改进思考这个自制的超紧凑LiDAR测距仪虽然性能比不上万元级的工业产品但其在成本、体积和定制灵活性上的优势非常明显。一些直接的应用想法微型机器人/无人机避障直接集成到机身上作为前向或下视的测距传感器实现定高、避障。手持式智能测距工具结合一个显示模块和蓝牙做成一个便携的电子尺用于装修、工程测量。互动装置与艺术检测观众的位置和移动触发灯光、声音或投影的变化。工业自动化作为小型设备上的到位检测、料位检测或简单尺寸测量传感器。基于现有原型的改进方向片上集成目前还是分立元件居多。未来可以考虑使用高度集成的ToF传感器芯片这类芯片将VCSEL激光器、SPAD探测器阵列、TDC和处理器都集成在一个封装内体积可以做得更小但成本和可定制性会受限。多像素与扫描目前是单点测距。如果想获得二维的“线”或三维的“面”信息可以增加激光器和探测器的数量变成一维阵列或者给现有的单点系统加上一个旋转扫描镜。这会让系统复杂很多但信息量也呈指数级增长。算法升级引入更先进的数字信号处理算法比如小波变换去噪、卡尔曼滤波跟踪运动目标等可以进一步提升在复杂环境下的稳定性和精度。无线化与低功耗集成低功耗蓝牙或LoRa模块做成电池供电的无线传感器节点应用场景会更广阔。折腾这个项目的整个过程就像在做一个精密的电子工艺品。从原理图上一根线的纠结到PCB上一个个元件的焊接再到调试时示波器上终于出现那个干净的回波脉冲最后看着串口助手稳定地输出距离数据——这种把抽象原理变成实体功能并不断优化它、挑战其极限的过程充满了工程师独有的乐趣。它可能不会成为一个商业产品但其中涉及的模拟电路设计、高速数字处理、光学机械集成和系统校准的整套经验是任何教科书都给不了的。如果你也对光电测量感兴趣不妨从这样一个具体的项目入手相信你收获的会远不止一个测距仪。