Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помощь с ADS1248
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
Zeal0t
Добрый день.

АЦП ADS1248. Подключена к STM32 по SPI. Схема подключения полная из DS. Читается, пишется, DRDY при измерении/чтении изменяет.
К АЦП будут подключены тензомост и термистор.
В данный момент выполняю измерение внутренних значений АЦП на основании режима задаваемого через регистр MUX1.

Накопились вопросы, которые сам так и не смог решить.
1. В режиме MUX1 "проверка нуля ацп (AVDD + AVSS)/2" имеем шум на входе, который пока списываю на плату/питание/etc. Но иногда "ловлю" броски до максимума разрешения АЦП. Можно ли как то определить причину этого?
2. Режим MUX1 "контроль температуры". При прогреве АЦП, в разумных пределах, видим рост показаний от АЦП. Примерно на температуре +52..+53 градуса C имеем "бросок" показаний на 50-60 тысяч едениц. Затем показания опять плавно растут. При охлаждении платы и АЦП видим падение показаний и опять скачок уже вниз на 50-60 тыс. едениц.

Что было опробовано.

Проверено питание.
Замена АЦП.
Плата промыта.

Все равно имеем броски.
Подскажите - куда и что копать? Мыслей нет (
Могу приложить screenshot`s графиков снимаемых с АЦП
Ruslan1
Цитата(Zeal0t @ Jan 21 2014, 12:49) *
Но иногда "ловлю" броски до максимума разрешения АЦП. Можно ли как то определить причину этого?

Скорее всего, несинхронная работа шины: АЦП принял дополнительный клок (или, наоборот, не принял). Либо то же самое с DRDY: мастер увидел фронт, которого не было, и пошел считывать.
У меня было подобное (но с другим АЦП): пару раз сутки проскакивали такие битые измерения. Проблема была в программе, сбивалась синхронизация по DRDY(точнее, возникало "паразитное" вычитывание по ошибочно взведенному прерыванию по DRDY сигналу).

Цитата(Zeal0t @ Jan 21 2014, 12:49) *
Могу приложить screenshot`s графиков снимаемых с АЦП

Вы логическим анализатором посмотрите лучше. Настройте его на запуск по фронту какого-то пина, которым дергайте в случае детектирования невалидных данных. Очень удобно и понятно (анализатор и немного предысторию пишет).
Учитывая, что у китайцев 8-канальный анализатор по 15 баксов продают, это самый эффективный способ отладки подобных железячно-софтовых связок.
Zeal0t
Цитата(Ruslan1 @ Jan 21 2014, 16:56) *
Скорее всего, несинхронная работа шины: АЦП принял дополнительный клок (или, наоборот, не принял). Либо то же самое с DRDY: мастер увидел фронт, которого не было, и пошел считывать.

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

Ruslan1
Цитата(Zeal0t @ Jan 21 2014, 15:02) *
По моему маловероятно т.к. при нагреве происходит плавное повышение значения читаемого с АЦП, затем резкий скачок и затем опять плавное повышение. Если не нагревать плату и АЦП - значения идут стабильные (ну в пределах шумов стабильные).

Вам нужно локализовать проблему: или Вы неправильно данные принимаете, или АЦП такие неправильные данные передает. Для этого нужен логический анализатор, который покажет, какие байты на самом деле в шине бегают.
Zeal0t
Цитата(Ruslan1 @ Jan 21 2014, 17:22) *
Вам нужно локализовать проблему: или Вы неправильно данные принимаете, или АЦП такие неправильные данные передает. Для этого нужен логический анализатор, который покажет, какие байты на самом деле в шине бегают.

А вот так если вместо логического анализатора? Поможет как то?
1. Чтение данных с АЦП выполняется в прерывании по низкому уровню DRDY.
2. Очередное значение заносится в кольцевой буфер.
3. Буфер постоянно передается в программу верхнего уровня.
4. На верхнем уровне он копится и его можно посмотреть, график построить.
Tanya
Цитата(Zeal0t @ Jan 21 2014, 17:02) *
затем резкий скачок и затем опять плавное повышение.

В каком смысле? Одиночный выброс, или "как бы" сдвиг нуля - длинная ступенька?
А температура внутренняя?
Zeal0t
Цитата(Tanya @ Jan 21 2014, 17:53) *
В каком смысле? Одиночный выброс, или "как бы" сдвиг нуля - длинная ступенька?

Сдвиг нуля

Цитата(Tanya @ Jan 21 2014, 17:53) *
В каком смысле? Одиночный выброс, или "как бы" сдвиг нуля - длинная ступенька?
А температура внутренняя?


Это и есть значения с внутреннего датчика температуры АЦП.

Вот как это выглядит

DATE, TIME, TEMPERATUREMCU, TEMPERATUREADC
21.1.2014, 14:23:46.796, 32, 425450
21.1.2014, 14:23:46.937, 32, 425410
...
21.1.2014, 14:25:36.921, 45, 458223
21.1.2014, 14:25:36.984, 45, 458223
вот тут начало это ступеньки
и далее продолжает набирать по чуть-чуть
21.1.2014, 14:25:37.046, 45, 524400
21.1.2014, 14:25:37.125, 45, 524400
21.1.2014, 14:25:37.921, 45, 524400
21.1.2014, 14:25:38.000, 45, 524400
21.1.2014, 14:25:38.062, 45, 524959
21.1.2014, 14:25:38.109, 45, 524959
21.1.2014, 14:25:38.921, 46, 524959
21.1.2014, 14:25:39.218, 46, 525437
21.1.2014, 14:25:39.281, 46, 525437
21.1.2014, 14:25:39.343, 46, 525437
Tanya
Цитата(Zeal0t @ Jan 21 2014, 18:04) *
Сдвиг нуля



Это и есть значения с внутреннего датчика температуры АЦП.

Вот как это выглядит

А зачем вообще Вам эта температура? Да еще с такой точностью?
Вот одновременно сдвиг нуля и какое-нибудь измерение стабильного напряжения будет информативнее. Я так думаю.
Или... Что в последней колонке?
HardEgor
Если ступенька всегда в одном месте шкалы, то стоит попробовать два варианта:
- после включения, подать на вход АЦП напряжение чуть ниже этого места и наблюдать(или нет) ступеньку
- когда температура устоялась и показания не плывут, на вход АЦП подать образцовое напряжение и плавно его повышать - будет ступенька в этом месте или нет.
И по хорошему бы понаблюдать за поведением выхода REF.
Zeal0t
Цитата(Tanya @ Jan 21 2014, 19:06) *
А зачем вообще Вам эта температура? Да еще с такой точностью?
Вот одновременно сдвиг нуля и какое-нибудь измерение стабильного напряжения будет информативнее. Я так думаю.
Или... Что в последней колонке?


В последней колонке значение АЦП при измерении внутреннего параметра температура.
Эту температуру предполагалось использовать для контроля нагрева электроники.
По большому счету от нее можно и отказаться если бы не одно НО.
Точно так же прыгает значение с внешнего датчика температуры подключенного к каналам АЦП. И соответственно я делаю только 2 вывода - или я как то неправильно работаю с АЦП, или у него уплывает опора/ноль/etc и как то надо это решить.

Одновременное измерение стабильного напряжения?
Могу сделать замеры/выборку внутренних параметров АЦП и предоставить данные.
Что бы не раздувать тему - какой параметр может помочь:

- Inputs shorted to midsupply (AVDD + AVSS)/2
- V REFP – V REFN (full-scale)
- Temperature measurement diode
- (V REFP1 – V REFN1 )/4
- (V REFP0 – V REFN0 )/4
- (AVDD – AVSS)/4
- (DVDD – DVSS)/4


Цитата(HardEgor @ Jan 21 2014, 21:32) *
Если ступенька всегда в одном месте шкалы, то стоит попробовать два варианта:
- после включения, подать на вход АЦП напряжение чуть ниже этого места и наблюдать(или нет) ступеньку
- когда температура устоялась и показания не плывут, на вход АЦП подать образцовое напряжение и плавно его повышать - будет ступенька в этом месте или нет.

Это данные не на входе АЦП. Это его внутренний датчик температуры.
Хотя данные на входе тоже скачут.

Цитата(HardEgor @ Jan 21 2014, 21:32) *
И по хорошему бы понаблюдать за поведением выхода REF.

Дельное предложение. Спасибо. Сейчас займусь...
Tanya
Цитата(Zeal0t @ Jan 22 2014, 08:53) *
В последней колонке значение АЦП при измерении внутреннего параметра температура.

Расшифруйте, пожалуйста.

Цитата(Zeal0t @ Jan 22 2014, 08:53) *
- Inputs shorted to midsupply (AVDD + AVSS)/2
- V REFP – V REFN (full-scale)

Начать с этого.
Zeal0t
Цитата(Tanya @ Jan 22 2014, 10:16) *
Расшифруйте, пожалуйста.

У ADS1248 в регистре MUX1 есть мультиплексор особых режимов.
Один из режимов это контроль температуры когда АЦП подключает свои датчики для внутреннего измерения температуры.
Вот в этой колонке как раз и есть значения, которые читаются с АЦП в этом режиме.
Tanya
Цитата(Zeal0t @ Jan 22 2014, 10:52) *
У ADS1248 в регистре MUX1 есть мультиплексор особых режимов.
Один из режимов это контроль температуры когда АЦП подключает свои датчики для внутреннего измерения температуры.
Вот в этой колонке как раз и есть значения, которые читаются с АЦП в этом режиме.

Сама фраза сломала мне мозг - "параметра температура". А что эти цифры означают? А предыдущая колонка - это что за температура?
И еще - это оно само греется, или Вы помогаете?
Zeal0t
Цитата(Tanya @ Jan 22 2014, 11:34) *
Сама фраза сломала мне мозг - "параметра температура". А что эти цифры означают? А предыдущая колонка - это что за температура?
И еще - это оно само греется, или Вы помогаете?


Извиняюсь - возможно сумбурно сам написал )

