Полная версия этой страницы:
AVR + AD7705
Pavel V.
Feb 21 2007, 19:32
Написал программку для работы с этим АЦП, для первого канала все работает.
Но возник вопрос - как правильно переключаться между каналами? Нужно ли перед каждым чтением проводить инициализацию АЦП для одного из каналов (в том числе самокалибровку), или можно один раз провести калибровку, а затем просто переключать канал?
Вот как я работаю с АЦП:
Инициализация:
Код
SPI_send(0x20); /* Active Channel is Ain1(+)/Ain1(-), next operation as write to the clock register */
SPI_send(0x01); /* ????? master clock enabled, 1 MHz Clock, set output rate to 25Hz*/
SPI_send(0x10); /* Active Channel is Ain1(+)/Ain1(-), next operation as write to the setup register */
SPI_send(0x44); /* gain = 1, unipolar mode, buffer off, clear FSYNC and perform a Self Calibration */
while(DRDY); /* wait for /DRDY to go low */
Далее в бесконечном цикле читаю данные:
Код
SPI_send(0x38); // next operation - read from the data register
while(DRDY); /* wait for /DRDY to go low */
SPI_read();
Хотелось бы узнать правильный алгоритм работы с двумя каналами.
Спасибо!
Andy_F
Feb 22 2007, 01:07
Из datasheet'а следует, что калибровка должна проводиться после каждого переключения канала. Видимо, этот вариант и следует признать правильным

.
У меня получалось, что из-за этой самой калибровки устройство работает "медленно и печально". Если требуется попеременно измерять 1-й и 2-й каналы, то общая частота взятия отсчётов составляет примерно 10 Гц (по 5 Гц на канал).
SasaVitebsk
Feb 22 2007, 01:38
Цитата(Andy_F @ Feb 22 2007, 02:07)

Из datasheet'а следует, что калибровка должна проводиться после каждого переключения канала. Видимо, этот вариант и следует признать правильным

.
У меня получалось, что из-за этой самой калибровки устройство работает "медленно и печально". Если требуется попеременно измерять 1-й и 2-й каналы, то общая частота взятия отсчётов составляет примерно 10 Гц (по 5 Гц на канал).
Да я на теже грабли наступил, но стал разбираться дальше.

Медленно и печально оно работает если сигнал серьёзно отличается по размаху. Иначе всё OK. Там вроде так и было написано - быстрое АЦП для медленно изменяющихся сигналов.

Причина - в построении АЦП. В конце концов - заменили на другое.
satellite-plus
Feb 22 2007, 10:25
Цитата(Pavel V. @ Feb 21 2007, 18:32)

Написал программку для работы с этим АЦП, для первого канала все работает.
Но возник вопрос - как правильно переключаться между каналами? Нужно ли перед каждым чтением проводить инициализацию АЦП для одного из каналов (в том числе самокалибровку), или можно один раз провести калибровку, а затем просто переключать канал?
Категорически не рекомендую пользоваться 2-мя каналами. Ничего хорошего из этого не выйдет. За этим АЦП замечена еще одна проблема. В условиях больших помех АЦП слетает и перезапустить его можно только снятием питания. Советую бросить его и перейти к примеру на С8051F350. 24 - разряда плюс процессор.
Pavel V.
Feb 22 2007, 10:38
Да мне в общем-то не нужно большое быстродействие. Прибор будет использоваться для измерения напряжения и тока в домашнем лабораторном БП. Сначала проводил эксперименты со встроенным в Atmega АЦП, но не устроила точность.
С калибровкой теперь понятно. Что ж, буду делать калибровку после переключения канала. Кстати, а нужно заново писать в регистр clock?
Еще в другой ветке прочитал, что несколько первых измерений неточные, поэтому их нужно пропускать.
Таким образом, вот как мне представляется алгоритм работы программы:
1. Начальная инициализация АЦП.
2. Подключения канала 1, калибровка.
3. Чтение 3-х результатов преобразования (для работы берем 3-й).
4. Подключение канала 2, калибровка.
5. Чтение 3-х результатов преобразования (для работы берем 3-й).
6. Goto 2.
Я правильно все понял?
satellite-plus
Feb 22 2007, 10:57
Цитата(Pavel V. @ Feb 22 2007, 09:38)

Да мне в общем-то не нужно большое быстродействие. Прибор будет использоваться для измерения напряжения и тока в домашнем лабораторном БП. Сначала проводил эксперименты со встроенным в Atmega АЦП, но не устроила точность.
Я правильно все понял?
Если для БП - делай калибровку один раз и работай без проблем. Другое дело при работе с тензодатчиком или термопарой.
Где-то я видел что первые 4 измерения нужно пропустить, потому что их "съедает" цифровой фильтр, т.е. они не фильтрованы и могут быть некорректны. Источник не помню. Так ли это?
Dog Pawlowa
Feb 22 2007, 22:52
Цитата(slog @ Feb 22 2007, 22:12)

