AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE)

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

AD7706 работают от однополярного питания от 4.75 В до 5.25. AD7706 имеет три канала с псевдо дифференциальными входами.  Диапазон биполярного входного сигнала при питании 5 В и опорном напряжении 2,5 В может изменяться от 0 … 20 мВ до 0 … 2.5 В. При измерении биполярного сигнала может изменяться в диапазоне от ± 20 мВ до ± 2,5 В.

Отличительные особенности:

  • AD7706: трехканальный АЦП с псевдо-дифференциальными входами

  • 16 битное разрешение

  • Коэффициент нелинейности 0.003 %

  • Программируемый коэффициент усиления от 1 до 128

  • Трехпроводный последовательный SPI, QSPI, MICROWIRE и DSP совместимый интерфейс

  • Однополярное питание от 2.7 В до 3.3 В или от 4.75 В до 5.25 В

  • Рассеиваемая мощность при 3 В питании — менее 1 мВт

  • Ток потребления в дежурном режиме — не более 8 мкА

АЦП управляется при помощи нескольких регистров:

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Регистр Communications

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Communications Register 8 бит, содержит биты настройки выбора входа CH1 CH0, активация режима STANDBY STBY.

Так как это коммуникационный регистр, то он содержит адрес регистра который необходимо активировать RS0 RS1 RS2, то есть коммуникационном регистре указываем адрес регистра в который необходимо записать или прочитать данные (бит RW), так же указываем номер канала настойки которого необходимо поменять.

Например необходимо записать данные в регистр SETUP, то в коммуникационном регистре записываем адрес регистра SETUP, номер канала, бит записи или чтения:

Communications Register (пример записи в регистр SETUP)

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

RS0 RS1 RS2 = [001] — адрес регистра SETUP

RW = [0] — запись

CH1 CH0 = [01] — выбран канал №2

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Регистр Setup

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Регистр SETUP содержит биты настройки коэффициента усиления G2 G1 G0 (от 1 до 128), режимы калибровки MD1 MD0, тип входного сигнала B/U (униполярный\биполярный).

Биты G2 G1 G0

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Режимы калибровки:

MD1 MD0 = [00] — рабочий режим, калибровка не проводится

MD1 MD0 = [01] — калибровка нуля и опорного напряжения

MD1 MD0 = [10] — калибровка нуля

MD1 MD0 = [11] — калибровка опорного напряжения

После процедуры калибровки биты MD1 MD0 возвращаются в рабочий режим [00].

Регистр Clock

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Регистр Clock содержит делитель тактовых импульсов на 2 (бит CLKDIS), бит выбора частоты кварцевого резонатора (бит CLKDIV) и биты CLK FS1 FS0 определяющие скорость опроса АЦП (частота дискретизации).

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

*Бит CLK доступен при использовании кварцевого резонатора 4.9152 MHz

Регистр данных (Data Register)

16 — и бытный регистр, содержит результат измерения.

Ниже показаны эпюры сигналов в режиме чтения и записи регистров.

Запись

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Чтение

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

При записи данных в регистр сигнал CS служит сигналом начала и конца записи данных, запись бита производится на возрастающем фронте сигнала синхронизации SCLK.

При чтении главным условием для начала чтения данных служит сигнал готовности АЦП к передаче данных DRDY, в данном примере сигнал готовности DRDY снимается в выхода АЦП, но можно и не использовать выход DRDY, а брать состояние готовности с бита DRDY коммуникационного регистра. Далее после сигнала CS, на каждом возрастающем фронте сигнала синхронизации SCLK происходит считывание 1 бита данных с выхода DOUT. Запись как и чтение начинается со старшего разряда.

Как ранее отмечалось AD7706 имеет 3 псевдо дифференциальных входа, поэтому общим входом для всех каналов служит вход COMMON. В зависимости от подключения входа COMMON АЦП может измерять биполярное или униполярное напряжение.

Схема включения при измерении униполярного напряжения

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

Тестовый скетч

// AD7706

#define SCLK 2

#define CS 3

#define DIN 4

#define DOUT 5

#define DRDY 6 

#define REF 2.500  

#define AIN1 0b00

#define AIN2 0b01

#define AIN3 0b11  

#define GAIN_1 0b000000

#define GAIN_2 0b001000

#define GAIN_4 0b010000

#define GAIN_8 0b011000

#define GAIN_16 0b100000

#define GAIN_32 0b101000

#define GAIN_64 0b110000

#define GAIN_128 0b111000 

#define F20 0b000 // 5.24 Hz

#define F25 0b001 // 6.55 Hz

#define F100 0b010 // 26.2 Hz

#define F200 0b011 // 52.4 Hz 

unsigned long times; 

