RP2040 + AD9833 OLED 信号发生器

便携式可编程波形发生器,集成 OLED 显示与四按键控制,支持正弦波、方波、三角波输出

RP2040 AD9833 DDS SSD1306 OLED Arduino EEPROM
运行演示

📖 项目简介

这是一款基于 Raspberry Pi Pico (RP2040) 和 AD9833 DDS 芯片的便携式信号发生器。 AD9833 是 Analog Devices 生产的低功耗直接数字合成 (DDS) 芯片,可产生高精度正弦波、三角波和方波信号。

设备配备 0.96 寸 OLED 显示屏和四按键操作界面,用户可以实时查看当前输出模式与频率, 并通过按键快速调节。设置参数自动保存到 EEPROM,断电后不丢失。

采用 Arduino (C++) 开发,通过 SPI 接口与 AD9833 通信,通过软件 I2C 驱动 OLED 显示屏。

技术规格

0 - 12.5 MHz
频率范围
0.1 Hz
频率分辨率
SIN / TRI / SQU
波形类型
128 x 64
OLED 分辨率
正弦波 SIN
0.1 Hz - 12.5 MHz
三角波 TRI
0.1 Hz - 12.5 MHz
⊓⊓
方波 SQU
0.1 Hz - 12.5 MHz
关闭 OFF
停止输出

🔌 硬件连接

模块 引脚 说明
AD9833 DATA=2, CLK=1, FSYNC=0 SPI 通信接口
OLED 显示屏 SDA=29, SCL=28 软件 I2C (SSD1306 驱动)
按键 UP GPIO 14 增加频率值
按键 DOWN GPIO 15 减少频率值
按键 MODE GPIO 26 切换波形模式 (短按) / 恢复默认 (长按2秒)
按键 DIGI GPIO 27 切换编辑位
电源控制 GPIO 3, 4 控制外部设备电源

🎮 操作说明

UP GPIO 14
短按:当前编辑位 +1 (0-9 循环)
长按:持续递增,支持加速
DOWN GPIO 15
短按:当前编辑位 -1 (9-0 循环)
长按:持续递减,支持加速
🔄 MODE GPIO 26
短按:SIN → TRI → SQU → OFF 循环切换
长按 2秒:恢复出厂默认 (1kHz 正弦波)
DIGI GPIO 27
短按:切换编辑位置 (小数点位→个位→十位...→小数点位循环)
OLED 箭头指示当前编辑位

提示:显示格式为 DDDDDDDD.D (8位整数 + 1位小数),直接使用 4 个按键即可快速设置 0-12500000.0 Hz 范围内的任意频率。参数自动保存到 EEPROM。

💾 功能特性

🧠 智能交互
• 消抖处理 (200ms 防抖)
• 长按加速 (500ms后开始)
• 快速连发 (200ms间隔)
💾 掉电保存
• EEPROM 自动存储
• 保存波形模式
• 保存频率设置
• 开机自动恢复
📊 实时显示
• OLED 128x64 显示
• 波形模式指示
• 频率数值显示
• 编辑位箭头提示
🔧 DDS 技术
• AD9833 直接数字合成
• SPI 高速通信
• 25MHz 时钟基准
• 0.1Hz 高分辨率

📁 源代码

本项目使用 Arduino 开发平台编写,代码位于:

Pico_OLED_4key5/Pico_OLED_4key5.ino

依赖库:MD_AD9833、SoftI2C、SSD1306、EEPROM (RP2040 SDK)