2019年全国电子设计大赛D题国家二等奖技术解析
在高校电子竞赛的舞台上,有一类题目总能引发广泛关注——它不单考代码能力,也不只拼硬件布板,而是要求选手将信号链从前端感知到后处理完整闭环。2019年全国大学生电子设计竞赛的D题“简易电路特性测试装置”正是这样一道综合性极强的实战命题:用一套便携系统自动测量未知二端口网络的阻抗频率响应,并实时绘出幅频与相频曲线。
这道题看似原理简单,实则暗藏玄机。从激励信号的纯净度、采样同步性,到微弱电流信号的提取精度,再到FFT运算效率与图形化呈现,任何一个环节掉链子都会导致最终结果失真。而我们分析的这套获得国家二等奖的作品,恰恰是在资源受限的嵌入式平台上,以巧妙的设计思路和扎实的工程实现,把性能做到了接近专业仪器的水准。
整个系统的主控选用了 STM32F407ZGT6 ,这颗基于ARM Cortex-M4内核的MCU堪称当时32位微控制器中的“全能选手”。168MHz主频、浮点运算单元(FPU)、DSP指令集支持,让它在处理复杂数字信号时游刃有余;1MB Flash和192KB SRAM的空间也足以容纳完整的程序逻辑与数据缓冲区。更重要的是,它具备多个ADC、丰富的定时器以及FSMC接口,为构建一个集信号发生、高速采集、计算显示于一体的紧凑系统提供了可能。
真正让这个系统“活起来”的第一步,是生成一段稳定可调的正弦激励信号。这里团队没有选择传统的压控振荡器或函数发生芯片,而是采用了 AD9833 DDS 芯片 。DDS技术的核心在于相位累加器加查找表的结构——通过向内部28位相位累加器写入不同的频率控制字(FTW),就能以极高的分辨率输出所需频率:
$$
f_{out} = \frac{FTW \times f_{clk}}{2^{28}}
$$
假设外部晶振为25MHz,最小步进可达约0.093Hz,完全满足题目对100Hz~100kHz范围内精细扫频的需求。SPI通信速率高达40MHz,使得频率切换几乎无延迟。虽然AD9833输出幅度仅约600mVpp,但经过后续电压跟随与增益调理后,足以驱动大多数被测器件(DUT)。下面是关键配置代码片段:
void AD9833_SetFrequency(float freq) {
uint32_t ftw = (uint32_t)(freq * pow(2, 28) / 25000000);
uint16_t low_word = ftw & 0x3FFF;
uint16_t high_word = (ftw >> 14) & 0x3FFF;
HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, (uint8_t*)&low_word, 2, 10);
HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, (uint8_t*)&high_word, 2, 10);
HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_SET);
uint16_t cmd = 0x2000; // Reset & Sin mode
HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, (uint8_t*)&cmd, 2, 10);
HAL_GPIO_WritePin(FSYNC_GPIO_Port, FSYNC_Pin, GPIO_PIN_SET);
}
每次频率变化都通过SPI精确写入寄存器,确保每个频点都能准确激励DUT,这是后续测量可靠性的前提。
接下来才是真正的挑战:如何同时、准确地获取电压和电流?要知道,阻抗的本质是 $ Z = V/I $,而电流无法直接测量,只能通过采样电阻间接推导。系统采用经典的四线法结构:激励源驱动DUT与已知采样电阻 $ R_s $ 串联,分别采集两者两端电压。
电压通道使用仪表放大器INA128直接测量DUT压降,具有高输入阻抗和优秀共模抑制比(CMRR);电流通道则测量 $ R_s $ 上的压降 $ V_s $,再由 $ I = V_s / R_s $ 得到电流值。两个信号均送入STM32的ADC进行双通道同步采样。
这里有几个细节决定了成败:
- 采样电阻的选择 必须权衡:太大会影响DUT工作状态,太小则信号微弱易受噪声干扰。实践中常选用100Ω±0.1%低温漂金属膜电阻,在精度与负载效应之间取得平衡;
- 所有模拟走线应尽量等长、远离数字信号线,避免引入时间偏差或串扰;
- 前端加入TVS二极管做输入保护,防止异常电压损坏ADC;
- 高频段还需考虑PCB寄生电容的影响,必要时可在反馈路径并联补偿电容。
为了保证两路信号的时间一致性,ADC采用定时器触发+DMA传输的方式工作。以下是HAL库下的典型配置:
void MX_ADC1_Init(void) {
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO; // 定时器触发
hadc1.Init.NbrOfConversion = 2;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = 2;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_BUFFER_SIZE * 2); // 双通道DMA搬运
}
这种方式实现了“零CPU干预”的连续采样——ADC每完成一次转换,数据自动通过DMA写入内存缓冲区,主循环可以专注于后续的数据处理,极大提升了系统的实时性。
当一组1024点的电压和电流时域数据就绪后,下一步就是频域分析。团队没有采用过零检测或锁相放大这类传统方法,而是选择了 FFT(快速傅里叶变换) 来一次性提取全频段信息。这种方法效率更高,尤其适合需要多频点扫描的场景。
具体流程如下:
1. 对两路信号分别加汉宁窗以减少频谱泄漏;
2. 使用ARM官方提供的CMSIS-DSP库执行实数FFT;
3. 提取基波频率处的幅值与相位;
4. 计算阻抗模值 $ |Z| = |V|/|I| $ 和相角 $ \phi = \theta_V - \theta_I $。
核心代码如下:
float32_t fft_input[FFT_SIZE * 2];
float32_t fft_output[FFT_SIZE];
float32_t mag_buffer[FFT_SIZE / 2], phase_buffer[FFT_SIZE / 2];
void process_fft(float32_t *data, uint32_t len) {
for (int i = 0; i < len; i++) {
fft_input[2*i] = data[i] * hanning_window[i];
fft_input[2*i+1] = 0.0f;
}
arm_rfft_fast_f32(&rfft_instance, fft_input, fft_output, 0);
for (int i = 0; i < len / 2; i++) {
float re = fft_output[2*i];
float im = fft_output[2*i+1];
mag_buffer[i] = sqrt(re*re + im*im);
phase_buffer[i] = atan2(im, re) * 180.0 / PI;
}
}
得益于Cortex-M4的FPU和优化过的汇编级FFT实现,一次1024点RFFT耗时不到2ms,使得整体100个频点的扫描可在5秒内完成,用户体验流畅。
最终结果通过FSMC接口驱动一块3.5英寸TFT-LCD实时绘制波特图。软件流程清晰高效:
1. 初始化所有外设;
2. 设置起始频率,启动AD9833;
3. 触发同步采样,DMA接收数据;
4. 分别对电压、电流信号做FFT处理;
5. 计算当前频点下的 $ |Z(f)| $ 和 $ \phi(f) $;
6. 存储数据并递增频率;
7. 重复至扫频结束,绘制完整曲线。
以RL串联电路为例,扫频步长1kHz,每个点采集1024样本(约4ms),最终生成标准的Bode图。实际测试中,该系统在1kHz以上频段仍能保持±5%的幅值误差和±3°的相位误差,表现远超同类低成本方案。
回看整个设计,它的成功并非依赖某一项尖端技术,而是体现在对系统瓶颈的精准识别与针对性优化上:
- 用AD9833解决宽频带高分辨率激励难题;
- 差分前端+屏蔽布线提升小信号信噪比;
- 同步采样+FFT保障相位测量一致性;
- DMA+CMSIS-DSP实现高效实时处理。
更值得称道的是其工程思维的成熟:电源去耦到位,模拟/数字地单点连接,采样率非整倍数时主动加窗,甚至连长期运行的温漂问题都预留了NTC校正接口。这些细节往往决定比赛成败。
这种高度集成的小型化阻抗分析架构,早已超越赛题本身的价值。它可以轻松转化为教学实验平台,用于《电路分析》《信号与系统》课程中的频率响应演示;也能作为工业现场的传感器健康监测终端,实时追踪元件老化趋势;若进一步增加Wi-Fi模块和云端上传功能,甚至能发展成物联网边缘节点。
未来若引入自动校准算法(如Open/Short/Load三点校正)、支持触摸交互、扩展至更高频率(如使用AD9834或Si5351),其实用性和智能化水平还将大幅提升。而这一切的基础,正是今天我们在这一套获奖作品中看到的——扎实的模拟功底、高效的数字处理能力和严谨的系统工程意识。
这样的设计,不只是为了拿奖,更是对“如何做出一台真正好用的电子仪器”的一次完整回答。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
3483

被折叠的 条评论
为什么被折叠?



