产品简介
- 单通道、1024/256位分辨率
- 标称电阻:20 kΩ、50 kΩ、100 kΩ
- 标称电阻容差误差:±1%(最大值)
- 50次可编程(50-TP)游标存储器
- 可变电阻器模式下的温度系数:5 ppm/℃
- 2.7 V至5.5 V单电源供电
- 双电源供电:±2.5 V至±2.75 V(交流或双极性工作模式)
- IIC兼容接口
引脚功能简介
引脚编号 | 引脚名称 | 描述 |
1 | VDD | 正电源。此引脚应通过0.1 μF陶瓷电容和10 μF电容去耦。 |
2 | A | RDAC的A端。VSS ≤ VA ≤ VDD。 |
3 | W | RDAC的游标端。VSS ≤ VW ≤ VDD。 |
4 | VSS | 负电源。对于单电源应用,应连接到0 V。此引脚应通过0.1 μF陶瓷电容和10 μF电容去耦。 |
5 | EXT_CAP | 外部电容。应在EXT_CAP和VSS之间连接一个1 μF电容。此电容的额定电压必须≥7 V。 |
6 | GND | 接地引脚,逻辑地基准点。 |
7 | RESET | 硬件复位引脚。以50-TP存储器寄存器的内容更新RDAC寄存器。出厂默认加载中量程,直至第一个 50-TP游标存储器位置被编程。RESET为低电平有效。若未使用,则将RESET连接至VDD。 |
8 | SDA | 串行数据线。它与SCL线配合使用,将数据输入或输出16-bit输入寄存器。它是一种双向开漏数据线, 应通过一个外部上拉电阻上拉至电源。 |
9 | SCL | 串行时钟线。该引脚与SDA线配合使用,将数据输入或输出16位输入寄存器。 |
10 | ADDR | 三态地址输入。将两个最低有效位(位A1、位A0)设为7位从机地址(参见表11)。 |
原理图
器件地址
ADDR | A1 | A0 | 7-Bit |
GND | 1 | 1 | 0101111 |
VDD | 0 | 0 | 0101100 |
NC | 1 | 0 | 0101110 |
指令简介
指令编号 | 解释 |
0 | NOP:无操作。 |
1 | 将串行寄存器数据内容写入RDAC。 |
2 | 读取RDAC游标寄存器的内容。 |
3 | 存储游标设置:将RDAC设置存储到50-TP中。 |
4 | 软件复位:利用最后一个50-TP存储器存储的值来刷新RDAC。 |
5 | 在下一帧中从SDO输出读取50-TP的内容。 |
6 | 读取最后一次50-TP编程存储器位置的地址。 |
7 | 将串行寄存器数据内容写入控制寄存器。 |
8 | 读取控制寄存器的内容。 |
9 | 软件关断。D0 = 0;正常模式。D0 = 1;关断模式 |
详情可以参见其数据手册中的说明。
阻值计算方法
对于AD5272
RWA(D) = D / 1024 * RWA
对于AD5274
RWA(D) = D / 256 * RWA
其中:
D为载入10/8位RDAC寄存器的二进制代码的十进制等
效值。
RWA是端到端电阻。
相关程序
AD5272.h代码
#ifndef __AD5272__
#define __AD5272__
#include "main.h"
unsigned char AD5272WriteInstruction(unsigned char * Instruction) ;
unsigned char AD5272WriteCmd(unsigned char Instruction, unsigned int nData);
unsigned char AD5272ReadInstruction(unsigned char * Instruction);
unsigned int AD5272ReadInt16(void);
void AD5272WriteRDAC(unsigned int nRDAC);
unsigned int AD5272ReadRDAC(void) ;
void AD5272Res50TOP(void);
#endif
AD5272.c代码
unsigned char AD5272WriteInstruction(unsigned char * Instruction) {
IIC_Start();
IIC_Send_Byte(0x5E);
if(!IIC_Wait_Ack()) return 1;
IIC_Send_Byte(Instruction[0]);
if(!IIC_Wait_Ack()) return 2;
IIC_Send_Byte(Instruction[1]);
if(!IIC_Wait_Ack()) return 3;
IIC_Stop();
return 0;
}
unsigned char AD5272WriteCmd(unsigned char Instruction, unsigned int nData) {
unsigned char ucData[2];
ucData[0] = (unsigned char)((Instruction<< 2) | (nData >> 8));
ucData[1] = (unsigned char)(nData & 0xff);
return AD5272WriteInstruction(ucData);
}
unsigned char AD5272ReadInstruction(unsigned char * Instruction) {
IIC_Start();
IIC_Send_Byte(0x5F);
if(!IIC_Wait_Ack()) return 1;
//IIC_Wait_Ack();
Instruction[1] = IIC_Read_Byte(0x00);
IIC_Ack();
Instruction[0] = IIC_Read_Byte(0x00);
IIC_NAck();
IIC_Stop();
return 0;
}
unsigned int AD5272ReadInt16(void) {
unsigned char ucData[2];
unsigned int nNumber;
AD5272ReadInstruction(ucData);
nNumber = ucData[1] & 0x3;
nNumber = (nNumber << 8) + ucData[0];
return nNumber;
}
void AD5272WriteRDAC(unsigned int nRDAC) {
AD5272WriteCmd(0x1, nRDAC);
}
unsigned int AD5272ReadRDAC(void) {
AD5272WriteCmd(0x2, 0x0);
return AD5272ReadInt16();
}
void AD5272Res50TOP(void) {
AD5272WriteCmd(0x7, 0x3);
}
主程序代码
#include "main.h"
Int main(void){
AD5272Res50TOP();
AD5272WriteRDAC(200);// R = 200/1024 * RAW
}