Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: АЦП AD7980 получение данных с АЦП
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
nx6310
Здравствуйте!!! Проблема с АЦП AD7980. Не могу считать с него данные. постоянно выдает значение 32768.
Напряжения на ножках:
-SDI соединен с VIO, напряжение 3,3 В;
- REF напряжение 5 В;
- VDD напряжение 2,5 В;
- IN+ постоянный сигнал около 0,5 В;
- IN- соединен с землей GND.

На CNV Подаю импульс длительностью около 800 нс. После этого считываю данные с АЦП. При этом на SDO, примерно через 230 нс после переднего фронта импульса CNV, устанавливается единица. При начале чтения после первого импульса SCK на выводе SDO устанавливается ноль.
если установить задержку между импульсом CNV и началом чтения единица на SDO сохраняется до начала чтения данных с АЦП.
Опрашиваю микроконтроллером stm32f103, пробовал менять настройки spi в контроллере не помогло.
Кто использовал эту АЦП, как у вас она работает?
Plain
Без требуемых конденсаторов, например, она не работает.
nx6310
Конденсаторы стоят. На VIO-SDI кондёр 0,1 мкФ на VDD 0,1 мкФ. На REF 22 mkF. На входе кондёр фильтра 2,2 нФ.
Судя по даташиту если SDO подтянуть резистором к питанию, то после окончания преобразования SDO должен устанавливаться в ноль. У меня же он висит в единице, сбрасывается только после начала чтения данных. такое чувство что АЦП зависает во время преобразования
Tanya
Цитата(nx6310 @ Jul 10 2014, 07:52) *
такое чувство что АЦП зависает во время преобразования

А у меня другое чувство... Анализ всех веток подобного рода позволяет выделить только два варианта (почти и исключительно) - брак партии (подделка) или недочитанный даташит виноват.
Вот берете другую (в двух смыслах и двух вариантах) микросхему и той же программой в той же железке...
bullit
Инициализация spi
Код
SPI_InitTypeDef  SPI_InitStructure;
    SPI_Cmd(SPI2, DISABLE);
    SPI_InitStructure.SPI_Direction         = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_Mode              = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize          = SPI_DataSize_8b;
    SPI_InitStructure.SPI_CPOL              = SPI_CPOL_Low;
    SPI_InitStructure.SPI_CPHA              = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS               = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
    SPI_InitStructure.SPI_FirstBit          = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial     = 7;
    SPI_Init(SPI2, &SPI_InitStructure);
    SPI_Cmd(SPI2, ENABLE);

Хотя вроде можно сразу 16 бит считывать!
А дальше что-то типа этого:
Код
SPI_I2S_SendData(SPI2, 0x00);
    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) != SET);
    AdcCode = ((SPI_I2S_ReceiveData(SPI2) << 8) & 0xff00);
nx6310
Spi я настроил. у меня на пине SDO от АЦП код 0х8000 постоянно выдает. скорость spi менял не помогло.

настройка spi

Код
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStructure.SPI_BaudRatePrescaler =    SPI_BaudRatePrescaler_8;
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStructure.SPI_CRCPolynomial = 7;
    SPI_Init(SPI2, &SPI_InitStructure);// ADC AD7980


чтение данных
Код
    RCC->APB1ENR|=RCC_APB1Periph_SPI2;
    SPI2->CR1|=0x0040;
    CNV1
    Delay(1);
    CNV0

SPI2->DR=0x00;
while (!(SPI2->SR&SPI_I2S_FLAG_RXNE));
adc[channel-1]=SPI2->DR;
SPI2->CR1&=~0x0040;
RCC->APB1ENR&=~RCC_APB1ENR_SPI2EN;
bullit
Зачем Вы это?
RCC->APB1ENR&=~RCC_APB1ENR_SPI2EN;
Экономите электроэнергию???)))

Подозреваю что возможно в плате что-то не то? проверьте.
Осциллографом смотрите?
nx6310
Да это для экономии энергии. Буду плату высматривать. Может чего нарою
Tanya
Цитата(nx6310 @ Jul 10 2014, 10:38) *
Да это для экономии энергии. Буду плату высматривать. Может чего нарою


А руками подавать синхросигналы не пробовали?
Plain
Цитата(nx6310 @ Jul 10 2014, 06:52) *
Конденсаторы стоят.

По-прежнему малоинформативно. Отличие длины соединений между ними и выводами от требуемой напрямую влияет на работоспособность.

Цитата(nx6310 @ Jul 9 2014, 12:23) *
на SDO, примерно через 230 нс после переднего фронта импульса CNV, устанавливается единица

То же самое. Зафиксируйте этот вывод на середине питания двумя резисторами 10 кОм и удостоверьтесь в соответствии периодов трёх его состояний паспортным.
Ndf
Цитата(nx6310 @ Jul 10 2014, 07:52) *
...
Судя по даташиту если SDO подтянуть резистором к питанию, то после окончания преобразования SDO должен устанавливаться в ноль. У меня же он висит в единице, сбрасывается только после начала чтения данных. такое чувство что АЦП зависает во время преобразования

Не внимательно читаете даташит
Цитата
When the conversion is complete, the AD7980 enters the acquisition phase and powers down.
Это означает что вывод SDO пререходит в Z состояние. А на SDI у вас точно +3,3В ? Возможен простой непропай. Я использую AD7687, тот жепринцип и микросхема очень надежна.
bullit
Было бы не плохо показать кусок схемы вокруг АЦП, со всеми подтяжками!
nx6310
Цитата
А руками подавать синхросигналы не пробовали?

Вы про сигналы SCK? Они у меня аппаратно генерируются микроконтроллером. Програмно не пробовал. С другими типами ацп вроде работало. Конденсаторы к ногам АЦП припаивал, тот же результат.

Цитата
То же самое. Зафиксируйте этот вывод на середине питания двумя резисторами 10 кОм и удостоверьтесь в соответствии периодов трёх его состояний паспортным.

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

Цитата
Это означает что вывод SDO пререходит в Z состояние. А на SDI у вас точно +3,3В ? Возможен простой непропай.

SDI пробовал на землю сажать, пробовал соединить с CNV, не помогло. Сейчас он подключен к 3,3В, звонил мультиметром, смотрел осцилографом.

Цитата
When the
conversion is complete, SDO goes from high impedance to low.

Судя по этому предложению даташита, после окончания преобразования сопротивление на этой ноге уменьшается, и если есть подтяжка к питанию, то на этом пине должна наблюдаться хоть какая-нибудь просадка напряжения. Я правильно понимаю? На рисунке 34.3 в даташите нарисовано так.У меня никакой просадки не происходит. Состояние этого пина у меня меняется только при чтении даных. Может у меня подтяжка низкоомная всего 4кОм, попробую 47кОм как в даташите запаять. Ножку проца при экспериментах я отключал от пина SDO, так что проц не должен влиять.

Я пытался загрузить схему развязки АЦП и кусок разводки платы, но у меня не получается пишет " Неудачная загрузка. Вам запрещено загружать такой тип файлов"
Как првильго грузить рисунки в форум?
Ndf
Цитата(nx6310 @ Jul 11 2014, 09:15) *
...Судя по этому предложению даташита, после окончания преобразования сопротивление на этой ноге уменьшается, и если есть подтяжка к питанию, то на этом пине должна наблюдаться хоть какая-нибудь просадка напряжения. Я правильно понимаю? На рисунке 34.3 в даташите нарисовано так.У меня никакой просадки не происходит. Состояние этого пина у меня меняется только при чтении даных...
Ну ладно, читаем это место еще раз: "When the conversion is complete, SDO goes from high impedance to low" здесь смысл в том, что в исходном состоянии SDO находится в Z в соответствии с режимом "CS MODE 3-WIRE WITH BUSY INDICATOR". После прихода CNV начинается конверсия и как только она закончится импеданс вывода меняется из Z в Low на выходе появляются какие то данные. Как только будет выдвинут последний 16-й бит SDO сразу переходит в Z.
nx6310
Если после окончания преобразования данные вообще не считывать, то в каком состоянии будет SDO, в Z или Low impedance? Если есть подтяжка к питанию этого пина, то в Z состоянии на нем будет уровень питания, а в Low impedance будет земля или небольшое напряжение, я правильно понимаю?
Ndf
Я так не пробовал, но с учетом рисунка 18 скорее всего будет ноль нв выходе SDO независимо от того есть подтяжка или нет.
nx6310
У меня на пине SDO не зависимо от наличия подтяжки к +3,3В висит еденица. Где то касяк, пока не нашел. будем дальше экспериментировать
Plain
Цитата(nx6310 @ Jul 11 2014, 10:32) *
Где то касяк, пока не нашел.

