Перейти к содержанию
    

ДОбрый день.

Возникла необходимость (и соотвественно сложность) в калибровке АЦП AD7732.

Сейчас без калибровки получаю напряжение так (пример на 1 АЦП из 3 - все через цфировую логику подключены к Atmega640):

//Чтение регистра ADC Status

PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП

NOP();

SpiWriteByte(0x04+0x40);

reg=SpiReadByte();

// Выбор канала готовых данных (аппаратно RDY дает сигнал только о готовности данных,без указания канала

switch (reg)

{

case 0x01:

{

// Установка чтение 0 канала данных

//Устанавливаем регистр для чтения - выходные данные 24 бит - 3 байта

SpiWriteByte(0x08+0x40);

}

break;

case 0x04:

{

// Установка чтение 1 канала данных

//Устанавливаем регистр для чтения - выходные данные 24 бит - 3 байта

SpiWriteByte(0x0A+0x40);

}

break;

case 0x05:

{

// Установка чтение 0 канала данных

//Устанавливаем регистр для чтения - выходные данные 24 бит - 3 байта

SpiWriteByte(0x08+0x40);

}

break;

default: { return (0x00);}

}

//Чтение данных из регистра АЦП

// Читаем и заносим в буфер

SPDR = 0x00;

while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать

A=SPDR; //считать SPDR - 1 байт

SPDR = 0x00;

while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать

B=SPDR; //считать SPDR - 2 байт

SPDR = 0x00;

while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать

C=SPDR; //считать SPDR - 3 байт

// Закрываем АЦП

PORTF|=BIT(0); // CS1 установить в 1

// Получаем длиное целое из полученных байт

// с учетом что первым идет старший байт

rez=(C+(B<<8)+(A<<16));

// Далее преобразуем с типу double и Преобразуем к напряжению

U=(((double)(rez))*10)/0xFFFFFF; // Получаем напряжение от 0 до 10 В

// Отнимаем 5 В - для сдига в биполярный сигнал - получаем изменение напряжения от -5 до 5 В

U=U-5;

// Преобразуем в микровольты и возращаем результат

rez=(signed long)(U*1000000);

return (rez);

 

В целом работает не плохо, но возникла задача повысить точность установки нуля. Для этого удобно использовать внутреннею калибровку АЦП. А здесь возникает сложность: чития даташит не фига не понятно, а имеено: (привожу формулу из даташита для калибровки )

 

For bipolar ranges:

Data = ((ADC result – ADC ZS Cal. reg.) × ADC FS Reg./400000h + 800000h – Ch. ZS Cal. reg.) × Ch. FS Cal. reg./200000h

Where the ADC result is in the range of 0 to FFFFFFh.

 

Вопрос: как изменяется Data? (с учетом что ADC result может быть меньше ADC ZS Cal.reg.????) и как от нее перейти к напряжению, т.е. как после этой формулы получить для возращения микровольты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ДОбрый день.

Возникла необходимость (и соотвественно сложность) в калибровке АЦП AD7732.

Сейчас без калибровки получаю напряжение так (пример на 1 АЦП из 3 - все через цфировую логику подключены к Atmega640):

;

 

В целом работает не плохо, но возникла задача повысить точность установки нуля. Для этого удобно использовать внутреннею калибровку АЦП. А здесь возникает сложность: чития даташит не фига не понятно, а имеено: (привожу формулу из даташита для калибровки )

 

For bipolar ranges:

Data = ((ADC result – ADC ZS Cal. reg.) × ADC FS Reg./400000h + 800000h – Ch. ZS Cal. reg.) × Ch. FS Cal. reg./200000h

Where the ADC result is in the range of 0 to FFFFFFh.

 

Вопрос: как изменяется Data? (с учетом что ADC result может быть меньше ADC ZS Cal.reg.????) и как от нее перейти к напряжению, т.е. как после этой формулы получить для возращения микровольты?

Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки.

А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки.

А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф...

 

Там формат странноватый, надо найти и прочитать соответствующую appnotу. Если правилно помню, старший бит - знак, дальше нулевой бит, и смещение нуля - в прямом коде (т.е. модуль).

 

Нашел appnote.

ad773xcr.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки.

А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф...

 

Если я правильно понял, то мне необходимо просто провести калибровку и уже читая результат измерения все будет уже учтено?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если я правильно понял, то мне необходимо просто провести калибровку и уже читая результат измерения все будет уже учтено?

Я Вас (то, что Вы выше написали) понять не могу. И не могу понять, почему Вы меня не можете понять... Или сомневаетесь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я Вас (то, что Вы выше написали) понять не могу. И не могу понять, почему Вы меня не можете понять... Или сомневаетесь...

Попробую объяснить:

Я сейчас запускаю АЦП (устанавливаю необходимый режим) и считываю с него данные (т.е. результат измерения напряжения на входе). Результат меня более или менее устраивает, но хочется получить более точное значения измеренного напряжения, с учетом, что есть дрейф нуля, ИОН не ровно 2,56 В ..... АЦП имеет возможность калибровки: как в целом, так и по каждому каналу. Для калибровки мне необходимо запусть соответствующие режимы работы АЦП (с ними все понятно), а вот дальше не совсем. Что после этого мне необходимо делать???

Как я думаю (возможно и не правильно), после калибровки у меня изменяются значения соответствующих регистров, я их считываю, и считываю результат измерения и по формуле (которая приведена) вычисляю скорректированный результат - правильно?

Или, как я Вас понял, после калибровки АЦП, новые результаты автоматически корректируется и я уже считываю корректированный результат из АЦП - так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или, как я Вас понял, после калибровки АЦП, новые результаты автоматически корректируется и я уже считываю корректированный результат из АЦП - так?

 

