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

АЦП AD7980 получение данных с АЦП

Здравствуйте!!! Проблема с АЦП 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 в контроллере не помогло.

Кто использовал эту АЦП, как у вас она работает?

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


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

Конденсаторы стоят. На VIO-SDI кондёр 0,1 мкФ на VDD 0,1 мкФ. На REF 22 mkF. На входе кондёр фильтра 2,2 нФ.

Судя по даташиту если SDO подтянуть резистором к питанию, то после окончания преобразования SDO должен устанавливаться в ноль. У меня же он висит в единице, сбрасывается только после начала чтения данных. такое чувство что АЦП зависает во время преобразования

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

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


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

такое чувство что АЦП зависает во время преобразования

А у меня другое чувство... Анализ всех веток подобного рода позволяет выделить только два варианта (почти и исключительно) - брак партии (подделка) или недочитанный даташит виноват.

Вот берете другую (в двух смыслах и двух вариантах) микросхему и той же программой в той же железке...

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


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

Инициализация 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);

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


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

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;

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


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

Зачем Вы это?

RCC->APB1ENR&=~RCC_APB1ENR_SPI2EN;

Экономите электроэнергию???)))

 

Подозреваю что возможно в плате что-то не то? проверьте.

Осциллографом смотрите?

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


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

Да это для экономии энергии. Буду плату высматривать. Может чего нарою

 

А руками подавать синхросигналы не пробовали?

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


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

Конденсаторы стоят.

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

 

на SDO, примерно через 230 нс после переднего фронта импульса CNV, устанавливается единица

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

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


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

...

Судя по даташиту если SDO подтянуть резистором к питанию, то после окончания преобразования SDO должен устанавливаться в ноль. У меня же он висит в единице, сбрасывается только после начала чтения данных. такое чувство что АЦП зависает во время преобразования

Не внимательно читаете даташит

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

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


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

А руками подавать синхросигналы не пробовали?

Вы про сигналы 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, так что проц не должен влиять.

 

Я пытался загрузить схему развязки АЦП и кусок разводки платы, но у меня не получается пишет " Неудачная загрузка. Вам запрещено загружать такой тип файлов"

Как првильго грузить рисунки в форум?

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


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

...Судя по этому предложению даташита, после окончания преобразования сопротивление на этой ноге уменьшается, и если есть подтяжка к питанию, то на этом пине должна наблюдаться хоть какая-нибудь просадка напряжения. Я правильно понимаю? На рисунке 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.

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


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

Если после окончания преобразования данные вообще не считывать, то в каком состоянии будет SDO, в Z или Low impedance? Если есть подтяжка к питанию этого пина, то в Z состоянии на нем будет уровень питания, а в Low impedance будет земля или небольшое напряжение, я правильно понимаю?

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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