Leonmezon 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 · Жалоба ДОбрый день. Возникла необходимость (и соотвественно сложность) в калибровке АЦП 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 4 11 февраля, 2009 Опубликовано 11 февраля, 2009 · Жалоба ДОбрый день. Возникла необходимость (и соотвественно сложность) в калибровке АЦП 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 0 11 февраля, 2009 Опубликовано 11 февраля, 2009 · Жалоба Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки. А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф... Там формат странноватый, надо найти и прочитать соответствующую appnotу. Если правилно помню, старший бит - знак, дальше нулевой бит, и смещение нуля - в прямом коде (т.е. модуль). Нашел appnote. ad773xcr.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leonmezon 0 20 мая, 2009 Опубликовано 20 мая, 2009 · Жалоба Вам ничего вычислять не нужно. Написано, что будет делаться внутри (коррекция нуля и полной шкалы) с регистрами после проведения самокалибровки. А Вы получите скорректированные данные. Можно эти регистры читать и писать самому (для умников). Читать не вредно... Можно увидеть дрейф... Если я правильно понял, то мне необходимо просто провести калибровку и уже читая результат измерения все будет уже учтено? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 20 мая, 2009 Опубликовано 20 мая, 2009 · Жалоба Если я правильно понял, то мне необходимо просто провести калибровку и уже читая результат измерения все будет уже учтено? Я Вас (то, что Вы выше написали) понять не могу. И не могу понять, почему Вы меня не можете понять... Или сомневаетесь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leonmezon 0 21 мая, 2009 Опубликовано 21 мая, 2009 · Жалоба Я Вас (то, что Вы выше написали) понять не могу. И не могу понять, почему Вы меня не можете понять... Или сомневаетесь... Попробую объяснить: Я сейчас запускаю АЦП (устанавливаю необходимый режим) и считываю с него данные (т.е. результат измерения напряжения на входе). Результат меня более или менее устраивает, но хочется получить более точное значения измеренного напряжения, с учетом, что есть дрейф нуля, ИОН не ровно 2,56 В ..... АЦП имеет возможность калибровки: как в целом, так и по каждому каналу. Для калибровки мне необходимо запусть соответствующие режимы работы АЦП (с ними все понятно), а вот дальше не совсем. Что после этого мне необходимо делать??? Как я думаю (возможно и не правильно), после калибровки у меня изменяются значения соответствующих регистров, я их считываю, и считываю результат измерения и по формуле (которая приведена) вычисляю скорректированный результат - правильно? Или, как я Вас понял, после калибровки АЦП, новые результаты автоматически корректируется и я уже считываю корректированный результат из АЦП - так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 21 мая, 2009 Опубликовано 21 мая, 2009 · Жалоба Или, как я Вас понял, после калибровки АЦП, новые результаты автоматически корректируется и я уже считываю корректированный результат из АЦП - так? Да, именно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leonmezon 0 29 мая, 2009 Опубликовано 29 мая, 2009 (изменено) · Жалоба Просьба подсказать: необходима ли развязка между АЦП и микроконтроллером по SPI интерфейсу? (сейчас делаю через инверторы на рис.) Кто нибудь пробывал запустить АЦП AD7732 на частоте меньше минимальной (мин. по даташиту 1 Мгц) скажем на 800 кГц? ___________________.zip Изменено 29 мая, 2009 пользователем Leonmezon Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 31 мая, 2009 Опубликовано 31 мая, 2009 · Жалоба Просьба подсказать: необходима ли развязка между АЦП и микроконтроллером по SPI интерфейсу? (сейчас делаю через инверторы на рис.) Кто нибудь пробывал запустить АЦП AD7732 на частоте меньше минимальной (мин. по даташиту 1 Мгц) скажем на 800 кГц? Развязка не нужна. Но нужно отслеживать состояние DIN во время чтения, не давать ему болтаться произвольно. Нам еньшей частоте будет работать, но точность "поплывет". А зачем такое извращение ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leonmezon 0 31 мая, 2009 Опубликовано 31 мая, 2009 · Жалоба Развязка не нужна. Но нужно отслеживать состояние DIN во время чтения, не давать ему болтаться произвольно. Нам меньшей частоте будет работать, но точность "поплывет". А зачем такое извращение ? С DIN понятно (да и по программе видно - что не болтаться). То есть как я правильно понял - с точки зрения уменьшения погрешности АЦП - установка инверторов не чего не дает? На меньшей частоте необходимо для получения частоты дискретизации 50 Гц (на 1 МГц - мин. по даташиту - минимальная частота преобразования примерно 60 Гц) Фактически использовать надо АЦП - 2 режима 50 ГЦ и 200 Гц (зависит от переключателя), поиск другого АЦП не чего не дал, (по диапазону не проходят! +-10В дифференциальном режиме+ 2 канала и циклический режим (если по схеме смотреть организую непрерывное преобразование без пропусков). А другой вопрос: если я 4 преобразования на частоте 200 Гц - объединю в одно (U1+U2+U3+U4)/4 - это будет эквивалентно частоте 50 Гц? И помеха 50 Гц пролезет? (по теореме же на 50 Гц мы не видим частоты больше 25 Гц). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 1 июня, 2009 Опубликовано 1 июня, 2009 · Жалоба Усреднять результаты можно. Теорему Вы не правильно понимаете. Сигналы с частотами выше F/2 не отбрасываются, а их спектр переносится в рабочий диапазон. И они становяться помехами. Поэтому до АЦП должен находиться адекватный аналоговый фильтр. Сигнал с частотой 50 Гц может быть полностью подавлен за счет свойств цифрового фильтра конкретного этого АЦП путем правильного выбора частоты тактирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leonmezon 0 1 июня, 2009 Опубликовано 1 июня, 2009 (изменено) · Жалоба Усреднять результаты можно. Теорему Вы не правильно понимаете. Сигналы с частотами выше F/2 не отбрасываются, а их спектр переносится в рабочий диапазон. И они становяться помехами. Поэтому до АЦП должен находиться адекватный аналоговый фильтр. Сигнал с частотой 50 Гц может быть полностью подавлен за счет свойств цифрового фильтра конкретного этого АЦП путем правильного выбора частоты тактирования. До АЦП ставлю фильтр 6-порядка - все равно пролазеет (хотя снижаеться до уровня сотен микровольт), а хочеться больше :) . Не совсем понятно, как выбрать частоту дискретизации, чтобы подавть 50 Гц? Изменено 1 июня, 2009 пользователем Leonmezon Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 1 июня, 2009 Опубликовано 1 июня, 2009 · Жалоба До АЦП ставлю фильтр 6-порядка - все равно пролазеет (хотя снижаеться до уровня сотен микровольт), а хочеться больше :) . Не совсем понятно, как выбрать частоту дискретизации, чтобы подавть 50 Гц? Такой фильтр излишен для данного типа АЦП. Не исключено, что он и является источником помехи через цепи питания. В подавляющем большинстве случаев достаточно RC цепочки. Про выбор частоты дискретизации прочитайте раздел datasheetа "Frequency Response", обратив внимание на Fig. 27. Также рекомендую разобраться с принципом работы дельта-сигма АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leonmezon 0 2 июня, 2009 Опубликовано 2 июня, 2009 · Жалоба Такой фильтр излишен для данного типа АЦП. Не исключено, что он и является источником помехи через цепи питания. В подавляющем большинстве случаев достаточно RC цепочки. Про выбор частоты дискретизации прочитайте раздел datasheetа "Frequency Response", обратив внимание на Fig. 27. Также рекомендую разобраться с принципом работы дельта-сигма АЦП. Для данного типа АЦП аналоговая фильтрация все таки нужна (иначе шум наложенный на сигнал до АЦП запросто пройдет дальше (и никакой цифровой фильтр ее уже не уберет + может появиться эффект насыщения сигма-делтта модулятора с вытикающими последствиями ... - цитирую по Analog Device note), в то же время согласен выбор частоты дискретизации помагает избавить от многих шумов, только применительно к этому АЦП AD7732 минимальная частота дискретизации равна примерно 60 ГЦ - что не есть хорошо - 50 Гц из нее не получиш, лучше на мой взгляд выбрать частоту тактирования 100 Гц (если судить по даташиту) - с одной строны можно легко получить 50 Гц дискретизацию (плюс будет естественно фильтрация за счет усреднения), с другой строны такая частота позволит избавиться от гармоник 50 Гц. Хотя могу и ошибаться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Для данного типа АЦП аналоговая фильтрация все таки нужна (иначе шум наложенный на сигнал до АЦП запросто пройдет дальше (и никакой цифровой фильтр ее уже не уберет + может появиться эффект насыщения сигма-делтта модулятора с вытикающими последствиями ... - Я не писал, что она не нужна ВООБЩЕ. Не нужна фильтрация высоких порядков при правильном выборе соотношений частот. Достаточно фильтра первого порядка. И Вы путаете частоту дискретизации и частоту выдачи результата . В случае данного АЦП это совершенно не одно и то же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться