激光尺如何测量:逆向工程

激光轮盘如何运作

激光尺如何测量:逆向工程_第1张图片
大多数激光卷尺使用相位而不是脉冲(飞行时间,TOF)距离测量方法。

为了本文的完整性,我将引用上一篇文章的部分理论:

激光尺如何测量:逆向工程_第2张图片在相位方法中,与脉冲方法相反,激光器始终工作,但是其辐射是由特定频率(通常是低于500 MHz的频率)的信号进行幅度调制的。请注意,激光波长保持不变(在500-1100 nm范围内)。

从物体反射的辐射被光电探测器接收,并将其相位与来自激光器的参考信号的相位进行比较。波传播中存在延迟会产生相移,该相移由测距仪测量。

距离由以下公式确定:

 

d=C2F⋅φ2π

 

其中c是光速,f是激光器的调制频率,phi是相移。

仅当到物体的距离小于调制信号波长的一半(等于c / 2f)时,此公式才有效。

如果调制频率为10 MHz,则测得的距离可达15米,并且当距离从0变为15米时,相位差将从0变为360度。在这种情况下,相移每变化1度就相当于物体位移约4厘米,

如果超过此距离,就会产生 歧义 -无法确定多少波周期适合测量距离。为了解决模糊性,切换激光器的调制频率,然后求解所得的方程组。

最简单的情况是使用两个频率,在较低的频率下它们确定到物体的距离(但最大距离仍然有限),在较高的频率下它们以所需的精度确定距离-在测量相移时具有相同的精度,在使用高频时,测量距离的精度会明显更高。

由于存在相对简单的方法来高精度地测量相移,因此在这种测距仪中的距离测量精度可以达到0.5 mm。这是用于要求高测量精度的测距仪的相位原理-大地测距仪,激光卷尺,安装在机器人上的扫描测距仪。

但是,该方法也有缺点-持续工作的激光器的辐射功率明显低于脉冲激光器的辐射功率,这不允许使用相位测距仪来测量大距离。此外,具有所需精度的相位测量可能会花费一定的时间,这会限制仪器的性能。


如上所述,要提高精度,您需要增加激光辐射的调制频率。但是,很难测量两个高频信号之间的相位差。因此,相位测距仪经常使用外差信号转换。这种测距仪的框图如下所示。这就是我正在考虑的激光卷尺的设计方式。

激光尺如何测量:逆向工程_第3张图片

测距仪包括两个高频发生器,可产生两个接近频率的信号。来自其中一个的信号被馈送到激光器,来自另一个(外差)的信号与光电探测器接收到的信号相乘。所得信号被馈送到低通滤波器(LPF),以便仅差频保留在滤波器的输出端。该信号的幅度非常小,必须先放大后再馈入微控制器。值得注意的是,制造高增益的低频放大器要比高频放大器容易得多,这也是外差电路的一个优点。

既然是相位差是在相位测距仪测得信号,那么在设计中需要另一个信号-参考信号。它是通过将两个发生器的信号相乘而获得的。测距仪微控制器处理两个最终产生的低频信号,并计算它们之间的相位差。

值得一提的是,雪崩光电二极管(APD)在大多数激光测距仪中用作光电探测器。它们具有自己的内部信号放大,从而降低了对测距仪放大单元的要求。这种光电二极管的增益非线性地取决于电源电压。因此,如果用本地振荡器信号调制APD电源电压,则信号的混合(乘法)直接发生在光电二极管本身中。这使得可以简化测距仪的设计并减少噪声的影响。

同时,雪崩光电二极管具有许多缺点。这些包括:
 

  • 电源电压必须足够高-一百伏或更高。
  • 参数对温度的强烈依赖性。
  • 成本很高(与其他光电二极管相比)。

 

激光卷尺的逆向工程