У ADS1248, помимо чтения с входов, есть измерение внутренних режимов самой АЦП.
Режим задается записью битов 2:0 в регистр MUX1.

Вот эти режимы:

000 Normal operation
001 Inputs shorted to midsupply (AVDD + AVSS)/2
010 V REFP – V REFN (full-scale)
011 Temperature measurement diode
100 (V REFP1 – V REFN1 )/4
101 (V REFP0 – V REFN0 )/4
110 (AVDD – AVSS)/4
111 (DVDD – DVSS)/4

Т.е. при выборе режима отличного от "Normal operation" АЦП выполняет измерение на основании заданного режима.
Таким образом "параметр температура" - это значение на входе АЦП в режиме "011 Temperature measurement diode".
Результат с АЦП читаем и записываем себе в буфер. Т.е. эти цифры - это значение которым ответило АЦП в текущем режиме измерения.

Предыдущая колонка - это температура (приблизительная с точностью +-1 градус)
измереная с помощью STM32, которая и управляет/читает АЦП.

Измеряем следующим образом.
Плата запускается, и с переодичностью 100ms выполняет измерение всех внутренних параметров (пока только для справки) и 2-х внешних датчиков. Данные с платы поступают на верхний уровень что бы посмотреть графики и данные. Затем постепенно начинаем плату прогревать феном.

Надеюсь все описал )
Tanya
Цитата(Zeal0t @ Jan 22 2014, 12:10) *
Извиняюсь - возможно сумбурно сам написал )

Предыдущая колонка - это температура (приблизительная с точностью +-1 градус)
измереная с помощью STM32, которая и управляет/читает АЦП.

Так это температура внутри STM32?
Zeal0t
Цитата(Tanya @ Jan 22 2014, 13:19) *
Так это температура внутри STM32?

Да. На основании его датчика температуры.
Она пока только для справки.
Точность +-1 градус по сравнению с физическим термометром расположенным рядом.
Tanya
Цитата(Zeal0t @ Jan 22 2014, 13:41) *
Да. На основании его датчика температуры.
Она пока только для справки.
Точность +-1 градус по сравнению с физическим термометром расположенным рядом.

А можете погреть (паяльником) только контроллер? Возникает ощущение...
Zeal0t
Цитата(Tanya @ Jan 22 2014, 13:54) *
А можете погреть (паяльником) только контроллер? Возникает ощущение...

Про неисправность STM32? Вроде как все нормально у нее работает. АЦП менял уже.
При прогреве только выносного датчика подключенного к АЦП - скачок так же есть.
Прикрепляю график с данными от АЦП.
Может он чем то поможет.

