реклама на сайте
подробности

 
 
> STM32F103 и сильный шум АЦП, все доступные каналы через ДМА
Ruslan-maniak
сообщение Jul 17 2018, 10:50
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 27-12-12
Из: Томск
Пользователь №: 74 999



Приветствую. Пытаюсь запустить все АЦП каналы доступные на контроллере STM32F103ZCT (21 канал: 15 каналов в ADC1 и 6 каналов в ADC3) при одновременной работе через ДМА в циклическом режиме. То есть выборка происходит все время для всех каналов. И столкнулся со следующей проблемой. Очень большой шум в каналах (но не во всех). Даже если их накоротко посадить на землю, то на некоторых каналах (особенно у ADC3) измерения достигают 100-150 LSB. При чем эти значения не периодические, а постоянны, то есть ноль в канале я вижу реже чем значение выше например 50 LSB. При этом у каждого канала свой шум и он также зависит от Rank'а присвоенного при конфигурировании канала. Частота тактирования АЦП = 36МГц. Если её опускать то ничего не меняется. Время сэмплирования стоит максимальное ADC_SampleTime_239Cycles5. Подскажите как получить адекватные значения по всем каналам? Кто сталкивался с такой проблемой? Или СТМ на это не способен в принципе и стоит сразу смотреть в сторону внешних АЦП?

Сообщение отредактировал Ruslan-maniak - Jul 17 2018, 11:14
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uriy
сообщение Jul 17 2018, 12:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



При подключении входов к питанию значение с АЦП тоже не доходит до 4096 и составляет порядка 3900? Тогда вы забыли сделать калибровку.
Go to the top of the page
 
+Quote Post
Ruslan-maniak
сообщение Jul 17 2018, 13:39
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 27-12-12
Из: Томск
Пользователь №: 74 999



Цитата(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);

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 18 2018, 09:08
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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
.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 14:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016