AD7705是一款高精度、低功耗、带同步/异步数据接口的16位ADC芯片。这款芯片适用于对差分/单端信号进行高速、高精度采样的应用,如传感器等。
一、AD574中文手册
AD574是一款12位ADC芯片,与AD7705不同,但二者在ADC应用上有共同之处。下面我们将从AD574中找到与AD7705相关的选取,加以阐述。
1. 选择放大器
AD7705一般要求输入电压不超过+/-2.5V,因此需要使用放大器对电压信号进行放大。AD574同样需要放大器实现高精度的差分放大。
代码示例
//AD7705差分放大
int v1 = analogRead(A1);
int v2 = analogRead(A2);
double diffV = ((v1-v2)*5.0)/1024.0;
double voltage = diffV/2.0;
voltage *= 1.5625;
//AD574差分放大
double vIn = (analogRead(0)-512)*(5.0/1024.0);
double K1=2.5/10.25;
double K2=K1*1.66;
double k3=2.0/15.77/2.0*(2.5/K1);
double Vout=vIn*K1;
2. 配置模拟滤波器
模拟滤波器可以有效滤除噪声等干扰信号,提高ADC精度。AD7705内置模拟滤波器,可以选择低通滤波器和高通滤波器。AD574同样需要在外部添加模拟滤波器。
代码示例
//AD7705配置低通滤波器
byte buffer[2];
buffer[0] = 0x10; //AD7705地址
buffer[1] = 0b00010; //选择低通滤波器
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 2);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD574外部配置低通模拟滤波器
二、AD9680中文手册
AD9680是一款高速ADC芯片,但与AD7705有共同之处。下面我们将从AD9680中找到与AD7705相关的选取,加以阐述。
1. 时钟控制
AD7705的采样精度要求很高,需要使用固定的采样速率。对于AD9680,同样需要在控制时钟频率时注意设置。
代码示例
//AD7705固定的采样速率配置
byte buffer[3];
buffer[0] = 0x20; //写入设定寄存器命令
buffer[1] = 0b00000000; //屏蔽位
buffer[2] = 0b11101011; //数据寄存器
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 3);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD9680时钟频率控制
2. 序列接口
AD7705采用串行数据传输,支持同步和异步数据接口,而AD9680支持高速串行接口。因此,在使用时需要注意设置并控制好数据传输的准确性。
代码示例
//AD7705异步数据接口
byte buffer[3];
buffer[0] = 0x30; //读取数据命令
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 1);
digitalWrite(AD7705_CS, HIGH);
delay(3);
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
short adc = SPI.transfer16(0x00);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD9680支持高速串行接口
三、AD9625中文手册
AD9625是一款高速16位ADC芯片,其相关特性与AD7705大不相同。在这里,我们主要选取AD9625中可以与AD7705共通的特性进行阐述。
1. 数字调节放大器(PGA)
在一些需要放大输入信号的应用中,AD7705使用外部放大器,而AD9625内置了PGA,支持2 ~ 256倍增益的放大器。
代码示例
//AD7705使用外部放大器
int v = analogRead(A1);
double voltage = v * 5.0/1024.0;
voltage *= 10; //10倍放大
//AD9625内置PGA
2. 低噪声功率放大器(LNA)
AD9625使用低噪声功放,可以有效提高信噪比。这也是AD7705使用模拟滤波器提高精度的原因之一。
代码示例
//AD7705使用模拟滤波器
byte buffer[2];
buffer[0] = 0x10; //AD7705地址
buffer[1] = 0b00010; //选择低通滤波器
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 2);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD9625使用低噪声功放
四、AD698中文手册
AD698是一款高精度的电桥增益放大器/ Digitizer。它与AD7705的准确性、应用范围等方面具有相似处。通过对比,我们可以发现二者在电桥放大器的使用上存在共性。
1. 电桥放大器
AD7705可以通过电桥放大器实现对传感器信号的采集。AD698内置了电桥放大器功能,可与电感、电容等传感器配合使用。
代码示例
//AD7705电桥放大器
byte buffer[2];
buffer[0] = 0x10; //AD7705地址
buffer[1] = 0b01000; //选择内部电桥放大器
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 2);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD698内置电桥放大器
2. 自测功能
AD698支持自测功能,可以通过自校验完成对设备本身的检测。AD7705也具有自校准功能。
代码示例
//AD7705自校准
byte buffer[2];
buffer[0] = 0x38; //AD7705开始自校准命令
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 1);
digitalWrite(AD7705_CS, HIGH);
delay(100);
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
buffer[0] = 0x58; //AD7705读取数据寄存器命令
unsigned short data = SPI.transfer(buffer, 2);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD698自检测
五、AD7705参考电压
AD7705参考电压是ADC模块的重要参数之一,有了精准的参考电压,才能实现对输入信号的高精度采集。
1. 参考电压选取
AD7705通过引脚REF IN(+)和REF IN(-)接口提供参考电压,可以选择内部参考电压或外部参考电压。AD7705参考电压与电压参考稳定度直接相关,需要在使用时注意选取。
代码示例
//AD7705内/外部参考电压选取
byte buffer[2];
buffer[0]=0x10; //写入设定寄存器命令
buffer[1]=0b11100011; //选择内部参考电压
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 2);
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
2. 参考电压稳定性
在使用AD7705参考电压时,需要关注其稳定性。可以通过测试其漂移值等指标进行评估。
代码示例
//AD7705参考电压稳定性测试
double zero = getADCZero()*1.0;
double vIn = getADC()*1.0;
double vRefIn = getADCVrefIn()*1.0;
double vRefOut = zero + ((vIn-zero)*(vRefIn/2.5));
double diff = 2.5-vRefOut;
六、AD976中文手册
AD976是一款带同步数据接口的12位DAC芯片。因为其具备同步数据传输接口与AD7705类似,其相关内容也与AD7705相关。在这里,我们选取与AD7705在数字/模拟信号转换方面存在共同之处进行阐述。
1. AD转换
AD976可以将数字信号转换成模拟信号,而AD7705将模拟信号转换为数字信号。
代码示例
//AD7705将模拟信号转换为数字信号
byte buffer[2];
buffer[0] = 0x38; //AD7705开始对采集器自校准
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 1);
digitalWrite(AD7705_CS, HIGH);
delay(100); //等待校准完成
buffer[0]=0x18; //读取数据命令
unsigned int data=0;
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
delay(1);
data=(unsigned char)(SPI.transfer(0x00))<<8; //高8位
data|=(unsigned char)(SPI.transfer(0x00)); //低8位
digitalWrite(AD7705_CS, HIGH);
SPI.endTransaction();
//AD976将数字信号转换为模拟信号
2. 数据传输接口
AD976和AD7705都支持同步/异步数据接口,可以在数据传输中使用。
代码示例
//AD7705异步数据接口读取数据
byte buffer[3];
buffer[0] = 0x30; //读取数据命令
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE1));
digitalWrite(AD7705_CS, LOW);
SPI.transfer(buffer, 1);
digitalWrite(AD7705_CS, HIGH);
delay(3);
SPI.beginTransaction(SPISettings(1000000, MSBFIRST