|
|
  |
STM32F3-Discovery, не работает ADC1, на максимальной тактовой частоте |
|
|
|
Mar 18 2014, 10:53
|

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

|
На DAC Ch1 вывожу аппаратно созданный треугольник. Соединил выход DAC Ch1 (PA4) со входом ADC1_IN3 (PA2) перемычкой. Результат АЦП вывожу на DAC Ch2 (PA5), задействованы DMA1, прерывание от него, флаг, потом программно записываю из массива в DAС... Не могу добиться нормальной работы ADC1, пока не задам тактовую частоту меньше 72 MHz. Более-менее нормально работает при тактах 18 MHz. При 36 MHz "ломает" сигнал, а при 72 MHz - вообще, сплошной шум, преимущественно выше входного сигнала. Считаю это аппаратной ошибкой STM32F303VC, Rev Y.
Есть в datasheet упоминание про каналы PA2 и др., табл. 67, что они не совсем fast. Это не то.
upd. ADC2 ведет себя так же плохо! Видимо, где-то я просчитался. Странно, что в двухканальном режиме (interlive) второй АЦП работал нормально. Потому и возникло подозрение насчет первого.
Errata смотрел, делал DMA раздельными, не помогло.
|
|
|
|
|
Mar 18 2014, 15:04
|

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

|
Цитата(kolobok0 @ Mar 18 2014, 15:24)  оно? превышение частоты Нет, у меня задана частота PLL 72 MHz, она же и на АЦП идет. Что установлено именно 72 MHz, видел по многим сигналам - MCO, выход с DAC. Здесь всё точно. Цитата(Golikov A. @ Mar 18 2014, 16:06)  и оно же вы же участвовали в той дискуссии? Или вы пропустили момент где ТС сказал что частоту загнал потому АЦП и не работало? Про частоту уже сказал. Про выходное сопротивление источника - ЦАП - посмотрю еще раз, но пока не похоже: • Задавал разную длительность выборки, при тактовой АЦП 72 МГц - удовлетворительно не получалось - шум, пики на весь размах питания. • Задал тактовую АЦП 36 МГц - выходной сигнал (фрагмент треугольника после ADC->DMA->CPU->DAC) стал кривеньким, и по амплитуде меньше входного. • Задал тактовую АЦП 18 MHz - выходной сигнал - какой и должен быть (надо посмотреть при минимальной длительности выборки) • Входной треугольник (с ЦАП) не менялся, и выбросов на нем я не наблюдал (взгляну еще раз), независимо от частоты АЦП. • Когда отключил буфер в ЦАП, напряжение треугольника заметно уменьшалось во время работы АЦП, процентов на 10. Но форма его не менялась, и выходной сигнал соответствовал входному.
|
|
|
|
|
Mar 19 2014, 05:33
|

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

|
Несколько снимков с осциллографа. Для тактовой частоты АЦП 72 МГц, и разного времени выборки в тактах. Желтый сигнал - входной для АЦП1, треугольник со встроенного ЦАП1, буфер включен. Когда на нем "шум" - это время работы АЦП, накапливается массив. После этого - вывод. Зеленый сигнал - выходной, программный вывод массива на ЦАП2. 181.5 такта
фрагмент
19.5 такта
фрагмент
7.5 такта
фрагмент
Если же задать тактовую частоту 18 MHz, АЦП работает без нареканий, даже при выборке 1.5 такта. Чудо?
|
|
|
|
|
Mar 19 2014, 09:06
|

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

|
"Все чудесатее и чудесатее". После заполнения массива DMA выдает запрос прерывания. В прерывании устанавливаю флаг FrameReady. В основном цикле проверяю этот флаг, и если он есть, останавливаю АЦП командой ADC1->CR = ADC_CR_ADSTP; Дальше переписываю массив в DAC. Когда закомментировал ADC1->CR = ADC_CR_ADSTP; все стало нормально работать. Не пойму, АЦП у меня останавливается или нет.  upd. Видимо, все же, останавливается. Потому, что без ADC1->CR |= ADC_CR_ADSTART; в основном цикле новый кадр не собирается. Как? Нигде его не торможу!
|
|
|
|
|
Apr 1 2014, 06:28
|

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

|
Доложу, чего достиг. На АЦП подаю тактовую частоту 72 МГц, запускаю по событию переполнения от таймера 2. Результаты преобразования записываются в массив через ПДП. В одноканальном режиме - работает согласно документации. В двухканальном interleave режиме - при разрешении 12 битов, только до частоты 4 МВыб/с (х 2 для двух каналов), вернее, до 72 / 17 = 4,23... если не нужна "круглая" частота. Независимо от ПДП совместного, или поодиночке для каждого АЦП, как предлагается в STM32F303xx silicon limitations. Уменьшая разрядность до 6 битов, получил частоту 6 МВыб/с (х 2). На более высоких частотах ПДП не успевает перебрасывать слова. Прихожу к выводу, что пользы от двухканального режима меньше, чем хотелось бы. В одноканальном могу иметь 4,8 МВыб/с, вплоть до 72 / 14 = 5,14... Для 6 битов - до 9 МВыб/с. DELAY, определяющая сдвиг между запусками АЦП1 и АЦП2, позволяет задать его ровно в середине времени запуска АЦП1 только для двух частот дискретизации, 4,8 МВыб/с и 8 МВыб/с. Первая частота невозможна для 12 битов, а вторая - вообще. В остальных случаях сдвиг будет отличаться на полтакта 72 МГц.
Буду ждать ревизии...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|