激光尺如何测量:逆向工程_第4张图片作为测试样本,我使用了在Aliexpress上找到的50M DIY测距仪套件(右侧是打开的卷尺的照片)。据我了解,这是X-40激光轮盘的内部组件(现在您可以以20美元的价格找到它)。我之所以选择该套件,是因为该装置的电子部件可以在其照片中看到。根据我掌握的信息,该轮盘赌的电路非常接近U-NIT UT390B +轮盘赌以及其他中国激光轮盘赌和激光测距仪模块的电路。

在测试过程中,我只能在10 m的距离处检查卷尺的运行情况,这非常困难,测量时间超过5秒。我怀疑她甚至无法测量20米的距离,更不用说制造商宣布的50 m了。

这种轮盘赌的设计是什么? 从照片中可以看到,这非常简单。从结构上讲,卷尺由激光测距仪单元,指示器和带按钮的面板组成。显然,最有趣的是测距仪单元。这就是它看起来的样子: 在电路板的顶部,有两个主要的测距仪微电路-STM32F100C8T6微控制器和Si5351双PLL发生器。该微电路能够产生两个频率高达200 MHz的信号。由她构成调制激光的信号和本地振荡器信号。电路板的这一侧还包括混频器和参考滤波器(REF)以及高压APD组件的一部分(上图)。 这是测距仪模块的底部:

激光尺如何测量:逆向工程_第5张图片



激光尺如何测量:逆向工程_第6张图片





激光尺如何测量:逆向工程_第7张图片

从照片中可能不清楚,但实际上您可以看到两块印刷电路板-第二块很小,并且垂直固定。在这张照片中,您可以清楚地看到小型扬声器激光二极管的结论(在操作过程中会不断发出蜂鸣声,因此稍后我将其蒸发了)。此外,还有构成轮盘赌电压源的组件。

带有内置干扰滤波器的雪崩光电二极管和接收信号的放大器位于一条小围巾上。这是该板从侧面看的样子: 右图显示了通过卷尺透镜看到的雪崩光电二极管的视图。 下一步是还原轮盘计划。尽管该板是多层的,但它非常小且不是很复杂,因此恢复电路的过程并不需要很长时间。

激光尺如何测量:逆向工程_第8张图片




 在一家中国的在线商店中,我设法找到了激光测距仪模块(511F版)的印刷电路板图片,其设计与我的电路板(512A版)非常相似。图片的分辨率非常低,但是它显示了微电路下方的导体和过孔的位置。后来,我在上面签名了元件编号并突出了导体: 不幸的是,无法通过某些SMD元件的标记来确定其名称。如果不从电路板上焊接,就无法确定大多数电容器的额定值。我用万用表测量了电阻,因此可能无法准确地确定它们。 经过研究,我得到了以下轮盘赌结构图:

激光尺如何测量:逆向工程_第9张图片

激光尺如何测量:逆向工程_第10张图片

激光尺如何测量:逆向工程_第11张图片



激光尺如何测量:逆向工程_第12张图片





激光尺如何测量:逆向工程_第13张图片

我将电路分为几部分:方案1.微处理器,电源单元和一些简单的电路。 这里的一切都非常简单-它显示了STM32微控制器,其扎带的一些元件,扬声器,键盘和一些低通滤波器。它还显示了一个DC-DC升压转换器(DA1微电路),它构成了轮盘赌的电源电压。

激光尺如何测量:逆向工程_第14张图片




卷尺设计为可使用2个电池供电,在操作过程中其电压可能会发生变化。指定的转换器从输入电压VBAT(有点不正常的值)产生3.5 V的恒定电压。为了打开和关闭轮盘游戏电源,使用了在DA2晶体管组件上组装的节点。按下S1按钮时,它会打开DC-DC,然后微控制器开始通过MCU_power线上的信号保持DC-DC接通。

在其中一项测量期间,我不小心烧毁了该DC-DC转换器的微电路(万用表探针跳下并闭合了其支脚)。由于我无法确定微电路的名称,因此我不得不拆焊它,并从外部电压源向卷尺施加3.5 V电压。

