seniorandre 0 24 апреля, 2016 Опубликовано 24 апреля, 2016 (изменено) · Жалоба Имею 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сс? Изменено 24 апреля, 2016 пользователем seniorandre Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба Возможно, пересылка по DMA тоже тактов требует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба trigger start latency 2.625 ADC clock cycles Откуда такое странное дробное число? Надо думать, преобразование может начаться только синхронно с тактированием АЦП, то есть в реальности будет переменное целое число (3-4?). Кроме того, загляните в даташит и посмотрите на такую штуку, как "ADC_DR register ready latency". Боюсь, будете неприятно удивлены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aner 1 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба Да, третий битик задействовали, не как у старших STM. Да и с измерениями внутренней темп., напряжения по другому теперь с ADC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
seniorandre 0 24 апреля, 2016 Опубликовано 24 апреля, 2016 (изменено) · Жалоба Откуда такое странное дробное число? Table 41. Latency between trigger and start of conversion. Но даже если было бы 3 такта, то все равно вроде как должно было поместиться. Кроме того, загляните в даташит и посмотрите на такую штуку, как "ADC_DR register ready latency". А причем тут ADC_DR register ready latency, это забота DMA забрать результат по готовности из ADC_DR Да, третий битик задействовали, не как у старших STM. Да и с измерениями внутренней темп., напряжения по другому теперь с ADC. Извиняюсь, но ни чего не понял. Возможно, пересылка по DMA тоже тактов требует. Пересылка по DMA вроде бы параллельно идет, только шину занимает. Попробовал ADC1->CFGR1 |= ADC_CFGR1_OVRMOD; Не помогло. Понятно что самым простым решением было бы поднять немного тактовую частоту ядра, но у данного камня есть USB, который тактируется именно от 48MHz, ни на HSI же переходить для USB. Изменено 24 апреля, 2016 пользователем seniorandre Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба А том вроде бы есть HSI14 специально для АЦП. Не подойдёт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
seniorandre 0 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба А том вроде бы есть HSI14 специально для АЦП. Не подойдёт? Нет тайминг нужен точный и синхронный с таймерами и DAC. Вот подумываю для USB HSI48 задействовать и поднять тактовую ядра, либо вообще оставить ADC от 24MHz. На 24 MHz время выборки увеличилось (как доля от 2 us), а время конверсии уменьшилось, качество данных стало лучше, правда пока не понял на сколько, но вижу данные вообще не плавают. Потребление только надо на 24MHz и 12MHz сравнить. Случайно включил ADC на 48MHz, как ни странно, но тоже работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба На 24 MHz время выборки увеличилось (как доля от 2 us), а время конверсии уменьшилось, качество данных стало лучше, правда пока не понял на сколько, но вижу данные вообще не плавают. Потребление только надо на 24MHz и 12MHz сравнить. Случайно включил ADC на 48MHz, как ни странно, но тоже работает. Есть некий риск, конечно. Кто знает, что внутри у этого АЦП? В диапазоне температур и напряжений питания может что-то вылезти. А может и не вылезти... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
seniorandre 0 24 апреля, 2016 Опубликовано 24 апреля, 2016 (изменено) · Жалоба Есть некий риск, конечно. Кто знает, что внутри у этого АЦП? Проект собственно не коммерческий, поэтому можно и вылезти за пределы ТТХ. У меня такое ощущение, что у буржуев старого оборудования и технологий нет, вот им и приходится старые чипы на новых технологиях выпускать. А параметры приходится занижать что бы линейку поддерживать. Маркетинг блин... Это косвенно подтверждается тем что ядро народ на 3-х кратной частоте запускает, а оно все работает. Должен быть и от маркетинга хоть какой-то выхлоп для нас :) ST в CubeMx не дают тактовую поднять, а через регистры что хошь делай. Изменено 24 апреля, 2016 пользователем seniorandre Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 24 апреля, 2016 Опубликовано 24 апреля, 2016 · Жалоба Проект собственно не коммерческий, поэтому можно и вылезти за пределы ТТХ. А, ну тогда конечно! Они в CubeMx не дают тактовую поднять, а через регистры что хошь делай. За кубмх могут пару индусов-говнокодеров расстрелять, так что там всё понятно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 25 апреля, 2016 Опубликовано 25 апреля, 2016 · Жалоба Имею ADC, запуск выборки идет от триггера с периодом 2us, ADC тактируется от APBCLK = 48 MHz с делением на 2 или 4, данные забираются через DMA. Период запуска конверсии 2us, проверял осциллографом, все ок, 2us в наличии. А что, ADC тянет 500ksps? По тексту вроде даже два канала, то есть, 1Msps на канал? Чет быстро... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 апреля, 2016 Опубликовано 26 апреля, 2016 · Жалоба поддерживать. Маркетинг блин... Это косвенно подтверждается тем что ядро народ на 3-х кратной частоте запускает, а оно все работает. А Вы хоть раз испытания в камере тепла и холода делали? Или хотя-бы видели её? А если ещё скомбинировать такие испытания с крайними значениями питания? А ПО нагруженное писали? Так чтобы одновременно работала куча периферии и тяжёлые вычисления? А испытания на устойчивость к нано- и микросекундным помехам делали? Вот и тот народ этого ничего не умеет и не видели даже, так как радиолюбители. Ну работает 5 сек в данных определённых условиях у них на столе. Ну и что? А через 5 минут или при другой температуре или влажности или чуть другом напряжении или... - уже глючит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 26 апреля, 2016 Опубликовано 26 апреля, 2016 · Жалоба Нет тайминг нужен точный и синхронный с таймерами и DAC. Вот подумываю для USB HSI48 задействовать и поднять тактовую ядра, либо вообще оставить ADC от 24MHz. На 24 MHz время выборки увеличилось (как доля от 2 us), а время конверсии уменьшилось, качество данных стало лучше, правда пока не понял на сколько, но вижу данные вообще не плавают. Потребление только надо на 24MHz и 12MHz сравнить. Случайно включил ADC на 48MHz, как ни странно, но тоже работает. Насколько я представляю, синхронизацию можно обеспечить всех узлов, в том числе АЦП и ЦАПа внешними эвентами, например от таймера, который будет тактироваться от основной частоты. А на какой частоте при этом работает сам АЦП и когда точно появятся данные в ячейке памяти (посредством DMA), собственно неважно. Если что можно другим потоком DMA забирать из ячейки памяти и отправлять в ЦАП, например. Главное, чтобы новые данные появлялись до того момента, когда Вы их будете использовать. Это будет более правильно, чем заставлять работать АЦП на частоте, которая выше предельной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
seniorandre 0 26 апреля, 2016 Опубликовано 26 апреля, 2016 (изменено) · Жалоба А что, ADC тянет 500ksps? По тексту вроде даже два канала, то есть, 1Msps на канал? Чет быстро... Мало того что тянет 500ksps, так еще и в реалтайме ДПФ для одной частоты вычисляет, после обсчета 10 000 семплов одного канала, обсчитываем следующий. Все запускается синхронно по таймерам. Синус естественного для ДПФ и ЦАП уже подготовлен в буфере. А Вы хоть раз испытания в камере тепла и холода делали? Или хотя-бы видели её? Не видел. А ПО нагруженное писали? Так чтобы одновременно работала куча периферии и тяжёлые вычисления? Пытаюсь А испытания на устойчивость к нано- и микросекундным помехам делали? Для данного проекта не вижу необходимости. Вот хочется спросить... А вы что-то по существу вопроса добавить можете? Или только подковырнуть хотите? Изменено 26 апреля, 2016 пользователем seniorandre Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 1 мая, 2016 Опубликовано 1 мая, 2016 · Жалоба Вот хочется спросить... А вы что-то по существу вопроса добавить можете? Или только подковырнуть хотите? По существу я уже добавил. Если не поняли, то: если "вылезаете за пределы ТТХ", гарантировать ничего уже нельзя. Железо может как работать так и нет - как повезёт - в зависимости от фазы луны. То, что там где-то у кого-то что-то заработало, не означает что заработает в другой раз и при немного других условиях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться