Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Калибровка AD7732
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
Страницы: 1, 2
Leonmezon
ДОбрый день.
Возникла необходимость (и соотвественно сложность) в калибровке АЦП 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.????) и как от нее перейти к напряжению, т.е. как после этой формулы получить для возращения микровольты?
Tanya
Цитата(Leonmezon @ Feb 11 2009, 11:34) *
ДОбрый день.
Возникла необходимость (и соотвественно сложность) в калибровке АЦП 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.????) и как от нее перейти к напряжению, т.е. как после этой формулы получить для возращения микровольты?

Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки.
А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф...
DS
Цитата(Tanya @ Feb 11 2009, 11:57) *
Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки.
А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф...


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

Нашел appnote.
Leonmezon
Цитата(Tanya @ Feb 11 2009, 11:57) *
Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки.
А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф...


Если я правильно понял, то мне необходимо просто провести калибровку и уже читая результат измерения все будет уже учтено?
Tanya
Цитата(Leonmezon @ May 20 2009, 23:13) *
Если я правильно понял, то мне необходимо просто провести калибровку и уже читая результат измерения все будет уже учтено?

Я Вас (то, что Вы выше написали) понять не могу. И не могу понять, почему Вы меня не можете понять... Или сомневаетесь...
Leonmezon
Цитата(Tanya @ May 20 2009, 22:44) *
Я Вас (то, что Вы выше написали) понять не могу. И не могу понять, почему Вы меня не можете понять... Или сомневаетесь...

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


Да, именно так.
Leonmezon
Просьба подсказать: необходима ли развязка между АЦП и микроконтроллером по SPI интерфейсу? (сейчас делаю через инверторы на рис.)
Кто нибудь пробывал запустить АЦП AD7732 на частоте меньше минимальной (мин. по даташиту 1 Мгц) скажем на 800 кГц?
DS
Цитата(Leonmezon @ May 30 2009, 00:03) *
Просьба подсказать: необходима ли развязка между АЦП и микроконтроллером по SPI интерфейсу? (сейчас делаю через инверторы на рис.)
Кто нибудь пробывал запустить АЦП AD7732 на частоте меньше минимальной (мин. по даташиту 1 Мгц) скажем на 800 кГц?


Развязка не нужна. Но нужно отслеживать состояние DIN во время чтения, не давать ему болтаться произвольно.
Нам еньшей частоте будет работать, но точность "поплывет". А зачем такое извращение ?
Leonmezon
Цитата(DS @ May 31 2009, 13:13) *
Развязка не нужна. Но нужно отслеживать состояние DIN во время чтения, не давать ему болтаться произвольно.
Нам меньшей частоте будет работать, но точность "поплывет". А зачем такое извращение ?


С DIN понятно (да и по программе видно - что не болтаться). То есть как я правильно понял - с точки зрения уменьшения погрешности АЦП - установка инверторов не чего не дает?
На меньшей частоте необходимо для получения частоты дискретизации 50 Гц (на 1 МГц - мин. по даташиту - минимальная частота преобразования примерно 60 Гц) Фактически использовать надо АЦП - 2 режима 50 ГЦ и 200 Гц (зависит от переключателя), поиск другого АЦП не чего не дал, (по диапазону не проходят! +-10В дифференциальном режиме+ 2 канала и циклический режим (если по схеме смотреть организую непрерывное преобразование без пропусков).
А другой вопрос: если я 4 преобразования на частоте 200 Гц - объединю в одно (U1+U2+U3+U4)/4 - это будет эквивалентно частоте 50 Гц? И помеха 50 Гц пролезет? (по теореме же на 50 Гц мы не видим частоты больше 25 Гц).
DS
Усреднять результаты можно. Теорему Вы не правильно понимаете. Сигналы с частотами выше F/2 не отбрасываются, а их спектр переносится в рабочий диапазон. И они становяться помехами. Поэтому до АЦП должен находиться адекватный аналоговый фильтр. Сигнал с частотой 50 Гц может быть полностью подавлен за счет свойств цифрового фильтра конкретного этого АЦП путем правильного выбора частоты тактирования.
Leonmezon
Цитата(DS @ Jun 1 2009, 18:58) *
Усреднять результаты можно. Теорему Вы не правильно понимаете. Сигналы с частотами выше F/2 не отбрасываются, а их спектр переносится в рабочий диапазон. И они становяться помехами. Поэтому до АЦП должен находиться адекватный аналоговый фильтр. Сигнал с частотой 50 Гц может быть полностью подавлен за счет свойств цифрового фильтра конкретного этого АЦП путем правильного выбора частоты тактирования.


До АЦП ставлю фильтр 6-порядка - все равно пролазеет (хотя снижаеться до уровня сотен микровольт), а хочеться больше smile.gif .
Не совсем понятно, как выбрать частоту дискретизации, чтобы подавть 50 Гц?
DS
Цитата(Leonmezon @ Jun 1 2009, 19:30) *
До АЦП ставлю фильтр 6-порядка - все равно пролазеет (хотя снижаеться до уровня сотен микровольт), а хочеться больше smile.gif .
Не совсем понятно, как выбрать частоту дискретизации, чтобы подавть 50 Гц?


Такой фильтр излишен для данного типа АЦП. Не исключено, что он и является источником помехи через цепи питания. В подавляющем большинстве случаев достаточно RC цепочки.
Про выбор частоты дискретизации прочитайте раздел datasheetа "Frequency Response", обратив внимание на Fig. 27. Также рекомендую разобраться с принципом работы дельта-сигма АЦП.
Leonmezon
Цитата(DS @ Jun 1 2009, 19:50) *
Такой фильтр излишен для данного типа АЦП. Не исключено, что он и является источником помехи через цепи питания. В подавляющем большинстве случаев достаточно RC цепочки.
Про выбор частоты дискретизации прочитайте раздел datasheetа "Frequency Response", обратив внимание на Fig. 27. Также рекомендую разобраться с принципом работы дельта-сигма АЦП.


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


Я не писал, что она не нужна ВООБЩЕ. Не нужна фильтрация высоких порядков при правильном выборе соотношений частот. Достаточно фильтра первого порядка. И Вы путаете частоту дискретизации и частоту выдачи результата . В случае данного АЦП это совершенно не одно и то же.
Leonmezon
Цитата(DS @ Jun 4 2009, 00:41) *
Я не писал, что она не нужна ВООБЩЕ. Не нужна фильтрация высоких порядков при правильном выборе соотношений частот. Достаточно фильтра первого порядка. И Вы путаете частоту дискретизации и частоту выдачи результата . В случае данного АЦП это совершенно не одно и то же.

Тогда не совсем понятно, какое отношение темп выдачи результата относиться к цифровой фильтрации (в режиме единичного преобразования - темп вообще можно сделать хоть раз в год). На сколько я понимаю: фильтрация сигнала относиться к дисктретизации АЦП.
Leonmezon
Просьба подсказать как лучше будет (задании параметров для 3-АЦП происходит параллельно - так разведено): делать проверку на готовность калибровки или после выдачи задания на калибровку просто подождать (у меня время на всю калибровку 10 мин всегда от подачи питания, т.е. после на каждый вид калибровки могу потратить 3 мин - этого достаточно? И надо ли задать на каждый канал или можно задать одновременно оба (в даташите на стр.14 - в описании регистров есть две сноски - но не понятно как работать в режиме калибровки? также как и при задании общих параметров? ): примерно так написал для кварца 14МГц и если разница какие регистры надо с начало калибровать (в даташите последовательности калибровки явно не прописано).

void delay (void)
{
unsigned char a, b, c;
for(a=0; a<255; a++)
{
for(b=0; b<255; b++)
{
for(c=0; c<100; c++)
{
NOP();
}
}
}

void Calibrovka(void)
{
// Калибровка по Channel Full-Scale Cal, Mode Register=0b11100010=0xE2;
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0xE2);
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
delay(); // ждем пока идет калибровка
// Калибровка по ADC Zero-Scale Self-Calibration, Mode Register=0b10000010=0x82
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0x82);
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
delay(); // ждем пока идет калибровка
// Калибровка по Channel Zero-Scale System Calibration, Mode Register=0b11000010=0xC2
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0xC2);
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
delay(); // ждем пока идет калибровка
}
DS
14 Мгц кварц - не ошибка ? Максимально, что допустимо 6.144 Мгц.

Если калибровка запускалась с использованием сигнала SYNC, достаточно проверять готовность любого АЦП.

Калибровки существуют 2 - калибровка АЦП - ее надо делать обязательно после включения питания и калибровка канала. Она выполняется для каждого канала раздельно, и убирает смещение коммутатора и внешних входных цепей. Т.е. то, что в момент выполнения этой калибровки будет на входе, то и будет восприниматься в качестве "0".
Leonmezon
Цитата(DS @ Jul 6 2009, 13:37) *
14 Мгц кварц - не ошибка ? Максимально, что допустимо 6.144 Мгц.

Если калибровка запускалась с использованием сигнала SYNC, достаточно проверять готовность любого АЦП.

Калибровки существуют 2 - калибровка АЦП - ее надо делать обязательно после включения питания и калибровка канала. Она выполняется для каждого канала раздельно, и убирает смещение коммутатора и внешних входных цепей. Т.е. то, что в момент выполнения этой калибровки будет на входе, то и будет восприниматься в качестве "0".

По кварцу - это кварц atmega640 (относиться к функции delay()) - указал чтоб было понятна примерно время задержки.

По калибровки понятно (сегодня попробывал)И так как не имею возможноти коммутировать вход (он жестко распаян) - оставил только автокалибровку, т.е. калибровку внутренних параметров (фактически калибровка от ИОН) - но выявилась ошибка - при каждом новом включении прибора очень большой разброс параметров (вижу по выходным данным при нулевом сигнале (на ноль (смещение) калибруем программано уже ЭВМ по 3 тыс. значениям ) и честно не знаю в чем дело: значали грешил на входные операционные усилители (их питани...) - полностью отключил питание, отсоеденил входы АЦП и соеденил все на землю) - результат тот же, честно не знаю что может быть? Пр нулевом сигнале: цифровой код с АЦП соотвествует +-4 мВ (причем абсолюно периодично (напряжения примерны но порядок тот же): плюс 4мВ, минус 4мВ, плюс 4мВ минус 4 мВ.... ).
Tanya
Цитата(Leonmezon @ Jul 6 2009, 18:33) *
Пр нулевом сигнале: цифровой код с АЦП соотвествует +-4 мВ (причем абсолюно периодично (напряжения примерны но порядок тот же): плюс 4мВ, минус 4мВ, плюс 4мВ минус 4 мВ.... ).


Так не должно быть никогда. Где-то у Вас ОШИБКА Ваша. Проанализируйте последовательность выходную.
Leonmezon
Цитата(Tanya @ Jul 6 2009, 19:23) *
Так не должно быть никогда. Где-то у Вас ОШИБКА Ваша. Проанализируйте последовательность выходную.

Выходная последовательность имеет частоту повторения 100 Гц равную половине частоты дискретизации 200 Гц, причем если сигнал не нулевой - скажем подаю синусоиду 0,1 Гц до 100 Гц и амплитудой до 10 В - на выходеименно ее и получаю (графически востанавливаем сигнал на ЭВМ). Что интресно: менял частоту дискретизации - резльатт тот же - только частота повторения соотвественно другая (деленная на два). Где искать не знаю.
DS
Цитата(Leonmezon @ Jul 6 2009, 19:33) *
Выходная последовательность имеет частоту повторения 100 Гц равную половине частоты дискретизации 200 Гц, причем если сигнал не нулевой - скажем подаю синусоиду 0,1 Гц до 100 Гц и амплитудой до 10 В - на выходеименно ее и получаю (графически востанавливаем сигнал на ЭВМ). Что интресно: менял частоту дискретизации - резльатт тот же - только частота повторения соотвественно другая (деленная на два). Где искать не знаю.


Программную калибровку Вы записываете в регистры АЦП ? Или вычитаете в процессоре ? Не может ли быть, что у Вас перенос разряда при вычитании 24 битного слова хромает ?
Leonmezon
Цитата(DS @ Jul 6 2009, 23:33) *
Программную калибровку Вы записываете в регистры АЦП ? Или вычитаете в процессоре ? Не может ли быть, что у Вас перенос разряда при вычитании 24 битного слова хромает ?

Калибровку вообще отключил (при таких значениях калибровка не поможет): закоротил все входы АЦП и смотрю что на цифровом выходе.
Обработка данных в mege (повторю часть своего первого сообщения): (да и проверял когда писал программу на регистрах - все сходиться до знака).

//Чтение данных из регистра АЦП
// Читаем и заносим в буфер
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);

Вопрос где искать? (землю вроде верно разведены - соеденены в одной точке, кварцы у 3 АЦП сразу отказали - наврядле, 3 АЦП испортились - то же, единственно у нас в качестве ИОН используеться REF43 - одна штука - но от нее проводом сечением 1,5 кв. мм. )невесным чтоб уменьшить сопротивление) подходит к АЦП сигнал). - Как можно поискать ошибку?
DS
Цитата(Leonmezon @ Jul 6 2009, 23:48) *
Вопрос где искать? (землю вроде верно разведены - соеденены в одной точке, кварцы у 3 АЦП сразу отказали - наврядле, 3 АЦП испортились - то же, единственно у нас в качестве ИОН используеться REF43 - одна штука - но от нее проводом сечением 1,5 кв. мм. )невесным чтоб уменьшить сопротивление) подходит к АЦП сигнал). - Как можно поискать ошибку?


Вы серьезно поставили 3 кварца ? Вы себе представляете, какие биения могут возникнуть именно на частотах в полосе измерения ? Выкиньте 2 из трех кварцев, подсоедините входы MCLKIN к MCLKOUT АЦП с кварцем.
И распечатайте побайтно, без преобразования, результаты считываемые из регистров, наверняка ошибка программная.
Leonmezon
Цитата(DS @ Jul 7 2009, 00:35) *
Вы серьезно поставили 3 кварца ? Вы себе представляете, какие биения могут возникнуть именно на частотах в полосе измерения ? Выкиньте 2 из трех кварцев, подсоедините входы MCLKIN к MCLKOUT АЦП с кварцем.
И распечатайте побайтно, без преобразования, результаты считываемые из регистров, наверняка ошибка программная.

Не совсем понятно как три кварца могут дать биения (они же подключены к каждому своему АЦП)? (Да и на плате кроме них - еще три кварца: 14Мгц, 7,8 МГц и 32 кГц (atmega640, atmega8515+ часы реального времени) кварц GPS приемника (DSP процессор) и кварц микроЭВМ (одноплатник на 500 МГц) - все работает).
DS
Цитата(Leonmezon @ Jul 7 2009, 00:51) *
Не совсем понятно как три кварца могут дать биения (они же подключены к каждому своему АЦП)? (Да и на плате кроме них - еще три кварца: 14Мгц, 7,8 МГц и 32 кГц (atmega640, atmega8515+ часы реального времени) кварц GPS приемника (DSP процессор) и кварц микроЭВМ (одноплатник на 500 МГц) - все работает).


У них частота одинаковая. Поэтому биения будут в районе 0.5 - 10 Гц. А 6 Мгц замечательно пролезает по цифре внуть АЦП. Вы же собираетесь измерять с тоностью до микровольт, я правильно помню ?
Leonmezon
Цитата(DS @ Jul 7 2009, 09:45) *
У них частота одинаковая. Поэтому биения будут в районе 0.5 - 10 Гц. А 6 Мгц замечательно пролезает по цифре внуть АЦП. Вы же собираетесь измерять с тоностью до микровольт, я правильно помню ?


Про микровольты - правильно. Честно сказать не совсем понятна физика возникновения биения - не очень ясно как вообще это может быть и как это влияет на точность.
Проверил схему включения (привожу на рис. части прибора: 3 АЦП и микроконтроллер, и преобразователь биполярного сигнала в дифференциальный с развязывающими буферами для подачи на оба канала АЦП) и программу (части программы приема данных были выше) - честно не вижу ошибок которые приводили к таким результат: при закорачивании входов имеем по каналам АЦП -4 до 4мВ (прилагаю график) в то же время при подключении нагрузки (на графике к 3 АЦП подключен генератор синусоидального напряжения 1 Гц) - вроде нормально все оцифровывает (хотя шум есть). Как говорили выше - в место напряжения с тем же тактом считал регистры (выбрал два калибровочных такой же длины что регистр данных) - вроде нормально считываются (те.е. программа работает) - но есть не понятные вещи: значения регистров сами изменяются (каждое 11...15 значение - хотя и близкое к изначальному) при этом к регистрам калибровки не обращаюсь.
Что можете посоветовать? (кварцы попробую убрать,но не думаю что из за них может быть шум 4мВ - при этом аналоговая часть вся отключена)
Tanya
Цитата(Leonmezon @ Jul 7 2009, 18:59) *
Что можете посоветовать? (кварцы попробую убрать,но не думаю что из за них может быть шум 4мВ - при этом аналоговая часть вся отключена)