Где-то я видел что первые 4 измерения нужно пропустить, потому что их "съедает" цифровой фильтр, т.е. они не фильтрованы и могут быть некорректны. Источник не помню. Так ли это?
Насколько я помню, все-таки три измерения. Уже третье можно использовать.
SasaVitebsk
Feb 22 2007, 23:41
А на сколько я помню - что не делал, но как эту фильтрацию включал - результат измерения хуже был. Там частота подбиралась, так перепробывали всё. Ну закончилось тем, - чем я писал - выбросили его совсем и поставили ad7715. После этого проблем не было. А то с тем месяца 2 возились.
Ковыряюсь с AD7705, надо 2 канала. По рекомендациям калибровать АЦП надо после каждого переключения каналов. Работает медленно.
Поэтому появился такой вопрос: Если калибровку делать для каждого канала только один раз в начале, потом прочитать и запомнить значения CALIBRATION REGISTER для каждого канала. А во время работы после переключения каналов не калиброваться заново, что долго, а просто записывать правильные значения CALIBRATION REGISTER. Должно быть намного быстрее. Будет такая система работать?
defunct
May 18 2007, 09:29
Гм.. За те же деньги можно взять три ADS7822 - параллельно считывать все три, и не иметь никаких проблем с переключением каналов.
ADS7822 12bit а AD7705 16bit. Не пойдет. Но дело не в этом, можно и другие более современные замены найти. Просто есть AD7705 и надо ей мерять 2 канала. И она уже меряет, и скорость устраивает, но просто хочется сделать как лучше.
superbizzon
May 18 2007, 14:34
с 14 страницы даташита -
The AD7705/AD7706 contains independent sets of zero-scale registers, one for each of the input channels.....
The AD7705/AD7706 contains independent sets of full-scale registers, one for each of the input channels.
тоесть калибровочные регистры предусмотрены свои для каждого канала, а значит каждый раз перекалибровывать при переключении с канала на канал не нужно. Сам так и делал - работало нормально. Запускал перекалибровку только при включении, и если на канале менялся коэфициент усиления.
По поводу глючности этого ацп ( в данном посте мелькало) могу сказать одно - ищите ошибки. Это нормальный девайс, работает олдово... фишка в том что при неправильной инициализации или общении с ним, он почемуто не просто отказывается работать а начинает глючить - при включении может запуститься а может и нет, или выдаёт одно и тоже значение ( у меня было 0x3eff), или работает с бешеными тормозами....
Также ещё стоит обратить внимание на то что в минус он работает только до 300мв ( при беглом изучении документации может показаться что пашет до -Vdd), ито ближе к этому значению начинается дикая нелинейность, ну а дальше оно просто вырубается или горит. - вообщем если переодически сигнал закидывает в минус, ну или помеха какая проскакивает - ждите глюков.
Terrabyte
Oct 6 2008, 12:10
а такой вопрос,
пытаюсь подобрать наилучшее значение для фильтра (FS1, FS0), кто какие установки делал? Если считать частоту сети 50Гц наиболее критичной, то значит по Table XII я должен выбрать 52.4 Hz (–3 dB Filter Cutoff) которой соответствует 200 Hz (Output Update Rate), и биты = 1,1 - да ? а как быть CLK битом, если у меня внешнее тактирование?
Ну, коли ветка немного ожила, спрошу и я. Какие у кого впечатления от AD7793?
demiurg_spb
Oct 6 2008, 16:56
Цитата(DVF @ Oct 6 2008, 17:08)

Ну, коли ветка немного ожила, спрошу и я. Какие у кого впечатления от AD7793?
Использую AD7792 около года (7792-16bit, a 7793-24bit в остальном однояйцевые близнецы).
АЦП как АЦП. Перешёл на него с AD7709 только из-за встроенного генератора и большей точности опорника.
SashaBe
Oct 9 2008, 07:43
Вопрос к тем, кто использует AD7792: не происходило ли в Вашей практике такого, чтобы между выводами Vref(+) и Vref(-) оказывалось сопротивление около 180 Ом при отсутствии какой-либо обвески?
Далее я подключил делитель напряжения на вход для внешнего источника опорного напряжения и решил проверить, не повлияет ли это на работу в режиме, когда используется внутренний опорник 1,17 В. Повлияло, показания ацп изменились (непропорционально причем). Должно ли было такое произойти и почему?
demiurg_spb
Oct 10 2008, 17:06
Цитата(SashaBe @ Oct 9 2008, 11:43)

