MCP4728 2 kHz 波形发生器
该 PlatformIO 项目驱动 MCP4728 四通道 12 位 DAC,使每个通道都能独立输出 2 kHz 波形(正弦、三角或方波)。每个通道都具备 12 位幅度调节、可变直流偏置与 查找表相位偏移能力。
硬件与软件要求
- 任何兼容 Arduino 的 I2C MCU(示例使用 Wire 库)
- Adafruit MCP4728 驱动库 (
Adafruit_MCP4728) - 建议将 I2C 设置为 Fast-mode Plus(1 MHz)以满足刷新速率
工作原理
- 每个波形周期取 32 个采样点(32 × 2 kHz = 64 kS/s)
- 开机时构建归一化的正弦/三角/方波查找表
loop()以微秒定时步进查找表,并把缩放后的样点写入 DAC- 通过原生 Adafruit 驱动完成全部 DAC 更新,无需修改底层代码
配置方法
在 src/main.cpp 中调用辅助函数配置任意通道:
setChannelWaveform(
/* 通道索引 0..3 */ 0,
/* 波形类型 */ WaveformType::kSine,
/* 幅度 (0..2047) */ 1800,
/* 直流偏置 (0..4095) */ kDacMidpoint,
/* 相位步进 (0..31) */ 0);amplitude提供 12 位分辨率;2047是在中点对称下不失真的最大值。offset控制波形的直流偏置;纯交流输出时保持为kDacMidpoint。phaseStep改变查找表索引,实现通道之间的相位对齐或错位。
所有通道共享同一采样时钟,因此都会保持 2 kHz,但可同时输出不同形状与幅度。
注意事项
- 推荐使用 1 MHz I2C;若 MCU 无法维持吞吐量,可适当降低
kWaveTableSamples。 - MCP4728 在写入数据后立即更新通道;若连接 UDAC 引脚,可修改
mcp.setChannelValue(...) 的最后一个参数改用锁存更新。