Могу только повторить просьбу DS - побайтно, безо всяких преобразований, при закороченном входе - отрезать предусилители.
Leonmezon
Цитата(Tanya @ Jul 7 2009, 20:01) *
Могу только повторить просьбу DS - побайтно, безо всяких преобразований, при закороченном входе - отрезать предусилители.

Попробую (хотя не уверен что это что то даст, все усилители убраны: входы АЦП закорочены и на землю). По ощущениям - чтото происходит в аналоговой части АЦП - но как это узнать?
Tanya
Цитата(Leonmezon @ Jul 7 2009, 20:24) *
Попробую (хотя не уверен что это что то даст, все усилители убраны: входы АЦП закорочены и на землю). По ощущениям - чтото происходит в аналоговой части АЦП - но как это узнать?


Кто бы покупал такие гнилые микросхемы, в аналоговой части которых происходит нечто...?
То, что у Вас. В ощущениях.
Leonmezon
Цитата(Tanya @ Jul 7 2009, 20:33) *
Кто бы покупал такие гнилые микросхемы, в аналоговой части которых происходит нечто...?
То, что у Вас. В ощущениях.

Да ян е мискросхемы имел ввиду (тем более купил 150 штук) - просто я понять не могу что может быть: регистры 8-битные проверил - все вточности как записал (или по умолчанию), регистры 24-бит - правильно считываються (хотя и есть огрехи возможно связанные с биением ???? мне это не понятно), подаю большой сигнал - все нормально и по частоте и по амплитуде (с определенной точностью) - как откалибровать - так проблема. Шум померяли с аналоговой части перед АЦП - не более 150 мкВ (в очень плохих условиях -возле высоковольтной линии), а на выходе АЦП (даже при 0 сигнале) - 4мВ.
Tanya
Цитата(Leonmezon @ Jul 7 2009, 20:40) *
Да ян е мискросхемы имел ввиду (тем более купил 150 штук) - просто я понять не могу что может быть: регистры 8-битные проверил - все вточности как записал (или по умолчанию), регистры 24-бит - правильно считываються (хотя и есть огрехи возможно связанные с биением ???? мне это не понятно), подаю большой сигнал - все нормально и по частоте и по амплитуде (с определенной точностью) - как откалибровать - так проблема. Шум померяли с аналоговой части перед АЦП - не более 150 мкВ (в очень плохих условиях -возле высоковольтной линии), а на выходе АЦП (даже при 0 сигнале) - 4мВ.

То, что Вы привели график для большого сигнала, нисколечко нам не помогает. Тот уровень скачков (не шума - я думаю...) много меньше сигнала и на графике не виден. Давайте побайтно. Может, Вы последний с предпоследним путаете...
DS
Цитата(Leonmezon @ Jul 7 2009, 20:40) *
Да ян е мискросхемы имел ввиду (тем более купил 150 штук) - просто я понять не могу что может быть: регистры 8-битные проверил - все вточности как записал (или по умолчанию), регистры 24-бит - правильно считываються (хотя и есть огрехи возможно связанные с биением ???? мне это не понятно), подаю большой сигнал - все нормально и по частоте и по амплитуде (с определенной точностью) - как откалибровать - так проблема. Шум померяли с аналоговой части перед АЦП - не более 150 мкВ (в очень плохих условиях -возле высоковольтной линии), а на выходе АЦП (даже при 0 сигнале) - 4мВ.


На всех АЦП одинаково ?
Leonmezon
Цитата(DS @ Jul 7 2009, 22:02) *
На всех АЦП одинаково ?