void setup() {

Serial.begin(9600);

pinMode(SCLK,OUTPUT);

pinMode(CS,OUTPUT);

pinMode(DIN,OUTPUT);

pinMode(DOUT,INPUT);

pinMode(DRDY,INPUT);

digitalWrite(SCLK,HIGH);

digitalWrite(CS,HIGH);

digitalWrite(DIN,HIGH);

reset(); 

write_byte(0x20|AIN2);

write_byte(0x00|F20); // Clock | 2.4576 MHz

delay(100);

void loop() {

times=millis();

write_byte(0x10|AIN2);

write_byte(0b01000100|GAIN_1); // Setup | Self-Calibration  // Измеренное напряжение от 0 до +2,5 В

write_byte(0x38|AIN2);

unsigned int u_data = read_byte();

Serial.println(REF/65535 * (u_data),5 );  // Цифровое значение от 0(0,0В) до 65535(+2,5В)

Serial.println(u_data);  /// Частота опроса

Serial.print("F = ");

Serial.print(1/ ((float(millis()-times))/1000));

Serial.println(" Hz");

Serial.println();

delay(1000);

void write_byte(byte data){

digitalWrite(CS,LOW);

for(int i = 7; i >= 0; i--){

digitalWrite(SCLK,LOW);

digitalWrite(DIN, (data >> i) & 1);

digitalWrite(SCLK,HIGH); }

digitalWrite(CS,HIGH);

unsigned int read_byte(){

unsigned int data_out=0;

unsigned int dat;

while(digitalRead(DRDY)!=LOW);

digitalWrite(CS,LOW);

for(int i = 15; i >= 0; i--){

digitalWrite(SCLK,LOW);

digitalWrite(SCLK,HIGH);

dat = digitalRead(DOUT);

data_out |= (dat<<i); }

digitalWrite(CS,HIGH);

return data_out;

void reset(){

digitalWrite(CS,LOW);

for(int i = 31; i >= 0; i--){

digitalWrite(SCLK,LOW);

digitalWrite(DIN, HIGH);

digitalWrite(SCLK,HIGH); }

digitalWrite(CS,HIGH); }

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

На вход №2 подано напряжение в 1,8 В. В мониторе порта отображается частота опроса, измеренное напряжение и его цифровое значение которое может находится в пределах от 0 до 65535 (16 бит).

Схема включения при измерении биполярного напряжения

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост


При измерении биполярного напряжения на вход COMMON подается опорное напряжение для создания средней точки, при этом источник входного сигнала не должен иметь соединения с GND АЦП.

Тестовый скетч

// AD7706

#define SCLK 2

#define CS 3

#define DIN 4

#define DOUT 5

#define DRDY 6 

#define REF 2.500  

#define AIN1 0b00

#define AIN2 0b01

#define AIN3 0b11  

#define GAIN_1 0b000000

#define GAIN_2 0b001000

#define GAIN_4 0b010000

#define GAIN_8 0b011000

#define GAIN_16 0b100000

#define GAIN_32 0b101000

#define GAIN_64 0b110000

#define GAIN_128 0b111000 

#define F20 0b000 // 5.24 Hz

#define F25 0b001 // 6.55 Hz

#define F100 0b010 // 26.2 Hz

#define F200 0b011 // 52.4 Hz 

unsigned long times; 

void setup() {

Serial.begin(9600);

pinMode(SCLK,OUTPUT);

pinMode(CS,OUTPUT);

pinMode(DIN,OUTPUT);

pinMode(DOUT,INPUT);

pinMode(DRDY,INPUT);

digitalWrite(SCLK,HIGH);

digitalWrite(CS,HIGH);

digitalWrite(DIN,HIGH);

reset(); 

write_byte(0x20|AIN2);

write_byte(0x00|F100); // Clock | 2.4576 MHz

delay(100);

void loop() {

times=millis();

write_byte(0x10|AIN2);

write_byte(0b01000000|GAIN_1); // Setup | Self-Calibration  // Измеренное напряжение от 0 до +/-2,5 В

write_byte(0x38|AIN2);

unsigned int u_data = read_byte();

Serial.println(REF/32768 * (u_data-32768),5 );  // Цифровое значение от 0(-2,5В) до 65535(+2,5В), середина шкалы 32768(0,0В)

Serial.println(u_data);  /// Частота опроса

Serial.print("F = ");

Serial.print(1/ ((float(millis()-times))/1000));

Serial.println(" Hz");

Serial.println();

delay(1000);

void write_byte(byte data){

digitalWrite(CS,LOW);

for(int i = 7; i >= 0; i--){

digitalWrite(SCLK,LOW);

digitalWrite(DIN, (data >> i) & 1);

digitalWrite(SCLK,HIGH);

}

digitalWrite(CS,HIGH);

unsigned int read_byte(){

unsigned int data_out=0;

unsigned int dat;

while(digitalRead(DRDY)!=LOW);

digitalWrite(CS,LOW);

for(int i = 15; i >= 0; i--){

digitalWrite(SCLK,LOW);

digitalWrite(SCLK,HIGH);

dat = digitalRead(DOUT);

data_out |= (dat<<i); }

digitalWrite(CS,HIGH); r

eturn data_out;

void reset(){

digitalWrite(CS,LOW);

for(int i = 31; i >= 0; i--){

digitalWrite(SCLK,LOW);

digitalWrite(DIN, HIGH);

digitalWrite(SCLK,HIGH);

}

digitalWrite(CS,HIGH);

}

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

На вход №2 подано напряжение в +1,48 В. В мониторе порта отображается частота опроса, измеренное напряжение и его цифровое значение которое может находится в пределах от 32768 (0 В) до 65535 (+2,5 В) (15 бит).

AD7706 3-х канальный 16 битный сигма-дельта АЦП (Arduino IDE) Arduino, Электроника, Самоделки, Программирование, Длиннопост

На вход №2 подано напряжение в -1,48 В. В мониторе порта отображается частота опроса, измеренное напряжение и его цифровое значение которое может находится в пределах от 0 (-2,5 В) до 32768 (0 В) (15 бит).

Даташит — ad7706.pdf

http://rcl-radio.ru/?p=129749

TECHNO BROTHER

1.7K постов12.5K подписчиков

Добавить пост

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины