MCP4922 是一款由 Microchip 生产的 12位双通道数模转换器(DAC),通过 SPI 接口与微控制器通信,其命令格式是控制 DAC 输出的核心,以下是详细的操作指南:
MCP4922 命令结构(16位)
命令字为 16 位,分为 配置位 和 数据位,结构如下(MSB 优先发送):
A/B | BUF | GA | SHDN | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0
位 | 名称 | 功能说明 |
---|---|---|
15 | A/B | 通道选择:0 =通道A(VOUTA),1 =通道B(VOUTB) |
14 | BUF | 输入缓冲:0 =无缓冲,1 =启用缓冲(参考电压 VREF 输入缓冲) |
13 | GA | 输出增益:0 =2x增益(VOUT = 2 VREF D/4096),1 =1x增益(VOUT = VREF * D/4096) |
12 | SHDN | 关断控制:0 =关断输出(高阻态),1 =正常输出 |
11-0 | D11-D0 | 12位数据值(D11 为最高位) |
命令配置步骤
-
选择通道
- 写通道 A:
A/B = 0
- 写通道 B:
A/B = 1
- 写通道 A:
-
配置缓冲模式
- 直接驱动 VREF:
BUF = 0
- 缓冲 VREF(降低阻抗影响):
BUF = 1
- 直接驱动 VREF:
-
设置输出增益
- 2倍增益(输出范围 0~2×VREF):
GA = 0
- 1倍增益(输出范围 0~VREF):
GA = 1
- 2倍增益(输出范围 0~2×VREF):
-
启用/关断输出
- 正常输出:
SHDN = 1
- 关闭输出(省电模式):
SHDN = 0
- 正常输出:
-
填入12位数据
- 将 0~4095 的数值写入
D11-D0
(2048 = 半量程)。
- 将 0~4095 的数值写入
命令发送示例(Arduino代码)
void setup() { SPI.begin(); pinMode(CS_PIN, OUTPUT); digitalWrite(CS_PIN, HIGH); // 初始禁用芯片 } void writeMCP4922(uint8_t channel, uint16_t data) { // 构建命令字(16位) uint16_t command = 0; command |= (channel << 15); // 设置通道(0或1) command |= (1 << 14); // BUF=1(启用缓冲) command |= (0 << 13); // GA=0(2倍增益) command |= (1 << 12); // SHDN=1(启用输出) command |= (data & 0x0FFF); // 填入12位数据 // 发送命令 digitalWrite(CS_PIN, LOW); SPI.transfer16(command); // 发送16位数据 digitalWrite(CS_PIN, HIGH); } void loop() { writeMCP4922(0, 2048); // 通道A输出半量程(2.048V,假设VREF=2.048V) delay(1000); }
关键注意事项
-
SPI 模式
MCP4922 支持 SPI Mode 0,0(CPOL=0, CPHA=0)和 Mode 1,1(CPOL=1, CPHA=1)。
时钟频率:最高 20 MHz(确保时序满足芯片要求)。 -
电压参考(VREF)
输出精度直接依赖 VREF 的稳定性,建议使用精密基准电压源。 -
LDAC 引脚功能
若使用LDAC
引脚(引脚6),需将其拉低以同步更新双通道输出,否则在CS
上升沿时立即更新。 -
输出范围计算
- 增益 1x:
VOUT = (VREF × data) / 4096
- 增益 2x:
VOUT = (2 × VREF × data) / 4096
- 增益 1x:
典型应用场景
- 音频信号生成(需配合滤波电路)
- 可编程电压源
- 自动化控制系统中的模拟量输出
MCP4922 的命令控制本质是组合 4位配置位 + 12位数据位,通过 SPI 发送 16 位字实现,开发者需根据需求配置通道、增益和缓冲模式,并确保 SPI 时序正确,实际应用中,建议通过示波器验证信号波形,并参考官方数据手册调试临界条件。
引用说明基于 Microchip 官方数据手册 MCP4922 Datasheet 第 5.0 节 “Serial Interface” 和第 6.0 节 “DAC Programming”,技术参数以手册为准。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7588.html