Перейти к содержанию
    

Ткните носом, как задать частоту для 10-битного АЦП в LPC4337

Добрый день! Что-то я затупил. Как целочисленными делителями получить частоту 4.5 МГц для тактирования АЦП? Это получается, что надо всю частоту шины делать дробной? Или есть какое-то очевидное решение, которого я в мануале на 1.5 тысячи страниц не могу разглядеть? У меня внешний генератор на XTAL1 заведён 12 МГц, после ФАПЧ я получаю максимальные 204 МГц, которые и использую для тактирования. Но с АЦП нужно получить 200 киловыборок в секунду по двум каналам, запущенных в пакетном режиме. Понимаю, что можно использовать два АЦП в параллель, но всё-таки... может быть чего-то не учёл. Всем спасибо!

image.thumb.png.116efd4c8bcadaf9f59ce99336ff30a3.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делитель частоты достаточно гибко настраивается в Control Register, CLKDIV.
image.thumb.png.08b26f9e5d2f1b6b46167fc4858f4daa.png

 

Тем более, для 200 кило выборок и выше необходимая минимальная частота ~2.3MHz

Изменено пользователем moon333

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, moon333 сказал:

Делитель частоты достаточно гибко настраивается в Control Register, CLKDIV.

Он целочисленный. И как получить 4.5 МГц?

4 часа назад, moon333 сказал:

Тем более, для 200 кило выборок и выше необходимая минимальная частота ~2.3MHz

Я написал в исходном сообщении о двух каналах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, MrBearManul сказал:

И как получить 4.5 МГц?

4.46 МГц не устроят? Почему надо ровно 4.5?

Если есть какой-то жестокий принцип выбора именно 4.5, платите за это выбором частоты кварца (к примеру).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или от основной PLL получить частоту нацело (кратно 9МГц), но не максимальную (198МГц, -6МГц, зуб даю (соседский), роли не сыграют), или от PLLAUDIO уже точно затактировать APB на которой этот АЦП. PLLUSB, подозреваю, святое - только по назначению. ;-)

PS: проца нет - беглый, но незамыленный взгляд в UM ;-)

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, V_G сказал:

4.46 МГц не устроят? Почему надо ровно 4.5?

Я хочу, чтобы АЦП работало на максимальной документированной частоте. Дело в том, что я столкнулся с некоторым, пока не совсем понятным для себя моментом. Сначала опишу задачу. Мне необходимо на частоте 160 кГц получать оцифрованное 10-битное значение по двум каналам ADC0_0 и ADC0_1. Для этого я запустил TIMER2, который через регистр сравнения MR0 инвертирует внутренний сигнал EM0 с частотой 640 кГц. Таким образом, АЦП запускается по положительному фронту на частоте 320 кГц (это настроено через GIMA). Ну и, следовательно, каждый канал сэмплирует на частоте 160 кГц. Сейчас АЦП тактируется сигналом 4 МГц. Согласно мануалу 10-битное преобразование занимает 11 тактов, т.е. 11 / 4e6 = 2.75 мкс. Два канала будут сэмплировать за 5.5 мкс. Период запуска двух каналов 1 / 160e3 = 6.25 мкс. Т.е. "зазор" составляет 6.25 - 5.5 = 750 нс. Но, возникает ощущение, что АЦП не успевает оцифровать два канала. Во-первых, в регистре данных любого канала выставляются флаги OVERRUN, т.е. данные были перезаписаны до считывания. Во-вторых, данные "битые", т.е. содержат то мусор, то правильные значениея. Если понизить частоту сигнала EM0 по сравнению таймера хотя бы до 620 кГц, т.е. на конвертацию двух каналов мы даём 6.45 мкс, то уже все данные корректны. Можно предположить, что в документации не отразали время, необходимое для переключения между каналами или на какие-либо ещё технологические операции. Но это догадки. Я ничего не утверждаю. Далее нюнас. Если отключить АЦП от запуска по таймеру, а запустить ему пакетный режим (Burst), то все данные верны! При этом частота сканирования составит 4 МГц / 11 (количество циклов преобразования для 10 бит) / 2 (количество каналов) = 180 кГц. Такое ощущение, что именно запуск по таймеру вносит какие-то задержки. Я пока не могу понять какие. Поэтому хочу запустить АЦП на максимальной частоте в надежде, что запуск по таймеру приведёт к корректному сэмплированию...

