1. 项目概述与核心设计思路
作为一名电子爱好者,我一直对信号发生器的设计充满兴趣。这次我决定用单片机打造一个多功能函数信号发生器,能够产生正弦波、三角波、方波和锯齿波四种基本波形,并且具备频率调节和LCD显示功能。这个项目不仅考验对单片机编程的理解,还需要掌握数字信号处理的基本原理。
选择单片机作为核心控制器有几个关键考量:首先,现代单片机性能足够强大,能够满足波形生成的需求;其次,单片机方案成本低廉,适合个人DIY;最重要的是,通过这个项目可以深入理解数字信号生成的底层原理。我最终选择了STM32F103C8T6这款Cortex-M3内核的单片机,它内置12位DAC,能够提供足够的波形分辨率。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与关键组件选型
2.1 核心控制器选择
经过对比多款单片机,我选择了STM32F103C8T6(俗称"蓝莓板")作为核心控制器,主要基于以下考虑:
- 72MHz主频,处理波形数据游刃有余
- 内置12位DAC,省去外接DAC芯片的麻烦
- 丰富的外设接口,方便扩展功能
- 价格亲民(约15元),性价比极高
提示:如果预算充足,可以考虑STM32F4系列,其内置的DAC性能更优,但初学者用F103已经足够。
2.2 输出电路设计
DAC输出后需要经过适当的信号调理电路:
- 低通滤波器:滤除数字信号的高频噪声
- 运算放大器:调整输出幅度和驱动能力
- 保护电路:防止输出短路损坏单片机
我采用了二阶巴特沃斯低通滤波器,截止频率设为50kHz,足以覆盖音频范围。运放选择了常见的NE5532,它具有低噪声、高转换速率的特性。
2.3 LCD显示模块
选用1602字符型LCD显示当前波形参数,通过4位并行接口连接,节省IO口资源。显示内容包括:
- 波形类型(正弦/三角/方波/锯齿)
- 当前频率值
- 输出幅度(可选)
3. 波形生成原理与实现
3.1 正弦波生成技术
正弦波的数学表达式为y = A×sin(2πft + φ),在数字系统中,我们采用查表法实现:
c复制#define SINE_TABLE_SIZE 256
const uint16_t sineTable[SINE_TABLE_SIZE] = {
// 通过Python预先计算:int(2047*sin(2*pi*i/256)+2048)
2048, 2073, 2098, 2123, ..., 2047 // 具体数值省略
};
void generateSineWave(uint32_t frequency) {
static uint32_t phaseAccumulator = 0;
uint32_t phaseIncrement = (frequency * SINE_TABLE_SIZE) / SAMPLE_RATE;
while(1) {
phaseAccumulator += phaseIncrement;
if(phaseAccumulator >= SINE_TABLE_SIZE)
phaseAccumulator -= SINE_TABLE_S
