综合电路设计课程 A 题,与 2021 年 TI 杯信号类题目要求相似。基于 STM32 采集输入信号,通过 FFT 频谱分析计算总谐波失真度 (THD),并在 LCD 上显示时域波形和频谱。
| 部件 | 型号 | 说明 |
|---|---|---|
| 主控 | STM32G431 | Cortex-M4F @ 80MHz,含 DSP 指令集 + FPU |
| ADC | 板载 ADC | TIM 定时触发 + DMA 自动搬运 |
| 显示屏 | TFT LCD | 显示波形、频谱、THD 值 |
| 调试 | UART | 串口打印波形数据和频谱 |
模拟信号输入 → 抗混叠滤波
→ TIM 触发 ADC 采样(多通道同步)
→ DMA 自动搬运到 SRAM 缓冲区
→ CMSIS-DSP FFT 运算(实数 FFT)
→ 基波 + 各次谐波幅值提取
→ THD 计算:√(∑ 谐波有效值²) / 基波有效值 × 100%
→ LCD 显示 + UART 输出
- TIM 定时器产生固定频率触发信号
- ADC 多通道同步采样,DMA 环形缓冲区搬运
- 采样率可配置,满足不同频率信号分析需求
- 调用 CMSIS-DSP 库实 FFT 函数
- 支持窗函数(可配置,减少频谱泄漏)
- 提取基波和各次谐波的分量幅值
- 输出归一化频谱(基波 = 100%)
- 自动识别基波频率
- 提取 2~10 次谐波分量
- THD = √(V₂² + V₃² + ... + Vₙ²) / V₁ × 100%
- 第一行:学号 + 姓名
- 波形区:输入信号时域波形
- 频谱区:归一化幅值频谱(含基波和谐波)
- 数据区:THDx(总谐波失真度)
- 输入波形数据(用于验证)
- 频谱数据(各频率分量幅值)
- 计算结果(THD 值)
| 工具 | 版本 |
|---|---|
| IDE | Keil MDK uVision 5 |
| MCU SDK | STM32Cube FW_G4 |
| 配置 | STM32CubeMX |
| DSP 库 | CMSIS-DSP |
| PCB 设计 | 嘉立创 EDA |
├── Core/ HAL 配置 + main 函数
├── Drivers/ STM32G4 HAL 驱动
├── DSP/ CMSIS-DSP 库
├── Module/ LCD 驱动、按键等
├── App/ 应用代码(FFT、THD 计算)
├── MDK-ARM/ Keil 工程文件
└── DistortionCalculator.ioc CubeMX 配置文件
用 Keil MDK 打开 MDK-ARM 目录下的工程文件,编译下载到 STM32G4 开发板。
输入被测信号(通过信号发生器或开发板 DAC 自产生),自动测量并显示 THD。