С небольшим разброс - да (чуть лучше - чуть хуже) - а так вобщем одинаково.
Если байты - синимать то какие? (да и я пробывал - считанные игнорировал, поставлял из расчета Analog Device (у них есть помощник по регистрам) - на ЭВМ все в точности как планировалсь до 1 мкВ). Что странно - на большом сигнале - все видут себя одинаково (проверяли при настройке от генератора, вообщем чуть улчшения добились только программным смещением нуля (мерием 3 тыс. отчетов нуля - и смещаем на эту величину - получаем выбросы симметричные).
Просьба уточнить по кварцам (мы выбрали произ. Англии сверх точные (из среднних по цене) - разброс примерно 0,1 Гц) - как это может сказаться: по биению честно не понял (но не в резонанс же они друг с другом входят???).
DS
Цитата(Leonmezon @ Jul 7 2009, 22:23) *
С небольшим разброс - да (чуть лучше - чуть хуже) - а так вобщем одинаково.
Если байты - синимать то какие? (да и я пробывал - считанные игнорировал, поставлял из расчета Analog Device (у них есть помощник по регистрам) - на ЭВМ все в точности как планировалсь до 1 мкВ). Что странно - на большом сигнале - все видут себя одинаково (проверяли при настройке от генератора, вообщем чуть улчшения добились только программным смещением нуля (мерием 3 тыс. отчетов нуля - и смещаем на эту величину - получаем выбросы симметричные).
Просьба уточнить по кварцам (мы выбрали произ. Англии сверх точные (из среднних по цене) - разброс примерно 0,1 Гц) - как это может сказаться: по биению честно не понял (но не в резонанс же они друг с другом входят???).


У Вас получается разностная частота между кварцами 0.1 Гц, синхронная с тактом АЦП - это пролазит через все его фильтры.
Leonmezon
Цитата(DS @ Jul 7 2009, 22:30) *
У Вас получается разностная частота между кварцами 0.1 Гц, синхронная с тактом АЦП - это пролазит через все его фильтры.

Сегодня попробовал отключить два канала (т.е. на плате остался один только работающий канал АЦП с закороченными входами (четыре входа АЦП объедении и посадили на землю) (усилители отрезали физически, кварцы 2 АЦП других выпаяли)) (в файле принятые значения (за 1 и 2 канал - ЭВМ проставила нули - так заложили если нет данных) - результат не очень: с одной стороны выбросы как были так и остались, что интересно - выбросы только по каналу CH0 (точнее не выбросы а смещение на 3 мВ), CH1 каналу - нормальное неустойчивость в пределах указанной нелинейности по даташиту Автокалибровка - не помогает - существенных изменений не видно (да и по ней не все понятно - дифференциальном режиме зачем то требуется отрицательное напряжение????? (хотя мой анг. мягко сказать хромает).
Из анализа последовательности - видно что есть смещение в 1 канале (как это может быть???? когда во 2 канале сдвига нет) на 3мВ. Может ли это быть связанно с тем что мы запускаем АЦП в циклическом режиме по переменно 1канал - 2канал - 1канал - 2канал.... или нет?
Что еще может быть?Что можно попробовать?

P.S. Режим работы АЦП: 1 кнал, 2 канал (рис.19 из даташита) - данные также в столбике: сначала 1 кнал, 2 канал, 1 канал, 2 канал....
DS
Цитата(Leonmezon @ Jul 8 2009, 18:13) *
Из анализа последовательности - видно что есть смещение в 1 канале (как это может быть???? когда во 2 канале сдвига нет) на 3мВ. Может ли это быть связанно с тем что мы запускаем АЦП в циклическом режиме по переменно 1канал - 2канал - 1канал - 2канал.... или нет?
Что еще может быть?Что можно попробовать?

P.S. Режим работы АЦП: 1 кнал, 2 канал (рис.19 из даташита) - данные также в столбике: сначала 1 кнал, 2 канал, 1 канал, 2 канал....


Смещение возникает из-за вутреннего резистивного делителя, это нормально и допустимо. Для устранения надо пользоваться автоколоибровкой нуля соотв. канала. Данные в столбике, если это 24 битный формат, соответствуют нормальной работе АЦП. Шум, на первый взгляд, порядка 100 отсчтетов, т.е. несколько больше 100 мкВ.
Rockstein
Спасибо за подробное объяснение калибровки, я тоже из даташита не совсем все понял. У меня с AD7732 проблемы немного другого характера: Ни с того, ни с сего появляються выбросы одновременно по всем двум каналам. К сожалению картинку не могу выложить, выложу завтра. Если все хорошо то шумит где-то порядка 10ppm от установленного значения (где-то в середине диапазона около 0x7FFFFF). А вдруг некоторое время начинает делать выбросы до 1 промили от значения. И через секунду или даже минуту опять все как было. Причем полоса на протяжении всех выбросов ровненькая. Как будто где-то несколько бит неправильно считываються. Еще интерссно, что выбросы в основном в сторону нуля, тоесть вниз. Другими словами полоса, значения прыгают вниз и каждый раз на тысячную от измеряемого значения.

Подключенный логический анализатор показывает, что данные скачут действительно на SDI сигнале и микроконтроллер тут не причем. Скачки наблюдаются в зависимости от измеряемого значения, даже в саршем байте. всегда где-то на одну тысячную от значения.

Непонятно, почему они апереодически появляються и изчезают. Почему полоса ровненькая, как будто под линейку подровняли. Почему абсолютная величина скачка зависит от значения. Я уже все что мог перепробовал. На первой плате такого не наблюдалось. К сожалению ее уже продали. Да и заметили бы такие скачки сразу.

Буду благодарен за помощь, голова уже вскипела smile.gif
DS
А питание как ? Земля ? 1/1000 от значения уже весьма небольшое по абсолютной величине напряжение. Похоже на ВЧ компоненту в сигнале, сбивающую внутренний фильтр АЦП.
Rockstein
Цитата(DS @ Sep 10 2009, 19:06) *
А питание как ? Земля ? 1/1000 от значения уже весьма небольшое по абсолютной величине напряжение. Похоже на ВЧ компоненту в сигнале, сбивающую внутренний фильтр АЦП.


Сегодня, кажется, продвинулся в догадках. Сначала отвечу на ваш пост. Питание 5вольт аналог и 5 водль дигитал от раздельных трансформаторов, потом на LT1763 стабилизируется. На плате земли соединены в одной точке перемычкой и между двумя AVCC и DVCC стоит шотки диод, предотрващяющий latchup, но это больше нужно для DAC1220, который тоже неподалеку. Все дигитальные сигналы конверторов через оптроны развязаны с микроконтроллером. Микроконтроллер получает свое напряжение со своего трансформатора. Опорное ADR441, на обеих входах инструментальный AD8221 с фильтром на входе от ВЧ, кажеться 10нф и 100Ом в обеих +In -In и 1нФ между ними. Это все было о прекрасном smile.gif

Теперь о грустном. На плате два таких вот АЦП и такт 2,5Мгц к ним обоим подведен, чтобы синхронно оба меряли. Запускается измерение на обоих одновременно и считывается по очереди. Так вот, генератор сделан по известной схеме из кварца и двух инверторов 74ACT04. Жалею что не взял готовый герератор в металлическом корпусе. И питается это все от DVCC, но находится в грязной часте платы. ВЧ сигнал 2,5Мгц не то чтобы очень, но удален от шины SPI, которая заведена на все конвертеры.

Что было сделано: чтобы исключить влияние микроконтроллера к шине SPI а точнее прям к ногам АЦП был подключен параллельный порт от ПК (через программатор АVR-ISP, там и мисо и моси и клок, вообщем приспособил его). Микроконтроллер остался сидеть за оптронами и без питания. Питание было только AVCC и DVCC. Сделал по быстрому программу на делфи, считываю сырые значения и пишу в диаграмму и ТАЖЕ фигня. Совсем отчаявшись и проматерившись решил заменить генератор на плате простым кварцем на одном из АЦП и сосредоточится тольно на нем. Больших габлей и геморроя стоил мне несчастный бит CLKDSBL, про который я совсем забыл, когда кварц вместо генератора подпаял. Посмотрел, на ножках кварца сигнал есть, ну думаю внутренний генератор запустился и хорошо. Странно что с выключеным CLKDISBL битом АЦП меряет только один раз сразу после софтварного reseta, второй раз просто DRDY не опускается и старые значения выдает, потом опять когда сбрасываешь еще раз меряет. Вот эта фигня стоила мне почти целого дня. Только к вечеру, разобравшись, запустил и все заработало БЕЗ выбросов! Поставил на ночь мерять, утром прийду и будет точно известно. Пока грешу именно на этот генератор.

Вопрос, каким образом тактовый генератор может приводит в таким вот апереодичным выбросам. Джиттер? Но каким образом и почему не все время а иногда. Может данные на пути из модулятора в демодулятор как-то этим затрагиваються.
А внутренний цифровой фильтр АЦП каким образом может сбиваться?
DS
Может быть корявый фронт, который с небольшой вероятностью вызывает сбой. Может быть наводка от пролезания из тактового провода, особенно, если в нем присутствуют выбросы за питание и землю. Пассивный RC фильтр от ВЧ наводок надо ставить не только на входе, но и (если возможно) прямо на входе АЦП т.к. аналоговые микросхемы могут не давить ВЧ наводки из питания или на межсоединения. По крайней мере попробовать и посмотреть, меняет ли наличие RC цепочки на входе на результат или нет, полезно.
Rockstein
Цитата(DS @ Sep 11 2009, 10:06) *
Может быть корявый фронт, который с небольшой вероятностью вызывает сбой. Может быть наводка от пролезания из тактового провода, особенно, если в нем присутствуют выбросы за питание и землю. Пассивный RC фильтр от ВЧ наводок надо ставить не только на входе, но и (если возможно) прямо на входе АЦП т.к. аналоговые микросхемы могут не давить ВЧ наводки из питания или на межсоединения. По крайней мере попробовать и посмотреть, меняет ли наличие RC цепочки на входе на результат или нет, полезно.


Спасибо за совет, пока что чсно что с кварцем всю ночь без выбросов проработало. Сейчас анализирую такт, вижу на нем небольшой заход за землю (порядка 50мВ) при падении фронта, но может это и щуп осциллографа. Меряю крокодилом на землю и там петля индуктивность имеет, такт 2,5Мгц.

Еще вопрос, как только нагружаю такт щупом осциллографа, сигнал уходит вниз на 1/5000 но потом не шумит, просто оффсет имеет. Это нормально?

Выкладываю скрин, на котором видны выбросы на двух каналаз. Слева абсолютное значение, справа относилельно среднего.
dos622
Цитата(Rockstein @ Sep 10 2009, 23:07) *
дигитальные сигналы


Как погода в ерлине? smile.gifcranky.gif
Rockstein
Цитата(dos622 @ Sep 11 2009, 15:36) *
Как погода в ерлине? smile.gifcranky.gif


Пока бабье лето smile.gif Но не долго еще такая погодка простоит
dos622
Цитата(Rockstein @ Sep 11 2009, 15:44) *
Пока бабье лето smile.gif Но не долго еще такая погодка простоит

cheers.gif
DS
Цитата(Rockstein @ Sep 11 2009, 14:38) *
Еще вопрос, как только нагружаю такт щупом осциллографа, сигнал уходит вниз на 1/5000 но потом не шумит, просто оффсет имеет. Это нормально?


Вообще-то нет. Разве что щуп с большой входной емкостью.
Rockstein
Цитата(DS @ Sep 11 2009, 16:10) *
Вообще-то нет. Разве что щуп с большой входной емкостью.

Максимум 10пикофарад
Tanya
Цитата(Rockstein @ Sep 11 2009, 14:38) *
Еще вопрос, как только нагружаю такт щупом осциллографа, сигнал уходит вниз на 1/5000 но потом не шумит, просто оффсет имеет. Это нормально?

Через емкость щупа ток (клок) течет на землю. Вот Вам и наводка. Почему выпрямляется... вам виднее. Если это клок АЦП, то так и должно быть.
Rockstein
Цитата(Tanya @ Sep 11 2009, 16:18) *
Через емкость щупа ток (клок) течет на землю. Вот Вам и наводка. Почему выпрямляется... вам виднее. Если это клок АЦП, то так и должно быть.


Ясно, спасибо. Вообщем весь геморой вроде локализировался, после замены 74act04 на 74HC04 больше не появляется. Сейчас поменял опять на АСТ04 только другой. Жду...

На всякий случай схему генератора прилагаю
Rockstein
УРА!!!! Поздравте меня.
Все-таки это глючил 74ACT04, замена на любую другую такую же микросхему НС или НСТ или АС или даже ту же АСТ не дает выбросов. Впаиваю обратно злополучную АСТ и все посторяется снова.

Теперь теряюсь в догадках, что бы это могло быть. Ведь на осцилографе все выглядит вполне одинаково. Мистика smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.