|
АЦП AD7980 получение данных с АЦП, Не могу считать данные с этого АЦП, постоянно выдает -32768 |
|
|
|
Jul 9 2014, 09:23
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
Здравствуйте!!! Проблема с АЦП 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 в контроллере не помогло. Кто использовал эту АЦП, как у вас она работает?
|
|
|
|
|
Jul 10 2014, 03:52
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
Конденсаторы стоят. На VIO-SDI кондёр 0,1 мкФ на VDD 0,1 мкФ. На REF 22 mkF. На входе кондёр фильтра 2,2 нФ. Судя по даташиту если SDO подтянуть резистором к питанию, то после окончания преобразования SDO должен устанавливаться в ноль. У меня же он висит в единице, сбрасывается только после начала чтения данных. такое чувство что АЦП зависает во время преобразования
Сообщение отредактировал nx6310 - Jul 10 2014, 04:44
|
|
|
|
|
Jul 10 2014, 06:09
|

пуля
   
Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959

|
Инициализация 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);
|
|
|
|
|
Jul 10 2014, 06:20
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
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;
|
|
|
|
|
Jul 10 2014, 06:38
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
Да это для экономии энергии. Буду плату высматривать. Может чего нарою
|
|
|
|
|
Jul 10 2014, 08:22
|
Гуру
     
Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710

|
Цитата(nx6310 @ Jul 10 2014, 06:52)  Конденсаторы стоят. По-прежнему малоинформативно. Отличие длины соединений между ними и выводами от требуемой напрямую влияет на работоспособность. Цитата(nx6310 @ Jul 9 2014, 12:23)  на SDO, примерно через 230 нс после переднего фронта импульса CNV, устанавливается единица То же самое. Зафиксируйте этот вывод на середине питания двумя резисторами 10 кОм и удостоверьтесь в соответствии периодов трёх его состояний паспортным.
|
|
|
|
|
Jul 10 2014, 16:22
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 22-08-07
Пользователь №: 29 977

|
Цитата(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, тот жепринцип и микросхема очень надежна.
|
|
|
|
|
Jul 11 2014, 05:15
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
Цитата А руками подавать синхросигналы не пробовали? Вы про сигналы 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, так что проц не должен влиять. Я пытался загрузить схему развязки АЦП и кусок разводки платы, но у меня не получается пишет " Неудачная загрузка. Вам запрещено загружать такой тип файлов" Как првильго грузить рисунки в форум?
|
|
|
|
|
Jul 11 2014, 06:10
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 22-08-07
Пользователь №: 29 977

|
Цитата(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.
|
|
|
|
|
Jul 11 2014, 06:26
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174

|
Если после окончания преобразования данные вообще не считывать, то в каком состоянии будет SDO, в Z или Low impedance? Если есть подтяжка к питанию этого пина, то в Z состоянии на нем будет уровень питания, а в Low impedance будет земля или небольшое напряжение, я правильно понимаю?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|