MCP4725 · 12-bit I2C DAC

MCP4725 DAC 模块正常测试资料

MCP4725 好坏不要只看“上电 VOUT 有没有 2V”。它带 EEPROM,上电后可能输出上一次保存的电压。标准判断是:I2C 能识别,VOUT 能按程序写入值变化。

Quick Facts

  • 接口:I2C
  • 常见地址:0x60 / 0x61
  • 分辨率:12-bit,0~4095
  • 判断:看 VOUT 是否随程序变化
MCP4725 DAC 模块淘宝链接:item.taobao.com/item.htm?id=992888837872
进入淘宝购买

Product

模块实物与测试重点

这类蓝色小板常见丝印为 VCC、GND、SCL、SDA、OUT/VOUT。尺寸和丝印以当前批次实物为准。

MCP4725 DAC 模块实物图

不要只看上电电压

上电后 VOUT 可能保持 EEPROM 里保存的默认值,例如 2V 左右,不能直接判坏。

先扫 I2C

常见地址是 0x60;有些模块 A0 状态不同,可能是 0x61。

再测 VOUT

写 0、1024、2048、3072、4095,看万用表电压是否按比例变化。

Real Test

实拍接线与测试视频

下面素材为本地实拍测试记录。本次按 3.3V 供电测试,写入 2048 时 VOUT 应约为 1.65V,也就是供电电压的一半。

MCP4725 Arduino UNO 实拍接线图
Arduino UNO 接 MCP4725 实拍接线,VOUT 接万用表表笔测试。
MCP4725 I2C 扫描到 0x60 截图
I2C 扫描能找到 0x60,说明 I2C 通信基本正常。
MCP4725 3.3V 上电未写程序前 VOUT 约 1.72V
3.3V 上电、未写程序前 VOUT 约 1.72V,只能说明 EEPROM/默认输出状态,不能单独判断模块损坏。

视频重点看 VOUT 是否随程序变化;3.3V 供电时,半量程不是 2.5V,而是约 1.65V。

Wiring

Arduino / ESP32 标准接线

ESP32 建议 MCP4725 也用 3.3V 供电,不要 5V 供电后直接接 ESP32 的 SDA/SCL,避免 I2C 上拉到 5V。

MCP4725 Arduino ESP32 接线图
MCP4725Arduino UNOESP32
VCC5V3.3V
GNDGNDGND
SDAA4GPIO21
SCLA5GPIO22
VOUT万用表红表笔万用表红表笔
GND万用表黑表笔万用表黑表笔

Voltage Test

VOUT 阶梯电压判断表

公式:VOUT ≈ VCC × 写入值 ÷ 4096。如果用 3.3V 供电,写入 2048 就是约 1.65V;如果用 5V 供电,写入 2048 才是约 2.5V。

写入值5V 供电 VOUT3.3V 供电 VOUT判断
0接近 0V接近 0V最低输出
1024约 1.25V约 0.82V约 1/4 VCC
2048约 2.5V约 1.65V约 1/2 VCC
3072约 3.75V约 2.47V约 3/4 VCC
4095接近 5V接近 3.3V接近 VCC

Arduino Code

Adafruit MCP4725 阶梯测试代码

Arduino IDE 库管理器搜索安装 Adafruit MCP4725,再烧录下面程序,用万用表测 VOUT。

#include <Wire.h>
#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  if (!dac.begin(0x60)) {
    Serial.println("MCP4725 not found at 0x60");
    Serial.println("Try I2C scanner. Some modules may use 0x61.");
    while (1) {
      delay(10);
    }
  }

  Serial.println("MCP4725 found");
}

void loop() {
  dac.setVoltage(0, false);
  Serial.println("VOUT should be near 0V");
  delay(3000);

  dac.setVoltage(1024, false);
  Serial.println("VOUT should be about 1/4 VCC");
  delay(3000);

  dac.setVoltage(2048, false);
  Serial.println("VOUT should be about 1/2 VCC");
  delay(3000);

  dac.setVoltage(3072, false);
  Serial.println("VOUT should be about 3/4 VCC");
  delay(3000);

  dac.setVoltage(4095, false);
  Serial.println("VOUT should be near VCC");
  delay(3000);
}

Troubleshooting

正常 / 异常判断

什么情况基本正常?

I2C 能扫到 0x60 或 0x61;VOUT 会跟程序变化;写 0 接近 0V;写 2048 接近 VCC 一半;写 4095 接近 VCC;模块不发热,VCC 不被拉低。

什么情况才像异常?

I2C 扫不到地址;VOUT 一直固定不变;写 0 还是 2V 多;写 4095 还是 2V 多;模块发热;VCC 被拉低;SDA/SCL 接反、虚焊或没有共地。

上电 VOUT 有 2V 是坏了吗?

不一定。MCP4725 有 EEPROM,上电可能输出上次保存的电压。必须通过 I2C 写不同数值,看 VOUT 是否能变化。

ESP32 为什么建议 3.3V 供电?

很多 MCP4725 小板有 I2C 上拉电阻。如果模块接 5V,SDA/SCL 可能被上拉到 5V,ESP32 不是 5V 容忍,存在风险。

Customer Reply

淘宝客户简短话术

MCP4725 正常测试方法不是只看上电 VOUT 有没有电压。它是 DAC 模拟输出芯片,内部带 EEPROM,上电后 VOUT 可能输出上一次保存的默认电压,比如 2V 左右,这个不能直接判断坏。正确判断方法是接单片机,通过 I2C 写入不同数值,看 VOUT 电压能不能变化。

请先用 I2C 扫描确认能扫到 0x60 或 0x61,再烧录 MCP4725 阶梯测试程序。写入 0 时 VOUT 应接近 0V;写入 2048 时约为供电电压一半;写入 4095 时接近 VCC。如果 VOUT 能按程序变化,模块就是正常的。

References

官方与公开资料