
上个月读到一篇关于用60GHz毫米波雷达做非接触生命体征监测的论文结尾引用了一句“该频段具备7GHz连续带宽理论上距离分辨率可以做到2厘米级别”就因为这十几页纸我花了两周时间从画原理图到调通软件亲手做出来一块60GHz毫米波雷达模块。更让我意外的是整个物料成本算下来不到300元而同一颗芯片的官方开发板要卖两三千连零头都算不上。这篇博客不是论文复现也不是教你抄作业而是一份从零开始的手工雷达模块制作记录。我会把硬件选型、PCB布线、焊接调试、信号处理链路的每一个关键决策写清楚包括那些官方文档里不会告诉你、只有自己折腾过才知道的坑。无论你是射频工程师、嵌入式老手还是刚接触毫米波雷达的学生只要会一点单片机和C语言都可以照着这条路线自己做一块能测距、能检测人体存在、甚至能提取呼吸信号的雷达模块。1. 项目背景与整体思路1.1 60GHz毫米波雷达模块到底在解决什么问题先想清楚一个前提为什么非得是毫米波雷达家里现成的红外传感器、摄像头、超声波模块也能做人体检测但它们各自有明显短板。热释电红外传感器只能感知移动中的人人一坐定就失效摄像头在暗光环境下抓瞎而且卧室里放摄像头很多人心理上过不去那道坎超声波需要发射头对准目标穿透非金属外壳的能力也很差做进智能家居设备里会被外壳挡住。毫米波雷达不一样。它发射的是电磁波频率在60GHz附近波长只有5毫米左右天然对微小的位置变化极其敏感——人在沙发上呼吸引起的胸腔起伏大约有1到2厘米的位移这种幅度在60GHz雷达眼里已经是大动作了。再加上电磁波可以穿透塑料外壳、木板不受光照影响又不会拍到任何图像隐私性极佳。所以60GHz这个频段在业界被大量用于室内存在检测、手势识别、跌倒检测、呼吸心跳监测这类场景。它和汽车上常用的76到81GHz频段是同一个大家族只是60GHz更偏向短距离消费类和工业类应用。波长短带来的另一个好处是天线尺寸可以做得很小几毫米见方就能塞进一块普通的PCB里这也是我能把它做成“模块”而不是“天线阵列”的根本原因。1.2 论文里最打动我的三个点让我动手的那篇论文核心是讨论FMCW雷达如何从反射信号中提取呼吸和心跳信号。技术细节不多说了但有三个观点直接改变了我对“毫米波雷达硬件很难”这件事的认知。第一个观点是FMCW原理其实只用一个公式就能解释清楚发射频率随时间线性上升遇到目标反射回来后接收到的信号和发射信号做混频得到的差频频率和目标距离成正比。只要测出这个低频差频信号的频率距离就出来了。原理清晰不需要微波电路设计能力。第二个观点是60GHz频段的射频收发链路早就被集成进了一颗小小的单芯片里甚至天线都能做到封装内部也就是业内说的Antenna-in-PackageAIP。用户要做的核心工作不再是匹配微波电路而是给这颗芯片供好电、用SPI读取它吐出来的数字化中频数据。这彻底颠覆了我原来对射频硬件“必须有一整套微带线、巴伦、混频器”的印象。第三个观点是关于距离分辨率的分析。论文里给出了详细的推导距离分辨率等于光速除以两倍调频带宽。如果用满60GHz频段的7GHz带宽理论上距离分辨率能做到2.1厘米。即便只用其中4GHz带宽分辨率也有3.75厘米识别一个人体没有任何问题。这个数字是促成我下定决心打板的关键——性能天花板足够高值得一试。可以说这篇论文把“做雷达”这件事从神坛上拉了下来变成了“做一个带SPI接口的信号采集系统”。剩下来的工作就是工程细节。1.3 方案选型为什么要自己打板既然原理清楚接下来就是方案选择。现在市面上能买到的60GHz雷达方案主要有三条路我认真对比过才做了决定。第一条路是买官方评估板。芯片原厂的开发板做得确实精致开箱即用配套的图形化配置工具也很强大。但价格是硬伤一块60GHz雷达评估板动辄两三千对个人学习来说门槛太高而且很多评估板的排针接口、外壳设计都是为了演示通用性塞进自己的产品里还是要重新画板。第二条路是直接用分立射频器件搭。买VCO、混频器、功分器、贴片天线自己设计60GHz的传输线和天线阵列。这条路技术含量很高但需要昂贵的微波测试设备比如频谱仪和矢量网络分析仪个人玩家基本不用考虑。第三条路就是我现在走的只用一颗集成的60GHz雷达前端芯片配上普通MCU和低成本的FR4四层板。芯片内部已经完成了射频收发、混频、滤波、ADC采样封装里还集成了发射和接收天线。我只需要负责供电、SPI通信和数据处理。三类方案对比如下方案射频难度总成本可定制性适合人群官方评估板低高低评估算法、快速原型分立器件搭雷达极高极高高射频研发团队单芯片自制PCB中低低高嵌入式工程师、DIY玩家选第三条路的前提是芯片封装里必须带天线否则普通玩家很难处理60GHz频段的辐射结构。我选的那颗芯片正好是AIP封装焊盘面积小周边电路只需要十几个阻容和一颗LDO非常适合手工回流焊。1.4 成本细账300元怎么花出来的很多人以为做雷达必然烧钱我把最终物料清单列出来你会发现大头其实是开发调试用的零碎工具严格意义上的雷达物料反而便宜。物料项型号/规格数量单价约60GHz雷达前端芯片AIP封装单芯片1130元主控MCUSTM32F103C8T6112元LDO稳压芯片3.3V/1.8V低噪声26元PCB打板四层板10片1批次60元阻容电感等被动元件0402/0603若干20元USB转串口芯片CH34015元测试排针/杜邦线2.54mm若干10元合计约243元。买物料时再顺手带点助焊剂、高温胶带凑了大概280元。对比官方开发板两三千的售价这确实是“零头”级别的成本。但请注意我这份清单的前提是芯片从正规渠道买到样片或小批量PCB用嘉立创的4层板工艺MCU用最小系统不追求集成显示屏和外壳。功能对标官方板的核心测量能力足够了。省钱的代价是我没有板载调试器和外壳。调试时用杜邦线引出SWD接口靠一个十几块钱的ST-Link下载程序完全够用。2. 硬件设计从原理图到PCB的踩坑记录2.1 芯片外围电路与最小系统设计拿到芯片数据手册的第一件事不是看寄存器而是画电源树。雷达前端芯片内部同时有射频模拟电路、锁相环和高速ADC这三个模块对电源噪声都很敏感电源设计直接决定雷达能看多远。我设计了三路电源系统总输入用5V从USB口取电经过一颗低噪声LDO降到3.3V给STM32和雷达芯片的数字部分再用另一颗LDO把3.3V降到1.8V给雷达芯片的模拟射频部分。注意模拟1.8V和数字3.3V之间要放磁珠做滤波隔离磁珠能吸收高频噪声避免数字开关噪声串进射频模拟链路。每路电源的输入输出都要并联两组电容一组10uF的钽电容吸收低频纹波一组100nF陶瓷电容滤除高频毛刺这是标准的退耦配置。STM32部分我直接画了最小系统8MHz晶振给主频倍频用32.768kHz低速晶振可以不焊节省成本BOOT0下拉到GND复位脚接上拉和按键。雷达芯片和STM32之间走的是四线SPISCK、MOSI、MISO、CS再加上一根中断输出脚用于通知“有新数据就绪”。画原理图时一定要仔细核对芯片的引脚间距和封装尺寸。我这次选的芯片是类QFN封装底部有一个很大的散热焊盘我给它打了十几个过孔引到背面覆铜。散热焊盘如果处理不好芯片长时间工作后频率漂移雷达测距结果会跟着漂。2.2 天线净空区最容易被忽略的致命布局问题由于芯片是AIP封装天线已经在芯片内部很多人因此认为PCB布局可以为所欲为这是最大的误区。天线虽然做在封装里但它向外辐射电磁波的方向必须留出“视野”——这块区域叫净空区。如果净空区上有覆铜、走线或者较高的器件射频能量会被这些导体反射和吸收实际发射功率衰减严重测距距离可能直接掉一半。我在布线时把雷达芯片放在板边天线那一侧的PCB边缘到芯片本体之间不铺任何铜皮整个区域完全镂空。为了保险起见这片净空区在顶层和底层都不能有其它信号线穿过。芯片正上方的器件高度也做了控制C15、C16几个小电容从0402换成了更矮的0201封装尽量减小对波束的遮挡。另一个我踩过的大坑是雷达芯片的重力方向。有些官方参考设计会把芯片竖着放天线朝向侧前方这时主板本身的边框、USB座都会进入天线口径区域方向图被割裂。我最后选择把芯片平躺在板边缘天线朝天这样使用时把模块平放探测面朝向整个房间效果好很多。如果你也想打样建议在PCB下单时让厂家把天线区域的阻焊开窗也做好。虽然天线在芯片内部但开窗能减少走线和阻焊层对介电常数的局部影响实测对增益稳定性有一点帮助。2.3 PCB叠层为什么我敢用FR4四层板60GHz的板子很多人一听就觉得必须用罗杰斯高频板材但那东西每平方厘米都在烧钱个人玩家没必要。AIP芯片把天线和射频匹配都放在封装内部板子上没有任何超过1GHz的高速走线真正走的是SPI数字信号频率通常只有10MHz左右。所以对我来说普通FR4四层板完全够用。四层板的标准叠层是顶层走信号、第二层完整地、第三层电源、底层走信号。其中最关键的是第二层必须是完整的地平面不能有任何走线切割。地平面能给顶层的数字信号提供清晰的回流路径同时给整个稳压电源提供低阻抗回路。关于特性阻抗这颗芯片的SPI接口最高时钟我设成了10MHz这个频率在FR4上走短走线不超过10厘米完全不需要做50欧姆阻抗控制直接按普通规则布线就行。真正需要注意的反而是不要跨分割区走线——如果SPI的SCK从顶层的A处走到B处而它们对应的参考地平面中间被一条电源走线隔断了信号回流路径绕远波形会变差严重的会直接导致通信不稳定。嘉立创的四层板工艺参数选JLC04161H这个默认叠层不需要额外加钱做阻抗下单时我只要勾选“4层板、1.6mm板厚、沉金工艺”就可以。沉金工艺的平整度比喷锡好利于手工焊接和长期的可靠性一片板子也就贵十几块钱值得。2.4 打板与物料采购实操我在原理图完成后用立创EDA画PCB导出Gerber文件压缩包直接在嘉立创下单页面里上传填好工艺参数下单后第三天下线第四天快递到手总共打了5片板。采购物料时有个经验雷达前端芯片一定要优先从原厂授权代理商或者立创商城这类渠道买不要贪便宜在二手平台买“拆机件”。射频芯片对静电极其敏感拆机件引脚可能有损伤遇到问题你还要花时间排查是不是芯片坏了省50块钱可能浪费一周。被动元件我统一用0603封装只有净空区附近的电容用0201这样能兼顾手工焊接难度和体积。焊接的时候用中低温锡膏热风枪调到350度左右先把板子预热到100度再吹芯片避免冷板直接上热风导致焊盘翘起。在这里多说一句最好在PCB上预留至少两对测试点一对是雷达芯片SPI的MISO和SCK另一对是电源地。测试点看起来占地方但调试时逻辑分析仪、示波器探针都有地方下勾省下的时间绝对值回这几毫米面积。3. 焊接与硬件调试3.1 焊接顺序与关键工具我这次用到的工具清单很普通恒温加热台、热风枪、烙铁、钢网、放大镜、助焊剂、吸锡带、镊子。如果你只想用烙铁焊芯片也不是不行但底部有散热焊盘的封装用烙铁处理很费劲强烈建议上钢网加回流焊的办法。焊接顺序有讲究先焊电源部分再焊主控最后焊雷达芯片。这样中间任何一步出了问题都能及时排查不会把故障风险累积到最后一步。具体来说对准钢网刮锡膏到PCB焊盘上。贴上芯片用镊子轻轻按压排出气泡。放到加热台上温度曲线设到最高260度等锡膏完全熔化变成亮银色。用烙铁补焊周边电阻、电容、USB座、排针。焊完第一件事是检查有没有连锡。用放大镜沿着所有引脚看一圈特别要看芯片底部焊盘和接地过孔周围有没有锡珠。我第二块板子就是因为散热焊盘和旁边的信号过孔之间有一小滴锡珠上电后电流从1.8V窜到地直接把LDO烧了。3.2 供电自检别急着上雷达芯片焊接完毕不要立刻插USB先检查三个电源轨有没有短路。万用表打到蜂鸣档量5V、3.3V、1.8V分别对地的阻值正常情况下都应该在几百欧姆以上如果响铃说明有短路。确认没有短路后先不焊雷达芯片只给STM32最小系统上电用串口工具看芯片是否在跑。这个步骤可以把硬件问题限制在“主控部分”和“雷达部分”两个隔离区间排查起来快很多。我第一次通电就踩了坑USB口接上后电流飙到200毫安但3.3V输出只有0.5V。量LDO输入端5V正常而输出被拉低说明负载侧有短路。用热成像仪扫了一遍发现雷达芯片的位置微热拆下来吹掉锡膏重新检查才发现是散热焊盘上残留了一个锡珠。所以这个“先焊主控后焊雷达”的顺序看起来多花了一道工序实际上能帮你避免很多无头绪的排查。3.3 用SPI把芯片叫醒雷达芯片工作后第一件事就是通过SPI读取它的ID寄存器确认真实通信上了没有。如果SPI读写都正常芯片会回一个固定的厂商ID和芯片版本号这一步是整个项目第一个里程碑。SPI通信排查中我最常犯的错是片选信号时序。雷达芯片要求CS在整个读写周期保持低电平一次完整的读操作至少需要32个时钟周期其中前半段是发送寄存器地址后半段读取数据中间不能释放CS。如果片选时序不对读到的字节全是0xFF或者乱码。还有一个特别容易忽视的细节雷达芯片上电后需要一小段初始化时间通常需要几十毫秒到几百毫秒具体取决于内部固件加载方式。如果STM32复位后立刻去读ID芯片还没准备好自然读不到数据。正确的做法是上电后延时100毫秒以上再初始化SPI然后再读ID。我调SPI时习惯用逻辑分析仪同时抓CS、SCK、MOSI、MISO四条线对照波形看是否满足芯片手册里的时序图。逻辑分析仪是我调试外设的最强助手比示波器便宜还能长期挂着抓异常时序。3.4 看到第一段原始中频数据SPI打通之后下一步就是配置FMCW波形。这个环节需要设置几个关键参数起始频率60GHz调频带宽查手册发现芯片实际可用带宽正好能达到4GHz这是单次扫描可以配置的上限扫描周期每帧配置128个chirp单个chirp时长80微秒ADC采样率根据最大探测距离设到2MHz由于我没有示波器可以看模拟中频信号直接把雷达芯片内部ADC的输出数据通过SPI DMA流读取出来存到STM32的数组里。然后每隔几秒通过串口发一段原始数据到PC用Python脚本画出来。看到波形的那一刻真的很兴奋虽然只是几组像正弦波一样起伏的数但它代表的是一面墙或者一个人站在65厘米外反射回来的真实信号。接下来才是真正进入信号处理的部分。4. 软件与信号处理链路4.1 数据流架构DMA采集到距离谱整个软件链路如下雷达芯片每完成一次chirp采样内部ADC数据存入FIFO经SPI DMA搬运到STM32的RAM缓冲区当一帧数据收齐后MCU对每个chirp做距离维FFT得到一个“距离谱”多个chirp的距离谱再沿时间轴排成矩阵对每个距离bin再做一次多普勒维FFT就能得到距离-速度谱。这里特别推荐用DMA而不是循环读取SPI。一帧有128个chirp每个chirp采256个点总共32768个采样点如果每来一个字节都用中断去读CPU会被打满FFT根本没时间跑。DMA方式下CPU只需要在帧结束时统一处理数据效率高一个数量级。帧数据结构我用结构体封装方便后续扩展typedef struct { uint16_t chirp_id; // 当前chirp序号 uint8_t rx_ant; // 接收天线编号 uint16_t sample_num; // 采样点数 int16_t adc_data[RADAR_SAMPLES]; // 原始ADC数据 } radar_frame_t;每帧结束后DMA会置位事件标志主循环在后台跑FFT和检测算法。时间预算上STM32F103主频72MHz跑一次512点复数FFT大约需要几百微秒128个chirp串行处理也就几十毫秒完全支撑得起实时输出。4.2 距离维FFT与多普勒维FFT的实现细节距离FFT的输入应当先去除直流分量。ADC送进来的原始信号含有很大的直流偏置直流在FFT里落在第0个bin如果不处理它和旁边真实目标的谱线会混叠到一起。我的做法是先求整段数据的平均值然后每个采样点直接减去这个均值。FFT本身我没有手写直接用ARM官方的CMSIS-DSP库这是实际工程项目里最常见的做法。代码如下arm_cfft_f32(fft_instance, fft_input_buffer, 0, 1); arm_cmplx_mag_f32(fft_input_buffer, magnitude_output, RADAR_FFT_LEN);第二维多普勒FFT的情况类似只不过FFT的输入变成了同一距离bin下128个chirp对应的复数幅值。对普通存在检测来说其实并不需要把多普勒FFT做全只需要对每个距离bin的复数值沿时间轴做FFT观察是否存在“零频附近的能量变化”。人走动时多普勒频移大静止时呼吸也会引起1~2Hz的微小频移在频谱上的表现完全不同这两类特征足够做检测分类了。4.3 从距离谱到目标检测CFAR阈值怎么设FFT之后每个距离bin上的幅值代表该距离处的反射强度。但直接拿幅值和一个固定阈值比较很不靠谱距离近的地方噪声能量大距离远的地方噪声能量小固定阈值会把近处噪声误判成目标又会漏掉远处真实目标。工程上常用的方法是CFAR恒虚警检测它的核心思想是每个距离点都动态估计周围背景噪声然后检测目标是否显著高于这个背景。我采用了最简单的单元平均CFAR对于距离谱上第n个点取它前后若干个保护单元避免目标自身泄漏污染噪声估计和参考单元计算参考单元的平均幅值再乘一个比例系数作为检测门限。如果第n个点的幅值超过这个门限就判定为候选目标。我记得第一次调CFAR的时候门限系数设得太小结果墙上的一颗金属螺丝被当成了目标标记位置还来回抖动。把门限系数从10dB抬到14dB之后虚警立刻降下来。实际调参过程没有唯一正确答案和天线增益、房间环境都有关系但14dB左右是一个普遍适用的初始值。// 简化版CA-CFAR核心逻辑 for (int i guard ref; i RADAR_FFT_LEN - guard - ref; i) { float noise 0.0f; for (int j i - ref - guard; j i - guard; j) noise mag[j]; for (int j i guard 1; j i guard ref; j) noise mag[j]; noise / (2 * ref); if (mag[i] cfar_threshold * noise) { mark_target(i); } }4.4 存在检测与呼吸提取算法存在检测本身用CFAR得到的能量累计就够用但要做到“面对一个静止不动的人也能报警”就必须在微小信号上下功夫。我的做法是选取CFAR检测到的目标距离bin把它的复数信号按时间顺序保存下来形成一个复数时间序列。这个序列的相位变化本质上反映了目标表面的微小位移。呼吸引起的胸廓起伏大约会让目标表面移动1~2毫米。对于60GHz信号一毫米位移大约是信号波长的五分之一反映到相位上是约2弧度360度/5的变化量完全能被检测出来。具体实现是对复数时间序列做相位解包裹得到连续相位曲线然后做一个带通滤波器只保留0.15到0.6Hz这个频段对应每分钟9到36次呼吸如果这个频段内的能量超过阈值就认为检测到了呼吸。这段算法我在STM32上实现了一个简化版完整版本我用Python在上位机先验证确定最优滤波器参数后再移植到嵌入式。果然第一次在电脑上跑出呼吸波形的那个晚上我觉得整个项目值了。4.5 上位机实时可视化调试雷达算法时如果只看串口打印的数字很难直观判断信号质量。我写了一个简单的Python脚本通过串口接收STM32发来的距离谱数据用Matplotlib的实时绘图画出每一帧的距离曲线。注意不要把整个上位机逻辑做得太复杂重点是快速看到结果、验证算法。串口协议我用最简单的帧格式字节序列内容0xAA 0x55帧头1字节数据长度1字节帧标识N字节距离谱数据float1字节校验和上位机每收到一帧就把曲线刷新一次再加上一个滑动平均窗口画面会变得平滑很多。对不熟悉串口通信的读者说一句高频传输时一定要选用波特率在921600以上或者干脆用USB虚拟串口否则921600以下的波特率在持续大量发送时还是会丢包非常头疼。5. 实测和官方开发板比一场5.1 测试环境与测量方法我自己的模块调通后借了一块朋友的官方评估板跑了同一个外围测试项目配置尽量保持一致同样的FMCW参数、同样的检测门限、同样的房间环境。测试内容包括静态目标测距、人体存在检测和人员走动距离记录。测试环境选在普通办公室大约5米乘4米的空间靠墙摆放金属柜和办公桌雷达模块放在桌沿高度1.2米正对开阔区域。没有消音室也没有标准角反射器测试结果介于实验室理想数据和用户真实体验之间的真实状态。测距测试用了一张A4大小的金属板作为反射目标把目标放在0.5米到5米的几个固定距离上雷达报告的距离如下实际距离雷达测得距离误差0.5m0.52m2cm1.0m1.03m3cm2.0m2.06m6cm3.0m3.09m9cm5.0m5.18m18cm5.2 存在检测与呼吸信号实测存在检测方面我做了两组测试一组是人在雷达前走动一组是人在雷达前坐在椅子上安静玩手机。走动时系统响应速度小于0.5秒基本人一进入雷达视野就报警静止时检测时间稍慢大概需要2到3秒的呼吸信号累积才能稳定识别。官方板在这组测试中的表现差别不大只是报警后抖动率略低。呼吸信号提取用串口把目标复数信号的相位数据发到电脑进行带通滤波后画图波形非常清晰可以数出大约每分钟16次的呼吸节律这段波形和官方开发板Seek工具生成的曲线高度接近说明我的信号链路的底噪并没有成为瓶颈。5.3 性能差距和原因分析当然和官方板对比还是能看出差距的。最明显的就是最大探测距离和近距离死区。官方板标称最大检测距离可以到十几米我的模块在门限不变的情况下只能稳定探测到7米左右近距离方面官方板可以做到5厘米级别而我的模块在30厘米以内会出现大量杂散反射系统会偶尔报目标距离漂移。这个差距的核心原因有两个一是官方板的天线虽然也是封装集成但它的天线口径面积比我选的这颗芯片大波束更窄、增益更高远距离信噪比自然更好二是官方固件里的算法经过了大量标定而我自己的CFAR参数只能基于有限测试手工调整。这些差距大部分可以靠软件弥补把FFT点数从256提高到1024、改用多天线联合处理、引入自适应背景对消都能显著提升性能。但天线增益这个物理限制是软件救不回来的如果你追求几十米探测就该换更大封装天线版本或者外接天线阵列单纯靠改算法收益很有限。6. 常见问题与排查技巧实录6.1 上电电流异常偏大或偏小如果你给模块上电时发现电流一下飙到200毫安以上先别问算法一定从硬件查起。最常见的原因是某个LDO输出短路拿万用表蜂鸣档量3.3V和GND如果响铃基本就是电容焊错方向、芯片散热焊盘连锡或者飞线短路。反过来如果电流只有几个毫安说明系统没有正常启动。这时重点查复位引脚是不是一直被拉低以及STM32的晶振有没有起振。没有示波器时可以用万用表量晶振脚的电压正常应该在VDD的一半左右轻轻跳动如果直接量到0V说明芯片没有跑起来。6.2 SPI读不到芯片IDSPI通信不通是最磨人的事按顺序排查效率最高。先确认CS高电平有效还是低电平有效然后查SCK极性CPOL和相位CPHA是否匹配再查MISO线上有没有上拉电阻——很多读不到ID的问题就是MISO被悬空导致回读全是低电平。还有一个隐藏很深的坑是雷达芯片初始化等待时间不够。如果上电后立刻读ID芯片内部参考时钟还没稳定会一直返回0x00。我给STM32加了500毫秒延时后再初始化SPI问题直接消失。另外某些芯片还要求SPI通信结束后释放CS时要让SCK停在高电平否则会误触发一次额外时钟边沿这个也容易忽略。6.3 距离谱上全是噪声看不到目标峰距离谱噪底很高、目标峰淹没在里面的情况我从硬件和软件两个方向排查过。硬件上最有效的手段是检查天线净空区是否被违规遮挡我把模块放在桌面上一本厚书旁边测试时距离谱的整体噪底抬高了大概6dB把书移开后立刻恢复。软件上首要怀疑对象是FFT前没有去除直流或者FFT点数太少导致频谱泄漏严重。处理直流的方法前面说过还有一种简单有效的降低底噪的技巧是加窗函数。我在距离FFT前对时域数据乘上汉宁窗旁瓣瞬间压下去目标峰顿时突出不少代价是主瓣宽度变宽了一倍距离分辨率略降但存在检测场景完全够用。6.4 快速故障排查速查表症状可能原因快速处理办法上电电流200mA以上输出短路/焊锡连桥蜂鸣档量电源轨对地阻值电流只有几毫安复位拉低/晶振不起振量复位脚电平、晶振波形SPI读到0xFF时钟极性与相位不匹配四种CPOL/CPHA组合逐个试SPI读到0x00上电初始化时间不够延时500毫秒再读ID距离谱噪底高天线净空区有金属遮挡检查芯片周围布局目标峰模糊频谱泄漏严重时域加汉宁窗近距离大量杂散近场强反射饱和降低发射功率或增大起步阈值检测结果抖动门限太低/目标太弱提高CFAR门限系数6.5 一条节省大量调试时间的经验最后分享一个我用血泪换来的经验做这类模块时一定要在每个电源域旁边预留独立的测试点并且在PCB上预留一组SPI排针测试位。也许你画板时觉得这些测试点占地方实际调试时你会发现逻辑分析仪、示波器、万用表的探头都靠着它们才能站稳。我第二版PCB把SPI测试点放在了雷达芯片对角位置结果调试时探头一压就把芯片旁边的电容压掉了重新补焊花了两个小时。第三版重新布局把测试点引到板边排针上从那以后调试一次过。这套板子到现在还躺在我桌上每天跑着呼吸检测算法。偶尔路过看一眼屏幕上的实时距离谱我还会想起第一次看到呼吸波形时那种“这个东西真的活了”的兴奋感。如果你想接触毫米波雷达又不想投入太多预算这条路确实很值得走一遍。下一步我准备把呼吸检测算法独立出一个低功耗版本用一颗16MHz的小芯片去做存在检测如果搞定再来更新。