Специалисты с Вами полностью согласны:

http://www.gramota.ru/slovari/dic/?lop=x&a...%EA%E0%F1%FF%EA

Также, поищите сперва потерявшийся тип файла у себя, а затем в правилах форума:
Цитата(nx6310 @ Jul 11 2014, 08:15) *
Я пытался загрузить схему развязки АЦП и кусок разводки платы, но у меня не получается пишет " Неудачная загрузка. Вам запрещено загружать такой тип файлов"
Как првильго грузить рисунки в форум?


Цитата(nx6310 @ Jul 9 2014, 12:23) *
на SDO, примерно через 230 нс после переднего фронта импульса CNV, устанавливается единица

Т.е. tdis в 10 раз медленнее паспортного значения. Такое может быть, например, если на каждом этапе думать про выводы корпуса так же отлично от паспортного порядка.
nx6310
Вот схема

Нажмите для просмотра прикрепленного файла

и разводка АЦП

Нажмите для просмотра прикрепленного файла

SDO подтягивал и к питанию и к земле одновременно 10 кОмами. Его поведение не изменилось.

Вешал электролитический конденсатор на VREF 220 мкФ, tdis уменьшилось с 230 нс до 180 нс. Но поведение SDO не изменилось
Herz
Цитата(nx6310 @ Jul 14 2014, 11:19) *
Вот схема

А ничего, что референс с питанием перепутаны и питается АЦП, если верить схеме, от 2.5В при референсном 3.3В?
Plain
Цитата(nx6310 @ Jul 14 2014, 11:19) *
и разводка АЦП

Ну что ж, блистательное завершение очередного морочанья голов, каковых тем-близнецов на данном только форуме великое множество.

Вот первый ответ Вам в этой теме:
Цитата(Plain @ Jul 9 2014, 13:36) *
Без требуемых конденсаторов, например, она не работает.

Вот Ваша отписка:
Цитата(nx6310 @ Jul 10 2014, 06:52) *
Конденсаторы стоят.

Повторное замечение Вами вовсе проигнорировано:
Цитата(Plain @ Jul 10 2014, 11:22) *
По-прежнему малоинформативно. Отличие длины соединений между ними и выводами от требуемой напрямую влияет на работоспособность.

Итого, игнорирование требований производителя в главе "Layout" паспорта, игнорирование участников форума — наслаждайтесь результатом.
nx6310
Цитата
А ничего, что референс с питанием перепутаны и питается АЦП, если верить схеме, от 2.5В при референсном 3.3В?

Питание АЦП 2,5В, опора 5В, питание VIO 3.3В.
Вот картинка из даташита
Нажмите для просмотра прикрепленного файла
Вот еще в начале даташита написано
Цитата
Pseudo differential analog input range
0 V to VREF with VREF between 2.5 V to 5.5 V
Single-supply 2.5 V operation with 1.8 V/2.5 V/3 V/5 V logic interface

Ndf
Цитата(nx6310 @ Jul 14 2014, 12:19) *
Вот схема...

Ну вы даете... sm.gif Судя по схеме на VDD идет питание +2.5В с ИОН, а на REF идет +5В. Во первых надо делать наоборот иначе зачем ИОН нужен тогда? А во вторых хоть и пишут в даташите что так можно, но я бы не стал проверять т.к. потенциал на ноге VDD относительно других ног должен быть самым высоким иначе открываются паразитные диоды со всеми последствиями.
Herz
Цитата(Ndf @ Jul 14 2014, 15:07) *
Ну вы даете... sm.gif Судя по схеме на VDD идет питание +2.5В с ИОН, а на REF идет +5В. Во первых надо делать наоборот иначе зачем ИОН нужен тогда? А во вторых хоть и пишут в даташите что так можно, но я бы не стал проверять т.к. потенциал на ноге VDD относительно других ног должен быть самым высоким иначе открываются паразитные диоды со всеми последствиями.

Раз в даташите пишут, то всё в порядке. Нет там паразитных диодов. Только питать АЦП от ИОН, да ещё и ultraprecision, при этом на референсный вход подавать непонятно что - глупо, конечно.
nx6310
Заменил АЦП на AD7687, начал показывать какие то данные. показания прыгали на сотню единиц. Подал на VREF 2,5 вольта от опорника, сигнал прыгает на 10 единиц. Жду AD7980 из другой партии.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.