AD7715 — 16bit АЦП (Arduino)

АЦП AD7715 —  это сигма-дельта 16 битный АЦП, гарантирующий отсутствие потери кодов. Выбранный входной сигнал поступает на усилитель с программируемым коэффициентом усиления, а с его выхода- на аналоговый модулятор. Сигнал с выхода модулятора поступает на внутренний цифровой фильтр. Предыдущее значение фильтра может быть перенесено из внутреннего управляющего регистра, что позволяет регулировать порог отсечки фильтра и частоту обновления.

AD7715 имеет дифференциальные аналоговый и опорный входы. AD7715 работает от однополярного питания 3 В или 5 В. Прибор может иметь униполярные динамические диапазоны 0- 20 мВ, 0- 80 мВ, 0- 1,25 В и 0- 2,5 В (AD7715-5), а также двухполярные диапазоны ± 20 мВ, ± 80 мВ, ± 1,25 В и ± 2,5 В (AD7715-5).

АЦП содержит внутреннюю калибровку и системную градуировку для устранения ошибки усиления и смещения.

Основные параметры

  • 16 битное разрешение
  • Коэффициент нелинейности 0.0015 %
  • Программируемый коэффициент усиления от 1, 2, 32 или 128 дифференциальный вход
  • Возможность буферизации входного аналогового сигнала
  • Однополярное питание 3 В (AD7715-3) или 5 В (AD7715-5)
  • Низкое потребление – 450 мкА при 3 В питании
  • ФНЧ с программируемым обновлением выхода
  • 16 выводные DIP, SOIC и TSSOP корпуса

Используя платформу Arduino можно посредством шины SPI организовать управление AD7715. SPI – это широко применяемый протокол передачи данных между микроконтроллером (Master) и периферийными устройствами (Slave).

При измерении напряжения положительной полярности, измеряемое напряжение подается на вход AIN+, а вход AIN- заземляется. При этом подавать отрицательное напряжение (при одно полярном измерении напряжения нельзя, это может привести АЦП в нерабочее состояние). Максимальное измеряемое напряжение ограничено величиной опорного напряжения, для AD7715-3 опорное напряжение 1,25 В, а для AD7715-5 2,5 В. При считывании данных с АЦП измеренное цифровое значение напряжения будет в пределах от 0 до 65535 (разрешение 0,000019 В на пределе 1,25 В для AD7715-3).

При измерении двух полярного напряжения, измеряемое напряжение подается на вход AIN+ и вход AIN- . При считывании данных с АЦП измеренное цифровое значение напряжения будет в пределах от 0 до 65535, при этом значение 32767 будет соответствовать 0 В, значение 65535 будет соответствовать +1,25 В, а числовое значение 0 будет соответствовать -1,25 В (для AD7715-3). При этом разрешение на пределе +/-1,25 В станет 0,000038 В.

https://sxema.com.ua

Ниже показаны два примера управления, первый пример скетча позволяет использовать АЦП для измерения одно полярного (положительного) напряжения.

#include <SPI.h>
#define SS    10 // CS
#define MOSI  11 // DIN
#define MISO  12 // DOUT
#define SCK   13 // SCLK
#define DRDY  8  // DRDY
#define RESET 7  // Reset
 
 const float ref = 1.2103;
 long code,code_sum;
 int i;
 
void setup(){
  pinMode(DRDY, INPUT);
  pinMode(RESET, OUTPUT);
  digitalWrite(RESET,LOW);
  SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV2, MSBFIRST, SPI_MODE3));
  Serial.begin(9600);
  SPI.begin();
  digitalWrite(RESET,HIGH);delay(300);
}
 
 
void loop(){
  digitalWrite(RESET,HIGH);
  delay(20);
  WriteAD7715(0b0010000,0b01100100);
  delay(20);
  ReadAD7715();
  digitalWrite(RESET,LOW);
  }
 
void WriteAD7715(int data0, int data1){
  digitalWrite(SS, LOW);
  delayMicroseconds(1);
  SPI.transfer(data0);
  SPI.transfer(data1);
  digitalWrite(SS, HIGH);
}
 
void ReadAD7715(){
  while(digitalRead(DRDY)!=LOW); 
  digitalWrite(SS, LOW);
  delayMicroseconds(1);
  SPI.transfer(0x38);    
  code = SPI.transfer16(0);   
  digitalWrite(SS, HIGH);
 
  code_sum=code_sum+code;i++;
  if(i==10){ code_sum=code_sum/10;
  Serial.print(code_sum);
  Serial.print(" ");Serial.print(ref/65535*code_sum,4);Serial.println(" V");
  i=0;code_sum=0;}
 
  while(digitalRead(DRDY)!=HIGH);
}
 /* Communications register 
  0b00010000 gain 1
  0b00010001 gain 2
  0b00010010 gain 32
  0b00010011 gain 128
    Setup register 
  0b01100100 unipolar 50Hz  2.4576 MHz
  0b01100000 bipolar  50Hz  2.4576 MHz
 */

Пример использования при измерении двух полярного напряжения

#include <SPI.h>
#define SS    10 // CS
#define MOSI  11 // DIN
#define MISO  12 // DOUT
#define SCK   13 // SCLK
#define DRDY  8  // DRDY
#define RESET 7  // Reset
 
 const float ref = 1.2010 ;
 long code,code_sum;
 int i;
 
void setup(){
  pinMode(DRDY, INPUT);
  pinMode(RESET, OUTPUT);
  digitalWrite(RESET,LOW);
  SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV2, MSBFIRST, SPI_MODE3));
  Serial.begin(9600);
  SPI.begin();
  digitalWrite(RESET,HIGH);delay(300);
}
 
 
void loop(){
  digitalWrite(RESET,HIGH);
  delay(20);
  WriteAD7715(0b0010000,0b01100000);
  delay(20);
  ReadAD7715();
  digitalWrite(RESET,LOW);
  }
 
void WriteAD7715(int data0, int data1){
  digitalWrite(SS, LOW);
  delayMicroseconds(1);
  SPI.transfer(data0);
  SPI.transfer(data1);
  digitalWrite(SS, HIGH);
}
 
void ReadAD7715(){
  while(digitalRead(DRDY)!=LOW); 
  digitalWrite(SS, LOW);
  delayMicroseconds(1);
  SPI.transfer(0x38);    
  code = SPI.transfer16(0);   
  digitalWrite(SS, HIGH);
 
  code_sum=code_sum+code;i++;
  if(i==10){ code_sum=code_sum/10;
  Serial.print(code_sum);
  Serial.print(" ");Serial.print((2*ref/65535*(code_sum-32767))*1.046,4);Serial.println(" V");
  i=0;code_sum=0;}
 
  while(digitalRead(DRDY)!=HIGH);
}
 /* Communications register 
  0b00010000 gain 1
  0b00010001 gain 2
  0b00010010 gain 32
  0b00010011 gain 128
    Setup register 
  0b01100100 unipolar 50Hz  2.4576 MHz
  0b01100000 bipolar  50Hz  2.4576 MHz
 */

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=168

AD7715.pdf

Добавить комментарий

Войти с помощью: