|
|
  |
STM32F072 непонятный эффект с выборкой ADC |
|
|
|
Apr 24 2016, 05:48
|
Участник

Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 24 2016, 17:06
|
Участник

Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 24 2016, 18:19
|
Участник

Группа: Свой
Сообщений: 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, как ни странно, но тоже работает.
|
|
|
|
|
Apr 24 2016, 18:26
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(seniorandre @ Apr 24 2016, 21:19)  На 24 MHz время выборки увеличилось (как доля от 2 us), а время конверсии уменьшилось, качество данных стало лучше, правда пока не понял на сколько, но вижу данные вообще не плавают. Потребление только надо на 24MHz и 12MHz сравнить. Случайно включил ADC на 48MHz, как ни странно, но тоже работает. Есть некий риск, конечно. Кто знает, что внутри у этого АЦП? В диапазоне температур и напряжений питания может что-то вылезти. А может и не вылезти...
|
|
|
|
|
Apr 24 2016, 18:34
|
Участник

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

|
Цитата(scifi @ Apr 24 2016, 21:26)  Есть некий риск, конечно. Кто знает, что внутри у этого АЦП? Проект собственно не коммерческий, поэтому можно и вылезти за пределы ТТХ. У меня такое ощущение, что у буржуев старого оборудования и технологий нет, вот им и приходится старые чипы на новых технологиях выпускать. А параметры приходится занижать что бы линейку поддерживать. Маркетинг блин... Это косвенно подтверждается тем что ядро народ на 3-х кратной частоте запускает, а оно все работает. Должен быть и от маркетинга хоть какой-то выхлоп для нас  ST в CubeMx не дают тактовую поднять, а через регистры что хошь делай.
Сообщение отредактировал seniorandre - Apr 24 2016, 18:36
|
|
|
|
|
Apr 25 2016, 20:03
|
Знающий
   
Группа: Участник
Сообщений: 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 на канал? Чет быстро...
|
|
|
|
|
Apr 26 2016, 03:21
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(seniorandre @ Apr 25 2016, 00:34)  поддерживать. Маркетинг блин... Это косвенно подтверждается тем что ядро народ на 3-х кратной частоте запускает, а оно все работает. А Вы хоть раз испытания в камере тепла и холода делали? Или хотя-бы видели её? А если ещё скомбинировать такие испытания с крайними значениями питания? А ПО нагруженное писали? Так чтобы одновременно работала куча периферии и тяжёлые вычисления? А испытания на устойчивость к нано- и микросекундным помехам делали? Вот и тот народ этого ничего не умеет и не видели даже, так как радиолюбители. Ну работает 5 сек в данных определённых условиях у них на столе. Ну и что? А через 5 минут или при другой температуре или влажности или чуть другом напряжении или... - уже глючит.
|
|
|
|
|
Apr 26 2016, 04:10
|
Частый гость
 
Группа: Участник
Сообщений: 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 забирать из ячейки памяти и отправлять в ЦАП, например. Главное, чтобы новые данные появлялись до того момента, когда Вы их будете использовать. Это будет более правильно, чем заставлять работать АЦП на частоте, которая выше предельной.
|
|
|
|
|
Apr 26 2016, 14:44
|
Участник

Группа: Свой
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|