p.s. левая (Y) ось - в значениях АЦП.
масштаб оригинальный, но что бы все данные в один экран влезли - есть смешение по оси Y для каждого графика

Нажмите для просмотра прикрепленного файла
Tanya
Цитата(Zeal0t @ Jan 22 2014, 14:04) *
Про неисправность STM32? Вроде как все нормально у нее работает. АЦП менял уже.

Вот и возникает подозрение. У Вас аппаратный SPI? На какой частоте?
Zeal0t
Цитата(Tanya @ Jan 22 2014, 14:20) *
Вот и возникает подозрение. У Вас аппаратный SPI? На какой частоте?


STM32L152 с внешним кварцем на 16MHz. Максимальная частота на системной шине - 32MHz.
SPI аппаратный. Управление CS - програмное. Частота fPCLK/256 - пока самая минимально возможная.

Вы хотите сказать, что при повышении температуры у меня начинает "сбоить" SPI?
Tanya
Цитата(Zeal0t @ Jan 22 2014, 14:29) *
Вы хотите сказать, что при повышении температуры у меня начинает "сбоить" SPI?

Примерно.... Попробуйте программно дергать ножками.
Zeal0t
Цитата(Tanya @ Jan 22 2014, 14:38) *
Примерно.... Попробуйте программно дергать ножками.


Эм... Не уверен.
Если бы был сбой по SPI я бы сразу это увидел и на других графиках и в статистике/таймаутах работы самого SPI.
Но как возможную причину - проверю конечно...
Tanya
Цитата(Zeal0t @ Jan 22 2014, 14:43) *
Эм... Не уверен.
Если бы был сбой по SPI я бы сразу это увидел и на других графиках и в статистике/таймаутах работы самого SPI.
Но как возможную причину - проверю конечно...

Можно же еще пробовать греть отдельно контроллер и АЦП. Может,... еще на плате что-то при прогреве происходит.
novchok
Хотелось бы посмотреть на фото платы, осциллограммы по питанию во время нагрева и скачка, схему подключения SPI и осциллограммы сигналов SPI.

PS: Выше приведенная картинка как минимум показывает неработающее аналоговое питание(или аналоговую землю).
Zeal0t
Цитата(Zeal0t @ Jan 21 2014, 14:49) *
Добрый день.

АЦП ADS1248. Подключена к STM32 по SPI. Схема подключения полная из DS. Читается, пишется, DRDY при измерении/чтении изменяет.
К АЦП будут подключены тензомост и термистор.
В данный момент выполняю измерение внутренних значений АЦП на основании режима задаваемого через регистр MUX1.

Накопились вопросы, которые сам так и не смог решить.
1. В режиме MUX1 "проверка нуля ацп (AVDD + AVSS)/2" имеем шум на входе, который пока списываю на плату/питание/etc. Но иногда "ловлю" броски до максимума разрешения АЦП. Можно ли как то определить причину этого?
2. Режим MUX1 "контроль температуры". При прогреве АЦП, в разумных пределах, видим рост показаний от АЦП. Примерно на температуре +52..+53 градуса C имеем "бросок" показаний на 50-60 тысяч едениц. Затем показания опять плавно растут. При охлаждении платы и АЦП видим падение показаний и опять скачок уже вниз на 50-60 тыс. едениц.

Что было опробовано.

Проверено питание.
Замена АЦП.
Плата промыта.

Все равно имеем броски.
Подскажите - куда и что копать? Мыслей нет (
Могу приложить screenshot`s графиков снимаемых с АЦП


Update.

Заранее мои извинения за столь долгое молчание в теме.

Проблема найдена и решена.
Суть проблемы была не в АЦП.
Проблема была со стороны STM32 - при изменеии тактирования нужно делать полную переинициализацию модуля SPI.
Выключения/включения модуля недостаточно.

Тему, если она не нужна, можно удалять.
p.s. сам не нашел где это )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.