Могу ли я генерировать сигнал 56 кГц, если MCU работает на частоте 1 МГц?

Я новичок в проектировании встроенных систем. Я должен генерировать сигнал 56 кГц с MCU, работающим на частоте 1 МГц. Я хочу высокой точности. Если я просто использую таймер, он дает мне 55,55 кГц.

Есть ли способ разделить тактовую частоту на высокое значение и, используя это, сгенерировать сигнал 56 кГц?

Вы можете использовать умножитель частоты PLL для создания более высокочастотного сигнала для разделения, но это будет аппаратное обеспечение, которое либо должно присутствовать в вашей системе, либо добавляться к нему. Вы также можете рассмотреть более высокую частоту кварца/генератора, скажем, 8 или 16 МГц.
Вам нужно будет указать значение. Вы хотите 56 кГц, 56,0 кГц или 56,000000 кГц? Это разница. Кроме того, какой код вы пробовали с «Если я просто использую таймер»? И последнее, но не менее важное: какой MCU вы используете? И: у вас 1MIPS или, например, 0,25MIPS?
Какова точность ваших часов с частотой 1 МГц?
"Высокая точность" вообще не спец. Мы занимаемся проектированием здесь, используя реальные числа.
@CamilStaps Я использую AtxMega128D4, я не писал код, но предполагал, что если я использую внутренний таймер для генерации сигналов и дам ему счет 18, я получу 1 МГц / 18 = 55,555 кГц. И мне нужна высокая точность, т.е. 55,9999 кГц или 56,0 кГц, если это возможно.
Какой у вас источник часов? Использовать другие часы? 4,032 МГц кажется стандартным значением кристалла.
Разъяснения, запрошенные по этому вопросу, еще не были сделаны, в течение нескольких недель... Кроме того, вопрос слишком локализован . Пожалуйста, отредактируйте вопрос с деталями, указанными в комментариях выше.
ОК, приношу свои извинения администратору и всем остальным пользователям из-за своего незнания правил. Первый раз подписываюсь, так что поймите мою ошибку. Сейчас попробую ответить по схеме, созданной Andu aka. Исходя из моих скромных познаний в области электроники, ic CD4017 делит только частоту так, чтобы ic 3 X 10 равнялось 1000 (10x10x10), а значит выходная частота будет делиться на 1000, а значит это не преобразователь 1Гц . до 1000 Гц. Разберу схему подробнее и позвоню, если найду чего не знаю.

Ответы (3)

56,00 кГц — это 1 МГц/17,86. Это означает, что простой целочисленный делитель может достигать только 1 МГц / 17 = 58,82 кГц или 1 МГц / 18 = 55,56 кГц. Если вы не можете изменить тактовую частоту 1 МГц (очень медленно для обычного микроконтроллера) и можете разделить ее только на целое число, то нет, вы не можете получить 56,00 кГц.

Есть несколько вариантов:

  1. Используйте другую тактовую частоту. Найдите некоторое целое число, кратное 56,00 кГц, которое в остальном приемлемо, и используйте его. Например 7МГц/125 точно отрабатывает.

  2. Делайте дизеринг. Если вы можете принять небольшой джиттер, то вы сможете работать на любой частоте в долгосрочной перспективе. В этом случае вам придется колебаться между 17 и 18 циклами 1 МГц. Это будет сложно в большинстве микропроцессоров только потому, что не будет достаточно циклов, чтобы сделать значение следующего периода и загрузить его в аппаратный счетчик. Однако этот метод может работать с любой частотой, обеспечивающей достаточное количество циклов. Более высокая входная частота также приводит к меньшему джиттеру, поскольку джиттер всегда составляет один период входного тактового сигнала. Например, при тактовой частоте 10 МГц джиттер составляет от 178 до 179 периодов. Этого количества циклов достаточно, чтобы его можно было реализовать на большинстве микропроцессоров, хотя вам, вероятно, все же придется тщательно кодировать его и обращать внимание на отдельные инструкции.

  3. Некоторые микроконтроллеры имеют встроенные генераторы тактовых импульсов, которые эффективно реализуют аппаратный алгоритм джиттера. Некоторые из новых младших моделей PIC 16F1xxx имеют такое периферийное устройство, но я не помню его названия навскидку.

  4. Используйте внешний генератор, возможно, с множителем PLL и делителем.

Большое спасибо за предложение. Это было очень полезно. У меня только что был еще один вопрос. Микроконтроллер AtxMega128D4, который я использую, имеет встроенный PLL. Однако в руководстве сказано, что его можно использовать для генерации тактовых импульсов. Можно ли использовать PLL для генерации сигнала 56 кГц?
@user: я не знаю этого микро, но, вероятно, PLL предназначен для генерации часов для процессора. Вы, вероятно, не можете использовать его для генерации произвольных внешних часов, но я просто предполагаю. Однако, может быть, вы сможете найти настройку, которая сделает тактовую частоту процессора целочисленной, кратной желаемой частоте.

Найдите самую высокую частоту, которая делит 1000 кГц и 56 кГц [GCD (1000 кГц, 56 кГц) = 8 кГц]. Затем используйте фазовую автоподстройку (PLL) — на ум приходит cmos 4046.

PLL имеет встроенный генератор, управляемый напряжением (VCO), который можно настроить (при правильном выборе резисторов R и C) примерно на 56 кГц. Выход 56 кГц может быть разделен до 8 кГц с помощью схемы деления на 7. Вы можете использовать MCU для этого, если у него есть счетчики/таймеры, управляемые прерываниями. Если нет, то это аппаратное решение.

Теперь вам нужно получить точные 8 кГц из 1 МГц, и, вполне возможно, MCU тоже сделает это ИЛИ вам понадобится аппаратное обеспечение.

Точные 8 кГц подаются на фазовый компаратор PLL, а также на него подается разделенный вниз сигнал от VCO PLL. Выход компаратора фаз будет представлять собой переменный уровень постоянного тока, на который накладывается множество сигналов переменного тока, которые вам нужно будет отфильтровать с помощью RC-цепи.

Этот выход питает входной контакт VCO на PLL, и мы надеемся, что он должен зафиксировать выход VCO на частоте 56 кГц. Вот изображение, которое я нашел, которое показывает, как 1 Гц можно преобразовать в 1 кГц: -

введите описание изображения здесь

3 x 4017 делят номинальный выходной сигнал 1 кГц от VCO в попытке согласовать входной сигнал 1 Гц от GPS. Выход фазового компаратора PLL, фильтр и обратная связь в ГУН вскоре переводят ГУН в режим «запирания». Три числа 4017 эквивалентны упомянутому ранее делению на 7. Сигнал 1 Гц от GPS эквивалентен точным 8 кГц, полученным из тактовой частоты 1 МГц, упомянутой ранее.

Или живите с 55,55 кГц

AtxMega128D4 будет работать с внешним кристаллом от 0,4 до 16 МГц в соответствии с техническими данными (стр. 5). Он не ограничен 1 МГц.

Выберите частоту, кратную 56 кГц — например, кварцевый резонатор на 7 МГц точно 125 раз по 56 кГц. Вы должны быть в состоянии настроить свой таймер, используя это (или использовать кристалл 14 МГц и разделить на 250).

(Я только что понял, что это старый вопрос, но я думаю, что мой ответ все еще полезен для сайта.)