4 часа назад, Obam сказал:

но не максимальную (198МГц,

Скорее всего так и придётся поступить. Просто смутило то, что частота АЦП дробная. Я и подумал, что они что-то предусмотрели, что я просмотрел.

4 часа назад, Obam сказал:

от PLLAUDIO уже точно затактировать APB на которой этот АЦП.

Погляжу и этот вариант. Да уж. Забавно, чтобы запустить АЦП, нужно нехитро так извратиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, и еще. Сколько в вашем проце АЦП? Если 2 штуки, запускайте их параллельно (если для оцифровки двух сигналов) или попеременно (для одного сигнала): все это ARMoвские АЦП допускают. Получите фактически удвоенную частоту

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@MrBearManul, есть несколько вопросов.

А частоту сигнала EM0 можно как-нибудь проверить осциллографом? Чисто для успокоения души. Не думаю, что между переключением каналов проходит какое-то существенное время. Пакетный режим это доказывает. Кстати, Вы посчитали зазор 750нс. Зазор между чем? Между окончанием преобразования первого канала и началом второго? Ну так это, вроде, не совсем так: расстояние между последовательными запусками АЦП составит 1/320кГц = 3.125мкс. Время преобразования АЦП, как Вы посчитали, 2.75мкс. Между окончанием преобразования первого канала и началом второго - 3.125 - 2.75 = 375нс. Но это все равно не влияет на наши предположения. Далее, как Вы утверждаете, в каналах устанавливается флаг OVERRUN. Устанавливается он тогда, когда готов результат следующего преобразования, а результат предыдущего считан не был. И это (вроде как) только в пакетном режиме, т.е. в программно- или аппаратно-запускаемом преобразовании, судя по описанию этого флага в регистрах статуса, он устанавливаться не будет (но тут я хз). И еще вопрос - домен синхронизации АЦП у Вас 4МГц. А домен синхронизации таймера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 минут назад, Arlleex сказал:

А частоту сигнала EM0 можно как-нибудь проверить осциллографом?

Его можно вывести на ножку. Но я проверюя косвенно: по прерыванию от ПДП. В нём дёргаю ножку. Ведь у меня цепь: таймер->АЦП->ПДП.

37 минут назад, Arlleex сказал:

Не думаю, что между переключением каналов проходит какое-то существенное время. Пакетный режим это доказывает.

И я так не думаю, но что-то влияет. Пока не могу выяснить - что именно.

37 минут назад, Arlleex сказал:

Зазор между чем?

Между окончанием преобразования двух каналов и допустимым началом следующего преобразования. Вернее, конечно, не зазор. А запас по времени. Неточный термин употребил.

38 минут назад, Arlleex сказал:

375нс.

Это для одного канала. Я просто сразу для двух считал.

39 минут назад, Arlleex сказал:

И это (вроде как) только в пакетном режиме,

Нет, у меня он устанавливался и по запуску от таймера. В пакетном он был в нуле. Да, я тоже заметил двузначность документации))) Но, полагаю, логика установки этого флажка у них одинаковая. Но это мои догадки.

40 минут назад, Arlleex сказал:

И еще вопрос - домен синхронизации АЦП у Вас 4МГц. А домен синхронизации таймера?

А вот и главный вопрос) У меня АЦП тактировалось от домена 12 МГц (IRC, внутренний RC-генератор). Спасибо @Obam, т.к. он обратил на это внимание. Я переключил шину BASE_APB3_CLK на PLL0, от которого запитан весь остальной микроконтроллер, и задержки доступа к АЦП резко уменьшились. Но я плохо понимаю, как происходит синхронизация между разными доменами. Если вы владеете информацией или ссылкой на какую-либо доку, я буду вам очень признателен!:blum:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

50 минут назад, MrBearManul сказал:

