2026寒假练 -基于的小脚丫FPGA的电赛训练平台的信号测量与输出装置
该项目使用了基于的小脚丫FPGA的电赛训练平台,实现了简单信号测量与输出装置的设计,它的主要功能为:输出可调的正弦波,能将外部信号输入该装置并采集得到该信号的幅值、有效值和频率,并将结果显示在屏幕上并将结果显示在OLED上。。
标签
2026寒假在家练
Applepie
更新2026-03-24
上海海事大学
18

1. 所选任务介绍

本项目选自电子设计竞赛训练题目。任务核心是设计并实现一个具备信号产生(DDS)信号采集(ADC)参数分析以及信号复现功能的闭环系统。主要性能指标包括:

  • 输出端: 100Hz ~ 10kHz 正弦波,步进 100Hz,幅值 100mV ~ 500mV 可调。
  • 输入端: 采集 1kHz ~ 10kHz 信号,测量幅值、有效值、频率。
  • 高级功能: 5次谐波分量分析及原样信号复现。

2. 项目介绍

本项目是一个集成了数字信号处理(DSP)与嵌入式控制的综合系统。通过人机交互界面(旋转编码器与OLED),用户可以实时控制输出信号参数。系统不仅能产生高质量的正弦波,还能对外部输入信号进行实时采样与频谱分析,是典型的“信源+仪表”结合体。

3. 硬件介绍

基于“小脚丫 FPGA”核心模块及配套电赛训练板,硬件主要组成如下:

  • 核心模块: STEP-FPGA 核心板(负责高速逻辑、DDS算法及FFT计算)。
  • 信息显示: 128*64 OLED 屏幕,用于显示波形参数、频谱分量及菜单。
  • 信号发生(DAC): 10-bit/120Msps 高速 DAC,用于将数字波形转化为模拟信号。
  • 信号采集(ADC): 10-bit/50Msps 高速 ADC,负责外部信号的实时数字化。
  • 控制输入: 旋转编码器,用于调节频率步进和幅值。

3729e34d7c438eb0ebad2f2473acaeb6.jpg

  1. DDS 模块: 通过相位累加器和查找表(ROM)产生数字正弦波。
  2. ADC 采集模块: 驱动高速 ADC 进行等间隔采样,数据存入 FIFO/RAM。
  3. 处理模块: 对采集到的数据进行处理,提取基波及 2-5 次谐波的幅值 A
  4. 复现逻辑: 将分析出的频率和幅值信息重新反馈给 DDS 模块,实现信号复现。

4.方案框图

3255d8d371126a39c2c2a69e818bb320.png

硬件流程图


0ca497f6-6332-4215-9a54-625b5d9d7039.png

软件流程图

2e13e7d9-d104-49f2-9c9c-644901c47b09.png

5. 调试软件、编程语言及关键代码

调试软件:Quartus

编程语言: Verilog HDL


下面节选累加器,幅度调节以及数值计算的关键代码。


// 1. 相位累加器 (决定输出频率)

always @(posedge sys_clk or negedge rst_n) begin

if(!rst_n) phase_acc <= 0;

else phase_acc <= phase_acc + freq_word; // freq_word 由外部设定

end


// 2. 幅度调制方法

// lut_out_signed: 查表得到的有符号正弦波

// amp_scale: 幅度缩放因子

always @(posedge sys_clk) begin

mult_temp <= lut_out_signed * $signed({1'b0, amp_scale});

end


// 3. 数据处理方法

// 右移 8 位并加上 512 (中点电压),将有符号数转换为 DAC 码值

wire [9:0] dds_calc_data = (mult_temp >>> 8) + 10'd512;
always @(posedge adc_clk) begin

// 冷却倒计时 (防止高频毛刺误触发)

if(trigger_cooldown > 0) begin

trigger_cooldown <= trigger_cooldown - 1'b1;

trigger_pulse <= 1'b0;

end

else begin

// 1. 下限检测

if (adc_data_out < (trigger_ref - 10'd6))

trigger_armed <= 1'b1;



// 2. 上限检测
// 只有先经过下限(Arming)再冲过上限,才产生触发脉冲

else if ((trigger_armed) && (adc_data_out > (trigger_ref + 10'd6))) begin

trigger_pulse <= 1'b1; // 发射同步脉冲

trigger_armed <= 1'b0; // 重置状态

trigger_cooldown <= 16'd200; // 进入冷却期

end

end

end





6. 功能展示图及说明

image.png

资源占用


image.png

信号发生器:生成4800hz vpp=0.5v的正弦波

image.png

信号测量:测量3khz vpp=2v的正弦波测量到2999hz,vpp=1.99

7. 项目中遇到的难题及解决方法

  • 难题 A:低幅值信号的精度问题。 当输出要求 100mV 时,DAC 量化噪声明显。
    • 解决: 优化 ROM 表精度,并在硬件后端增加低通滤波电路以平滑波形。
  • 难题 B:FFT 运算资源占用过大。
    • 解决试图通过Goertzel方式进行频率解算,但还是无法处理谐波分量,项目中最后选择了直接数值计算。
  • 难题 C:信号复现时的失真。
    • 解决: 引入校准系数,对 ADC 采集到的幅值进行补偿,确保复现误差在 10% 以内。
  • 难题 D:精简OLED字库后,部分字母无法显示
    • 解决 读取地址的偏移量不匹配。

8. 心得体会

通过本次项目,我深入理解了数字信号处理在 FPGA 上的硬件实现过程。从底层的 ADC/DAC 时序驱动,到频谱分析,每一步都要求严谨的逻辑时序。笔者在这之前没有接触过FPGA,面对复杂的Verilog语言 感到颇为吃力,很多代码实现还是依赖Gemini的帮助。

同时,这次FPGA开发经历让我开始“敬畏”硬件限制,以往做过的项目都接触不到开发板的上限,而进行频率处理时,那些复制的计算公式很容易超出开发板的计算能力。

附件下载
信号装置 demo.zip
本项目的quartus工程
团队介绍
陈智海--上海海事大学 2024级电子信息工程
团队成员
Applepie
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号