评估板底部边缘上有8个矩形焊盘,可用于调试或测试目的。我在PMx图上标记了它们。该图显示它们都连接到微控制器的引脚。其中有UART线。本机固件不会在这些线路上进行任何活动,根据示波器的判断,将TX线路配置为输入。
电路板边缘上还有6个针孔。它们在图上标记为“ Px”。轮盘电源线和STM32编程线已连接到它们。方案2. PLL发生器单元和激光二极管控制单元。

激光尺如何测量:逆向工程_第15张图片


Si5351发生器的PLL微电路生成一个方波信号,因此,为了消除不必要的谐波,来自PLL输出的信号被馈送到两个相同的带通滤波器。还显示了组装在二极管D1上的信号混频器-来自其的信号在测量相位差时用作参考。

从图中可以看出,来自PLL的信号之一(“ LASER_signal”)无需任何转换即可输出到激光二极管D3。另一方面,使用组装在DA3芯片及其周围组件上的模拟节点,可以稳定激光器的亮度(由流过它的电流量确定)。该单元从内置在激光器中的光电二极管接收实际的激光器亮度水平(未在图中显示)。借助“ laser_power”线,微控制器可以完全关闭激光器,并借助连接到微控制器DAC的“ line10”线来调节激光器的亮度。示波器的一项研究表明,卷尺在该线上始终保持1.4 V的值,并且在任何情况下都不会改变。图3.电源设备APD和带有APD的信号放大器。

激光尺如何测量:逆向工程_第16张图片


左侧显示了线性电压源,该线性电压源形成了光电二极管放大器(DA5)的电源电压。这个微电路产生的电压为3.3V,因此其输入端的电压应高于3.3V,据我所知,这就是导致其余电路由3.5V供电的原因。

下面显示的是一个DA4升压DC-DC转换器,该转换器为雪崩光电二极管产生高电压(> 80 V)。微控制器可以使用连接到控制器DAC的“ MCU_APD_CTRL”线更改此电压值。我无法确定DA4微电路的名称,因此我不得不通过实验确定APD两端的电压如何取决于控制信号的电平。事实证明这种依赖性很奇怪,随着控制信号值的增加,输出电压下降。在进一步的实验中,我使用了几个DAC常数值,为此我知道了它们对应的输出电压。

在图3的右侧,显示了一个小型PCB的示意图。线M1-M8显示了连接两个板的焊盘。D6是雪崩光电二极管(APD)。它没有任何标记,因此无法确定其名称和特征。我只能说它具有LCC3机身。

高直流电压通过线M8施加到APD阴极。您还可以看到,来自PLL的高频信号通过电容器C41沿着“ APD_modul”线添加到了它。因此,APD将光信号和具有不同频率的APD_modul信号混合。结果,低频信号出现在APD输出上,该信号由带通滤波器(组件C55,R41,R42,R44,C58,C59)选择。

然后,低频信号由DA6B运算放大器(SGM8542)放大。来自DA6B输出的信号通过M2线传输到微控制器的ADC。同样,该信号还被晶体管T6放大并通过线M1传输到微控制器。
由于输入信号电平在很宽的范围内变化,因此需要这种逐步放大。

另外,在APD旁边安装了一个热敏电阻R58,可以确定APD的温度。正如我已经说过的,APD参数高度依赖于温度,并且需要一个热敏电阻来以编程方式补偿这种依赖关系。在运行期间,APD会变热,甚至会改变其特性。例如,在室温下,由于其自​​身的加热,光电二极管的增益下降超过2倍。

在接收信号电平不够的情况下,微控制器会增加APD上的电压,从而增加增益。在使用本机固件检查轮盘赌的运行时,我发现只有两个输出电压电平-80和93V。但是,那时我没有意识到这些电平可能取决于APD温度,也没有检查轮盘赌是否有所变化。加热期间的任何控制信号。

板上的照片显示板上有控制板。我在原理图和板上标记了它们:“ TPx”。其中包括:
 

  • TP3,TP4-来自光电二极管放大器的低频信号。正是该信号承载了有关到物体的距离的信息。使用示波器,您可以看到信号的频率为5 kHz,并且包含直流分量。
  • TP1 — опорный сигнал. Также имеет частоту 5 кГц и содержит постоянную составляющую. Амплитуда этого сигнала довольно мала — около 100 мВ.
  • TP5 — высокое напряжение питания лавинного фотодиода.

 

