Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужно скорректировать частоту таймера
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Alexashka
Добрый день.
Задача такая: есть у меня платка оцифровщика, основные узлы -процессор ARM9 (at91sam9g45) и внешний АЦП. Процессор с помощью своего таймера генерирует тактовый сигнал, которым запускаются преобразования в АЦП. Частота импульсов таймера = 100,1кГц получается делением половинной частоты системного клока (133,333МГц/2) на 666 rolleyes.gif
Однако заказчику хотелось бы иметь частоту дискретизации ровно 100кГц.
Алгоритм работы с АЦП такой, таймер молотит положительные импульсы на выходной пин, который запускает АЦП, одновременно с этим генерируется прерывание, по которому я вычитываю АЦП. Что тут можно придумать, чтобы уменьшить частоту на 0,1%?
Пробовал добавить в прерывании задержку - переключал тактирование таймера на источник (133,333МГц/8), затем пару nop'ов и обратно на (133,333МГц/2) -в результате получил 100,00кГц частоту, по частотомеру - вполне устойчивую. Но потом при рассмотрении спектра синуса, записанного с АЦП увидел жуткий подъем вблизи палки синуса и отношение сигнал/(шум+гармоники) был около 40дб. Для сравнения - в спектре этого же синуса, записанного с частотой АЦП 100,1 (без коррекции частоты таймера) палка синуса четкая на фоне шума, без подъема, и отношение сигнал/(шум+гармоники) около 80дБ.
Выходит, что задержка, которую я реализовал вносит значительный джиттер?
У кого какие соображения? Как можно скорректировать частоту не добавляя джиттер в тактовый сигнал?
MrAlex
А 12МГц поделить на 120?
Alexashka
Цитата(MrAlex @ Feb 20 2013, 09:14) *
А 12МГц поделить на 120?

К сожалению MAIN CLOCK нельзя задать в качестве источника тактирования. Если только вывести его на ногу и снова завести как внешний сигнал таймера. Надо будет попробовать...
VCO
Цитата(Alexashka @ Feb 20 2013, 09:04) *
Если только вывести его на ногу и снова завести как внешний сигнал таймера. Надо будет попробовать...

Или внешней логикой...
Tanya
Цитата(Alexashka @ Feb 20 2013, 07:58) *
Частота импульсов таймера = 100,1кГц получается делением половинной частоты системного клока (133,333МГц/2) на 666 rolleyes.gif

У кого какие соображения? Как можно скорректировать частоту не добавляя джиттер в тактовый сигнал?

Поделить на 667 - будет лучше. А что такое "ровно" 100МГц?
Alexashka
Цитата(Tanya @ Feb 20 2013, 11:17) *
Поделить на 667 - будет лучше. А что такое "ровно" 100МГц?

Вообще-то кГц (килогерц).
Но помоему, Вы все прекрасно поняли sm.gif На 667 действительно лучше, в 2 раза. Но отличие в 50Гц это 5*10Е-4 - тоже много. С имеющимся кварцем я могу иметь точность 2*10Е-5

Цитата(VCO @ Feb 20 2013, 10:12) *
Или внешней логикой...

К сожалению, устройство уже собрано, поэтому думал скорректировать программно. В крайнем случае подпаять пару проводков.
maksimp
Цитата(Alexashka @ Feb 20 2013, 13:15) *
поэтому думал скорректировать программно.

Есть алгоритмы изменения частоты дискретизации. Используются например чтобы переделать звук оцифрованный с 48 кГц в оцифрованный с 44,1 кГц.
АЦП работает с частотой 100,1 кГц. И из каждых 1001 отсчётов с АЦП вычислениями получается 1000 выходных отсчётов.
Довольно сложно, но можно.
ViKo
Так системную частоту подстроить... если можно... или изменить... или сразу надо было думать. sm.gif
alexeyv
Может проще заменить системную тактовую на 120МГц и делить на 600?
demiurg_spb
Тоже над подобной задачей думаю, но у меня мега162 и кварц 7372800, а нужно получить 1 кГц тик.
Самое точное, что можно аппаратно получить - это использовать 16-ти битный CTC-таймер с делителем 1 и считать до 7372+1 получается частота 999.9728Гц.
Хочется точнее и и без джиттера...
Alexashka
Всем спасибо за идеи sm.gif
Вообщем доработка получилась несложная -кинул один провод с выхода PCK (programmable clock output, частота 12/8=1,5МГц) на тактовый вход таймера с делителем на 15. (Гыыы..пока писал сообщение понял что у меня ошибка в программе). Теперь по частотомеру стабильные 100кГц, колеблется только цифра в 8 знаке. Эту же частоту хочу завести на вход синхронизации DC/DC, чтобы избавиться от нескольких спуров, которые наблюдаются в спектре записанного сигнала. Таким образом убиваем двух зайцев.

Цитата(demiurg_spb @ Feb 21 2013, 09:28) *
Тоже над подобной задачей думаю, но у меня мега162 и кварц 7372800, а нужно получить 1 кГц тик.
Самое точное, что можно аппаратно получить - это использовать 16-ти битный CTC-таймер с делителем 1 и считать до 7372+1 получается частота 999.9728Гц.
Хочется точнее и и без джиттера...

В Вашем случае возможно удастся подстроить частоту кварца увеличив нагрузочную емкость. Нужно всего на 200Гц сдвинуть.
demiurg_spb
Цитата(Alexashka @ Feb 21 2013, 11:49) *
В Вашем случае возможно удастся подстроить частоту кварца увеличив нагрузочную емкость. Нужно всего на 200Гц сдвинуть.
Спасибо! Попробую...
Alexashka
Цитата(Alexashka @ Feb 21 2013, 11:49) *
В Вашем случае возможно удастся подстроить частоту кварца увеличив нагрузочную емкость. Нужно всего на 200Гц сдвинуть.

Оговорился, емкость нужно уменьшать. Либо последовательно с кварцем включить небольшую емкость.
А еще есть кварцевые генераторы с окошком для подстройки частоты, правда в основном они регулируются на несколько десятков ppm.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.