2023年电赛H题国家一等奖方案解析:基于MSP432E401Y与FPGA的信号分离装置设计与实现

发布时间:2026/7/11 0:48:03

2023年电赛H题国家一等奖方案解析:基于MSP432E401Y与FPGA的信号分离装置设计与实现 2023年电赛H题国家一等奖方案解析基于MSP432E401Y与FPGA的信号分离装置设计与实现大家好我是老张一个在嵌入式领域摸爬滚打多年的工程师。最近有不少参加电子设计竞赛的同学来问我像2023年电赛H题“信号分离装置”这种涉及高频信号处理和同步的项目到底该怎么下手硬件怎么搭软件怎么写今天我就以南京邮电大学获得国家一等奖的“我焊的都队”的方案为例带大家从头到尾拆解一遍这个项目。我会尽量用大白话把核心原理、硬件选型、代码逻辑和调试中的“坑”都讲清楚目标是让你看完就能理解这个方案的精华甚至能自己动手复现。这个项目的核心任务是要从一个混合信号AB里把两个不同频率的正弦波或三角波识别出来并且重新生成两路与原始信号严格同步的新信号A‘和B’同时还能精确设置它们之间的相位差。听起来是不是有点复杂别怕咱们一步步来。1. 整体方案设计思路化繁为简拿到题目第一步不是急着画电路图而是先想明白“我们要干什么”以及“怎么干最靠谱”。获奖团队把复杂问题分解成了几个清晰的步骤这个思路非常值得学习。1.1 问题拆解识别、同步、重建题目给的信号A和B频率在1kHz到500kHz之间并且是以5kHz为步进变化的。比如可能是100kHz的正弦波加上205kHz的三角波混在一起。我们的任务有三个识别从混合信号里准确判断出A和B各自的频率、波形种类正弦还是三角。同步让我们新生成的信号A‘和B’在示波器上和原始的AB信号看起来完全“对齐”没有时间上的漂移或抖动。重建根据识别结果重新产生A‘和B’信号并且能通过按键或屏幕设置B‘相对于A’的相位差精度要到1度。1.2 核心方案选择MCUFPGA黄金搭档团队选择了MSP432E401Y微控制器和Xilinx Zynq-7000系列FPGA具体型号xc7z020clg400-2的组合。为什么这么选这是基于各自的特长MSP432E401YMCU它内置了高性能的ADC模数转换器和DAC数模转换器还有丰富的定时器和通信接口。它的强项是“管理”和“计算”。在这个项目里它负责采集混合信号、做FFT频谱分析来识别频率和波形同时通过它的DAC输出一个可调的电压去控制后续比较器的门槛。Xilinx Zynq FPGAFPGA的强项是“速度”和“并行”。它内部逻辑的运行速度可以非常高纳秒级并且可以同时做很多件事。在这里它主要干两件MCU不太擅长的事高速DA驱动用FPGA产生精确的、频率可变的波形数据流并驱动高速DAC芯片生成最终的正弦波或三角波信号。这个速度要求很高尤其是到500kHz时。精密同步控制利用FPGA能对硬件信号如比较器输出的边沿做出极快反应的特点来实现A‘/B’信号与原始信号的严格同步。简单说MCU是大脑负责分析和决策FPGA是敏捷的四肢负责高速、精确地执行。这个组合在高速信号处理项目中非常经典。1.3 信号处理流程总览咱们结合下面的框图看看信号是怎么流的输入外部的混合信号AB进来。识别路径信号先经过一个增益为1的同相加法器用NE5532运放搭建主要是做缓冲和阻抗匹配保证信号质量然后送给MCU的ADC进行采样。MCU对采样到的数据做FFT快速傅里叶变换分析频谱。频谱图上会显示出两个主要的频率峰结合题目给的5kHz分辨率就能精确锁定A和B的频率。再通过分析时域波形的特征就能判断是正弦波还是三角波。同步与重建路径另一路AB信号进入一个高速比较器电路核心是AD8561。MCU会根据识别出的信号幅度通过自身的DAC输出一个合适的参考电压给比较器。比较器将模拟的AB信号转换成数字方波。这个方波的每一个上升沿都对应原始混合信号中某个特定点比如过零点附近。这个上升沿信号被送到FPGA。FPGA内部有一个波形数据表存储了一个周期正弦波或三角波的数据。它平时就在循环读取这个表驱动外部的DAC输出信号。关键来了每当FPGA收到比较器送来的上升沿脉冲它就立即将读取波形数据表的位置“重置”到一个固定的起始点。这就好比跳舞时每次听到鼓点比较器脉冲就从头开始做一个动作这样你的动作生成的波形就和鼓点原始信号完全同步了示波器上看就不会有漂移。相位差的设置也是在FPGA里完成的。既然波形是从数据表里读出来的那么让B‘信号的读取起始点比A’信号的起始点晚几个数据自然就产生了相位差。这个偏移量可以根据屏幕设置的角度来计算。这个“用比较器脉冲复位FPGA波形指针”的思路是实现高稳定度同步的精髓非常巧妙。2. 硬件电路设计与关键芯片选型硬件是项目的地基选对芯片、设计好电路后面写程序就省心一半。2.1 高速比较器电路同步信号的“触发器”同步的精度很大程度上取决于比较器。团队选择了ADI的AD8561。为什么选它AD8561是一款传播延迟极低典型值7ns的高速比较器。传播延迟指的是输入信号变化到输出信号反应出来的时间差。这个时间差越小我们用它的输出边沿去触发FPGA时引入的同步误差就越小。对于几百kHz的信号几纳秒的误差完全在可接受范围内。电路设计如下图所示核心是给AD8561提供一个可调的阈值电压VCOM。阈值电压生成阈值电压由MSP432E401Y的片上DAC输出DAC_OUT经过一个运放电路来产生。这样MCU在软件里就可以动态调整这个阈值。比如当识别出AB信号幅度较小时就把阈值调低一点确保比较器能稳定输出方波。供电电路采用±5V双电源供电这使得比较器可以处理正负摆幅的输入信号。输出COMP_OUT就是转换得到的数字方波直接连接到FPGA的某个GPIO引脚上作为同步触发信号。2.2 缓冲与加法器电路信号输入的“守门员”输入信号在进入MCU的ADC之前最好先经过一个缓冲电路。团队用一颗经典的双运放NE5532搭建了一个增益为1的同相放大器。这个电路的作用主要有三个阻抗匹配防止前级信号源受到MCU ADC输入端的影响。缓冲隔离保护MCU的ADC输入引脚。电平调整如果需要虽然这里增益是1但必要时可以改变电阻配置来调整信号偏置或幅度使其落在MCU ADC的最佳输入范围内。2.3 主控与逻辑芯片大脑与心脏MSP432E401Y这是一款基于ARM Cortex-M4F内核的微控制器主打高性能和低功耗。它内置的16位ADC采样速率很高足以应对500kHz信号的采样需求根据奈奎斯特定理采样率至少需要1MHz以上。它的定时器、DMA等外设也很丰富非常适合做实时信号采集与处理。Xilinx Zynq xc7z020clg400-2这是一颗SoC芯片内部包含了双核ARM Cortex-A9处理器和传统的FPGA可编程逻辑。在这个项目中主要使用的是它的FPGA部分。这颗芯片的逻辑资源足够用来实现一个DDS直接数字频率合成系统以产生高精度的可变频率波形。3. 软件与逻辑设计让系统跑起来硬件搭好了接下来就是写代码和逻辑。咱们按照处理流程来看。3.1 MCU端程序流程识别与决策MCU的程序流程图清晰地展示了整个过程步骤解析初始化上电后初始化系统时钟、ADC、DAC、定时器、串口连接屏幕等所有外设。ADC采样与FFT配置ADC以足够的速率例如2Msps对缓冲后的AB信号进行连续采样。采集够一定数量的点比如1024点后通过DMA将数据搬运到内存数组。对这个数组应用窗函数如汉宁窗以减少频谱泄漏然后进行FFT计算。频谱分析与识别在FFT得到的频谱图上寻找幅度最大的两个峰值点。这两个点对应的频率就是信号A和B的频率。因为题目说频率是5kHz的整数倍所以识别结果可以四舍五入到最近的5kHz倍数上非常精准。如何区分正弦波和三角波这里需要一点技巧。在频谱上纯正弦波只有一个主频峰而三角波除了基频峰还会有明显的奇次谐波比如3次、5次谐波。通过检查频谱中是否存在这些谐波分量就可以判断波形种类。参数计算与DAC控制根据识别出的信号频率和类型MCU需要计算出两个关键参数并通过串口发送给FPGA波形选择告诉FPGA是生成正弦波还是三角波。频率控制字这是DDS中的核心参数FPGA根据这个值来决定从波形表中读取数据的速度从而控制输出信号的频率。同时MCU还需要根据采集到的信号幅度计算出合适的比较器阈值电压并通过自身的DAC输出这个电压动态调整AD8561的比较门槛。3.2 FPGA逻辑设计高速生成与精密同步FPGA内部主要实现一个带同步复位功能的DDS模块。咱们用伪代码逻辑来描述一下// 伪代码逻辑帮助理解 module signal_generator ( input wire clk, // 高速系统时钟比如100MHz input wire sync_pulse, // 来自比较器的同步脉冲 input wire [31:0] freq_tune_word, // 来自MCU的频率控制字 input wire wave_select, // 波形选择0正弦1三角 output reg [11:0] dac_data // 输出给外部高速DAC的数据 ); // 1. 相位累加器 reg [31:0] phase_accumulator; always (posedge clk) begin if (sync_pulse) begin // 关键同步步骤收到同步脉冲相位重置为初始值或加一个相位偏移 phase_accumulator initial_phase_A; // 对于A‘通道 // 对于B’通道则重置为initial_phase_A phase_offset_B; end else begin // 正常情况每个时钟周期相位累加器增加一个步进值频率控制字 phase_accumulator phase_accumulator freq_tune_word; end end // 2. 波形表查找 wire [9:0] rom_address; // 取相位累加器的高位作为查表地址 assign rom_address phase_accumulator[31:22]; // 举例取高10位 // 波形ROM存储一个周期的波形数据 always (posedge clk) begin case(wave_select) 1b0: dac_data sine_rom[rom_address]; // 查正弦表 1b1: dac_data triangle_rom[rom_address]; // 查三角表 endcase end endmodule核心点解释DDS原理相位累加器就像一个不断循环的计数器。freq_tune_word越大它累加得越快从波形表里读取数据的速度也就越快输出频率就越高。同步机制sync_pulse信号连接比较器的输出。一旦检测到上升沿phase_accumulator立即被重置。这意味着无论之前输出到波形的哪个位置此刻都强制回到起点重新开始。这就保证了生成的波形与原始AB信号中某个固定点由比较器阈值决定严格对齐。相位差设置要产生B‘相对于A’的相位差只需要在同步复位时给B‘通道的相位累加器一个不同的初始值initial_phase_A phase_offset_B。这个偏移量phase_offset_B可以根据屏幕设置的度数换算成波形表地址的偏移量。4. 调试心得与注意事项做项目调试验证往往比写代码花的时间还多。获奖团队在文档最后分享的几点注意事项都是宝贵的实战经验。上电顺序很重要“先给模拟电路比较器、运放通电最后给单片机上电。”这是因为模拟电路部分可能产生负电压或较大的瞬态电压。如果MCU先上电这些电压可能会通过未初始化的IO口或ADC引脚灌入有损坏芯片的风险。养成好的上电习惯能避免很多莫名其妙的损坏。高频信号要“短兵相接”“使用的SMA连接线尽量短。”信号频率高达500kHz已经属于射频范畴。长的导线会引入分布电感、电容导致信号衰减、畸变和反射。使用短的、质量好的同轴电缆如SMA线是保证高频信号完整性的基本要求。同步阈值的自适应在软件中最好能实现比较器阈值的自适应调整。例如MCU可以监测ADC采样的信号峰值然后自动将DAC输出的阈值设置为峰值的一半或某个动态比例这样在不同幅度输入下都能得到稳定的同步脉冲。示波器是终极裁判整个调试过程中要时刻用示波器观察关键节点的波形。比如观察AB原始信号和经过缓冲后的信号看有没有失真。观察比较器输入模拟信号和输出数字方波看翻转是否干净利落有没有毛刺。最关键的是用示波器的双通道同时观察原始的AB信号和FPGA生成的A‘信号并利用示波器的“无限余辉”或“XY模式”检查两者是否长期稳定同步没有任何漂移。这个项目方案的精妙之处在于它用相对清晰的模块划分和巧妙的同步策略解决了一个高速信号处理中的难题。MCU负责需要复杂计算的识别任务FPGA负责需要高速、精确定时的生成任务两者通过比较器这个“桥梁”紧密协作。希望这篇解析能帮你理清思路。如果你正在准备电赛或者类似的项目不妨从这个架构入手深入理解每一部分的细节相信你也能做出出色的作品。

相关新闻