Программирование


在尝试对控制器的本机固件进行操作之前,我决定通过逻辑分析仪删除STM32和PLL之间的交换,该交换是通过I2C总线进行的。为此,我将导线焊接到总线的上拉电阻上:

激光尺如何测量:逆向工程_第17张图片

我设法毫无问题地拦截了上述微电路之间的交换并解码了所传输消息中的数据:



对结果的分析表明,该控制器始终仅将信息写入PLL,而不会读取任何内容。信号电平良好时,一个测量周期大约需要0.4秒,而信号电平较差时,测量时间将更长。

可以看出,微控制器以大约5 ms的周期将相当大的消息发送到PLL。
由于有大量数据,我用Python编写了一个特殊程序来对其进行分析。该程序确定并计数了包装,确定了包装的大小以及它们之间的时间。此外,该程序还显示了PLL寄存器的名称,将发送的字节写入其中。

事实证明,每隔5 ms STM32就会完全覆盖PLL的主寄存器(数据包长度为51字节),其结果是PLL改变了两个频率。轮盘赌不执行任何PLL初始化-也就是说,传输的数据包带有完整的PLL配置。信号电平良好时,测量周期包含64个数据传输。

接下来,我使用数据包中传输的数据将频率的计算添加到程序中。事实证明,在测量过程中,卷尺使用四个激光调制频率:
 

  • 162.0兆赫
  • 189.0兆赫
  • 192.75 MHz
  • 193.5兆赫


本机振荡器频率(第二个PLL输出)的频率始终比激光调制频率低5 kHz。

显然,有4个跳频周期(每个5 ms)允许一次距离检测。因此,在64个循环之后,磁带将测量16个距离,然后将其平均并过滤结果,从而提高测量精度。

然后,我开始为轮盘微控制器编写自己的程序。

将编程器连接到轮盘后,计算机未检测到其微控制器。据我了解,这意味着SWD接口在本机固件中被禁用。通过将NRST编程器线连接到轮盘并在ST-LINK Utility设置中选择“重置时连接”模式,可以解决此问题。此后,计算机检测到控制器,但是正如预期的那样,本机固件已被读取保护。为了将其程序写入控制器,必须擦除控制器的闪存。

首先,在我的程序中,我实现了打开测距仪模拟部分的电源,打开激光并设置其电流,打开APD电源电压。当我确信所有电压都正常之后,我可以尝试使用PLL。对于测试,我只是简单地在PLL中记录了以前从轮盘赌轮接收到的数据。

结果,在启动程序后,我发现在控制点处出现了频率为5 kHz的信号,该信号的幅度明显取决于激光照射的物体的类型。这意味着所有模拟电子设备均正常工作。

之后,我在程序中添加了使用ADC捕获模拟信号的功能。值得注意的是,为了测量信号的相位差,微控制器必须同时或以恒定的延迟捕获主信号和参考信号的电平。在STM32F100中,可以使用ADC扫描模式实现后一种选项。同时,使用DMA将数据从ADC捕获到存储器中是合乎逻辑的,并且为了以给定的采样率捕获数据,必须通过来自一个定时器之一的信号来启动ADC转换。

作为实验的结果,我确定了以下捕获参数:

-ADC采样率-50 kHz,
- 采样数-250。-
总信号捕获时间-5 ms。
-捕获的数据由控制器程序通过UART传输到PC。

为了处理捕获的数据,我在C#中编写了一个小程序: 蓝色图是接收到的信号,橙色图是参考信号(此图中其幅度增加了20倍)。 下图显示了接收信号的FFT转换结果。 使用FFT,您可以确定信号的相位-您需要计算信号的相位频谱,并从中选择与5 kHz对应的点的相位值。请注意,我试图在屏幕上显示相位频谱,但是看起来很吵,所以我放弃了。

激光尺如何测量:逆向工程_第18张图片







同时,实际上,微控制器接收两个信号-主信号和参考信号。这意味着您必须对5 kHz信号中的每个信号进行FFT,然后从一个结果中减去另一个。结果是所需的相位差,该相位差用于计算距离。我的程序在频谱图下方显示此值。

显然,使用FFT并不是确定单个频率信号相位的最合适方法。相反,我决定使用Goertzel的算法。引用维基百科:

Алгоритм Гёрцеля (англ. Goertzel algorithm) — это специальная реализация дискретного преобразования Фурье (ДПФ) в форме рекурсивного фильтра.… В отличие от быстрого преобразования Фурье, вычисляющего все частотные компоненты ДПФ, алгоритм Гёрцеля позволяет эффективно вычислить значение одного частотного компонента.


该算法非常容易实现。像FFT一样,它可以返回复杂的结果,因此可以计算信号的相位。如果使用此算法,则还需要计算主信号和参考信号的相位,然后计算它们之间的差。
使用同一PC程序,您可以使用Goertzel算法计算相位差和信号幅度。实验结果表明,在信号电平良好的情况下,相位差的测量精度可以达到0.4度(20次测量的RMS)。

在下一阶段,我为微控制器编写了一个程序,该程序本身针对三种不同的调制频率(使用Goertzel算法)计算了信号的相位差,并将结果传输到PC。为什么要精确使用三个频率-我将在后面解释。由于计算是在微控制器本身上进行的,因此无需通过UART传输大量数据,从而大大提高了测量速度。

对于PC,编写了一个程序,使您可以捕获所接收的数据并将其记录。

正是在这个阶段,我注意到雪崩光电二极管的温度对测量相差的结果有很大的影响。另外,我注意到接收到的光信号的幅度也会影响结果。此外,当APD电源电压发生变化时,上述依赖关系显然正在发生变化。

老实说,在研究过程中,我意识到要立即确定几个因素(电源电压,光信号幅度,温度)对相位差的影响是一项艰巨的任务,理想情况下需要进行大量漫长的研究。对于此类研究,需要一个气候室来模拟不同的工作温度,并需要一组滤光片来研究信号电平对结果的影响。有必要制造一个能够自动改变光信号强度的专用支架。由于温度降低,APD增益增加,并且APD进入饱和模式的程度使研究变得复杂,APD的输出信号从正弦波变为矩形或完全消失。

我没有这样的设备,所以我不得不限制自己使用更简单的方法。我仅在雪崩光电二极管(Uapd)的两个工作电压分别为82 V和98 V的情况下进行了测距仪操作的研究。所有研究都是在160 MHz的激光调制频率下进行的。

在我的研究中,我相信光信号的幅度和温度的变化彼此独立,会影响相位差的测量结果。

为了更改接收到的光信号的幅度,我使用了一个特殊的可移动平台,该平台带有一个可遮盖光电二极管透镜的快门:

激光尺如何测量:逆向工程_第19张图片

随着温度的变化,一切都变得更加复杂。首先,正如我之前提到的,APD具有明显的自热效应,该效应由热传感器很好地监控。为了冷却卷尺,我用装有风扇的泡沫盒盖了它,并在上面放了一个冷水容器。另外,我尝试冷却卷尺在阳台上(那里的温度约为10°C)。从热传感器的信号电平来看,两种方法给出的APD温度大致相同。通过加热,一切都变得更加容易-我用一股热气流加热了卷尺。为此,我在冷却器上使用了一个电阻-这样就可以调节空气温度。

我没有在卷尺上安装有关热敏电阻的任何信息,因此我没有重新计算将ADC转换为任意角度的结果。随着温度升高,ADC两端的电压电平下降。

结果,我们得到以下结果:
 

  • 随着Uapd的增加(即增益的增加),APD对温度变化和信号电平变化的敏感度显着提高。
  • 当光信号的幅度减小时,会出现一个小的相移-当幅度从最大值更改为最小值时,相移约为+2度。
  • 随着APD冷却,出现正相移。


对于98 V的电压,获得了以下相移对温度的依赖关系(以ADC为单位):

激光尺如何测量:逆向工程_第20张图片

您可以看到,当温度变化时(从15到40度),相差变化超过30度。

对于82 V的电压,这种依赖性几乎是线性的(至少在我测量的温度范围内)。

结果,我得到了两个Uapd的两个图形,它们显示了温度和相移之间的关系。从这些图表中,我确定了我在微控制器中用来校正相位差值的两个数学函数。因此,我摆脱了外部因素变化对测量正确性的影响。

下一步是从三个获得的相位差中确定到物体的距离。首先,我决定在PC上进行操作。

这是什么问题 正如我前面提到的,如果调制频率足够高,则在与测距仪相距一定距离时,当试图确定距离时会出现歧义。在这种情况下,要准确确定到物体的距离,您不仅需要知道相位差,还需要知道适合该距离的整数信号相位(N)的数量。

结果距离由以下公式确定:
 

 

 

d=1个2(ñ⋅λ+φ⋅λ2π)

 


通过对工厂轮盘程序的分析,可以看出调制频率在160-195 MHz的范围内。轮盘游戏电路可能不允许以较低的频率调制激光辐射(我尚未对此进行测试)。这意味着从卷尺中的相位差确定到物体的距离的方法必须比简单地在高和低调制频率之间切换更为复杂。

值得注意的是,由于调制频率不同,整数信号相位的数量在某些情况下可能具有公共值N,而在其他情况下则不具有(N1,N2 ...)。

我只知道解决此问题的两种选择。

第一种选择是简单枚举N的值以及每个使用的调制频率的对应距离。

在这样的枚举过程中,寻求N的这些值给出彼此最一致的距离(由于测量相位差的误差可能无法获得完全一致)。

这种方法的缺点是它需要大量操作,并且对相位测量误差非常敏感。

第二种选择是利用具有接近调制频率的跳动信号的效果。
让测距仪使用两个波长的信号调制频率λ1个 和 λ2具有相当接近的价值。

可以假定在距对象一定距离处,整数周期N1和N2的数量彼此相等且等于某个值N。

在这种情况下,将获得以下方程组:

 

 

