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

 
 
> STM32F072 непонятный эффект с выборкой ADC
seniorandre
сообщение Apr 24 2016, 05:48
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-07-12
Из: г.Нижний Новгород
Пользователь №: 72 651



Имею ADC, запуск выборки идет от триггера с периодом 2us, ADC тактируется от APBCLK = 48 MHz с делением на 2 или 4, данные забираются через DMA. Период запуска конверсии 2us, проверял осциллографом, все ок, 2us в наличии.
Далее непонятный эффект, если ставлю предделитель на 4 (тактовая ADC = 12 MHz), то выборку могу поставить только 1.5 ADC clock cycles, при 7.5 сс данные становятся случайными, хотя:
7.5cc + 12.5cc=20cc, плюс еще trigger start latency 2.625 ADC clock cycles = 22.625cc => 1/12MHz * 22.625 = 1,885 us

Если ставлю предделитель на 2 (тактовая ADC = 24 MHz, что ни есть хорошо),
То все работает вплоть до выборки 28,5сс
28.5cc + 12.5cc + 2.75сс =43.75cc, 2.75 => 1/24MHz * 43,75 = 1.823us
Код
    // ADC1
    ADC1->CFGR1 = ADC_CFGR1_DISCEN; //discontinuos mode, the each TRIGOI event do convertion
    //ADC1->CFGR1 = ADC_CFGR1_CONT | ADC_CFGR1_SCANDIR;
    //ADC1->CFGR2 |= ADC_CFGR2_CKMODE_1; //APBCLK/4 = 12MHz
    ADC1->CFGR2 |= ADC_CFGR2_CKMODE_0; //APBCLK/2 = 24MHz
    ADC1->CFGR1 |= ADC_CFGR1_EXTSEL_1 | ADC_CFGR1_EXTEN_0; // SEL = 010 TIM2 TRIGOut EN = 01 ON RISING
    // Время для всех каналов
    //ADC1->SMPR &= !ADC_SMPR_SMP; //Для всех каналов 000: 1.5 ADC clock cycles
    //ADC1->SMPR |= ADC_SMPR_SMP_0; //Для всех каналов 001: 7.5 ADC clock cycles, 7.5cc + 12.5cc=20cc, 1/12MHz * 20 = 1,66us  1/24MHz * 20 = 0.8us
    //ADC1->SMPR |= ADC_SMPR_SMP_1; //Для всех каналов 010: 13.5 ADC clock cycles, 13.5cc + 12.5cc=26cc, 1/12MHz * 26 = 2.16us  1/24MHz * 26 = 1.08us
    ADC1->SMPR |= ADC_SMPR_SMP_1 | ADC_SMPR_SMP_0; //Для всех каналов 011: 28.5 ADC clock cycles, 28.5cc + 12.5cc=41cc,  1/24MHz * 41 = 1.708us


Не хватает чуть чуть...
Может кто-то имеет опыт в этом деле. Получится запустить на ADC на 12 MHz с выборкой 7,5сс?

Сообщение отредактировал seniorandre - Apr 24 2016, 19:01
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Apr 24 2016, 18:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



А том вроде бы есть HSI14 специально для АЦП. Не подойдёт?
Go to the top of the page
 
+Quote Post
seniorandre
сообщение Apr 24 2016, 18:19
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 6-07-12
Из: г.Нижний Новгород
Пользователь №: 72 651



Цитата(scifi @ Apr 24 2016, 21:04) *
А том вроде бы есть HSI14 специально для АЦП. Не подойдёт?

Нет тайминг нужен точный и синхронный с таймерами и DAC.
Вот подумываю для USB HSI48 задействовать и поднять тактовую ядра, либо вообще оставить ADC от 24MHz. На 24 MHz время выборки увеличилось (как доля от 2 us), а время конверсии уменьшилось, качество данных стало лучше, правда пока не понял на сколько, но вижу данные вообще не плавают. Потребление только надо на 24MHz и 12MHz сравнить.
Случайно включил ADC на 48MHz, как ни странно, но тоже работает.
Go to the top of the page
 
+Quote Post
amiller
сообщение Apr 26 2016, 04:10
Сообщение #4


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(seniorandre @ Apr 24 2016, 22:19) *
Нет тайминг нужен точный и синхронный с таймерами и DAC.
Вот подумываю для USB HSI48 задействовать и поднять тактовую ядра, либо вообще оставить ADC от 24MHz. На 24 MHz время выборки увеличилось (как доля от 2 us), а время конверсии уменьшилось, качество данных стало лучше, правда пока не понял на сколько, но вижу данные вообще не плавают. Потребление только надо на 24MHz и 12MHz сравнить.
Случайно включил ADC на 48MHz, как ни странно, но тоже работает.

Насколько я представляю, синхронизацию можно обеспечить всех узлов, в том числе АЦП и ЦАПа внешними эвентами, например от таймера, который будет тактироваться от основной частоты.
А на какой частоте при этом работает сам АЦП и когда точно появятся данные в ячейке памяти (посредством DMA), собственно неважно. Если что можно другим потоком DMA забирать из ячейки памяти и отправлять в ЦАП, например. Главное, чтобы новые данные появлялись до того момента, когда Вы их будете использовать.
Это будет более правильно, чем заставлять работать АЦП на частоте, которая выше предельной.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 05:12
Рейтинг@Mail.ru


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