又到电赛结束的时刻了,这也是我大学生涯最后一次打电赛了,很不幸地喜提省三(呜呜呜别骂了别骂了(
没事!今天还是由我这个退役老废物来带大家复盘一下今年的“G 题:周期信号测量分析装置”吧!(。・ω・。)ノ♡(完整题目 PDF 我放在文章最下面啦)
先来看看题目给的装置框图: 
从图上看,整个系统的结构其实很直白:“一个信号源 -> 我们的采集调理电路 -> 一块显示屏”。 但是注意看那个 +5V 的小箭头!题目死死卡了一个要求:“整个装置外部只允许单 +5V 供电!” 要知道运放处理交流信号往往需要正负双电源(比如 ±5V),STM32 又需要 3.3V,这意味着所有的电压转换(升压、反转负压、稳压)全都得靠我们在板子内部自己搞定喵~
一、 基础要求:小信号与高采样率的拉扯
再来看看基础要求: 
简单翻译一下题目的要求:
- 输入一个峰峰值 50mV ~ 250mV 的小信号,频率成分在 10kHz ~ 500kHz 以内;
- 屏幕能显示 1 个或 3 个完整周期的波形(用按键切换);
- 能画出频谱图,测出频率成分(分辨率 500Hz,频率误差 1kHz 内),以及峰峰值、有效值和各谐波幅值(误差居然要求在 5mV 以内!)。
乍一看,指标又多又吓人,好像完全没什么头绪对吧? 没事,我们一步一步来拆解喵~ (=´ω`=)
1. 第一个拦路虎:分辨率不够(信号太小啦!)
要做波形显示和频谱分析,第一步肯定是用“ADC 采集”。 但你看输入的信号只有 50mV ~ 250mV,而常见的单片机 ADC 采集范围是 0 ~ 3.3V(很少有人直接上超贵的精密 ADC 吧( 如果直接把几十毫伏的信号喂给 STM32,波形在屏幕上基本就是一条趴在地上的直线,更别提 5mV 以内的误差要求了! 而且交流信号还有负半周,直接进单片机会被削掉一半。 怎么解决呢? 很简单,在进单片机之前,先用运放搭一个“固定放大 + 直流偏置”电路!先把微弱的小信号放大到合适的幅度,再整体往上抬升一个直流偏置,让它舒舒服服地落在 ADC 的 0 ~ 3.3V 量程中间。
2. 第二个拦路虎:采样率不够(信号太快啦!)
解决了幅度问题,接下来就是让人头秃的“采样率”问题喵~ 根据大名鼎鼎的“奈奎斯特采样定理”,如果要采集一个 500kHz 的信号,ADC 的采样速度至少得是它的 2 倍,也就是 1MHz。 但那只是理论底线!实际上要想在屏幕上把波形还原得能看,采样率至少得去到最高频率的“4 倍以上(2MHz 以上)”才比较合适。 可我们手头常见的 STM32 采样率都很有限:F103C8T6 极限也就 1MHz,哪怕上到 F407VET6 单 ADC 也就 2.4MHz 左右。 (别问我为什么不用 FPGA,问就是不会,我是废物呜呜呜)
那怎么办呢? 这时候就要掏出 STM32 的隐藏魔法了——“双 ADC 交替采集 + DMA 搬运”!(这个挖个坑,教程我以后一定会写(ge)的!) 让两个 ADC 轮流错开采样,直接实现“采样率翻倍”!采回来的数据丢给 DSP 库跑个“FFT”,时域波形和频谱分量就都出来啦。
啪!到这里,基础部分的方案就搞定了!是不是听起来还挺顺利的?
二、 发挥部分:加个滤波器就能解决……吗?
来看看发挥部分的要求: 
仔细对比一下,其实要求跟基础部分几乎没区别,唯独多加了一个恶心人的条件:“在被测信号里混入了一个 1MHz 以上、峰峰值 200mV 的单频干扰信号!”
怎么把 1MHz 以上的捣蛋鬼干掉呢? 思路当然很简单:在最前面加上一个“有源低通滤波器”,让 500kHz 以内的有用信号过去,把 1MHz 以上的干扰拦在门外就好啦!
所以最终我整套硬件的链路方案就是:
有源低通滤波器 -> 固定放大 + 直流偏置 -> STM32(双 ADC + FFT) -> 串口屏 (外加几个提供 +3.3V、±5V 的电压转换模块)
三、 碎碎念与遗憾
想法很丰满,但真正焊板子调指标的时候才发现到处都是坑( 因为有用信号最高到 500kHz,而干扰信号在 1MHz 就开始了,中间只隔了短短的 2 倍频程!滤波器截止频率稍微偏一点,要么 1MHz 干扰滤不干净,要么 400kHz ~ 500kHz 的正常信号也被衰减得一塌糊涂,再加上模拟电路底噪和电源纹波的影响,最后测出来的峰峰值和幅值指标不是特别好看。
非常可惜,最后一次电赛只能拿个省三收场,以后也没机会再参与啦。 不过折腾这四天三夜的过程还是学到了不少东西,在此记录一下,也把题目留给学弟学妹们参考吧!(=^・ω・^=)
📎 题目附件:点击查看 / 下载《G题_周期信号测量分析装置.pdf》
