低成本单发单收激光测距传感器方案 低成本单发单收激光测距全套方案,包括原理图、源代码、PCB、BOM、光学部分资料,结构、特殊元件数据手册及供应商联系方式,提供调试技术文档。 全套方案已成功打板验证,实现0.05~50m测量范围,精度在+/—1.5mm,激光波长635~650nm,功率《1mW。 方案预留了SPI LCD显示屏接口、按键接口、TTL串口,可通过串口助手看到测量数据,可自行DIY或者商业开发。
概述
本文基于一套完整的低成本单发单收激光测距传感器嵌入式软件方案,深入剖析其系统架构、核心模块设计与关键算法流程。该方案面向资源受限的 STM32F1 系列微控制器(Cortex-M3 内核),采用相位式测距原理,通过高精度模拟信号采集、数字信号处理与闭环控制,实现厘米级距离测量能力。系统集成了激光驱动、模拟前端、ADC 采样、DMA 传输、数字滤波、相位解算、自动增益控制(AGC)及通信接口等关键功能,整体设计兼顾性能、稳定性与成本控制。
系统架构
整个软件系统采用模块化设计,主要划分为以下层次:
- 硬件抽象层(HAL):基于 ST 官方 STM32F10x 标准外设库(StdPeriph),对 MCU 外设(如 ADC、TIM、DMA、GPIO、I2C、USART)进行初始化与配置。
- 驱动层:封装具体硬件模块的控制逻辑,包括激光发射控制、APD(雪崩光电二极管)偏置电压调节、PLL(锁相环)频率合成器通信等。
- 核心算法层:实现信号采集、Goertzel 算法相位提取、多频解模糊、温度与幅度补偿等核心测距逻辑。
- 应用层:负责系统初始化、主测量循环、状态机管理及与上位机的通信。
系统主循环采用“触发-采集-处理-输出”的工作模式,确保测量过程的确定性与时效性。
核心功能模块详解
1. 高精度同步信号采集系统
系统采用定时器触发 + ADC 扫描 + DMA 传输的三重协同机制,实现对回波信号与参考信号的高同步、低抖动采集。
- 触发源:由高级定时器(TIM1)产生精确的 PWM 信号,一方面驱动激光发射,另一方面作为 ADC 的外部触发源,确保每次采样都与激光脉冲严格同步。
- ADC 配置:ADC 工作在扫描模式与非连续转换模式。每次触发后,ADC 依次对两个通道(回波信号
ADCSIGNAL与参考信号ADCREF_CHANNEL)进行一次转换。 - DMA 传输:DMA 被配置为单次传输模式(Normal Mode),将 ADC 转换结果自动搬运至预分配的内存缓冲区(如
adccapturebuffer1)。传输完成后,DMA 产生中断,通知 CPU 采集完成,从而解放 CPU 资源,避免轮询开销。
该设计有效规避了 CPU 干预带来的时序不确定性,为后续高精度相位计算奠定了数据基础。
2. 相位式测距与多频解模糊
系统采用相位式测距法,其基本原理是通过测量发射光与回波光之间的相位差来推算距离。
- 单频测量:对于单一调制频率
SIGNAL_FREQ(如 5kHz 或 10kHz),系统通过Goertzel 算法从采集到的离散信号中高效地提取出该频率分量的相位与幅值。Goertzel 算法相比 FFT 计算量更小,特别适合单频点检测。 - 零点校准:在实际测量前,系统会执行零相位偏移校准(
zerophaseXcalibration),以消除电路固有延迟引入的系统误差。 - 多频解模糊:单频测量存在半波长模糊问题(最大无模糊测距范围为
c/(2*f))。为扩展量程,系统支持双频或三频测量模式。通过在多个相近频率(如 1200Hz, 1201Hz, 1202Hz)下分别测量相位,利用中国剩余定理或相位差法解算出真实的、无模糊的距离值(tripledistcalculaton函数)。
3. 自动增益控制(AGC)与环境适应性
为应对不同目标反射率、距离变化导致的回波信号强度剧烈波动,系统实现了基于APD 偏置电压调节的 AGC 机制。
- 信号强度监测:每次测量后,系统会评估回波信号的幅值(
current_amplitude)。 - 闭环调节:若信号过强(可能饱和),则降低APD 的偏置电压;若信号过弱,则升高偏置电压。该调节通过 I2C 接口控制一个外部 DAC 或 DC-DC 模块来实现。
- 防抖与迟滞:AGC 算法内置了时间延迟(
aptagctimer)和电压变化阈值,防止在临界点附近频繁抖动,保证系统稳定性。
此外,系统还集成了温度补偿功能,根据板载温度传感器读数对相位结果进行修正,以抵消温度漂移对光学和电子元件的影响。
4. 外设与通信
- PLL 频率合成器控制:系统通过 I2C 总线与一个外部 PLL 芯片通信,用于精确生成激光调制所需的高频信号。软件提供了完整的寄存器配置与频率切换流程(
pllsetfrequency_X)。 - 串口通信:通过 USART 接口(波特率高达 256000)与上位机进行数据交互,可上报距离、幅值、状态等信息,并接收校准、配置等指令。
- 系统时钟:精心配置了 RCC(复位与时钟控制)模块,将系统主频稳定在 24MHz,为 ADC、定时器等外设提供精确的时钟源。
工作流程
- 系统上电初始化:配置时钟、GPIO、USART、I2C、ADC、TIM、DMA 等所有外设。
- PLL 与激光初始化:配置 PLL 输出所需频率,开启激光与各路电源。
- 进入主循环:
a.准备采集:根据当前测量模式(单频/多频),配置 ADC 和 DMA 指向对应的缓冲区。
b.触发测量:启动 TIM1,开始一轮激光发射与信号采集。
c.等待完成:CPU 进入低功耗模式或处理其他任务,等待 DMA 传输完成中断。
d.数据处理:在中断服务程序或主循环中,对采集到的数据进行 Goertzel 分析、相位校准、AGC 判断。
e.距离解算:如果是多频模式,汇集所有频率的相位结果,调用tripledistcalculaton进行最终距离计算。
f.输出与反馈:通过串口发送测量结果,并根据 AGC 逻辑调整 APD 电压。 - 循环执行:重复步骤 3,实现连续测距。
总结
该低成本激光测距方案的软件设计体现了嵌入式系统开发的典型思路:在有限的硬件资源下,通过精巧的软硬件协同、高效的算法和稳健的控制逻辑,实现了高性能的测量功能。其模块化、低耦合的设计也便于后续的功能扩展与维护,为同类产品的开发提供了宝贵的参考范例。
低成本单发单收激光测距传感器方案 低成本单发单收激光测距全套方案,包括原理图、源代码、PCB、BOM、光学部分资料,结构、特殊元件数据手册及供应商联系方式,提供调试技术文档。 全套方案已成功打板验证,实现0.05~50m测量范围,精度在+/—1.5mm,激光波长635~650nm,功率《1mW。 方案预留了SPI LCD显示屏接口、按键接口、TTL串口,可通过串口助手看到测量数据,可自行DIY或者商业开发。