AD5165(超低功耗逻辑电平数字电位器)芯片的详细用法
目录
一、硬件连接
1. 引脚功能与核心连接(8 引脚 TSOT-8 封装,顶视图)
2. 关键外围电路设计
(1)电源电路:必加旁路电容
(2)地处理:数字地与模拟地单点共地
(3)ESD 防护
3. 上电顺序(核心!避免二极管误导通)
4. 3 线数字接口时序要求
二、软件配置
1. 通信协议与数据格式
(1)协议特性
(2)8 位数据格式
2. 编程核心步骤(以 MCU 为例)
3. 不同工作模式的编程计算
(1)变阻器模式(调节 RWB 或 RWA)
(2)电位器模式(调节 VW,分压器)
4. 关键注意事项
三、典型应用电路参考
四、Arduino 环境下 ESP32-PICO 的 AD5165 参考代码
1.硬件连接说明
2.Arduino 参考代码
一、硬件连接
需重点关注电源电路、引脚功能匹配、3 线数字接口时序、上电顺序四大核心,结合芯片特性(如 ESD 保护、电流限制)避免损坏或功能异常。
1. 引脚功能与核心连接(8 引脚 TSOT-8 封装,顶视图)
先明确各引脚定义,再对应连接控制器(如 MCU)、电源及外部电路,引脚功能与连接要求如下表:
引脚号 | 引脚名 | 功能描述 | 硬件连接要求 |
---|---|---|---|
1 | W | 抽头端子(可编程电阻 / 电压输出端) | 连接负载或检测电路;电压范围0V ≤ V_W ≤ V_DD ,极性无限制;零刻度(代码 0x00)时R_WB=100Ω ,脉冲电流≤20mA,连续电流≤5mA(避免内部开关损坏) |
2 | V_DD | 正电源 | 供电电压2.7V ~ 5.5V ;必须串联电源旁路电容(0.01~0.1μF 陶瓷电容 + 1~10μF 钽 / 电解电容),靠近引脚减少纹波 |
3 | GND | 数字地 | 与模拟地单点连接(避免地弹噪声);需低电阻、低电感布线,优先连接系统地平面 |
4 | CLK | 串行时钟输入(上升沿触发) | 连接 MCU 的 SPI_CLK 或 GPIO(模拟时钟);时钟频率≤25MHz,高 / 低脉冲宽度≥20ns(满足时序要求) |
5 | SDI | 串行数据输入(MSB 先传) | 连接 MCU 的 SPI_MOSI 或 GPIO(模拟数据);数据建立时间≥5ns、保持时间≥5ns(确保 CLK 上升沿采样正确) |
6 | CS | 片选输入(高有效,区别于 AD5160) | 连接 MCU 的 GPIO;高电平时使能芯片接收数据,8 位数据传完后拉低,拉低时数据加载到抽头寄存器(核心使能信号);空闲时建议拉低(减少逻辑功耗) |
7 | B | 电阻 B 端 | 变阻器模式:接电源 / 地或开路;电位器模式:接参考地或低电位端;电压范围0V ≤ V_B ≤ V_DD ,极性无限制 |
8 | A | 电阻 A 端 | 变阻器模式:接电源 / 地或开路;电位器模式:接输入电压(如 5V)或高电位端;电压范围0V ≤ V_A ≤ V_DD ,极性无限制 |
2. 关键外围电路设计
(1)电源电路:必加旁路电容
为抑制电源纹波和瞬态干扰,需在V_DD
与GND
之间并联两类电容,布局时靠近芯片引脚:
- 高频去耦:0.01~0.1μF 多层陶瓷电容(如 0402 封装,X7R 材质);
- 低频滤波:1~10μF 钽电容或铝电解电容(低 ESR 类型,应对大电流瞬变)。
(2)地处理:数字地与模拟地单点共地
芯片的GND
为数字地,若系统存在模拟电路(如W
端输出检测),需将数字地与模拟地在电源入口处单点连接,避免数字噪声耦合到模拟端,导致调节精度下降。
(3)ESD 防护
芯片内置数字输入(CLK/SDI/CS)和电阻端子(A/B/W)的 ESD 保护电路,但操作时仍需注意:
- 焊接或调试时,设备(烙铁、示波器)需接地;
- 避免人体静电(如戴防静电手环),防止 4000V 以上静电放电损坏芯片。
3. 上电顺序(核心!避免二极管误导通)
芯片内部 ESD 保护二极管会钳位A/B/W
端电压(不超过V_DD
和GND
),若上电顺序错误,可能导致V_DD
被意外供电,影响系统电路。正确顺序:
- 先接
GND
(确保地电位稳定); - 再接
V_DD
(2.7~5.5V); - 最后加载数字输入(CLK/SDI/CS)和
A/B/W
端电压;
- 注:
A/B/W
端电压与数字输入的上电顺序无严格要求,只要在V_DD/GND
之后即可。
4. 3 线数字接口时序要求
通信需满足以下时序参数(V_DD=5V±10%
,-40℃~125℃
),否则数据传输错误:
时序参数 | 符号 | 最小值 | 最大值 | 单位 | 说明 |
---|---|---|---|---|---|
时钟频率 | f_CLK | - | 25 | MHz | CLK 周期≥40ns(高 + 低电平) |
时钟高 / 低脉冲宽度 | t_CH/t_CL | 20 | - | ns | CLK 高、低电平持续时间 |
数据建立时间 | t_DS | 5 | - | ns | SDI 数据在 CLK 上升沿前稳定 |
数据保持时间 | t_DH | 5 | - | ns | SDI 数据在 CLK 上升沿后稳定 |
CS 建立时间 | t_CSS | 15 | - | ns | CS 拉高后到第一个 CLK 上升沿的时间 |
CS 低脉冲宽度 | t_CSW | 40 | - | ns | 数据加载时 CS 拉低的持续时间 |
二、软件配置
基于 3 线数字接口(类 SPI,CS 高有效),软件核心是按时序传输 8 位数据,实现 256 个抽头位置的编程,需关注数据格式、编程步骤及不同模式的计算。
1. 通信协议与数据格式
(1)协议特性
- 类 SPI 协议,无命令字节,直接传输 8 位抽头位置数据;
- 区别于标准 SPI:CS 为高有效(AD5160 为低有效,二者 Pin-to-pin 兼容但 CS 极性相反);
- CLK 上升沿触发数据采样,SDI 需按MSB(最高位)先传顺序发送。
(2)8 位数据格式
8 位数据对应 256 个抽头位置(0x00~0xFF),数据位定义如下:
位 7(B7) | 位 6(B6) | 位 5(B5) | 位 4(B4) | 位 3(B3) | 位 2(B2) | 位 1(B1) | 位 0(B0) |
---|---|---|---|---|---|---|---|
MSB(2⁷) | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | LSB(2⁰) |
- 数据范围:0x00(抽头靠近 B 端)~0xFF(抽头靠近 A 端);
- 上电初始状态:默认中刻度(数据 0x80,128),对应电阻 / 电压的中间值。
2. 编程核心步骤(以 MCU 为例)
需严格遵循时序要求,步骤如下:
- 使能芯片:将 CS 引脚拉为高电平(仅高电平时,芯片接收 CLK 和 SDI 信号);
- 传输 8 位数据:
- 从数据的MSB(B7)开始,在每个 CLK 上升沿前,将当前数据位(0/1)写入 SDI 引脚;
- 每传输 1 位,触发 1 次 CLK 上升沿(确保数据被采样),重复 8 次,完成全部 8 位数据传输;
- 加载数据:8 位数据传输完成后,将 CS 引脚拉为低电平,此时数据从串行寄存器加载到抽头寄存器,电阻(RWB/RWA)或电压(VW)立即更新;
- 空闲状态:CS 保持低电平(减少逻辑功耗,避免误触发)。
3. 不同工作模式的编程计算
AD5165 支持变阻器模式(调节电阻)和电位器模式(调节分压电压),需根据公式计算目标数据。
(1)变阻器模式(调节 RWB 或 RWA)
核心是通过数据D
(0~255)编程W
与B
(或W
与A
)之间的电阻,R_AB=100kΩ
(固定),R_W=50Ω
(抽头接触电阻)。
- W-B 端电阻(RWB):抽头靠近 B 端时电阻小,公式:
R_WB(D) = (D / 256) * R_AB + 2*R_W
示例:D=0x00(0)→ RWB=100Ω;D=0xFF(255)→ RWB≈99710Ω;D=0x80(128)→ RWB≈50100Ω。 - W-A 端电阻(RWA):抽头靠近 A 端时电阻小,公式:
R_WA(D) = ((256 - D) / 256) * R_AB + 2*R_W
示例:D=0x00(0)→ RWA=100100Ω;D=0xFF(255)→ RWA=490Ω。
(2)电位器模式(调节 VW,分压器)
A
接高电位(如 5V),B
接低电位(如 GND),W
输出分压电压,精度受电阻比值影响(温漂仅 15ppm/℃,优于变阻器模式)。
- 简化计算(忽略 R_W):
V_W(D) = (D / 256) * V_A + ((256 - D) / 256) * V_B
示例:V_A=5V,V_B=0V,D=0x80(128)→ V_W=2.5V。 - 精确计算(含 R_W):
V_W(D) = (R_WB(D)/R_AB) * V_A + (R_WA(D)/R_AB) * V_B
4. 关键注意事项
- 数据完整性:必须传输完整 8 位数据,少传 / 多传会导致抽头位置错误;
- 时序裕量:软件中延迟时间需大于手册最小时序(如示例中用 1μs,远大于 15ns/20ns,避免 MCU 主频高导致时序不满足);
- 低功耗优化:空闲时 CS 保持低电平,此时芯片待机电流仅 50nA(典型值),适合电池供电场景;
- 电流限制:RWB≤1kΩ 时,W-B 端连续电流≤5mA,避免内部开关过热损坏(如 D=0x00 时 RWB=100Ω,V_WB≤0.5V 时电流≤5mA)。
三、典型应用电路参考
以 “5V 供电,电位器模式调节输出电压” 为例,硬件连接如下:
V_DD
:接 3.3V/5V 电源,并联 0.1μF 陶瓷电容 + 10μF 钽电容;GND
:接系统地,与模拟地单点共地;A
:接 5V(输入电压);B
:接 GND;W
:接负载或 ADC 输入(检测输出电压);CLK/SDI/CS
:接 MCU 的 GPIO(如 STM32 的 PB1/PB2/PB0);- 软件调用
AD5165_WriteData(0x80)
,W
端输出≈2.5V。
四、Arduino 环境下 ESP32-PICO 的 AD5165 参考代码
1.硬件连接说明
需严格遵循文档中 AD5165 的引脚功能()、电源要求()及时序参数(),ESP32-PICO 与 AD5165 的连接如下表:
ESP32-PICO 引脚 | AD5165 引脚 | 功能对应(文档依据) | 连接说明 |
---|---|---|---|
GPIO18 | 4(CLK) | 串行时钟输入(上升沿触发)() | 数字输出模式,时钟频率≤25MHz |
GPIO19 | 5(SDI) | 串行数据输入(MSB 先传)() | 数字输出模式,数据需在 CLK 上升沿前稳定 |
GPIO21 | 6(CS) | 片选输入(高有效)() | 数字输出模式,初始拉低(空闲低功耗)() |
3.3V/5V | 2(VDD) | 正电源(2.7V~5.5V)() | 建议接 ESP32 的 3.3V,需并联 0.1μF 陶瓷电容 + 10μF 钽电容() |
GND | 3(GND) | 数字地() | 与 ESP32 的 GND 共地,需单点连接模拟地(若有)() |
外部 5V | 8(A) | 电阻 A 端(电位器模式高电位)() | 电位器模式下接输入高电平,电压≤VDD() |
GND | 7(B) | 电阻 B 端(电位器模式低电位)() | 电位器模式下接 GND,与 A 端形成分压() |
负载 / ADC 输入 | 1(W) | 抽头端子(输出端)() | 输出电压 / 电阻,零刻度时 RWB=100Ω,电流≤5mA() |
2.Arduino 参考代码
// 1. 定义AD5165与ESP32-PICO的连接引脚(需与硬件接线一致)
const int AD5165_CLK = 18; // CLK引脚(文档1-76:引脚4,串行时钟输入)
const int AD5165_SDI = 19; // SDI引脚(文档1-76:引脚5,串行数据输入)
const int AD5165_CS = 21; // CS引脚(文档1-76:引脚6,片选输入,高有效)// 2. 初始化函数:配置引脚模式及时序基础
void AD5165_Init() {pinMode(AD5165_CLK, OUTPUT);pinMode(AD5165_SDI, OUTPUT);pinMode(AD5165_CS, OUTPUT);// 文档1-25:空闲时CS拉低,减少逻辑功耗;初始状态为中刻度(0x80)digitalWrite(AD5165_CS, LOW);digitalWrite(AD5165_CLK, LOW); // 时钟初始低电平AD5165_WriteData(0x80); // 上电初始化为中刻度(文档1-232:上电默认中刻度)
}// 3. 核心通信函数:向AD5165写入8位抽头数据(文档1-162/1-166:MSB先传,CS拉低加载数据)
// data:抽头数据(0x00~0xFF,对应256个位置,文档1-176:8位数据解码选择抽头)
void AD5165_WriteData(uint8_t data) {digitalWrite(AD5165_CS, HIGH); // 步骤1:CS拉高使能芯片(文档1-166:CS高时接收数据)delayMicroseconds(1); // 满足CS建立时间t_CSS≥15ns(文档1-57),留裕量// 步骤2:传输8位数据(MSB先传,从bit7到bit0,文档1-162)for (int i = 7; i >= 0; i--) {digitalWrite(AD5165_CLK, LOW); // 时钟拉低,准备数据delayMicroseconds(1); // 满足数据建立时间t_DS≥5ns(文档1-57)// 提取当前位(MSB优先),写入SDIuint8_t bit = (data >> i) & 0x01;digitalWrite(AD5165_SDI, bit);digitalWrite(AD5165_CLK, HIGH); // 时钟上升沿,采样数据(文档1-166:上升沿触发)delayMicroseconds(1); // 满足时钟高脉冲宽度t_CH≥20ns(文档1-57)}// 步骤3:CS拉低,加载数据到抽头寄存器(文档1-166:CS拉低时数据生效)digitalWrite(AD5165_CLK, LOW); // 时钟恢复低电平delayMicroseconds(1); // 满足CS低脉冲宽度t_CSW≥40ns(文档1-57)digitalWrite(AD5165_CS, LOW); // 回到空闲低功耗状态
}// 4. 示例:根据目标电阻(RWB)计算抽头数据(文档1-182:RWB(D) = (D/256)*R_AB + 2*R_W)
// R_AB=100kΩ(文档1-6),R_W=50Ω(文档1-179),返回对应8位数据D(0x00~0xFF)
uint8_t AD5165_CalcDataFromRWB(uint32_t targetRWB) {// 公式变形:D = [(targetRWB - 2*R_W) * 256] / R_ABuint32_t R_W = 50;uint32_t R_AB = 100000;int32_t D = ((targetRWB - 2*R_W) * 256) / R_AB;// 数据范围限制(0x00~0xFF,文档1-176:256个抽头位置)if (D < 0) D = 0;if (D > 255) D = 255;return (uint8_t)D;
}// 5. 示例:根据目标电压(VW)计算抽头数据(文档1-202:VW(D) = (D/256)*VA + ((256-D)/256)*VB)
// 假设VA=5V、VB=0V(电位器模式),返回对应8位数据D(0x00~0xFF)
uint8_t AD5165_CalcDataFromVW(float targetVW) {float VA = 5.0; // A端输入电压(需与硬件一致)float VB = 0.0; // B端输入电压(需与硬件一致)// 公式变形:D = (targetVW - VB) * 256 / (VA - VB)int32_t D = (targetVW - VB) * 256 / (VA - VB);// 数据范围限制(0x00~0xFF,文档1-176)if (D < 0) D = 0;if (D > 255) D = 255;return (uint8_t)D;
}// 6. 初始化ESP32引脚及AD5165
void setup() {Serial.begin(115200); // 串口调试(可选)AD5165_Init(); // 初始化AD5165(默认中刻度0x80)Serial.println("AD5165 Init Complete (Default: Midscale 0x80)");
}// 7. 主循环:演示不同模式的调节(可根据需求修改)
void loop() {// 示例1:电位器模式,输出2.5V(中刻度,文档1-202:VA=5V时,D=128→VW=2.5V)uint8_t dataMid = 0x80;AD5165_WriteData(dataMid);Serial.print("Set to Midscale: Data=0x");Serial.print(dataMid, HEX);Serial.println(" (VW≈2.5V, VA=5V)");delay(3000); // 延时3秒// 示例2:电位器模式,输出1.25V(D=64,文档1-202:(64/256)*5V=1.25V)uint8_t dataLow = 0x40;AD5165_WriteData(dataLow);Serial.print("Set to Low Scale: Data=0x");Serial.print(dataLow, HEX);Serial.println(" (VW≈1.25V, VA=5V)");delay(3000);// 示例3:变阻器模式,设置RWB=50100Ω(中刻度,文档1-189:D=128→RWB=50100Ω)uint32_t targetRWB = 50100;uint8_t dataRWB = AD5165_CalcDataFromRWB(targetRWB);AD5165_WriteData(dataRWB);Serial.print("Set RWB=");Serial.print(targetRWB);Serial.print("Ω: Data=0x");Serial.println(dataRWB, HEX);delay(3000);
}