一、任务
设计制作一个正弦信号发生器。
二、要求
1、基本要求
(1)正弦波输出频率范围:1kHz~10MHz;
(2)具有频率设置功能,频率步进:100Hz;
(3)输出信号频率稳定度:优于 10-4;
(4)输出电压幅度:在 负载电阻上的电压峰 50Ω -峰值Vopp≥1V;
(5)失真度:用示波器观察时无明显失真。
2、发挥部分
在完成基本要求任务的基础上,增加如下功能:
(1)增加输出电压幅度:在频率范围内50Ω 负载电阻上正弦信号输出电压的峰-峰值Vopp=6V±1V;
(2)产生模拟幅度调制(AM)信号:在 1MHz~10MHz范围内调制度ma可在 10%~100%之间程控调节,步进量 10%,正弦调制信号频率为 1kHz,调制信号自行产生;
(3)产生模拟频率调制(FM)信号:在 100kHz~10MHz 频率范围内产生 10kHz 最大频偏,且最大频偏可分为 5kHz/10kHz 二级程控调节,正弦调制信号频率为1kHz,调制信号自行产生;
(4)产生二进制 PSK、ASK 信号:在 100kHz 固定频率载波进行二进制键控,二进制基带序列码速率固定为 10kbps,二进制基带序列信号自行产生;。
GPT-4o给出的设计方案:
信号发生部分
放大器部分
控制部分
使用DDS芯片可以实现频率精确控制,满足频率范围和频率分辨率的要求。通过MCU控制可以灵活调整输出信号的频率、幅度及调制方式,提高了系统的可操作性和功能性。
频率范围和分辨率
输出电压幅度
失真和稳定性
DDS信号发生器电路
放大器电路
控制电路
AD9850/AD9833 DDS芯片
OPA2350 运算放大器
STM32 MCU
以下是一个实现基本控制DDS芯片和显示功能的示例代码:
#include "stm32f1xx_hal.h"
#include "ad9850.h"
#include "lcd.h"
// AD9850引脚配置
#define AD9850_DATA_PIN GPIO_PIN_0
#define AD9850_CLK_PIN GPIO_PIN_1
// LCD引脚和库根据实际情况配置
void AD9850_Init() {
HAL_GPIO_WritePin(GPIOA, AD9850_DATA_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, AD9850_CLK_PIN, GPIO_PIN_RESET);
AD9850_Reset();
}
void setFrequency(uint32_t frequency) {
AD9850_SetFrequency(frequency);
}
void setAmplitude(uint16_t amplitude) {
// 控制输出信号的幅度
}
void setup() {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_LCD_Init();
AD9850_Init();
LCD_Clear();
LCD_DisplayString("Init Complete");
}
int main(void) {
setup();
uint32_t frequency = 1000; // 初始频率1kHz
while (1) {
if (button_pressed()) {
frequency += 100; // 每次按键增加100Hz
if (frequency > 10000000) frequency = 1000; // 不超过10MHz
setFrequency(frequency);
char buf[16];
sprintf(buf, "Freq: %u Hz", frequency);
LCD_Clear();
LCD_DisplayString(buf);
}
HAL_Delay(100); // 增加按钮防抖处理
}
}
这个题目考察的知识点:
频率合成:
信号调制:
信号放大:
控制与显示:
通过这些知识点的掌握,可以较好地实现正弦信号发生器的基本功能及扩展功能。