Вопрос к тем, кто использует AD7792: не происходило ли в Вашей практике такого, чтобы между выводами Vref(+) и Vref(-) оказывалось сопротивление около 180 Ом при отсутствии какой-либо обвески?
Далее я подключил делитель напряжения на вход для внешнего источника опорного напряжения и решил проверить, не повлияет ли это на работу в режиме, когда используется внутренний опорник 1,17 В. Повлияло, показания ацп изменились (непропорционально причем). Должно ли было такое произойти и почему?
Сопротивление входа Vref никогда не измерял.
Со слов я не могу понять как Вы организовали делитель.
И никак не могу понять суть Вашего эксперимента.
Пожалуйста нарисуйте схемку (хоть в paint'е).
SashaBe
Oct 13 2008, 05:42
Цитата(demiurg_spb)

Сопротивление входа Vref никогда не измерял.
вход Vref дифференциальный, т.е. он должен быть разомкнут по определению.
поправьте меня, если это не так.
Цитата(demiurg_spb)

Со слов я не могу понять как Вы организовали делитель.
И никак не могу понять суть Вашего эксперимента.
Пожалуйста нарисуйте схемку (хоть в paint'е).
максимально упростил эксперимент:
на входе АЦП 0,055 В.
при включении режима работы АЦП от внутреннего источника опорного напряжения показывает результат отличный от измеряемого вольтметром В7-23 на 0,002 В(при любом входном напряжении), а при включении режима работы АЦП от внешнего источника опорного напряжения - некорректный результат - при этом опорное напряжение вместо ожидаемых от делителя 0,96 В оказывается равным 0,12, как будто внутри микросхемы резистор 180 Ом шунтируется сопротивлением около 19 Ом...
Andrey_B
Oct 14 2008, 06:37
Цитата(DVF @ Oct 6 2008, 17:08)

Ну, коли ветка немного ожила, спрошу и я.
И я.
А кто, что использует на 16_ разрядов/без_опоры/1_канал/ПГА, дешевле чем AD7705/06 ?
Задача - измерение температуры термопарой, сейчас реализовано на AD7705, но не нравится это ископаемое.
ЗЫ: Новостей не слышно от атмела, что там решили по поводу его покупки микрочипом и он семи ?
demiurg_spb
Oct 14 2008, 08:22
Цитата(Andrey_B @ Oct 14 2008, 10:37)

А кто, что использует на 16_ разрядов/без_опоры/1_канал/ПГА, дешевле чем AD7705/06 ?
AD7788 - на счёт цены не уверен, но не из дорогих (ПГА отсутствует

).
Alexandro
Oct 17 2008, 08:22
Цитата(demiurg_spb @ Oct 14 2008, 11:22)

AD7788 - на счёт цены не уверен, но не из дорогих (ПГА отсутствует

).
Может AD7789 - 24 бита чтобы "компенсировать" отсутствие PGA
Terrabyte
Feb 16 2009, 13:25
1) а если в AD7706 каждый канал должен работать при разных коэф. усиления,
мне не нужно постоянно перекалибровывать его при переключении? (таблица VIII)
2) Setup Register всё ровно придётся переписать с новыми (G, B/U, BUF) ?
Сергей К
Mar 31 2009, 18:00
А у меня с AD7792 сложилась несколько другая проблема. Если подключать термопару напрямую к выводам АЦП, то все нормально (во всяком случае закорачивание выводов дает 0 градусов, без компенсации холодного спая).
Но вот если подключить RC-цепочку, то положительный вывод уходит слегка в минус, т.е. появляется разбаланс тем больший, чем больше емкость конденсаторов. При этом даже закорачивание выводов отверткой не убирает полностью разбаланс (по результатам АЦП).
Сопротивление резистора снижал до 100 Ом, конденсатора от десятков пФ до 0,1 мкФ.
Вот уже 4й день ковыряюсь, пробую разные конденсаторы и резисторы, но с любым конденсатором появляется разбаланс.

P.S. Для статистики: использую все три входа.
Сергей К
Apr 1 2009, 18:34
Мне кажется, что я нашел причину. Похоже дело в опросе внутренего датчика температуры. Могу предположить, что при настройке микросхмемы на измерение температуры встроенным термодатчиком автоматически отключается напряжение подтяжки, конденсаторы начинают разряжатся (причем на плюсовом выводе быстрее). После переключения измерения на входы, источник подключается и заряжает конденсаторы почти до номинального уровня. Так как конденсатор на положительном электроде заряжается дополнительно через цепочку резисторов в 20к, то он заряжается чуть медленее, а учитывая, что вся шкала - это +/- 18 мВ, то это "чуть" становится заметным. Пары секунд для полной зарядки, похоже недостаточно, т.к. чем ближе напряжение к эталноу, тем ниже скорость. Вот я и ловил эти остаточные пару мВ.
Сейчас сделал опрос датчика температуры раз в 10 циклов, припаял конденсаторы на 0,1 мкФ между каждым входом и землей и получил отклонение (в градусах) не более 1 (у меня отображаются целые, может там всего и 0,5, но меня это устраивает).
Надеюсь, я правильно понял, в чем была причина.
klotos
May 19 2009, 08:42
Собираюсь использовать AD7795. По опыту общения с AD7705 помнится при переключении каналов на порядок снижалась скорость преобразования. Осталась ли такая проблема у AD7795? Может быть кто-нибудь измерял реальную скорость опроса каналов?
yanvasiij
Aug 20 2014, 08:27
Люди, помогите разобраться! Работаю с AD7792 - не могу включить unipolar mode. Делаю вот так (использую либу с их офф. сата):
Код
u64 command;
command = getRegisterValue (AD7792_REG_CONF, 2, 1);
command |= AD7792_CONF_UNIPOLAR;
setRegisterValue( AD7792_REG_CONF, command, 2, 1);
Потом запускаю прербразование, но ацп все равно работает в bipolar режиме. То есть результат 0x8000 + (значение ацп). Я что-то делаю не так?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.