Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103 и сильный шум АЦП
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Ruslan-maniak
Приветствую. Пытаюсь запустить все АЦП каналы доступные на контроллере STM32F103ZCT (21 канал: 15 каналов в ADC1 и 6 каналов в ADC3) при одновременной работе через ДМА в циклическом режиме. То есть выборка происходит все время для всех каналов. И столкнулся со следующей проблемой. Очень большой шум в каналах (но не во всех). Даже если их накоротко посадить на землю, то на некоторых каналах (особенно у ADC3) измерения достигают 100-150 LSB. При чем эти значения не периодические, а постоянны, то есть ноль в канале я вижу реже чем значение выше например 50 LSB. При этом у каждого канала свой шум и он также зависит от Rank'а присвоенного при конфигурировании канала. Частота тактирования АЦП = 36МГц. Если её опускать то ничего не меняется. Время сэмплирования стоит максимальное ADC_SampleTime_239Cycles5. Подскажите как получить адекватные значения по всем каналам? Кто сталкивался с такой проблемой? Или СТМ на это не способен в принципе и стоит сразу смотреть в сторону внешних АЦП?
uriy
При подключении входов к питанию значение с АЦП тоже не доходит до 4096 и составляет порядка 3900? Тогда вы забыли сделать калибровку.
Ruslan-maniak
Цитата(uriy @ Jul 17 2018, 19:51) *
При подключении входов к питанию значение с АЦП тоже не доходит до 4096 и составляет порядка 3900? Тогда вы забыли сделать калибровку.

До 4095 не доходит. В районе 4000 LSB. плюс-минус. Калибровку произвожу
Код
    
ADC_Cmd(adc->number, ENABLE);  
    
    // калибровка АЦП
    ADC_ResetCalibration(adc->number);
    while(ADC_GetResetCalibrationStatus(adc->number));
    ADC_StartCalibration(adc->number);
    while(ADC_GetCalibrationStatus(adc->number));    
    
    ADC_SoftwareStartConvCmd(adc->number, ENABLE);

ViKo
Vref смотрели, нормальное, не шумит, не возбуждается, не звенит?
Ruslan-maniak
Цитата(ViKo @ Jul 17 2018, 21:32) *
Vref смотрели, нормальное, не шумит, не возбуждается, не звенит?

Действительно, там шумновато. амплитуда шумов около 0.05 В. Попробую докинуть ёмкости. Но мне кажется, дело не только в шуме.
ViKo
Цитата(Ruslan-maniak @ Jul 17 2018, 18:10) *
Но мне кажется, дело не только в шуме.

В питании в целом?
k155la3
Цитата(Ruslan-maniak @ Jul 17 2018, 13:50) *
. . . Даже если их накоротко посадить на землю, то на некоторых каналах (особенно у ADC3) измерения достигают 100-150 LSB. . . .
Может в разводке дело, по GND переток под процессором ? Соблюдено, то что в даташите "General PCB design guidelines" ?
ps sm.gif
ну, и банальная промывка платы рекомендуется.
pnp_mechanic
В АЦП STM32 нет входного буфера. Во время выборки через ключ подключается конденсатор, который был подключен к предыдущему каналу. Возможно проблемы в в входных цепях вашей схемы.
Ruslan-maniak
Некоторые дополнения. Смотрите, у меня 20 идентичных по схемотехнике каналов. Все 20 каналов идут через повторители на ОУ. Перед ОУ стоят цифровые потенциометры которые в данный момент прижимают сигнал к земле накоротко. Если замерить мультиметром то сопротивление получается там около 200-300 Ом. Так вот сейчас для эксперимента запускаю измерения только для одного канала циклически через ДМА (буфер на 10 замеров) и каждую миллисекунду смотрю что в буфере. И например на канале ADC1-15 среднее значение этого буфера всегда равно нулю, а максимальный пик фиксируется за длительное время не более 10 LSB. Если же взять канал ADC1-10 то там картина разительно отличается. Среднее значение буфера скачет от 20 до 80 LSB. А максимальный пик фиксируется практически сразу в районе 180 LSB, и постепенно доходит до 200 LSB. Даже если я замыкаю напрямую землю контроллера и пин АЦП. На мой взгляд такое поведение вряд ли можно объяснить (оправдать) неправильной разводкой (разводка отличается лишь тем что длина дорожки от ОУ до АЦП больше на 4 см), непромывкой, или проблемами с питанием. Кто что думает?
Plain
Да не над чем тут думать, кроме очередной страницы ни о чём. Когда таки соизволите додумать выложить схему и разводку — вот тогда подумаем подумать.
k155la3
Цитата(Ruslan-maniak @ Jul 18 2018, 07:13) *
. . . Перед ОУ стоят цифровые потенциометры которые в данный момент прижимают сигнал к земле накоротко. Если замерить мультиметром то сопротивление получается там около 200-300 Ом. . . .
Накоротко - это перемычка входа на GND, все остальное от линии отключено.
Если стоят повторители (как оказалось), зачем время выборки максимальное ? Поставьте среднее, минимальное.
Сергей Борщ
QUOTE (Ruslan-maniak @ Jul 17 2018, 16:39) *
Калибровку произвожу
CODE
    
ADC_Cmd(adc->number, ENABLE);  
    
    // калибровка АЦП
    ADC_ResetCalibration(adc->number);

"Если ничего не помогает - прочтите, наконец, инструкцию"...
QUOTE
Note: 1 It is recommended to perform a calibration after each power-up.
2 Before starting a calibration the ADC must have been in power-off state (ADON bit = ‘0’) for
at least two ADC clock cycles
.
Wasserati
Цитата
Частота тактирования АЦП = 36МГц.

Максимальная частота тактирования АЦП - 14 МГц. Отсюда и могу быть проблемы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.