Да, именно так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просьба подсказать: необходима ли развязка между АЦП и микроконтроллером по SPI интерфейсу? (сейчас делаю через инверторы на рис.)

Кто нибудь пробывал запустить АЦП AD7732 на частоте меньше минимальной (мин. по даташиту 1 Мгц) скажем на 800 кГц?

___________________.zip

Изменено пользователем Leonmezon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просьба подсказать: необходима ли развязка между АЦП и микроконтроллером по SPI интерфейсу? (сейчас делаю через инверторы на рис.)

Кто нибудь пробывал запустить АЦП AD7732 на частоте меньше минимальной (мин. по даташиту 1 Мгц) скажем на 800 кГц?

 

Развязка не нужна. Но нужно отслеживать состояние DIN во время чтения, не давать ему болтаться произвольно.

Нам еньшей частоте будет работать, но точность "поплывет". А зачем такое извращение ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Развязка не нужна. Но нужно отслеживать состояние DIN во время чтения, не давать ему болтаться произвольно.

Нам меньшей частоте будет работать, но точность "поплывет". А зачем такое извращение ?

 

С DIN понятно (да и по программе видно - что не болтаться). То есть как я правильно понял - с точки зрения уменьшения погрешности АЦП - установка инверторов не чего не дает?

На меньшей частоте необходимо для получения частоты дискретизации 50 Гц (на 1 МГц - мин. по даташиту - минимальная частота преобразования примерно 60 Гц) Фактически использовать надо АЦП - 2 режима 50 ГЦ и 200 Гц (зависит от переключателя), поиск другого АЦП не чего не дал, (по диапазону не проходят! +-10В дифференциальном режиме+ 2 канала и циклический режим (если по схеме смотреть организую непрерывное преобразование без пропусков).

А другой вопрос: если я 4 преобразования на частоте 200 Гц - объединю в одно (U1+U2+U3+U4)/4 - это будет эквивалентно частоте 50 Гц? И помеха 50 Гц пролезет? (по теореме же на 50 Гц мы не видим частоты больше 25 Гц).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Усреднять результаты можно. Теорему Вы не правильно понимаете. Сигналы с частотами выше F/2 не отбрасываются, а их спектр переносится в рабочий диапазон. И они становяться помехами. Поэтому до АЦП должен находиться адекватный аналоговый фильтр. Сигнал с частотой 50 Гц может быть полностью подавлен за счет свойств цифрового фильтра конкретного этого АЦП путем правильного выбора частоты тактирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Усреднять результаты можно. Теорему Вы не правильно понимаете. Сигналы с частотами выше F/2 не отбрасываются, а их спектр переносится в рабочий диапазон. И они становяться помехами. Поэтому до АЦП должен находиться адекватный аналоговый фильтр. Сигнал с частотой 50 Гц может быть полностью подавлен за счет свойств цифрового фильтра конкретного этого АЦП путем правильного выбора частоты тактирования.

 

До АЦП ставлю фильтр 6-порядка - все равно пролазеет (хотя снижаеться до уровня сотен микровольт), а хочеться больше :) .

Не совсем понятно, как выбрать частоту дискретизации, чтобы подавть 50 Гц?

Изменено пользователем Leonmezon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

До АЦП ставлю фильтр 6-порядка - все равно пролазеет (хотя снижаеться до уровня сотен микровольт), а хочеться больше :) .

Не совсем понятно, как выбрать частоту дискретизации, чтобы подавть 50 Гц?

 

Такой фильтр излишен для данного типа АЦП. Не исключено, что он и является источником помехи через цепи питания. В подавляющем большинстве случаев достаточно RC цепочки.

Про выбор частоты дискретизации прочитайте раздел datasheetа "Frequency Response", обратив внимание на Fig. 27. Также рекомендую разобраться с принципом работы дельта-сигма АЦП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такой фильтр излишен для данного типа АЦП. Не исключено, что он и является источником помехи через цепи питания. В подавляющем большинстве случаев достаточно RC цепочки.

Про выбор частоты дискретизации прочитайте раздел datasheetа "Frequency Response", обратив внимание на Fig. 27. Также рекомендую разобраться с принципом работы дельта-сигма АЦП.

 

Для данного типа АЦП аналоговая фильтрация все таки нужна (иначе шум наложенный на сигнал до АЦП запросто пройдет дальше (и никакой цифровой фильтр ее уже не уберет + может появиться эффект насыщения сигма-делтта модулятора с вытикающими последствиями ... - цитирую по Analog Device note), в то же время согласен выбор частоты дискретизации помагает избавить от многих шумов, только применительно к этому АЦП AD7732 минимальная частота дискретизации равна примерно 60 ГЦ - что не есть хорошо - 50 Гц из нее не получиш, лучше на мой взгляд выбрать частоту тактирования 100 Гц (если судить по даташиту) - с одной строны можно легко получить 50 Гц дискретизацию (плюс будет естественно фильтрация за счет усреднения), с другой строны такая частота позволит избавиться от гармоник 50 Гц. Хотя могу и ошибаться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для данного типа АЦП аналоговая фильтрация все таки нужна (иначе шум наложенный на сигнал до АЦП запросто пройдет дальше (и никакой цифровой фильтр ее уже не уберет + может появиться эффект насыщения сигма-делтта модулятора с вытикающими последствиями ... -

 

Я не писал, что она не нужна ВООБЩЕ. Не нужна фильтрация высоких порядков при правильном выборе соотношений частот. Достаточно фильтра первого порядка. И Вы путаете частоту дискретизации и частоту выдачи результата . В случае данного АЦП это совершенно не одно и то же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...