Его можно вывести на ножку. Но я проверю косвенно: по прерыванию от ПДП. В нём дёргаю ножку...

Скажем так - я бы не стал так делать, так как при измерениях временнЫх параметров в сотни нс любой джиттер может испортить реальную картину. А джиттер будет: как минимум, за тапки шину будут бороться CPU и DMA; прерывания своей задержкой (а еще если и вложенные есть и разрешены) тоже могут подгадить и измерения будут некорректными. Факторов много, на самом деле. Только аппаратный вывод таймера покажет реальное положение дел.

50 минут назад, MrBearManul сказал:

Между окончанием преобразования двух каналов и допустимым началом следующего преобразования.

Да, но это ключевой момент: АЦП один, и он должен завершить предыдущее преобразование перед началом следующего. Не важно сколько каналов. Важно сколько времени проходит между окончанием предыдущего преобразования и началом следующего (или, сформулировав по-другому: времени между последовательными запусками АЦП от таймера должно хватать с запасом в отношении времени самого преобразования). У Вас этот запас 375нс. Считаю, вполне достаточно.

50 минут назад, MrBearManul сказал:

Но я плохо понимаю, как происходит синхронизация между разными доменами...

Честно говоря, я не разбирался в устройстве системы синхронизации этой LPC-шки. Полагаю, она там довольно разветвленная.
Вообще, идеально, когда вся система работает когерентно: от одного источника синхронизации. Физического. Его дальнейшее деление/умножение не приведет к потере когерентности. Ну а вот для того, чтобы сочленить два домена синхронизации, на их пересечении ставят синхронизаторы (последовательно 2 D-триггера), которые исключают метастабильность входных цепей приемного домена. Поискать про синхронизацию доменов можно по ключевым словам "метастабильное состояние". Ошибки при тактировании АЦП от внутреннего IRC вполне можно списать на неточность этого IRC (соответственно, время конверсии могло быть больше 2.75мкс при IRC < 12МГц).

50 минут назад, MrBearManul сказал:

Я переключил шину BASE_APB3_CLK на PLL0, ..., и задержки доступа к АЦП резко уменьшились...

А ошибки уменьшились или исчезли вовсе? Странно, ведь 4МГц-домен АЦП с лихвой перекрывает максимальную частоту в 320кГц таймера, там должно все успевать перезащелкнуться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забавно, чтобы запустить АЦП, нужно нехитро так извратиться.


Извращаться - это когда свободы манёвра нет, а тут красотища - что угодно от чего хочешь тактируется (табл.119). Практически...

Если вы владеете информацией или ссылкой на какую-либо доку, я буду вам очень признателен!


"Я тебэ сечас адын умный вещ скажу - толко ти нэ абижайса" - больше чем у NXP на странице этого проца ни "доков", ни "аппнотов" нигде не будет. Наверняка там есть AN про АЦП.

У меня АЦП тактировалось от домена 12 МГц (IRC, внутренний RC-генератор).


Не придирки ради, но истины для - "тактировался"; ну и в стартовом сообщении этого сказано не было ---> IRC само-собой не поделить нацело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 часов назад, Arlleex сказал:

так как при измерениях временнЫх параметров в сотни нс любой джиттер может испортить реальную картину.

Но оценить частоту вполне можно и с джиттером. Тем более она математически 100% подтверждается расчётами значений в регистрах таймера.

16 часов назад, Arlleex сказал:

этого IRC (соответственно, время конверсии могло быть больше 2.75мкс при IRC < 12МГц).

Скорее всего вы правы.

16 часов назад, Arlleex сказал:

А ошибки уменьшились или исчезли вовсе?

Исчезли. Было снято большое количество выборок несколько раз с перезапуском платы.

5 часов назад, Obam сказал:

Наверняка там есть AN про АЦП.

У меня же вопрос уже больше не про АЦП был, а про синхронизацию различных частотных доменов.

5 часов назад, Obam сказал:

ну и в стартовом сообщении этого сказано не было ---> IRC само-собой не поделить нацело.

Да, мой косяк. Я и сам это увидел слишком поздно.

 

З.Ы. Спасибо всем огромное за участие! Сейчас всё работает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...