2019电赛D题:基于STM32与FFT的电路特性测试仪设计与实现

发布时间:2026/7/31 7:49:16

2019电赛D题:基于STM32与FFT的电路特性测试仪设计与实现 1. 项目概述一场关于“电路特性测试仪”的硬仗2019年全国大学生电子设计竞赛电赛的D题题目全称是“简易电路特性测试仪”这道题当年让不少参赛队伍直呼“酸爽”。它不是那种让你做个循迹小车或者温控风扇的题目而是实打实地考验你对模拟电路基础、信号处理、单片机系统以及测量理论的综合理解和工程实现能力。简单来说就是让你做一个能自动测量未知“黑盒子”线性二端口网络参数的仪器。这个黑盒子里面可能是一个简单的RC滤波电路也可能是一个运放构成的反相或同相放大器题目要求你的测试仪能自动识别出这是什么电路拓扑识别并测量出其关键元件的参数值比如电阻、电容的精确数值。为什么这道题印象深刻因为它完美地结合了“理论”和“实践”的鸿沟。课本上学过的波特图、阻抗分析、运放虚短虚断在这里都需要你用代码和电路去实现。它不像一些纯软件或纯算法的题目这里每一个测量值都伴随着噪声、布线寄生参数、运放非理想特性的干扰。你不仅要“会做”还得“做准”。这道题的核心就是围绕“放大器”和“测量”这两个关键词展开的一场综合性实战。无论是准备参加未来电赛比如2025、2026年的同学还是想夯实模拟电路和嵌入式系统功底的工程师复盘这道题都能获得远超题目本身的收获。它教会你的不仅仅是如何完成一个作品更是一种面对复杂测量任务的系统化工程思维。2. 核心任务与系统设计思路拆解2.1 题目核心需求解析当年的D题任务书通常包含几个递进的要求记忆中的核心任务点如下基本参数测量对给定的无源线性二端口网络如RC串联、并联、π型、T型滤波电路测量其幅频特性并自动判断电路拓扑结构例如是低通还是高通滤波器计算出电路中电阻、电容的数值。放大器电路识别与测量对包含运算放大器的有源电路如反相放大器、同相放大器自动识别其放大类型反相/同相并测量其直流增益、上限截止频率等关键参数。扩展功能可能包括测量输入/输出阻抗、显示幅频/相频特性曲线、测量放大器的直流失调电压等。这些要求归结起来就是实现一个“自动化的频域阻抗分析仪”的简化版。系统需要产生一系列频率可调的正弦波信号施加到被测网络然后同步测量输入和输出信号的幅度与相位关系从而推算出网络的传递函数进而分析出拓扑和参数。2.2 整体方案选型与权衡面对这样的题目主控、信号产生、信号测量这三大模块的方案选择直接决定了实现的难度和精度上限。主控单元MCU2019年STM32F4系列如F407、F429是绝对的主流选择。其核心优势在于带有FPU浮点运算单元能够快速进行FFT快速傅里叶变换等浮点密集型运算这对于实时处理音频频段的信号至关重要。也有队伍使用STM32F1系列配合DSP库或使用更高端的F7/H7系列。选择F4是一个在性能、资源、开发难度和成本之间的最佳平衡点。信号产生DDS产生纯净、频率精确可调的正弦波是关键。方案主要有两种单片机DAC 软件DDS利用STM32的DAC通过查表法实时输出正弦波样本。优点是系统简单成本低。缺点是波形频率和精度受限于DAC更新速率和CPU负担高频下性能下降快且谐波失真可能较大。专用DDS芯片如AD9833、AD9850通过SPI接口控制能产生非常高精度、高稳定度的正弦波。这是更专业的选择能极大减轻MCU负担保证信号源质量。对于追求高精度的队伍AD9833几乎是必选。实操心得当年我们队选择了STM32F407 AD9833的方案。事后证明这个选择非常正确。AD9833产生的信号干净让后级测量电路的设计压力小了很多。虽然增加了芯片成本和布线复杂度但在测量精度这个核心目标面前这笔“投资”是值得的。很多在软件DDS方案上挣扎于滤波和失真的队伍后期调试非常痛苦。信号测量这是精度之战的核心。需要同时测量输入Vin和输出Vout信号的幅度和相位差。幅度测量通常采用“精密整流ADC采样”或“有效值检测芯片如AD637”。对于正弦波测量其峰值或有效值即可换算。直接用ADC采样峰值需要过采样和寻峰算法受噪声影响大。AD637这类芯片能直接输出直流电压代表输入交流信号的有效值非常方便但成本高、带宽有限。相位测量这是难点。常用方法有过零检测比较法将Vin和Vout通过比较器整形成方波用MCU的输入捕获功能测量两个方波上升沿之间的时间差再根据信号周期换算相位差。这种方法简单直观但对信号噪声敏感在信号幅度变化或过零点失真时误差大。基于ADC采样的数字处理方法高速同步采样Vin和Vout的瞬时值然后通过互相关算法或FFT计算相位差。这是更先进和稳健的方法尤其是FFT能直接得到信号在特定频率分量的幅度和相位。F4系列的FPU和DSP库让实时FFT成为可能。我们的方案采用了双路同步ADC采样 FFT分析的方案。使用STM32F407的ADC1和ADC2工作在双重模式同步采集两路信号。对采集到的一组数据如1024点进行FFT找出基频分量直接读取其复数结果即可同时得到幅度和相位信息。这种方法抗噪声能力强且能有效抑制谐波干扰是实现高精度测量的保障。3. 硬件系统核心模块详解3.1 信号调理与测量前端电路被测网络的输出信号Vout幅度可能很大如放大器输出也可能很小如滤波器阻带衰减后。直接送入ADC或比较器是不行的必须进行调理。程控衰减/放大网络为了扩大测量量程需要在测量前端加入由模拟开关如CD405x系列和精密电阻网络构成的程控衰减器/放大器。例如当检测到Vout幅度超过ADC量程时自动切入衰减网络当Vout幅度太小时切入一个固定增益如10倍的同相放大器进行预放大。这部分逻辑需要由MCU根据初步测量结果自动控制。抗混叠滤波这是做FFT前至关重要的一步ADC采样定理要求信号最高频率必须小于采样频率的一半。如果被测信号或环境中存在高于此频率的噪声它们会被“折叠”到低频段严重干扰测量结果。必须在ADC输入端加入一个低通滤波器抗混叠滤波器其截止频率略低于采样频率的一半。我们使用了一个Sallen-Key结构的二阶有源低通滤波器运放选用低噪声、高带宽的型号如OPA2188。电压抬升STM32的ADC通常只能测量0-3.3V的正电压。而我们的交流信号是正负变化的。因此需要一个直流偏置电路将信号整体向上抬升1.65V即Vref/2使信号在0-3.3V范围内变化。通常用一个运放构成加法器来实现。注意事项这个前端调理电路本身的精度和稳定性直接决定了系统精度。电阻要选用0.1%精度的低温漂金属膜电阻运放的输入偏置电流、温漂都要仔细考量。PCB布局时模拟地要单点连接远离数字电路部分否则引入的噪声会让你的FFT结果惨不忍睹。3.2 幅频特性扫描策略要绘制幅频特性曲线就需要让信号源从低频到高频步进变化在每个频点进行测量。这里有几个关键策略频率步进选择在关键频段如滤波器截止频率附近需要加密测量点而在平坦区域可以稀疏一些。可以采用对数步进这样用较少的点数就能覆盖较宽的频率范围。测量稳定频率切换后电路需要时间达到稳态。特别是测试含有大电容的电路时低频下建立时间很长。必须在程序里为每个频点加入足够的延时等待信号稳定后再进行采样测量。可以通过连续测量几次幅度判断其稳定后再记录数据。自动量程切换如前所述结合程控衰减/放大网络在每次频率切换后或测量前先用一个快速测量判断信号幅度自动选择最合适的量程档位保证ADC始终工作在线性最佳区域。4. 软件算法与核心实现4.1 基于FFT的幅相提取算法这是整个系统的“大脑”。我们以1024点采样、采样率fs为例同步采样配置ADC以固定的fs例如10kHz同步采集Vin和Vout通道各1024个点。使用DMA传输不占用CPU。加窗处理由于采样不可能正好是信号周期的整数倍非同步采样会带来频谱泄漏。因此需要对采集到的时域数据加窗如汉宁窗后再做FFT以减少泄漏。FFT运算调用STM32的DSP库函数arm_cfft_f32对两路数据分别进行FFT计算。频率、幅度、相位计算频率定位在FFT结果的幅度谱中寻找最大值点其对应的索引号k即为基频所在。信号实际频率f k * fs / N(N1024)。幅度计算FFT结果X[k]是复数。其模值|X[k]|代表了该频率分量的幅度信息。但由于FFT算法和加窗的影响需要乘以一个恢复系数才能得到真实幅度。对于汉宁窗系数约为2.0。V_amplitude 2.0 * |X[k]| / N。相位计算复数X[k]的辐角φ atan2(imag(X[k]), real(X[k]))即为该频率分量的相位。分别计算Vin和Vout的相位φ_in和φ_out则相位差Δφ φ_out - φ_in。注意处理超过±180°的相位卷绕问题。增益计算幅频特性的增益dB为Gain_dB 20 * log10(V_out_amplitude / V_in_amplitude)。4.2 电路拓扑自动识别逻辑如何让程序判断黑盒子是RC低通还是高通是反相放大器还是同相放大器无源网络识别主要依据幅频特性曲线的形状。低通滤波器低频增益接近0dB高频增益随频率增加而下降。高通滤波器高频增益接近0dB低频增益随频率降低而下降。带通/带阻有其特定的峰或谷。 程序可以扫描全频段计算几个关键频点如极低频、中频、极高频的增益通过阈值比较和趋势判断来确定类型。例如如果Gain(10Hz) ≈ 0dB且Gain(10kHz) -20dB则初步判断为高通。有源放大器识别直流测试首先施加一个直流信号或极低频交流测量其增益。如果增益为负值则为反相放大器如果为正值则为同相放大器且增益≥1。交流验证测量其幅频特性观察在高频段是否出现增益下降运放带宽限制。输入阻抗判断扩展可以在输入端串联一个已知电阻测量分压变化来推算放大器的输入阻抗这有助于进一步确认电路结构。4.3 元件参数计算模型识别出拓扑后就可以根据测量数据拟合计算元件值了。RC低通滤波器传递函数为H(f) 1 / (1 j2πfRC)。其-3dB截止频率f_c 1 / (2πRC)。我们通过扫频找到了增益下降至-3dB即幅度为直流增益的0.707倍时的频率f_measure。如果已知电阻R或电容C的标准值即可求出另一个元件的值C 1 / (2πR * f_measure)。反相放大器直流增益A_v - R_f / R_in。其中R_f为反馈电阻R_in为输入电阻。我们通过直流测量得到了A_v。题目有时会给定其中一个电阻值或者要求测量输入/输出电阻来综合判断。结合运放的增益带宽积GBW参数通过测量上限截止频率f_h还可以验证GBW ≈ |A_v| * f_h这一关系。实操心得参数计算时千万不要只用一个频点的数据。应该利用扫频得到的一组(f, Gain)数据通过曲线拟合如最小二乘法来求解R和C这样能有效抑制单点测量噪声带来的随机误差结果稳定得多。STM32的DSP库也提供了基础拟合函数可以尝试使用。5. 调试过程与典型问题排查5.1 测量精度上不去先从噪声和电源入手调试初期最令人头疼的就是测量数据跳动大重复性差。问题表现同一电路、同一频率多次测量得到的增益值波动超过1%相位波动好几度。排查与解决电源去耦这是首要怀疑对象。每个运放、ADC、DDS芯片的电源引脚附近都必须紧贴引脚放置一个0.1μF的陶瓷电容用于滤除高频噪声和一个10μF的钽电容或电解电容用于滤除低频波动。顺序是电源先经过大电容再经过小电容最后进入芯片引脚。接地问题数字地MCU、数字开关和模拟地运放、ADC、DDS必须在一点相连通常选择在电源入口处。PCB上最好采用分区布局模拟部分和数字部分严格分开。信号屏蔽从DDS输出到被测电路再到ADC输入的前端走线尽可能短。如果导线较长应使用屏蔽线并将屏蔽层单点接地。ADC参考电压确保给ADC的参考电压VREF是干净、稳定的。可以使用独立的基准电压芯片如REF5030提供3.0V基准这比直接用MCU的3.3V电源精度高得多。软件滤波在硬件优化的基础上软件上可以对每个频点进行多次测量取平均或者对扫频曲线进行滑动平均滤波能有效平滑数据。5.2 相位测量跳变或不准问题表现相位差测量值在180°或360°附近发生跳变或者在小相位差时误差极大。排查与解决过零检测法的局限性如果采用过零检测法这个问题非常常见。信号噪声会在过零点附近造成多次抖动导致比较器输出方波出现毛刺从而误触发输入捕获。解决方法是在比较器后加入施密特触发器如使用带滞回功能的比较器或软件消抖并确保输入信号在过零点附近有足够快的斜率。FFT方法的优势与陷阱使用FFT方法时相位跳变通常是由于频谱泄漏导致基频成分的相位计算不准。务必确保加窗处理并尝试增加FFT点数如2048点以提高频率分辨率。另外检查ADC采样时钟是否稳定采样率是否精确。通道间延迟校准Vin和Vout两路ADC采样通道本身可能存在微小的时序偏差。可以在测试前将同一个信号源同时接入两路通道测量此时的相位差将其作为系统固有相位误差记录下来在后续测量中予以扣除。5.3 高频段测量异常问题表现测量频率升高到几十kHz以上时增益曲线严重偏离理论值或波形失真。排查与解决运放带宽不足检查信号调理电路中使用的运放型号。通用运放如LM358的增益带宽积可能只有1MHz在几十kHz下放大倍数已经下降。必须为前级放大和滤波电路选择高速运放如GBW 50MHz的型号。DDS输出驱动能力AD9833等DDS芯片输出驱动能力有限。当后级电路输入阻抗不高或容性负载较大时高频信号幅度会被拉低。可以在DDS输出后加一级电压跟随器使用高速运放作为缓冲。抗混叠滤波器设计不当如果抗混叠滤波器的截止频率设置得太低或者阶数不够在高频时本身就会衰减信号。需要根据你的最高测量频率和采样率重新计算并设计滤波器参数。PCB寄生参数高频下PCB走线的寄生电感和电容开始产生影响。尽量缩短关键信号路径避免走线形成环路。6. 系统优化与扩展思考完成基本功能后如果想追求更高性能或应对更复杂的题目要求可以考虑以下优化方向多频点并行测量与快速扫频传统的逐点扫频耗时较长。可以考虑使用线性调频信号Chirp Signal或多音信号作为激励一次发射一个宽频带信号然后通过FFT一次性得到整个频段的响应。这能极大提升测量速度但对信号产生和系统线性度要求更高。数字锁相放大技术对于测量深陷噪声中的微小信号如高衰减滤波器的阻带数字锁相放大DLIA是利器。其原理是利用软件产生与参考信号同频的正交正弦-余弦对与采集到的信号进行相乘和积分能极大地抑制噪声提取出信号的幅度和相位。这可以作为FFT方法的有力补充尤其在单一频率点进行高精度测量时。上位机软件辅助将STM32作为下位机通过串口或USB将测量原始数据发送到电脑上位机用Python Qt或LabVIEW编写。在上位机进行更复杂的数据处理、曲线拟合、图表显示和报告生成可以解放MCU资源并提升用户体验。自动量程与自适应测量算法让程序更加智能化。例如先进行一轮快速粗扫大致确定电路的频响特征和动态范围然后自动规划第二轮的精细扫频策略在关键频段加密在平坦区域稀疏并自动设置最优的ADC量程和信号源幅度实现全自动高精度测量。复盘2019年电赛D题它更像一个微型的工程项目逼着你去统筹考虑方案选型、精度分析、抗干扰设计、算法实现和系统调试。那些在实验室里熬过的夜、调不通电路时的焦躁、终于看到一条光滑波特图时的喜悦都是这门“实践课”最宝贵的部分。这道题的精髓不在于用了多么高深的芯片或算法而在于对基础知识的扎实理解和严谨的工程实现态度。即使过去多年其中涉及的信号链设计、精度权衡、故障排查的思路在任何一个实际的电子测量产品开发中依然完全适用。

相关新闻