{d=1个2(ñ⋅λ1个+φ1个⋅λ1个2π)d=1个2(ñ⋅λ2+φ2⋅λ22π)

 


从中可以得出N的值:

 

 

ñ=λ2⋅φ22π+λ1个⋅φ1个2πλ1个--λ2

 


给定N的值,您可以计算到对象的距离。

满足以上条件的最大距离由以下公式确定:

 

 

d米一个X=1个2⋅λ1个⋅λ2|λ2--λ1个|

 


从该公式可以看出,信号波长彼此越近,最大距离越大。

同时,即使在指定的距离处,在某些情况下也不会满足该语句(N1 = N2)。

让我举一个简单的例子。

мλ1个=1.55米 和 мλ2=1.5米...
在这种情况下мd米一个X=11.6米...

但是,在这种情况下,如果光的传播路径等于1.53m,那么对于第一个波长N1 = 0,对于第二个N2 = 1,

结果表明,N的值为负。

您可以使用以下知识来对抗这种影响:
λ1个>λ2...
在这种情况下,您可以修改方程式:

 

 

{d=1个2(ñ1个⋅λ1个+φ1个⋅λ1个2π)d=1个2((ñ1个+1个)⋅λ2+φ2⋅λ22π)

 


使用该方程式系统,可以找到N1。

这种方法的应用具有一定的特殊性-调制信号的波长越接近,测量相位差的误差对结果的影响越大。由于存在此类错误,可能无法足够准确地计算出N的值,但至少证明它接近真实值。

确定到物体的实际距离时,必须执行零位校准。这样做非常简单-在距离卷尺一定距离处(将其视为“ 0”),安装了反射良好的光对象。之后,程序应为每个调制频率保存相位差的测量值。在进一步的工作中,您需要从相位差的相应值中减去这些值。

在确定距离的算法中,我决定使用三个调制频率:162.5 MHz,191.5 MHz,193.5 MHz-根据实验结果,这是最合适的频率数。

我的距离确定算法包括三个步骤:
 

  1. 检查相位差是否落入“零”距离区域。在接近于零校准的区域中,由于测量误差,相位差值可能会从0度“跳变”到359度,这在测量距离时会导致较大的误差。因此,当发现所有三个相位差同时接近于零时,我们可以假设测得的距离接近于零,并且由于这个原因,我们拒绝计算N的值。
     
  2. 预先计算频率为191.5 MHz和193.5 MHz的信号的拍频距离。这些频率选择得很近,因此确定性区域非常大:мd米一个X=37.5米,而且计算结果极易受到测量误差的影响。如果接收到的信号很低,则误差可能是几米(几个波长)。
     
  3. 通过枚举频率为162.5 MHz和191.5 MHz的信号的相位差来计算距离。

    由于在上一阶段已经确定了近似距离,因此可以限制要搜索的N个值的范围。因此,减少了枚举的复杂性,并丢弃了可能的错误结果。


结果,我得到了一个用于PC的程序:

激光尺如何测量:逆向工程_第21张图片

该程序允许您显示通过卷尺传输的数据-信号幅度,APD电压,ADC单位的温度,三个频率的信号相位差值以及从它们计算出的与物体的距离。

按下“零”按钮可在程序本身中执行零位校准。

对于独立的激光测距仪,改变信号增益非常重要,因为当距离和反射系数改变时,信号电平也会发生很大变化。在我的微控制器程序中,我通过在两个APD电源电压-82 V和98 V之间切换来实现增益的改变。切换电压时,增益水平大约变化了10倍。

我没有实现两个ADC通道之间的切换-“ MCU_signal_high”,“ MCU_signal_low”-微控制器程序始终仅使用来自“ MCU_signal_high”通道的信号。

下一阶段(最后一个阶段)是将距离计算算法传输到微控制器。由于该算法已经在PC上进行了测试,因此并不困难。另外,必须将执行零校准的功能添加到微控制器程序中。微控制器将此校准数据存储在闪存中。

我已经实现了两种不同版本的微控制器固件,它们在信号捕获原理上有所不同。在其中一种(更简单的一种)中,微控制器在从ADC捕获数据时不执行任何操作。第二个固件则更复杂,其中使用DMA将来自ADC的数据同时写入一个阵列,同时,使用Goertzel算法处理先前捕获的数据。因此,与简单版本的固件相比,测量速度几乎提高了一倍。

微控制器通过UART将计算结果发送到计算机。

为了方便分析结果,我编写了另一个小型PC程序:
 

激光尺如何测量:逆向工程_第22张图片

 

结果


结果,我设法弄清楚激光轮盘的电子设备是如何布置的,并为其编写了自己的开源固件。

对于我来说,在编写固件的过程中,最重要的是达到最大的测量速度。不幸的是,提高测量速度会明显影响测量精度,因此必须找到一个折衷方案。例如,本文结尾的代码每秒提供60次测量,精度约为5-10毫米。

如果减少要捕获的信号值的数量,则可以提高测量速度。我每秒可以进行100次测量,但是噪声的影响显着增加。

当然,环境条件(例如到物体的距离和表面反射率)会严重影响信噪比,从而影响测量精度。不幸的是,如果光信号电平太低,即使增加APD增益也无济于事-随着增益的增加,噪声电平也会增加。

在实验过程中,我注意到雪崩光电二极管的外部照明也显着增加了噪声水平。在我安装的模块中,所有电子设备都是打开的,因此您必须用不透明的东西覆盖它,以减少干扰。

另一个值得注意的特征是,由于激光器和光电二极管透镜的光轴不一致,因此,在近距离(<0.7 m)处信号电平显着下降

原则上,已经以这种形式,卷尺电子设备可以在某些项目中使用,例如,用作机器人的距离传感器。

显示轮盘操作的视频:
 

 


 

最后:还能找到其他轮盘吗?


在这里,我想谈谈其他激光卷尺的设计,这些设计可以在网上找到。
 

  • 首先,值得注意的是 BOSCH DLE50激光轮盘的反向工程项目。

    该轮盘赌的特点是,它使用定制的CF325芯片作为PLL生成器,因此在Internet上没有相关文档,这使逆向工程过程变得非常复杂。这种情况(没有文档的定制微电路)在激光卷尺中非常普遍,但现在看来情况开始改变-定制微电路开始被“通用”电路代替。

    该轮盘赌中使用的微控制器是ATmega169P。

    该卷尺的另一个特征是使用由电磁体控制的机械组件,该机械组件允许产生“光学短路”,即沿已知路径将光从激光器重定向到光电二极管。由于已知光的路径长度和反射率,因此微控制器可以执行各种校准(幅度和相位)。在操作本机期间,激光卷尺发出足够大的喀哒声。

    在这里,您可以看到此轮盘赌的电子设备的照片。
     
  • 关于UT390B激光卷尺知之甚少。

    某个发烧友能够对该轮盘赌的调试UART接口的协议进行逆向工程,并学会了如何控制其操作。甚至还有一个用于Arduino的库。

    您可以在此处阅读此轮盘的俄文版本。

    从照片中可以看到,该轮盘赌的电子设备非常简单,类似于本文所述。

    该轮盘赌中使用的微控制器是STM32F103C8。PLL芯片:CKEL925(有相应的文档)。
     
  • 但是还没有人能够弄清楚新版UT390B +轮盘赌的协议。该轮盘赌的电路与旧版本不同。

    它甚至更接近我的轮盘赌的电路-它使用STM32F030CBT6微控制器和Si5351 PLL。

    如果仔细观察照片,您会发现卷尺中安装了两个激光器。
    显然,如今轮盘赌中的两个激光并不少见。在此,在另一卷尺的装置的描述中,提到其中一个激光器具有可见辐射,并且仅用于“目标指定”,而第二个激光器是红外的,并且用于测量距离。有趣的是,激光和光电二极管都使用相同的透镜。
     
  • 另一个协议未知的轮盘赌是BOSCH PLR15。

    热心人士已经尝试找出其协议,但到目前为止,还没有人成功。

    早些时候,我还试图弄清楚该轮盘的工作原理,甚至部分恢复了该轮盘的方案。

    该轮盘赌中使用的微控制器是STM32F051R6。但是,根本就没有其他高度集成的微电路!

    但是这里使用的光电探测器是非常不寻常的,我什至从未见过提及这样的设备:

    激光尺如何测量:逆向工程_第23张图片

    显然,它是一个片上系统,包含两个光电二极管(测量通道和参考通道),光电二极管放大器,数字控制电子器件和一个ADC。激光器的调制信号也来自它。光电探测器本身通过SPI连接到微控制器。

    我试图截取通过SPI传输的数据-控制器到传感器有命令,传感器到控制器有信息包。

    如果在Excel中处理这些数据包,则正弦曲线清晰可见(即,使用了测量距离的相位方法)。这意味着该信号由该轮盘中的微控制器处理。

    但是,关于SPI的信息很多,无法确定进行测量的频率,因此,即使计算卷尺的距离也是一个相当麻烦的任务。
    这里收集 了类似的博世GLM 20卷尺的一些信息。
     
  • 各种中文模块。

    最近,大量的激光测距仪模块出现在中国的在线商店中(可以通过“激光测距模块”和类似的请求找到它们)。
    在这些模块中,您可以找到与我的模块完全相同的模块,但是它们的售价是其两倍(40美元)。看起来这与激光轮盘的所有内部部件相同,但固件经过修改。有趣的是,在各种设计中,我多次遇到带有两个相同PLL芯片的测距仪(显然,这些芯片不是定制的)。

你可能感兴趣的:(硬件电路设计)