一种确定未知物体距离的方法是,向物体发射光脉冲并检测其反射。然后计算发射脉冲和接收脉冲之间的时间差,并乘以光速,即可得到光往返于物体的总距离。这种方法称为飞行时间测量,常用于雷达和激光雷达应用中。在本应用笔记中,我们将使用 Moku:Go这是 Liquid Instruments 的一款基于 FPGA 的设备,可提供一套可重构的测试和测量仪器,与商用测距仪配合使用,可执行精确的飞行时间测量。测距仪将发射和检测红外脉冲,并向 Moku:Go 设备提供串行数据流。Moku:Go 还可用作测距传感器提供的串行数据的电源和解码器。我们将演示如何使用 Moku 示波器 和 逻辑分析仪/码型发生器 仪器。最后,我们将使用 Moku Python API.
所需材料
要进行此实验,您需要下面列出的设备。请参阅图 1 的视觉指南。 Moku:围棋: 此设置特别要求 Moku:Go 设备,因为它提供内置可编程电源。在这里,我们使用它为 LiDAR 距离传感器供电。如果您有不同的 Moku 硬件,那么您还需要一个 5V DC 电源。 两根香蕉插头至鳄鱼夹电线: 这些将连接到 Moku:Go 并为测距仪提供 5 V 直流电源。 一根 BNC 转鳄鱼夹线: 这将用于将串行数据从测距仪传递到 Moku:Go 的输入。 LiDAR 距离传感器: 我们在这个实验中使用的测距仪是 特遣队露娜 来自 Benewake。TF Luna 通过计算红外光脉冲序列的飞行时间来测量距离。然后通过 UART 串行编码。本文末尾的参考资料部分提供了此设备文档的链接。TF Luna 有六根连接线;在这里,我们只使用电源线、地线和 Tx 线。这些连接在图 1 中进行了标记。

图 1:飞行时间演示所需的设备。左图: 特遣队露娜,标示了三个连接。中间:BNC 至鳄鱼夹连接线。右侧:香蕉插头至鳄鱼夹连接线。
设置设备
这些步骤概述了仪器之间要建立的所有连接。完整示意图如图 2 所示。
- 准备 LiDAR 距离传感器。 使用 TF Luna 传感器时,您需要移除连接器的一端,然后用剥线钳剥去连接鳄鱼夹所需的绝缘层。如果您使用的是其他传感器,请确保在进行后续步骤时手边备有该传感器的相关文档。
- 将距离传感器连接到电源。 将鳄鱼夹固定在 Vpp 线(红色)上,然后将香蕉插头插入 Moku:Go 背面的电源 1。用下一根电线重复此操作,将夹子固定到 GND 线(黑色)上,并将香蕉插头连接到电源 1 和电源 2 之间的共享地线。
- 连接数据传输线。 将数据传输线的 BNC 端插入 Moku:Go 上的输入 1。将红色鳄鱼夹(或探针,取决于您的电缆)连接到距离传感器上的 Tx 线。如果电缆上还有接地夹,您可以将其固定在距离传感器上的 GND 针脚上,以便它和电源共用一个接地。

图 2:测距传感器与 Moku:Go 之间的连接。设备内置电源为传感器提供 5 V 电源信号。传感器的 Tx 引脚为 Moku:Go 的输入 1 提供串行数据。
验证并查看输出
这些步骤将概述如何设置 Moku 示波器 查看距离传感器传输的信号。
1. 启动 Moku 示波器。 在 Moku 软件的主屏幕上,单击示波器以单仪器模式启动它。在示波器主屏幕上,通道 A 上应该没有信号,因为尚未向传感器供电。
2. 开启电源。 在 Moku 屏幕上,单击左上角的菜单图标(三条平行线)。然后单击“电源”。屏幕上将出现一个新的菜单窗口。单击 PPSU 1 旁边的滑块以启用它,然后将电压值更改为“5.000”。您应该看到范围传感器开始从 Moku:Go 吸取电流(~50 mA),如图 3 所示。
3. 查看示波器上的输出。 接通电源后,返回示波器屏幕。您应该看到类似于图 3 所示示例的重复模式。这是测距传感器正在发送的串行数据,采用 UART 格式编码。每个数据包包含若干位数据,位值由电压高(3.3 V)还是低(~200 mV)决定。确认测距传感器工作正常后,我们现在将使用 Moku 逻辑分析仪/模式生成器来解读这些串行数据。

