АЦП 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 В.
Ниже показаны два примера управления, первый пример скетча позволяет использовать АЦП для измерения одно полярного (положительного) напряжения.
#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