
简介2023年电赛综合测评B题的国一方案完整工程包面向准备电子设计竞赛的本科生与工程师可作为同类型检测装置的设计模板。方案基于梁山派开发板在STM32CubeMXCLionOpenOCD环境下完成可实现同轴线缆长度、终端电阻及电容负载的检测长度采用TDR时域反射法误差小于0.5cm电阻用分压法误差小于0.1Ω电容用NE555振荡电路误差小于1pF。压缩包共228个文件包含C源码38个.c与72个.h、STM32CubeMX配置.ioc、CMake构建脚本、说明文档pdf、txt、xlsx以及调试生成的bin、elf、map等整体约22.64MB。已有3400余人学习。内含完整工程目录与国一作品的设计思路既能帮助理解电缆反射测量原理也可直接移植到该方案中适合赛前冲刺和方案复盘。1. 综合测评 B 题先把现场不确定性踩平再谈国一电赛的综合测评 B 题不少队伍都吃过“看着简单、实际翻车”的亏给一堆通用运放、比较器和阻容限定时间内搭出能出波形、能测频、能显示的小系统。难的不是理论而是现场——元器件包是个“黑匣子”仪表只有一台评审还要在调试最投入的时候打断你。很多队伍回头复盘时发现输分就输在没先定指标、没按模块自测、没给测量环节留冗余。这篇按国一方案来准备适合两类人今年刚进综合测评的队以及下一届打算冲国一的队。整条线拆成“指标拆解 → 模拟链路 → STM32 测量模板 → 现场排查 → 验收答辩”可以直接照抄参数也可以按手头题目改着用。2. 总体架构与指标拆解四大模块和一条信号主链综合测评 B 题拿到手之后最容易犯的错误是“先找电路图后想怎么测”。正常顺序应该反过来先把题目里的每一条“定性要求”翻译成“可验收的量化指标”再用指标倒推方案。题目通常会要求产生某种频率范围的正弦波、把它整形成方波、并对幅度或频率做测量显示。不同年份具体数值不同但考核点基本一致频率范围、幅度稳定度、波形失真、方波边沿质量、测量误差。这一章先把总体架构定下来四个模块负责什么信号从哪进到哪出电源和地怎么规划。2.1 把“做出波形”翻译成“可验收的指标”我一般拿到题目先做一张指标表这表不给自己看而是用来对着验收。综合测评里最常见的指标项大概是这个量级指标项设计目标验收方式正弦输出频率范围1kHz ~ 50kHz至少四档切换频率计/示波器读数连续观察10分钟正弦输出幅度2Vpp ~ 5Vpp 连续可调示波器在缓冲输出端测频率稳定度误差 ≤ 1%开机稳定10分钟后连续测5次取极差方波上升沿≤ 100ns示波器测10%~90%上升时间占空比误差≤ ±2%示波器 Time 档读数这张表的作用是把“做出波形”这种模糊要求变成“某个点不过就调某个点”的工程动作。比如频率稳定度没过就去查选频电容温度系数和运放电源纹波占空比不对就去查比较器参考电平和正反馈分压。指标表也是答辩时最有说服力的素材比口头说“性能很好”强得多。2.2 四大模块与一条主信号链方案按功能拆成四块波形发生模块、整形变换模块、测量显示模块、电源与地平面模块。波形发生负责输出低失真正弦波整形变换用迟滞比较器把正弦变成方波同时做电平匹配让后续数字电路能直接读取测量显示模块以 STM32 为主用外部计数方式统计方波频率并显示电源与地模块负责给运放和比较器提供稳定正负电源。信号主链是这样走的波形产生(正弦) → 缓冲输出 → 迟滞比较器整形(方波) → 电平匹配 → STM32 ETR引脚计数 → OLED显示注意缓冲输出的位置。正弦输出先经过一级跟随器再接负载这样示波器探头、后级比较器输入阻抗都不会改变振荡器的工作点。STM32 挂在信号链最末端只做测量和显示不参与模拟信号生成这是综合测评里比较稳妥的做法——评审如果要查某个环节信号产生、整形、测量三个功能可以独立验证。2.3 电源与地线这一层先定下来后面才不玄学很多综合测评现场翻车不是翻在振荡器而是翻在“地”。运放、比较器、STM32 开发板、示波器探头四套地一混示波器看到的全是毛刺频率计读数也会乱跳。我每一次都会先花十五分钟处理电源正负电源各自在靠近运放供电脚的位置并一个 100nF 陶瓷电容和一个 10μF 钽电容数字部分和模拟部分的地在单片机和模拟板的接口处单点连接不要用长飞线来回跨。电源负压输出如果不对称会导致振荡幅度上正下负、占空比偏移。检测手段很简单用示波器 DC 档量运放第 8 脚和第 4 脚对地电压正负压差超过 0.3V 就要重视。多数赛区提供的正负电源模块本身精度不错问题往往出在负载不对称——STM32 开发板只吃正电源把正路电压拉低。遇到这种情况我会在负电源输出和地之间挂一个 1kΩ 电阻给它加约 10mA 的旁路负载让正负两路负载均衡。3. 模拟链路实现文氏桥、迟滞比较器与缓冲输出怎么搭模拟链路是综合测评 B 题的得分主体也是现场最容易出玄学问题的地方。本章从波形产生开始一直讲到信号送到 STM32 引脚之前每个环节给出参数计算依据和调试手段。3.1 波形发生文氏桥振荡器加自动稳幅频率范围落在 1kHz~50kHz 时我优先选文氏桥振荡器因为它输出正弦失真小频率切换也直观。选频网络用两个电阻和两个电容振荡频率取f0 1 / (2 * π * R * C)假设固定 R16kΩ用波段开关切换电容C10nF 时 f0≈995HzC1nF 时 f0≈9.95kHz想上 50kHz 档把 R 换成 3.3kΩ、C 仍取 1nFf0≈48.2kHz。这样三到四个电容档位就可以覆盖题目常用频段。实际焊接时尽量选用 C0G 或聚丙烯电容不要去用多层陶瓷电容做选频后者的温度系数会让频率漂移得让 STM32 计数结果跟着“游走”。文氏桥能振荡的条件是放大器闭环增益略大于 3但增益太大波形会削顶。我常用的做法是放大环节用反馈电阻 Rf 和输入电阻 Ri 把增益设定到 3.2 左右保证可靠起振再用自动增益控制把输出幅度压到设定值。AGC 的通俗实现是“输出整流后反馈去调节一只 JFET 的栅压”让 JFET 在可变电阻区工作动态改变反馈深度。关键参数是 AGC 时间常数。时间常数太长上电后输出幅度要等好几秒才稳定评审看着难受时间常数太短低频正弦波会出现很明显的“呼吸感”也就是幅度随信号周期上下抖动。我一般取积分电阻 1MΩ、反馈电容 0.47μF建立时间 1~2 秒这是比较稳妥的中间值。调试时先断开 AGC 回路用可调电阻手动把输出调到目标幅度确认振荡正常再接回自动回路能省去大量“不知道是电路问题还是 AGC 问题”的时间。3.2 整形方波迟滞比较器不要省正反馈正弦波进比较器变成方波最怕的是在过零点附近反复翻转产生一串窄毛刺。解决办法不是加大滤波电容——那会拖慢边沿——而是给比较器加迟滞也叫正反馈。把输出端通过一只反馈电阻接回同相输入端比较器就变成一个带回差的施密特触发器只有信号超过上门限或低于下门限时才翻转抗噪能力立刻上来。回差电压的近似计算如下Vh ≈ R1 / (R1 Rf) * (VOH - VOL)其中 R1 是同相端接参考电位的电阻Rf 是从输出引回的反馈电阻。比如 R110kΩ、Rf100kΩ输出高电平 5V、低电平 0V回差大约 0.45V。回差不能取太大否则方波占空比会因为正弦波过零区域不对称而产生固定偏差一般取 0.1V~0.5V 之间视输入信号幅值和噪声而定。实际调整时直接看方波边沿是否干净有抖动就加大 Rf占空比偏了就微调同相端参考电压。3.3 缓冲输出与电平匹配别让负载把测量带偏文氏桥输出阻抗较高直接接示波器探头虽然问题不大但再接上后级负载就可能拉偏频率和幅度。我习惯在振荡输出之后加一级运放跟随器作用有两个第一把选频网络和后级负载隔离开第二给示波器提供一个低阻输出点测试更稳定。STM32 的 ETR 引脚一般容忍 5V但仍建议做限幅保护。从比较器输出串一个 1kΩ 电阻进 STM32再在引脚对地并一个 2.2nF 电容既能限流又能滤掉一部分高频毛刺。这里要注意这个 RC 会稍微增加信号上升时间但对 1kHz~50kHz 的方波来说2.2nF 的影响完全可以忽略不要为此去加大电容。3.4 调试顺序先电源、再开环、最后闭环接负载综合测评现场时间紧最忌讳“整体调通”策略。我的调试顺序固定为先量电源两路电压确定正负对称再临时断开比较器只跑振荡器确认文氏桥输出正弦波然后接上比较器观察方波边沿和占空比最后才接 STM32 计数。每一步用示波器留下波形并且在草稿纸上记录当前频率和幅度。这样分段验证的好处是哪一步出问题问题范围能立刻缩小到刚接上的那一级。我见过不少队伍把整块板子焊完再通电示波器一测波形乱成一团完全不知道是振荡、比较器还是连接线的问题最后只能拆了重搭。多留几个测试点比多焊几个元件更有价值。4. STM32 测量端模板外部计数、均值滤波与校准把测量显示部分放在 STM32 上很多同学第一反应是用输入捕获算频率但综合测评里我更推荐外部计数模式。原因是输入捕获要在两次上升沿之间测量周期还要处理溢出中断代码复杂不说现场一紧张就容易改错外部计数则是把方波直接接到定时器的外部时钟引脚定时器在固定窗口内累加脉冲数窗口结束一读计数器就知道频率逻辑简单误差也容易估算。4.1 外部时钟测频代码模板可以直接抄以常见的 STM32 系列为例定时器 TIM2 可以工作为外部时钟模式外部脉冲从 ETR 引脚输入。基本配置代码如下// main.c 片断把方波接TIM2的ETR引脚做1秒窗口计数 static TIM_HandleTypeDef htim2; void FREQ_ETR_Init(void) { __HAL_RCC_TIM2_CLK_ENABLE(); htim2.Instance TIM2; htim2.Init.Prescaler 0; // 外部信号不分频 htim2.Init.CounterMode TIM_COUNTERMODE_UP; htim2.Init.Period 0xFFFFFFFF; // 32位计数器窗口内不会溢出 HAL_TIM_Base_Init(htim2); TIM_ETRConfigTypeDef etr {0}; etr.Polarity TIM_ETRPOLARITY_NONINVERTED; // 上升沿计数 etr.Prescaler TIM_ETRPRESCALER_DIV1; etr.Filter 0x08; // 数字滤波避开窄毛刺 HAL_TIM_ConfigETR(htim2, etr); HAL_TIM_Base_Start(htim2); __HAL_TIM_SET_COUNTER(htim2, 0); } uint32_t FREQ_Get_Hz(float gate_sec) { __HAL_TIM_SET_COUNTER(htim2, 0); HAL_Delay((uint32_t)(gate_sec * 1000.0f)); return __HAL_TIM_GET_COUNTER(htim2); // 窗口内脉冲数 频率 }这段代码里几个要点值得说明。选 TIM2 是因为它在多数型号上是 32 位定时器1 秒窗口内就算信号到几十万赫兹也不会溢出如果用 16 位定时器计数器满量程 65535被测频率一旦超过 65kHz 就要额外处理溢出标志在测评现场很容易埋雷。etr.Filter 0x08是数字滤波器设置能滤掉宽度小于若干系统时钟周期的毛刺对比较器输出轻微抖动很有效。主循环里配合显示逻辑while (1) { uint32_t freq FREQ_Get_Hz(1.0f); char buf[32]; // 格式化输出到OLED snprintf(buf, sizeof(buf), F%lu Hz, (unsigned long)freq); OLED_ShowString(0, 0, buf); HAL_Delay(300); // 刷新间隔留给人眼看 }1 秒窗口的理论误差是 ±1 个计数脉冲。对 1kHz 信号误差 0.1%对 50kHz 信号误差 0.002%完全满足题目通常要求的 1% 指标。显示刷新间隔取 300ms 比较合适既能看出变化又不至于数字跳得太快。4.2 显示与滤波连续测量取中值比滑动平均更抗毛刺现场电源总会有偶发干扰哪怕信号链正常单次测量也可能蹦出一个异常值。我不推荐复杂的滑动平均滤波因为代码长、可解释性差答辩时反而不容易说清楚。更实用的方案是连续测 5 次去掉最大值和最小值剩下 3 次取平均。这样既滤掉了单次毛刺又不会像纯平均那样被一个异常值拖偏。校准这一步经常被忽略。就算电路参数标称正确实际元件误差也会让频率偏离。我会用信号发生器输出 1kHz 和 10kHz 两个标准频率分别记录 STM32 读数和实际值算出修正系数存在全局变量里。如果现场连信号发生器都没有就用另一个成品的频率计或示波器的高精度时基做参考。修正系数只在显示端乘一下不改变硬件改动成本很低。4.3 如果题目限定“不允许使用单片机”怎么退可守有些赛区的综合测评题会明确限制使用单片机完成核心功能。碰到这种情况STM32 的角色就要提前设计成“离线自测工具”而不是功能组成部分。做法是模拟链路完整独立工作STM32 只在调试阶段接上去看频率评审验收时把 STM32 输入跳线帽拔掉改用示波器或赛场提供的频率计读数。这样既能享受数字显示带来的调试便利又不触碰题目红线答辩时也能说清楚“单片机只做辅助测量功能本身不依赖它”。如果限制更严格连辅助测量都不允许那就把显示部分换成纯逻辑计数器加数码管。这里不再展开但在方案里至少要有这种备选分支别等到了现场才发现规则冲突。5. 高频翻车点排查四个最影响得分的现场问题综合测评 B 题拿国一的队伍很少是电路设计惊艳到全场更多是全场没出大问题。下面的排查清单按现场出现频率排序每一条都按“现象、原因、解决”来写可以直接当现场手顺书用。5.1 振荡器不起振或者输出幅度不断漂移现象接通电源后示波器看不到正弦波或者波形能看到但幅度在几十秒内明显变大变小频率也跟着轻微变化。原因文氏桥电路的反馈增益正好卡在起振临界点环境温度一变、手一碰电阻就掉出振荡条件另一个常见原因是 AGC 回路积分电容漏电导致栅极电压慢慢飘走JFET 等效电阻跟着变化。解决把放大增益从理论值 3 提高到 3.3~3.5让电路稳定起振靠 AGC 再把幅度压回设定值。AGC 积分电容换成钽电容或薄膜电容别用普通电解。调试时用手捏住 JFET 外壳看幅度是否变化如果还是有明显漂移说明 JFET 偏置电阻取值太大把栅极并联电阻改成 100kΩ 量级。5.2 方波边沿塌陷、占空比不对称现象示波器上看到方波上升沿有过冲甚至反复振铃后才稳定用 Time 档量高低电平时长发现正半周和负半周差出好几微秒。原因从比较器输出到测试点之间飞线太长线电感与探头输入电容形成谐振占空比不对称则多半是比较器同相端参考电压没调准或者正弦波本身正负半周幅度不对称。解决输出串一个 10Ω~22Ω 电阻再进测试点吸收反射飞线尽量短能用排针直连就不用杜邦线。占空比问题用万用表量比较器同相端直流电压把参考电位调到信号过零对应的电平上。如果测得比较器输出高低电平本身不对称就去检查上拉电阻和比较器供电别急着调反馈电阻。5.3 STM32 计数跳数或显示频率和目标差一截现象OLED 上频率值在几个整数之间来回跳例如显示 1001Hz、1002Hz、999Hz 不停轮换或者输入 1kHz 标准信号显示却稳定在 1030Hz 之类。原因跳数通常是 ETR 引脚上叠加了毛刺数字滤波没开够显示系统性偏大则可能是信号进入 ETR 前被上拉到错误的直流电平比较器输出高电平不够干净计数器数到了振铃边沿。解决先把etr.Filter调大数字滤波对窄毛刺非常有效然后在 STM32 输入引脚对地并一个 2.2nF 电容再次降噪。系统性偏差校准方法参考第 4.2 节用一个标准源测两点修正不要试图靠改电路“碰运气”凑数值。还要确认 STM32 的地和模拟板地确实连在一起很多“显示读数乱飞”都是共地不良造成的。5.4 双电源正负不对称所有模块跟着遭殃现象振荡输出正半周比负半周高方波占空比怎么调都差一点单独量比较器供电时5V 和 -5V 之间差了 0.5V 以上。原因数字板和运放板同时从正电源取电负电源几乎没有负载正路被拉低。后备原因是个别退耦电容漏放高频分量在电源线上互相干扰。解决给负电源输出加 10mA 量级的旁路负载比如在 -5V 和地之间接一个 1kΩ 电阻让正负两路电流对称。再按照第 2.3 节的位置检查退耦电容尤其是比较器供电脚旁边的 100nF 电容不能省也不能离芯片太远。电源问题不在信号链路里但往往是信号链路所有异常的元凶。6. 验收与答辩用数据和逻辑证明方案稳定可控进入测评环节之前给自己留的最后一项工作是“模拟验收”。我习惯把所有指标测一遍填成下面这样的表一张给评审看一张自己留着答辩护身。检查项预期指标实测值是否通过1kHz 档频率误差≤1%0.2%通过10kHz 档频率误差≤1%0.3%通过50kHz 档频率误差≤1%0.5%通过正弦输出幅度5Vpp 档4.97Vpp通过方波上升时间≤100ns65ns通过占空比误差≤±2%±0.8%通过连续上电3次幅度差≤±5%±2.1%通过这张表本身就是答辩提纲。评审问“稳定性怎么保证”直接指最后一栏问“误差怎么来的”可以回答“计数窗口 ±1 个脉冲对应 0.1% 以内电容温漂是主要误差来源所以选频电容用了 C0G”问“为什么用文氏桥”可以回答“频率范围落在 1k~50kHz文氏桥相位噪声和失真都容易控制且调试参数直观”。答辩时最忌讳背原理最好准备一段现场演示话术先接上示波器把探头点在缓冲输出端切换到另一通道点在 STM32 测试点一句话说清“模拟链路输出在这数字计数读的是同一个信号源两路可以互相印证”。这句话比任何技术术语都有说服力。遇到暂时解决不了的小问题直接承认现象拿出你调试时的波形记录和测得的数据表示“我已经定位到某一级正在处理”远比支支吾吾或者乱改参数更让评审安心。从那次以后我每套综合测评方案都会先把验收表做出来再动手搭电路。这个习惯救过我不少次希望帮到你。本文还有配套的精品资源点击获取