ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

毫米波雷达原始数据采集:IWR6843AOPEVM-G与DCA1000EVM联调解析

2026/10/7 19:12:11 拓冰建站 浏览量
毫米波雷达原始数据采集:IWR6843AOPEVM-G与DCA1000EVM联调解析 搞毫米波雷达的朋友应该都有体会板子买回来不是拿来就能直接出点云的尤其是想拿原始ADC数据跑自己的算法第一步就得把IWR6843AOPEVM-G这种60GHz雷达板卡和DCA1000EVM采集板搭好打通一条从雷达芯片到电脑网口的数据通路。这套组合在TI生态里是标配中的标配但我见过不少人在这一步卡了好几天——要么SOP跳线没理解对要么UDP数据抓下来不知道怎么解。这篇就按我自己实操的顺序从硬件连到数据流解析这条链路完整过一遍给准备入手或者已经卡壳的朋友一个参考看完至少能把原始数据从网口抓下来并且解析成你能用的格式。1. 先搞清楚这套硬件要解决什么问题1.1 IWR6843AOPEVM-G到底是一块什么板子IWR6843AOPEVM-G是TI基于IWR6843芯片做的60GHz毫米波雷达评估板。IWR6843这颗芯片工作在60到64GHz频段具备3路发射、4路接收内部集成了一个C674x DSP和一个ARM Cortex-R4F核所以它算得上是一颗带完整处理链的雷达SoC。板子型号里的AOP值得单独说一下全称是Antenna on Package意思是天线直接封装在芯片内部不需要外接天线板。这个设计的好处是天线馈线损耗小、整体体积小缺点是天线方向图固定不能像ISK系列那样随意换天线板。所以如果你做的是手势识别、存在检测、生命体征这类近距场景AOP版本其实非常合适。板子本身是LaunchPad外形两侧有两排BoosterPack兼容的60pin排针这对后面接DCA1000很关键。板上还集成了XDS110调试器插一根micro-USB线到电脑就能枚举出串口和调试口不需要额外买仿真器。这也意味着你只要一块板加一根USB线就能先把官方的开箱Demo跑起来门槛其实不高。1.2 DCA1000EVM在整套系统中扮演什么角色DCA1000EVM是TI官方的数据采集卡全称Data Capture Adapter。它的作用非常纯粹把雷达芯片通过LVDS接口输出的原始ADC数据接收下来打包成以太网UDP报文通过千兆网口发送到电脑。为什么需要这么一块中间板子因为IWR6843上的UART口只能用来传输配置命令和低速率结果根本无法承载原始ADC数据。想做点云后处理、做自己的目标检测算法就必须拿到每个chirp每个RX通道每个采样点的I/Q数据这部分数据速率动辄几十上百Mbps只有LVDS这种高速差分管脚能搬出来而电脑又不直接吃LVDS信号所以DCA1000就是那个把雷达差分信号翻译成电脑能收的UDP数据的翻译官。还要区分一下概念DCA1000只是采集原始数据不做任何信号处理。FFT、CFAR、聚类这些统统在后端用MATLAB、Python或者DSP去算。这也是它和板载DSP处理模式最大的区别——用DCA1000抓数据相当于把雷达当成一个“传感器前端”算法完全自己掌控。1.3 为什么非要抓raw data直接用Demo不香吗如果是想快速验证毫米波雷达能干什么官方SDK里的点云Demo确实够用开箱就能在mmWave Demo Visualizer里看到目标点。但Demo能告诉你的只有结果看不到过程。当你需要调整发射波形、改变chirp参数、优化检测门限或者做Demo里没有的功能时没有原始数据就只能瞎猜。举个我自己的例子做呼吸检测时胸壁微动的多普勒频率只有0.2到0.6Hz这种细微信号必须从原始ADC数据的相位里提取点云Demo根本给不了这个信息。所以抓raw data不是炫技是真正做雷达算法的必经之路也是IWR6843AOPEVM-G加上DCA1000EVM这套组合最大的价值所在。下面正式开始讲怎么搭起来。2. 硬件连接与上电容易踩坑的前十分钟2.1 物料清单和板卡接口动手之前先把东西准备齐别等到接了一半才发现少根线。我这套配置的完整清单如下IWR6843AOPEVM-G雷达评估板一块DCA1000EVM采集板一块5V/2.5A及以上直流电源一个接口是圆头DC插头千兆网线一根micro-USB线至少两根一台带千兆网口的电脑Windows系统mmWaveStudio目前只有Windows版本接口方面重点认识几个位置。IWR6843AOPEVM-G的USB口有两个用途一个是XDS110的调试和数据口枚举出来是两个串口另一个是电源指示灯附近的结构。DCA1000EVM上面有一个网口、一个DC电源接口、一个控制用的micro-USB口还有一组用来和雷达板互联的60pin连接器。实际操作时雷达板是叠在DCA1000上面的两边的60pin排针对准插稳。2.2 连接顺序与SOP跳线设置我建议的连接顺序是先把DCA1000平放再把IWR6843AOPEVM-G对准插槽轻轻压下去确保两侧排针全部到位然后接DCA1000的电源、网线、控制USB最后接雷达板的USB线。这个顺序能避免带电插拔连接器导致信号引脚损坏。接着就是全场最关键的一步——设置SOP跳线。IWR6843AOPEVM-G板上有SOP0、SOP1、SOP2三个跳线帽它们组合决定雷达芯片的启动模式。常见两种模式烧写模式Flashing和功能模式Functional。配合DCA1000用mmWaveStudio抓数时板子必须处于功能模式。按我这块板子的用户指南功能模式对应SOP0短接、SOP1和SOP2断开即SOP[2:0]001烧写模式则是SOP2和SOP0短接、SOP1断开即101。不同批次板子可能有差异动手前第一件事是翻配套的用户指南确认这张表新手最容易在这里栽跟头。注意如果之前用烧写模式往板子里写过程序切回功能模式前记得把跳线全部重新核对一遍。SOP设置错误最典型的症状是mmWaveStudio加载固件后没有CLI回显或者雷达根本没有启动。遇到这种问题先别怀疑软件先回来检查跳线。2.3 供电与网络配置供电上DCA1000板载一个5V圆孔电源接口官方推荐的做法是给DCA1000接5V/2.5A以上电源由它通过底部的60pin高速连接器给雷达板供电。雷达板的micro-USB只接数据线用来做串口调试不要指望USB口给整套系统供电。我之前试过只用USB供电跑数据小帧率还能凑合一旦把chirp数和帧率拉高系统就莫名其妙复位后来换成独立电源再没出现过。网络配置是另一个高频翻车点。DCA1000的默认IP是192.168.33.180电脑网口要设置成同一网段的静态IP。我这边习惯配置成192.168.33.30子网掩码255.255.255.0默认网关可以不填。具体操作是Windows的网络适配器设置里找到连DCA1000的千兆网卡手动指定IP。配置完成后用ping 192.168.33.180验证连通性能通再继续。同时建议把Windows防火墙对专用网络的拦截暂时关掉或者放行UDP端口否则后面mmWaveStudio会连不上DCA1000或者收不到数据。2.4 上电自检如何判断硬件已经Ready硬件接好、网络配好后先别急着开软件做一次快速自检。给DCA1000上电雷达板上的电源指示LED应该点亮DCA1000上的FPGA相关LED也会亮起。在电脑的设备管理器里应该能看到两个XDS110枚举的COM口一个应用串口、一个调试串口以及DCA1000的控制串口。如果只看到一个COM口或者看不到任何新设备大概率是USB线质量问题——毫米波雷达板对USB线材比较挑剔带屏蔽的优质线能省掉很多玄学问题。网口层面ping DCA1000能通说明FPGA已经跑起来。这时把雷达板和DCA1000的USB线都插好打开mmWaveStudio前做好记录哪几个COM口分别是谁。区分方法很简单拔掉DCA1000的USB看哪个口消失剩下的就是雷达板的两个XDS110口。这一步花两分钟后面配置RS232端口时能少很多头大的事。3. 软件环境与固件准备3.1 mmWaveStudio安装与MATLAB Runtime数据采集的主控软件是mmWaveStudio到TI官网下载最新版本即可建议用2.x以上的版本界面和稳定性都更好。安装前有个前置依赖——MATLAB Runtime。mmWaveStudio很多底层绘图和数据处理功能跑在MATLAB Runtime上版本匹配非常严格装错版本会导致软件闪退或者DCA1000连接失败。我的做法是先看mmWaveStudio安装说明里要求的Runtime版本号再单独去MathWorks官网下载对应版本安装完成后重启电脑再装mmWaveStudio本体。装完后在开始菜单能看到mmWaveStudio快捷方式第一次启动会比较慢因为要初始化MATLAB Runtime环境。3.2 串口识别与驱动正常情况下插上IWR6843AOPEVM-G的USB线后设备管理器里会出现两个以“XDS110 Class”开头的COM口分别对应Application/User UART和Auxiliary Data Port。DCA1000的控制口则是以“FTDI”或“Communications”开头的COM口具体名称和驱动版本有关。如果设备管理器里出现黄色感叹号需要手动装TI提供的XDS110驱动一般位于mmWaveStudio安装目录的common子文件夹下。DCA1000的FTDI驱动如果没识别到可以从其用户指南附录找驱动路径。有个实用技巧把所有相关USB设备都插好后在设备管理器里记下每个COM号然后逐个拔插确认对应关系把这个对照表写在记事本里。mmWaveStudio配置RS232时只需要填两个串口号填错一个都会导致固件加载失败提前记清楚能省大量排查时间。3.3 DCA1000固件/FPGA版本检查DCA1000上有一块FPGA负责把LVDS数据打包成UDPFPGA的固件版本必须和mmWaveStudio兼容。版本不匹配时mmWaveStudio虽然能连接DCA1000但会在配置数据模式时报错或者采集时收不到任何数据。官方提供了一款命令行工具DCA1000EVM_CLI_Control在mmWaveStudio安装目录的Scripts子文件夹下能找到配套有使用说明文档。通过这个工具可以查询FPGA版本也可以升级固件。我的建议是拿到板子后先查询一次版本然后对照mmWaveStudio文档需要的版本。如果版本过旧就升级升级过程是通过DCA1000的控制串口把FPGA镜像写入板载Flash操作时确保电源稳定不要中断。升级完成后重新上电再用查询命令确认版本号已经更新。4. 用mmWaveStudio完成一次实际数据采集4.1 启动与连接流程mmWaveStudio打开后界面左侧是雷达设备相关设置下方有DCA1000的选项卡。第一步先在顶部的“Radar Device”区域选择芯片型号我这里是xwr68xx并在Board类型里选择对应的IWR6843AOP型号然后点击“Set Save”保存配置。这里要特别留意型号选错会导致后续固件加载失败而且报错信息并不直观。接着配置RS232通信端口。在RS232 Setup区域把之前记录好的两个XDS110串口号分别填入Port1和Port2点击“Set Save”。实际使用中哪个口填Port1、哪个填Port2需要试一次——如果加载固件后CLI窗口没有回显把两个口对调再试。之后点击“Load”按钮选择固件文件。IWR6843固件分为两个镜像radarss雷达子系统和mss主控子系统选择后mmWaveStudio会通过UART把固件烧到雷达芯片的RAM里。DCA1000的连接在“DCA1000”选项卡里点击“Connect”按钮软件会通过网口连接DCA1000的192.168.33.180地址。连接成功后界面上的FPGA版本号会显示出来。如果点击后长时间没反应先ping一下DCA1000ping不通就检查网线和电脑防火墙通了还连不上多半是mmWaveStudio的以太网配置里默认IP和当前电脑IP不一致需要手动核对。4.2 传感器参数配置Profile/Chirp/Frame这是整个采集流程里最需要动脑子的部分因为参数直接决定你抓到的数据长什么样。毫米波雷达的波形参数分三层Profile配置定义一组chirp的公共参数Chirp配置在Profile基础上做递增或微调Frame配置定义一帧里有多少个chirp循环、多少帧连续采集。以我常用的一组近距参数为例起始频率60.25GHz也可以到62.5GHz附近扫频斜率30MHz/usADC采样点数128采样率2000ksps帧周期50ms每帧16个chirp循环3个发射天线做TDM-MIMO。这样一帧数据就是16×348个chirp每chirp有4个接收通道、128个采样点。mmWaveStudio的SensorConfig选项卡里把这些参数填进Profile Config、Chirp Config和Frame Config对应位置。这里有个新手容易忽略的地方Chirp Config里的TX使能位要按你的天线策略勾选想用3发4收做MIMO就把三个TX都选上只用单通道测呼吸心跳的话只开一个TX还能降低数据量。参数填好后点击“Frame Start”或“Trigger Frame”按钮雷达就开始按照刚才配置的波形发射和接收。在mmWaveStudio的“DataConfig”里可以设置抓多少帧数据我一般设128帧配合50ms帧周期大约抓6.4秒够后面离线处理用了。抓数时观察界面上的数据曲线如果能看到明显的时域波形变化说明雷达已经在输出数据。4.3 触发采集与数据保存数据采集结束后mmWaveStudio会在你指定的输出目录下生成原始数据文件。默认是一个二进制文件里面就是所有帧拼接起来的原始ADC数据同时还有一份JSON或文本格式的参数文件记录了当前使用的全部传感器配置参数。这份参数文件相当重要后面解析数据时必须用它来对齐格式比如每chirp的采样点数、RX通道数、发射天线数等。千万别把参数丢一边只拷走bin文件否则过几天你就得靠猜去解析自己的数据了。另外mmWaveStudio也支持把数据通过网络实时传给电脑上的其他程序。DCA1000默认把UDP数据发往电脑的某个端口常见是4098端口。你可以先用Wireshark抓包看看IP和端口的实际情况确认你能在电脑上裸收一套UDP流。这为后面自己写数据接收程序提供了基础也是理解整个数据流链路的最直观方式。5. 数据流解析从网口到numpy5.1 UDP包结构DCA1000通过千兆网口把LVDS收到的原始数据封装成UDP报文发送。每个UDP包的载荷不是纯数据前面固定有8字节的头部信息以下是我常用的字段理解字节偏移内容说明0-3Magic Word固定值0x02 0x01 0x04 0x03用于识别有效包4Version固件版本信息5Total Length通常为8表示头部长度6-7Byte CountFPGA发送的数据量计数以KB为单位用于连续性检查头部之后就是真正的ADC数据载荷每个UDP包最多携带1448字节的有效数据。整包UDP载荷长度约为1456字节这个设计刚好让整包不超过以太网MTU避免分片。你解析时第一件事就是检查Magic Word如果不是这个固定值说明抓包位置不对或者数据被防火墙改过。5.2 原始数据排列规则搞清楚UDP包头之后更大的坑在于数据内部的排列顺序。IWR6843用复数采样complex1x模式时ADC数据是I/Q交织存放的。按时间顺序每个采样点在一个chirp内的排列是RX0的I分量、RX0的Q分量、RX1的I分量、RX1的Q分量、RX2的I分量、RX2的Q分量、RX3的I分量、RX3的Q分量。也就是说每8个int16数据对应一个采样时刻的4个通道复数数据。chirp之间是串行的一个chirp的所有采样点排列完紧接着排下一个chirp的数据。如果有多发天线做TDM-MIMO一帧里的chirp按发射天线轮换比如3发就是TX0、TX1、TX2不断循环直到达到配置的chirp循环数。因此一帧数据的字节数可以精确计算4个RX通道×128个采样点×I和Q各2字节4096字节/单chirp再乘以每帧48个chirp就是196608字节/帧。提示这里说到的“每chirp为4个RX通道”是通用情况。当你关闭某些RX通道时实际通道数会变解析时务必以参数文件里的接收通道数为准。拿错通道数解析出来的复数数据在频域上会是一团乱麻。5.3 Python解析示例知道排列规则后解析代码就很简单了。下面是我常用的一段Python脚本直接从UDP网络流中接收数据并解析成numpy的复数数组import socket import numpy as np UDP_IP 192.168.33.30 UDP_PORT 4098 PACKET_SIZE 1456 HEADER_SIZE 8 # 与mmWaveStudio配置保持一致 num_rx 4 num_adc_samples 128 num_chirps_per_loop 3 num_loops 16 chirps_per_frame num_chirps_per_loop * num_loops # 48 bytes_per_chirp num_rx * num_adc_samples * 4 # 每通道I/Q各2字节 # 建立UDP socket并绑定 sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((UDP_IP, UDP_PORT)) # 先收齐一帧数据的字节数 frame_bytes bytes() target_len chirps_per_frame * bytes_per_chirp while len(frame_bytes) target_len: packet, addr sock.recvfrom(PACKET_SIZE) if len(packet) HEADER_SIZE 8: continue # 检查Magic Word02 01 04 03 if packet[0] ! 0x02 or packet[1] ! 0x01 \ or packet[2] ! 0x04 or packet[3] ! 0x03: continue # 去掉8字节头部 frame_bytes packet[HEADER_SIZE:] # 转成int16 data np.frombuffer(frame_bytes, dtypenp.int16) # 重排每个时刻8个值 - [RX0_I, RX0_Q, RX1_I, RX1_Q, RX2_I, RX2_Q, RX3_I, RX3_Q] # 先reshape成 [总采样点数, 8] samples_per_chirp num_adc_samples * num_rx data data.reshape(-1, 8) # 拆I/Q得到复数 data_complex data[:, 0::2] 1j * data[:, 1::2] # shape: [n, 4] # 再按chirp拆开 data_complex data_complex.reshape(chirps_per_frame, num_adc_samples, num_rx) data_complex np.transpose(data_complex, (0, 2, 1)) # [chirp, rx, sample] print(解析完成shape:, data_complex.shape)这一段如果跑通并且shape符合预期说明你从网口到numpy的链路已经完全打通。得到的data_complex数组就能直接送去做距离FFT、多普勒FFT、CFAR这些后续处理了。如果你的数据是从mmWaveStudio保存的bin文件读的逻辑完全一样只是少了UDP头部直接用np.fromfile读入后从第5.2节的reshape步骤开始即可。5.4 如何验证解析结果是对的解析完别急着往下做算法先花几分钟验证数据合理性这一步能省下后面大量排查时间。我有三个百试百灵的验证方法。第一观察时域幅度。在一个chirp的128个采样点里如果目标存在幅度通常会呈现明显的起伏不会是一根平直线。全零或者恒定常数说明要么雷达没真的发波要么解析的通道数不对。第二做一次距离FFT。对每个chirp每个RX通道的128点做FFT观察频谱峰值位置。如果前面用60.25GHz起始频率、30MHz/us斜率、128采样点、2000ksps采样率那么距离分辨率和最大不模糊距离都是可以算出来的峰值位置对应的距离应该和目标实际摆放位置吻合。能对上是硬道理。第三检查多帧之间的连续性。连续采集多帧后同一静止目标的距离维FFT峰值应该在相同距离门附近波动不会到处乱跳。如果峰值位置在帧间随机跳变多半是UDP丢包导致chirp对齐错误这种问题后面章节细说。6. 常见问题与排查技巧实录6.1 连接与硬件问题速查表我把实操中遇到的典型问题整理成一张速查表方便你对着症状找原因现象常见原因解决方法mmWaveStudio连不上DCA1000电脑IP不在192.168.33.x网段将网卡改为静态IP 192.168.33.30连上了但FPGA版本为空防火墙阻止了UDP通信放行专用网络的UDP或临时关闭防火墙加载固件后无CLI回显SOP跳线不在功能模式核对SOP0/1/2跳线切到功能模式点击Load但进度条卡住RS232的Port1/Port2填错交换两个COM口号重试设备管理器找不到XDS110口USB线质量问题换屏蔽良好的短USB线直插主板USB口采集到一半雷达复位供电不足DCA1000改接5V/2.5A独立电源这里面有几个是我反复踩过的。最典型的就是“加载固件后无CLI回显”当时我查了一下午软件配置最后发现是SOP跳线没改教训相当深刻。所以硬件问题永远排在软件前面排查顺序别搞反。6.2 采集数量不对、丢包的几个原因用DCA1000抓数最常见的数据问题有两类一帧数据的字节数少于理论值或者多帧数据长度不一致。理论上每个UDP包带一个8字节头数据载荷是连续且按顺序到达的如果收到的数据量对不上优先怀疑丢包。丢包原因通常是下面几个。第一电脑网卡不是千兆或者网线是百兆线DCA1000的实时数据率超过百兆网口承载能力表现就是大量丢包。第二mmWaveStudio所在电脑同时跑着其他大流量应用比如网盘同步或者视频会议抢占了带宽采集时把这些都关掉。第三帧配置里ADC采样率和chirp数量过高导致瞬时数据率超过DCA1000到电脑这条链路的稳定吞吐。针对最后一点我一般会把采样率先降到2000ksps、采样点数128等全链路验证通了再逐步往上加。字节计数Byte Count字段是排查丢包的利器。解析时可以记录每个UDP包的Byte Count如果相邻两个包的计数值出现跳变——比如从100跳到103而中间丢失的包没有被收到——那就说明中间丢了包。丢包严重的帧建议直接丢弃重新采集因为缺了数据的帧再做FFT会引入频谱泄漏和鬼影。6.3 一些容易被忽略的细节最后分享几个容易被忽略但实际很影响体验的细节。第一DCA1000和雷达板叠放时两者之间的60pin连接器要压到位。有些朋友怕压坏板子不敢用力结果接触不良数据时序不对现象千奇百怪。插好后可以轻微晃晃看有没有松动。第二每次重新上电后建议先连DCA1000再连雷达设备顺序反了偶发连不上。这跟两侧设备的上电初始化时序有关养成固定习惯能少很多随机故障。第三保存数据时给每个数据集单独建文件夹把mmWaveStudio生成的参数文件和bin文件放一起文件名带上日期和参数关键信息。雷达算法的调试经常需要来回对比不同参数下的数据没有规范的文件管理一个星期后你自己都分不清哪份数据是哪个版本配的。我个人在整套流程跑通后最大的体会是硬件连接这东西没有太多玄学问题大多出在IP、供电、跳线和USB线这些基础环节。把基础打牢后后面无论是做呼吸监测、手势识别还是接入自定义点云算法都能把精力集中在真正的信号处理上。如果你也刚拿到这套板子按这个顺序一步步来原始数据到手只是时间问题。