任务名称
2001年_A题:波形发生器
任务要求
难度

一、任务
设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。示意图如下:


二、要求
1.基本要求
(1)具有产生正弦波、方波、三角波三种周期性波形的功能。
(2)用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(5 次以下)线性组合的波形。
(3)具有波形存储功能。
(4)输出波形的频率范围为 100Hz~20kHz(非正弦波频率按 10次谐波计算);重复频率可调,频率步进间隔≤100Hz。
(5)输出波形幅度范围 0~5V(峰-峰值),可按步进 0.1V(峰- 峰值)调整。
(6)具有显示输出波形的类型、重复频率(周期)和幅度的功能。
2.发挥部分
(1)输出波形频率范围扩展至 100Hz~200kHz。
(2)用键盘或其他输入装置产生任意波形。
(3)增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于±3%(负载电阻变化范围:100Ω~∞)。
(4)具有掉电存储功能,可存储掉电前用户编辑的波形和设置。
(5)可产生单次或多次(1000 次以下)特定波形(如产生 1 个半周期三角波输出)。
(6)其它(如增加频谱分析、失真度分析、频率扩展>200kHz、扫频输出等功能)。

评审标准

参考答案

GPT-4o给出的设计方案:


一、方案论证

该设计任务要求设计一个波形发生器,具有产生正弦波、方波、三角波及特定组合波形的功能。整个系统包括键盘输入、显示部分、波形生成和微控制器部分。选择合适的MCU进行波形控制,以确保输出波形精度和调节范围。同时结合数模转换器(DAC)实现波形的模拟输出。

二、系统设计

1. 主要模块

  • 微控制器(MCU):进行整体控制,接受键盘输入,生成波形数据并发送到DAC,如STM32系列。
  • 键盘输入:用户输入波形类型、频率、振幅的调节信息。
  • 显示部分:液晶显示屏(LCD),如带I2C接口的16x2字符LCD,用于显示当前设置。
  • 波形生成器:利用DAC输出模拟信号,经过滤波后得到所需波形。
  • 存储器:存储预设波形数据及用户配置。

2. 重要指标分析

  1. 频率范围:要求输出频率在100Hz至20kHz,扩展部分要求至100kHz~200kHz。
    • 频率精度在±0.5%以内,可通过高精度的晶振和定时器控制实现。
  2. 输出波形:包括正弦波、方波、三角波及其线性组合波形。
    • 利用查找表法生成波形数据,存储在MCU的ROM中。
  3. 振幅调节:输出幅度0~5V调节,可设置0.1V步进。
    • 使用可编程增益放大器(PGA)进行幅度调整。
  4. 波形存储:可存储预设及用户自定义波形。
    • MCU内部Flash或外部EEPROM用于存储波形数据。

3. 原理图设计要点

  1. MCU 控制电路

    • 使用STM32系列MCU,提供高性能定时器,ADC和DAC接口。
    • 外加晶振电路,提高时钟精度。
  2. DAC 电路

    • 选用高精度DAC,如DAC8551,16位分辨率。
    • 利用低通滤波器去除DAC输出中的高频噪声。
  3. 键盘和显示电路

    • 键盘采用矩阵键盘,通过GPIO口读取输入。
    • LCD显示屏通过I2C或SPI接口与MCU通信。

4. 核心器件设计要点

  1. STM32 MCU

    • 带有硬件DAC,定时器和通讯接口。
    • 适量的Flash和RAM用于存储和运行程序。
    • 高速GPIO用于响应键盘输入。
  2. DAC8551

    • 16位精度,提供低噪声高线性度的模拟信号。
    • SPI接口,用于高速数据传输。
  3. 显示屏

    • 16x2字符LCD,通过I2C或SPI接口与MCU连接,便于显示调节信息。

5. 重要功能C代码

#include "stm32f1xx_hal.h"

DAC_HandleTypeDef hdac;
TIM_HandleTypeDef htim6;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DAC_Init(void);
static void MX_TIM6_Init(void);

const uint16_t sine_wave[] = { ... }; // 存储波形数据
const int wave_size = sizeof(sine_wave) / sizeof(uint16_t);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_DAC_Init();
    MX_TIM6_Init();

    HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
    HAL_TIM_Base_Start(&htim6);
    HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)sine_wave, wave_size, DAC_ALIGN_12B_R);

    while (1)
    {
        // 键盘输入和显示屏更新逻辑
        // 更新频率、幅度和波形类型
    }
}

void SystemClock_Config(void)
{
    // 时钟配置代码
}

static void MX_GPIO_Init(void)
{
    // GPIO初始化代码
}

static void MX_DAC_Init(void)
{
    hdac.Instance = DAC;
    HAL_DAC_Init(&hdac);
    DAC_ChannelConfTypeDef sConfig = {0};
    sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
    sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
    HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1);
}

static void MX_TIM6_Init(void)
{
    htim6.Instance = TIM6;
    htim6.Init.Prescaler = 0;
    htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim6.Init.Period = 0xFFFF;
    HAL_TIM_Base_Init(&htim6);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM6)
    {
        // 定时器中断处理逻辑
    }
}

总结

本设计实现了一种简易的波形发生器系统,具有产生正弦波、方波、三角波和组合波形的功能,并能进行频率和幅度调节。系统采用STM32微控制器、DAC8551进行高精度波形生成,配合矩阵键盘输入和LCD显示,为用户提供友好的操作界面和精确的波形输出。

 


这个题目考察的知识点:

  1. 波形发生器基础

    • 了解波形发生器的原理和功能,包括正弦波、方波、三角波及其他组合波形的生成。
  2. 模拟和数字电子技术

    • 掌握A/D和D/A转换的基本原理及应用,尤其是如何使用DAC生成模拟信号。
    • 掌握运算放大器、滤波器以及其他模拟电路的设计和应用。
  3. 微控制器(MCU)编程

    • 使用MCU进行波形生成、频率和振幅调节的编程技能。
    • 设计键盘输入和显示界面,实现用户与设备的交互。
  4. 电路设计

    • 设计高输入阻抗电路、频率和幅度控制电路及驱动电路。
    • 模拟和数字电路的结合设计与调试。
  5. 通信接口

    • 了解I2C、SPI等通信接口,尤其是用于LCD显示器和DAC之间的数据传输。
  6. 系统软硬件调试

    • 软硬件协同工作,测试与调试波形生成系统的实际性能。
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号