图 3:Moku 示波器和电源,显示 UART 串行数据突发。
解码串行输出
我们现在将设置 Moku 逻辑分析仪/码型发生器 解码UART串行数据。
1. 启动 Moku 逻辑分析仪/模式生成器 在 Moku 软件的主屏幕上,单击逻辑分析仪/模式生成器以在单仪器模式下启动它。由于这会重新配置 Moku:Go FPGA,因此您必须重新启用设备的电源来为范围传感器供电。为此,请按照上一节中概述的步骤进行操作。
2. 设置收购。 在屏幕的右侧,您将看到采集菜单。将源更改为“模拟输入”,这将绕过 16 位数字 I/O,并使用模拟输入 1 和 2 作为两位数据。由于 UART 是二进制格式,因此这是可以接受的。通过单击图右侧的“X”删除位 1 显示。在“时间基设置”下,将时间跨度设置为 1.5 毫秒,将偏移设置为 -300 𝛍s。如果范围传感器已打开,您应该会看到串行模式出现在位 0 图上,如图 4 所示。

图 4:Moku 逻辑分析仪/模式发生器,显示 UART 串行数据序列,类似于图 3 所示的示例。
3.添加协议解码器。 Moku 逻辑分析仪/模式生成器可以解码许多标准协议,包括 UART,它将串行数据转换为十六进制格式。要添加解码器,请单击屏幕左上角的加号,如图 5 所示。

图5:添加UART串行数据的协议解码器。
4.配置协议解码器。 为了正确解码数据,仪器必须知道 UART 序列中包含多少位信息,以及信息到达的速率(也称为波特率)。这将取决于测距仪的确切性质。如果您使用的是 TF Luna,则配置如图 6 所示。数据宽度为 8 位,1 个停止位,没有奇偶校验,默认波特率为 115200。如果解码器设置与发射器的设置匹配,您将看到十六进制数出现在 UART 解码器行中,如图 6 所示。

图6:UART串行数据转换为十六进制数。
7. 解释数据。 请参阅距离传感器的文档,以理解 Moku:Go 解码的数值数据。对于 TF Luna,默认的 9 字节数据序列如图 7 所示。前两个字节始终为 59,解码的数据证实了这一点。在这种情况下,字节 2 和 3 以厘米为单位提供距离信息。如果您将手放在距离传感器上,您可以看到该值相应变化。

图 7:TF Luna 数据表的摘录有助于我们解释结果。
使用 Python 实现自动测量
不幸, 十六进制数 对于距离的感知来说,它们并不直观。在本节中,我们将使用 Moku Python API 创建一个自动距离测量工具,该工具将不断刷新数据。以下脚本可从 Liquid Instruments 获取 Github 页面。Moku Python API 设置教程已发布 开始.
1.导入并连接。 除了需要的任何“标准”导入之外,您还必须导入您计划部署到 Moku:Go 上的任何仪器,如图 8 所示。在此示例中,我们创建了 Moku 逻辑分析仪/模式生成器的实例并指定设备的 IP 地址。

图8:导入并连接代码。
2. 设置电源。 Moku 软件的任何功能都可以使用 API 执行,包括直流电源。指定所需的电源以及最大电压和电流值,如图 9 所示。

图 9:设置直流电源。
3. 设置Moku逻辑分析仪/模式发生器。 这只需要使用一些命令来向我们之前指定的协议解码器提供相同的信息,包括数据宽度、停止宽度、波特率和通道号。请注意,“get_data”返回原始数据的整个轨迹,因此我们只要求它提供协议分析器数据,标记为“pa1”。

图10:设置协议解码器。
4.显示数据。 在数据数组中,我们可以看到状态变量在“空闲”和“数据”之间交替。我们要查看第 3 个数据位,它对应于数组中的第 5 个元素。在这个字典中,我们需要附加到“数据”键的值,它为我们提供以厘米为单位的距离值。恢复此值后,我们使用 Tkinter 包创建一个使用最新测量距离值更新的显示。代码以及示例窗口如图 11 所示。

图 11:持续更新显示的代码以及显示器本身。
结语
Moku:Go 是一款功能强大且灵活的电子测试和测量应用多功能工具。在本演示中,我们结合使用 Moku:Go 和测距传感器进行飞行时间距离测量。得益于 Moku:Go 的灵活性,我们可以使用其可编程电源为传感器供电,并使用 Moku 示波器和逻辑分析仪/模式发生器查看和解码串行数据。此外,我们还使用 Moku Python API 实现了一个持续更新的测距脚本。要了解更多关于 Moku 平台的信息,请点击此处。 开始。要免费探索这些工具,请下载我们的 桌面应用 并选择演示模式。
联系方式
在我们的知识库中获取常见问题解答
如果您对设备特性或仪器功能有疑问,请查看我们的 知识库 来查询您正在寻找的答案。 您还可以快速查看热门问题并按产品或主题来优化搜索。
加入我们的用户论坛来与我们保持联系
想要新的功能吗? 有技术支持提示要分享? 从客户案例到新功能公告等等, 用户论坛 是您的一站式门户,作为产品更新以及与 Liquid Instruments 和我们的全球用户社区建立联系。
案例
北醒 TF Luna 文档: https://en.benewake.com/DataDownload/index_pid_20_lcid_21.html



