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

 
 
 
Reply to this topicStart new topic
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
ViKo
сообщение Apr 24 2016, 07:49
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Возможно, пересылка по DMA тоже тактов требует.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 24 2016, 08:25
Сообщение #3


Гуру
******

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



Цитата(seniorandre @ Apr 24 2016, 08:48) *
trigger start latency 2.625 ADC clock cycles

Откуда такое странное дробное число? Надо думать, преобразование может начаться только синхронно с тактированием АЦП, то есть в реальности будет переменное целое число (3-4?). Кроме того, загляните в даташит и посмотрите на такую штуку, как "ADC_DR register ready latency". Боюсь, будете неприятно удивлены.
Go to the top of the page
 
+Quote Post
Aner
сообщение Apr 24 2016, 11:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Да, третий битик задействовали, не как у старших STM. Да и с измерениями внутренней темп., напряжения по другому теперь с ADC.
Go to the top of the page
 
+Quote Post
seniorandre
сообщение Apr 24 2016, 17:06
Сообщение #5


Участник
*

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



Цитата(scifi @ Apr 24 2016, 11:25) *
Откуда такое странное дробное число?

Table 41. Latency between trigger and start of conversion. Но даже если было бы 3 такта, то все равно вроде как должно было поместиться.
Цитата(scifi @ Apr 24 2016, 11:25) *
Кроме того, загляните в даташит и посмотрите на такую штуку, как "ADC_DR register ready latency".

А причем тут ADC_DR register ready latency, это забота DMA забрать результат по готовности из ADC_DR
Цитата(Aner @ Apr 24 2016, 14:04) *
Да, третий битик задействовали, не как у старших STM. Да и с измерениями внутренней темп., напряжения по другому теперь с ADC.

Извиняюсь, но ни чего не понял.
Цитата
Возможно, пересылка по DMA тоже тактов требует.

Пересылка по DMA вроде бы параллельно идет, только шину занимает.


Попробовал
Код
ADC1->CFGR1 |= ADC_CFGR1_OVRMOD;

Не помогло.

Понятно что самым простым решением было бы поднять немного тактовую частоту ядра, но у данного камня есть USB, который тактируется именно от 48MHz, ни на HSI же переходить для USB.

Сообщение отредактировал seniorandre - Apr 24 2016, 17:22
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 24 2016, 18:04
Сообщение #6


Гуру
******

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



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


Участник
*

Группа: Свой
Сообщений: 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
scifi
сообщение Apr 24 2016, 18:26
Сообщение #8


Гуру
******

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



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

Есть некий риск, конечно. Кто знает, что внутри у этого АЦП? В диапазоне температур и напряжений питания может что-то вылезти. А может и не вылезти...
Go to the top of the page
 
+Quote Post
seniorandre
сообщение Apr 24 2016, 18:34
Сообщение #9


Участник
*

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



Цитата(scifi @ Apr 24 2016, 21:26) *
Есть некий риск, конечно. Кто знает, что внутри у этого АЦП?

Проект собственно не коммерческий, поэтому можно и вылезти за пределы ТТХ.
У меня такое ощущение, что у буржуев старого оборудования и технологий нет, вот им и приходится старые чипы на новых технологиях выпускать. А параметры приходится занижать что бы линейку поддерживать. Маркетинг блин... Это косвенно подтверждается тем что ядро народ на 3-х кратной частоте запускает, а оно все работает.
Должен быть и от маркетинга хоть какой-то выхлоп для нас sm.gif
ST в CubeMx не дают тактовую поднять, а через регистры что хошь делай.

Сообщение отредактировал seniorandre - Apr 24 2016, 18:36
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 24 2016, 18:36
Сообщение #10


Гуру
******

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



Цитата(seniorandre @ Apr 24 2016, 21:34) *
Проект собственно не коммерческий, поэтому можно и вылезти за пределы ТТХ.

А, ну тогда конечно!

Цитата(seniorandre @ Apr 24 2016, 21:34) *
Они в CubeMx не дают тактовую поднять, а через регистры что хошь делай.

За кубмх могут пару индусов-говнокодеров расстрелять, так что там всё понятно biggrin.gif
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Apr 25 2016, 20:03
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(seniorandre @ Apr 24 2016, 06:48) *
Имею ADC, запуск выборки идет от триггера с периодом 2us, ADC тактируется от APBCLK = 48 MHz с делением на 2 или 4, данные забираются через DMA. Период запуска конверсии 2us, проверял осциллографом, все ок, 2us в наличии.

А что, ADC тянет 500ksps? По тексту вроде даже два канала, то есть, 1Msps на канал? Чет быстро...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 26 2016, 03:21
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(seniorandre @ Apr 25 2016, 00:34) *
поддерживать. Маркетинг блин... Это косвенно подтверждается тем что ядро народ на 3-х кратной частоте запускает, а оно все работает.

А Вы хоть раз испытания в камере тепла и холода делали? Или хотя-бы видели её? biggrin.gif
А если ещё скомбинировать такие испытания с крайними значениями питания?
А ПО нагруженное писали? Так чтобы одновременно работала куча периферии и тяжёлые вычисления?
А испытания на устойчивость к нано- и микросекундным помехам делали?

Вот и тот народ этого ничего не умеет и не видели даже, так как радиолюбители.
Ну работает 5 сек в данных определённых условиях у них на столе. Ну и что? А через 5 минут или при другой температуре или влажности или чуть другом напряжении или... - уже глючит.
Go to the top of the page
 
+Quote Post
amiller
сообщение Apr 26 2016, 04:10
Сообщение #13


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

Группа: Участник
Сообщений: 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
seniorandre
сообщение Apr 26 2016, 14:44
Сообщение #14


Участник
*

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



Цитата(KnightIgor @ Apr 25 2016, 23:03) *
А что, ADC тянет 500ksps? По тексту вроде даже два канала, то есть, 1Msps на канал? Чет быстро...

Мало того что тянет 500ksps, так еще и в реалтайме ДПФ для одной частоты вычисляет, после обсчета 10 000 семплов одного канала, обсчитываем следующий. Все запускается синхронно по таймерам. Синус естественного для ДПФ и ЦАП уже подготовлен в буфере.

Цитата(jcxz)
А Вы хоть раз испытания в камере тепла и холода делали? Или хотя-бы видели её?

Не видел.
Цитата(jcxz)
А ПО нагруженное писали? Так чтобы одновременно работала куча периферии и тяжёлые вычисления?

Пытаюсь
Цитата(jcxz)
А испытания на устойчивость к нано- и микросекундным помехам делали?

Для данного проекта не вижу необходимости.

Вот хочется спросить... А вы что-то по существу вопроса добавить можете? Или только подковырнуть хотите?

Сообщение отредактировал seniorandre - Apr 26 2016, 14:59
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 1 2016, 06:47
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(seniorandre @ Apr 26 2016, 20:44) *
Вот хочется спросить... А вы что-то по существу вопроса добавить можете? Или только подковырнуть хотите?

По существу я уже добавил. Если не поняли, то: если "вылезаете за пределы ТТХ", гарантировать ничего уже нельзя. Железо может как работать так и нет - как повезёт - в зависимости от фазы луны. То, что там где-то у кого-то что-то заработало, не означает что заработает в другой раз и при немного других условиях.
Go to the top of the page
 
+Quote Post

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

 


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


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