资讯动态

嵌入式开发周报365期:高精度采集与开源雷达系统解析

发布时间:2026/10/20 6:22:19 来源:尧图企业网站定制
每周雷打不动看嵌入式周报已经成了我这几年工作的固定环节。说实话并不是每期都能让我停下来认真读但第365期有点特殊先不说内容细节单是能坚持更新到365期这件事本身就值得琢磨。这期周报有四个话题特别对我的胃口某半导体大厂发布的低噪声、高线性度万用表参考设计一套号称可以探测20公里外目标的开源雷达一个完整的开源图形计算器项目还有某软件巨头推出的手把手Rust教程。这四个话题分开看属于仪器仪表、射频雷达、嵌入式GUI、编程语言四个方向合在一起恰好能勾勒出嵌入式开发者现在需要关注的能力面。这篇文章我就把这几块逐一拆开讲清楚每个项目的技术内核、工程价值和你能从中借鉴的东西。1. 万用表参考设计低噪声、高线性度到底在解决什么问题1.1 万用表的位和噪声那些藏在末位的数字很多做嵌入式的人对万用表的态度是“能用就行”看到“低噪声、高线性度”这种词反而没什么感觉。但如果你做过哪怕一次高精度数据采集就会明白这两个指标才是高分辨率仪表的核心门槛。先解释一个认知误区。万用表显示“6位半”不代表它真的能稳定读出6位半的数值。位数只是分辨率告诉你它显示小数点后几位能不能让最后一位不是在那里乱跳取决于“噪声”。噪声直接决定了ADC读数的有效位数噪声大时末位会不停跳动可能前几位数字都没法相信。第一个位地就是分辨率第二位地是噪声。线性度是另一回事。一个ADC如果输入0.1V读出1000输入0.2V读出2005输入0.3V读出2980那它虽然分辨率和噪声都不差但测量结果依然不准确。你可以把它想象成一把尺子刻度虽然密但刻度之间的间距不均匀。低线性度意味着这把尺子在局部尺子刻度出现了畸变只有在校准过的少数点上才准确。万用表参考设计的价值就是用一套完整的方案告诉你到底怎么搭电路、选什么ADC、怎么处理前端才能同时做到低噪声和高线性度。这种参考设计对做温度采集、电池检测、称重仪表、微弱电流测量的工程师尤其有价值因为底层思路完全一样。1.2 把参考设计拆成四个模块我拿到这类参考设计习惯性会拆成四个模块来看输入保护与量程切换、基准源、ADC采样、控制与校准。第一个是输入保护与前端切换。万用表必须能扛住用户误接高压所以输入端口前段会有PTC热敏电阻、TVS管、放电管等多级防护。量程切换则通过精密电阻分压网络和模拟开关实现高电压量程靠分压衰减小电压和电流量程靠精密采样电阻。这里有个工程难点模拟开关的导通电阻会随温度漂移而且不同通道的漏电流也不一样直接影响线性度。第二个是基准源。ADC再准如果基准电压在漂移测量就全部跟着漂。高精度设计通常用低温漂、低噪声的基准源配合合理的去耦和布局保证基准噪声不成为系统底噪的一部分。基准是整个系统的“血压”它稳了后面才谈得上准。第三个是ADC。万用表这种场景主流选择是∑-Δ架构的高分辨率ADC利用过采样和数字滤波把噪声压到微伏甚至纳伏级别再通过校准修正线性误差。真正高精度的表还会对ADC的积分非线性做逐点校正表格存在Flash里读数时查表修正。第四个是控制与校准。MCU负责量程切换、读取ADC结果、应用校准系数、通过串口或USB上报数据。校准是这套系统里最需要耐心的环节通常需要多个标准电压源逐点采样再通过最小二乘法拟合出修正曲线。1.3 高精度采样的实战避坑漏电流、接地与校准如果你也想仿照这个思路自己做一套高精度采集设备我以实际经验先给你泼几盆冷水。第一盆冷水是PCB漏电流。很多人在面包板上搭出来的电路噪声大直觉以为是芯片不行其实大概率是板子没洗干净或者走线间距太近。助焊剂残留、潮湿环境下PCB基材表面的离子迁移会产生比芯片偏置电流还要大的漏电路径。解决办法是设计时在输入端周围铺保护环用同电位的走线把敏感引脚包围起来把漏电流引走。我实测过这个操作往往比换更高端的芯片效果更明显。第二盆冷水是地环路处理。模拟地和数字地怎么分本身就是高频考点。我的做法是单点汇聚模拟部分单独一块地数字部分单独一块地然后在一个单点用磁珠或直接铜皮汇合。有些人喜欢把所有地直接大面积连在一起在普通电路上没问题但高精度场景下数字信号的回流噪声会串进模拟地ADC末位立刻给你“颜色”看。第三盆冷水是校准。永远不要指望硬件本身能做到万分之一线性度必须靠软件校准。手头没有标准源时可以借用高精度电源加精密电阻分压生成几个已知电压点做两点或三点校准。校准完成后一定要把系数存储到非易失区并考虑温漂修正否则换一个环境温度测量结果又会飘出去。2. 开源雷达20公里先看懂雷达距离方程再动手2.1 20公里这个数字意味着多强的系统“开源雷达、探测距离20公里”这个组合比单纯的雷达项目要复杂得多。很多人看到20公里就想“发射功率肯定不小”这个直觉对了一半。雷达探测距离和发射功率的关系并不是线性的它服从雷达距离方程最大探测距离正比于发射功率的四次方根。也就是说想让探测距离翻倍发射功率理论上要提高到原来的16倍。天线增益同理让口径增大使增益翻倍对距离的贡献也只是把它提升了四次方根的量级。我做了一张快速估算表可以直观感受“距离翻倍”的代价参数距离翻倍所需的改动发射功率提高到原来的16倍天线增益提高到原来的16倍单端接收机灵敏度最小可检测信号功率降到原来的1/16目标反射截面积提高到原来的16倍不受我们控制所以20公里这个数字不是一个简单的“功率大点就行”的问题。开源项目通常会选择更高效率的频段、大尺寸天线阵列以及长时积累的信号处理算法来弥补功率的不足。另一个常被忽略的因素是地球曲率地面架设的雷达要想探测到20公里外低空目标天线高度和目标高度必须有足够的视线条件否则盲区很大。因此这类雷达项目的系统设计远比“发射-接收-显示”三个词复杂。2.2 远距离雷达的完整架构长什么样从参考设计角度看一套远距离雷达架构大致分为五个部分。天线负责把发射信号辐射出去并收集回波。开源项目往往在天线上下的功夫最大因为天线是成本最低的“功率放大器”。接收前端是整个系统里最容易出问题的环节需要低噪声放大器对微弱的回波信号做第一级放大带通滤波器抑制带外干扰然后混频到中频或直接采样。发射链路则通过频率合成器产生需要的载波信号再用功率放大器推动天线。信号处理部分是开源雷达最有学习价值的地方接收到的回波要先做脉冲压缩或FFT积累把淹没在噪声里的目标信号“捞”出来动目标显示用于抑制固定的地物杂波恒虚警检测负责动态判断一个信号到底是不是目标最后通过多普勒处理测出目标的速度。这一整套算法的参数调节比如积累时间、检测门限、杂波系数需要反复做实测调参。在嵌入式侧实时处理一般交给FPGA或高性能DSP因为它要求在极短时间窗口内完成大规模FFT运算普通MCU算力完全不够。MCU在系统里扮演管理角色控制发射时序、调整增益、读取处理结果并转发给上位机。上位机负责画雷达显示界面B扫、A扫随便选择。2.3 做嵌入式能从雷达项目里抄到什么就算你并不打算做雷达这类远距离探测项目也能带给你三样东西。第一是系统思维。雷达是最典型的“模拟前端数字信号处理实时控制显示交互”综合体。跟它相比日常的传感器项目只是其中极小一环。你打开一个雷达开源项目的代码会看到FPGA代码、MCU代码、上位机代码三者如何划分边界、如何定义接口协议这对做复杂嵌入式系统的架构设计很有启发。第二是射频工程经验。接收链路的阻抗匹配、差分走线、屏蔽与接地和普通数字板卡的设计思路完全不同。哪怕只是在项目里读懂屏蔽罩、微带线和阻抗控制这些概念都对你调试带无线模块的产品有帮助。第三是大动态范围处理能力。雷达回波动态范围极大强地物回波和弱目标可能相差好几个数量级。系统要通过自动增益控制和衰减器来“压住”强信号避免接收机饱和。你在做音频采集、信号检测时遇到的“大信号掩盖小信号”问题本质上和她一模一样。如果你真的想上手我的建议是别一开始就自己画高频板先用市面上的软件无线电设备配合天线把FFT积累和检测跑通再考虑定制硬件。这样能把射频和信号的变量分开少踩很多“代码没问题但硬件不工作”的坑。3. 开源图形计算器一个被低估的嵌入式教科书3.1 为什么说它是最好的练手项目而非玩具图形计算器在很多人印象里是一个“过时的电子产品”但它其实是被严重低估的嵌入式练手项目。做点灯只是练GPIO做遥控器只是练按键扫描但一个完整的图形计算器把嵌入式开发的大部分核心技术都串起来了键盘矩阵扫描与消抖、液晶屏驱动、GUI交互设计、字库与图形绘制、数学表达式解析、函数绘图算法、文件存储、低功耗管理等。换句话说它是一台真实的人机交互产品而不是开发板上的Demo。你在它身上练的每一招都能直接迁移到智能家居面板、工业HMI、手持仪器这类实际产品上。而且这类项目通常软硬件全部开源这意味着你不只可以看电路还能把完整的产品级代码拉下来研究这是很多商业项目给不了的学习素材。3.2 软硬件架构里的四个关键模块我习惯把图形计算器的设计拆成四个模块恰好对应嵌入式系统的核心组成。人机交互层键盘矩阵扫描是基本功。矩阵扫描有一套固定的消抖和处理流程但难点在如何把按键事件抽象成队列而不是在主循环里直接处理。成熟的代码一定会有一个事件机制按键按下时先进入队列应用层再取出来响应这样UI不会被按键处理阻塞。显示与GUI层这部分最见功力。图形计算器要同时处理菜单、字符、绘图三种界面还要求在资源有限的MCU上流畅刷新。你不会在主循环里看到“全屏重绘”这种粗暴写法而是通过脏矩形、分区域刷新来降低刷新开销。字库的处理方式也很有讲究点阵字库、缩放、抗锯齿每一步都涉及嵌入式资源的权衡。数学内核层这是图形计算器的灵魂也是最有程序员价值的部分。表达式解析需要把“sin(30*pi/180)2^3”这样的字符串变成计算结果通常用中缀转后缀或者递归下降解析实现。你还会遇到变量代入、函数嵌套、错误处理等问题。这段代码写一遍你对编译原理的理解会上一整个台阶。系统骨架层整机软件要管理多个应用计算、绘图、设置、文件管理。合理的架构一定是事件驱动配合状态机每个界面是一个状态按键事件触发状态迁移。看代码时重点关注main函数和事件循环这两个地方能看出作者的整体设计水平。3.3 从代码里能直接搬走的经验拉下一个图形计算器开源项目后我建议按这个顺序阅读代码先保证编译运行在模拟器或真机上感受一下完整交互然后读main函数和事件循环搞清楚系统怎么启动、怎么调度再看显示驱动和字库模块学习它如何管理framebuffer和重绘最后深入表达式解析和绘图算法这两块是纯算法核心代码风格通常最清晰。很多做嵌入式的人遇到带GUI的产品就头皮发麻图形计算器正好是一剂解药。我自己的体会是状态机加事件队列这套架构几乎适用于所有带按键和屏幕的嵌入式产品。你完全可以把这套代码搬出来只替换自己的业务逻辑和界面内容就完成了一个新产品的雏形。关键还是要克制住“重新造轮子”的欲望。看开源项目最忌讳一上来觉得“这里不好那里不对我要重写”。正确的做法是先使用、再理解、最后才优化。大多数人连事件队列都没有怎么跑通就开始设计自己的架构结果往往是浪费了时间还没学到精髓。4. 微软手把手Rust教程嵌入式开发者要不要现在开始学4.1 大厂教程和碎片化博客有什么不一样Rust的学习资料其实非常多但大厂出品的手把手教程还是值得单独拿出来说。这类教程最大的特点是系统性强从环境搭建开始经历过语法基础、所有权模型、结构体与枚举、错误处理、并发编程、异步等完整路径最后还会落到几个实际项目上而不是零散地丢给你一堆代码片段。对嵌入式工程师来说学Rust最大的坎不是语法而是思维方式。用C写过几年固件的人很容易对“所有权”和“借用”这套规则产生抵触情绪“我明明只是想改一下这个变量凭什么还在报错”但恰恰是这套规则逼着你把内存的生命周期、资源的独占访问理清楚。这套教程的价值在于它用大量可运行的例子帮助你建立直觉而不是只唱高调讲内存安全。跟着它走一遍你会明白编译器到底在检查什么规则背后是什么逻辑。之后再接触嵌入式侧的Rust代码就不会觉得陌生。4.2 Rust在嵌入式里的价值不止是“安全”Rust在服务端和工具链领域已经站稳脚跟但嵌入式侧的发展很多人还没跟上。我观察到的实际情况是嵌入式Rust生态已经远比想象的成熟对Cortex-M、RISC-V等主流架构有完整的支持可以用no_std模式在无操作系统的裸机环境下运行HAL库覆盖了绝大多数常用外设实时任务调度框架也已经相当可用。它在嵌入式里的核心优势很直白内存安全、无垃圾回收、零成本抽象。嵌入式系统里最费时间的Bug比如空指针、数组越界、野指针、多线程数据竞争C语言需要靠纪律和运气来避免Rust则直接在编译期就把这些路堵死了。换句话讲以前要等代码跑崩了才查得出来的问题现在编译器在你写完代码的下一秒就告诉你。更微妙的是Rust的所有权模型和硬件资源管理天然契合。外设寄存器本质上是一种独占资源传统C代码里任何人、任何模块都可以无差别地访问同一个外设寄存器造成极难排查的冲突。Rust里你可以把一个外设抽象成一个类型这个类型在同一时刻只能被一个所有者持有访问冲突直接在编译期就解决了。这种对“可控性”的追求非常符合嵌入式工程师的价值观。4.3 我建议的学习节奏和一套避坑思路我建议的学习路线是这样的先跟着大厂教程把所有章节敲一遍不要跳过练习题尤其是所有权和生命周期这两章的习题值得反复做然后看嵌入式Rust的官方文档和示例库了解no_std和HAL的用法接着挑一个小点做实战比如用Rust写一个串口中断接收的状态机或者给一个传感器写驱动只要把一个点做透就算入门。学习过程中最容易踩的坑是“一边学Rust一边用C的思想写代码”。写熟了C之后再学Rust最容易犯的错是定义好结构体之后到处可变借用、用循环遍历时想直接修改集合、在回调函数里想捕获外部状态。解决办法只有一个把所有编译错误都当作一次学习机会弄清楚背后的所有权规则而不是搜答案然后硬改。另一个常见问题是初学者一上来就把目标定成“用Rust重写整个项目”。我强烈不建议这样。老项目里有大量历史包袱和第三方依赖迁移过程会让你怀疑人生。更合理的策略是选一个新模块、新外设去积累经验等熟练之后再慢慢扩大范围。这样既不会阻断你现有的开发进度也能让Rust以最低风险进入你的技术栈。5. 从第365期周报看到的技术风向与一条实践建议5.1 大厂开源与系统级项目的边界正在改变这期周报四个话题单独看是四个独立领域放在一起其实透露了一个信号嵌入式开发的“参考”正在从“给你一块开发板”升级为“给你一个完整系统”。半导体大厂放出万用表参考设计不是让你照着打样卖表而是希望你理解整套精密测量的链路并把其中的模块用在各种终端产品里。开源雷达项目更是把天线、射频、FPGA、算法全部开放它的目的是普及雷达系统设计能力。图形计算器和Rust教程同样如此前者把成熟产品的软硬件结构摊开给你看后者把一门语言的教学资源做到极致降低入门门槛。这种变化对工程师来说意味着什么意味着学习的成本在下降但筛选信息的成本在上升。过去你找不到好资料现在你随便一搜就有一堆代码困难变成“到底该投入精力看哪一个”。我见过不少朋友把几十个开源项目克隆到本地结果一个都没运行起来。这种行为本质上是把“收藏资料”误当成“学习”囤积感满足了能力并没有提升。5.2 我建议你选一个项目今天就开始动我的实践方法是每期周报看完后只挑一个最感兴趣的项目定一个周末把它消化掉。消化标准很简单第一能编译能运行第二能说清楚它的架构是由哪几个模块组成的第三能指出如果让我自己从头实现我会在哪些地方采取不同的方案。只要这三个问题有答案这个项目就算吃透了。以本期内容为例如果你平时做产品界面多就去把图形计算器拉下来研究UI和数学内核如果你对模拟前端感兴趣就去研究万用表参考设计的输入保护和高精度链路如果你一直想学Rust但没动力这套大厂教程就是你最好的起点。你不必四个都搞那不是学习是给自己制造焦虑。我自己的体会是看周报的最大价值不在于“知道行业发生了什么”而在于它持续给你提供高质量的“练手靶子”。技术能力这东西最忌讳眼高手低。即使是看再多的原理文章不亲手把代码跑起来、不亲手在示波器上量到真实的波形很多东西永远只是停留在文字层面。第365期量很足但真正值钱的是你准备动手的那部分。最后有一个小技巧想分享给你拿到这种系列性很强的开源项目时不要只在电脑上看代码抽时间把它的PCB设计文件打开一根一根走线看下去看到不懂的信号就回去查芯片手册。花一个晚上看懂一块板子和它的固件代码是怎么对应的这套功夫比刷一百遍教程都扎实。嵌入式领域的很多经验最终都是从这些“慢功夫”里沉淀出来的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