4923 subscribers

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

544 full reads
1,3k story viewsUnique page visitors
544 read the story to the endThat's 39% of the total page views
2,5 minutes — average reading time

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

Микроконтроллеры для начинающих. Часть 3. Процессор микроконтроллера. Тактирование и синхронизация.

Микроконтроллеры для начинающих. Часть 18. Еще раз о циклах, тактах, конвейерах и о том, "что у куколки внутри".

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

Не смотря на кажущееся разнообразие подходов и решений, в микроконтроллерах разных производителей, общего гораздо больше. И это я сегодня постараюсь показать. И даже не буду делить описание на статьи по разным моделям микроконтроллеров.

Генерация тактовой частоты

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

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

Когда высокая точность и стабильность тактовой частоты не требуется, а такое бывает достаточно часто, могут использоваться внутренние частотозадающие цепи. При этом совершенно не важно, используются ли в этом случае те же схемы, что и для внешних цепей, или это отдельные модули. Для полностью внутренних генераторов, как правило, предусматривается возможность некоторой подстройки генерируемой частоты.

Генераторы с внешними резонаторами

В целом, тут абсолютно стандартная схема подключения внешнего резонатора. Вот фрагмент из документации для PIC. Просто по той причине, что он наиболее наглядный

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Для других микроконтроллеров (и STM8, и AVR) все точно так же. Только резистор RS на схемах присутствует далеко не всегда. Его функция - ограничение тока через маломощные кварцевые резонаторы (срезы AT). При этом данный резистор может потребоваться. Microchip советует обращаться к документации производителя резонаторов. Для керамических резонаторов может потребоваться и резистор параллельный резонатору. В реальности мне никогда не приходилось использовать ни последовательный, ни параллельный резисторы. При этом в AVR просто есть бит конфигурации позволяющий выбрать работу с маломощным кристаллом.

Выводы подключения резонатора могут иметь разные имена. Так в AVR они обозначаются XTAL1 и XTAL2 (TOSC1 и TOSC2). А в STM8 OSCIN и OSCOUT. Суть от этого не меняется.

Но резонаторы тоже бывают разные. Поэтому предусматривается несколько режимов работы генератора. И задается это битами конфигурации, как бы они не назывались в разных микроконтроллерах. Вот пример использования бит конфигурации (Fuse) для маломощного резонатора в AVR

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Здесь указан не только примерный частотный диапазон резонатора, но и рекомендуемые емкости конденсаторов. Для резонаторов допускающих большую амплитуду сигнала есть своя таблица.

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Легко заметить, что CKSEL3 как раз и определяет допустимую мощность резонатора.

А вот пример выбора емкости конденсаторов и режима работы для PIC

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

При этом собственно выбор режима работы производится немного по иному, но тоже через биты конфигурации

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Видно, что в целом все очень похоже на AVR.

А вот для STM8 все проще. Генератор этих микроконтроллеров может работать с резонаторами от 1МГц до 16 МГц. При этом дополнительных настроек не требуется. Но и структура генератора в STM8 несколько сложнее

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Обратите внимание на элемент схемы "Consumtion control", который и обеспечивает такую гибкость. При этом и к резонатору предъявляются некоторые требования.

Специализированные генераторы с внешними резонаторами

В микроконтроллерах может быть более одного генератора допускающего подключение внешних резонаторов. В таких случаях генераторы не являются равнозначными. Например, в PIC второй генератор ориентирован на работу с резонаторами на частоту 32768 Гц (часовые кварцы). Аналогично и в AVR. Возможности настройки дополнительных генераторов ограничены. В остальном никаких особенностей они не имеют.

Генераторы с внешними RC цепочками

Такой вариант есть не во всех микроконтроллерах. Причем иногда это единственный вариант генератора без использования кварцевого резонатора, так как внутренней RC цепочки может не быть. Здесь особых комментариев не требуется

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

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

Внутренние генераторы с внутренними частотозадающими цепями

Такой генератор не требует внешних элементов, что позволяет экономить выводы микроконтроллера. При этом стабильность частоты более низкая. Да и выбор часты обычно сильно ограничен. Внутренних генераторов может не быть вообще, а может быть и несколько (высокочастотный и низкочастотный).

Как правило, высокочастотный генератор имеет специальный регистр, который позволяет подстраивать частоту в некоторых пределах. При этом такие генераторы могут быть и калиброванными.

Подстройка частоты генератора в микроконтроллерах AVR осуществляется через регистр OSCCAL. Точно так же называется регистр подстройки во многих PIC. Но в более современных PIC этот регистр называется OSCTUNE. Впрочем, смысл от этого не меняется. В STM8 регистр подстройки называется CLK_HSITRIMR, но его применение точно такое же.

Кроме точной подстройки частоты может иметься и возможность ее переключения. Переключение, например, задается битами конфигурации CKSEL в ATtiny. В некоторых PIC частоту генератора можно менять во время работы, через регистр OSCFRQ или OSCCON.

Система распределения тактового сигнала

Сгенерированный тактовый сигнал надо доставить до различных модулей микроконтроллера, включая процессор. Причем наличие различных источников сигнала (генераторов) подразумевает и возможность переключения между ними.

Системы распределения тактового сигнала различных микроконтроллеров тоже имеют очень много общего. Я уже приводил иллюстрацию для ATmega, но повторю ее

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

На этой иллюстрации, внизу, показаны возможные источники тактового сигнала. И мы уже все их знаем. Это внешний тактовый генератор External Clock, внутренний генератор с внешним резонатором Crystall Oscillator, Дополнительный генератор с низкочастотным внешним резонатором Low-frequency Crystall Oscillator, внутренний калиброванный RC генератор Calibrated RC Oscillator.

Выбор конкретного источника сигнала в качестве основного осуществляет мультиплексор. А управляют выбором источника биты конфигурации CKSEL3-CKSEL0, которые мы уже встречали сегодня, и которые встречали в статье "Микроконтроллеры для начинающих. Часть 41. Конфигурация AVR (Fuses, Lock Bits, и другие)"

А теперь тоже самое, но для PIC

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Сходство очень наглядное. Только здесь источники сигнала показаны в левой части. Здесь выбор источника тоже осуществляется мультиплексором, только его можно переключать во время работы через регистр OSCCON2 (биты COSC располагаются в нем). А вот начальное состояние этих бит задается в конфигурации битами RSTOSC. Режим работы генератора с внешним резонатором задается битами FEXTOSC конфигурации.

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

А вот как все это выглядит в STM8

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

И опять все очень похоже. Выбор источника тактового сигнала осуществляет мультиплексор Master Clock Switch. Пусть вас не вводит в заблуждение, что он управляется битами CKM. Это биты регистра статуса CLK_CMSR. Переключение осуществляется битами SWI регистра CLK_SWR.

Микроконтроллеры очень разные, а модули тактирования у них очень похожи. И это сильно облегчает нам жизнь. Я понимаю, что эти слова вы воспринимаете с иронией. Мол, какое же облегчение, если управление этими похожими системами везде разное. Но разобравшись один раз с принципом работы, в каком либо микроконтроллере, вы сможете гораздо быстрее освоить и совсем другой микроконтроллер.

Делители частоты

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

Для AVR такой делитель можно найти под названием System Clock Prescalerю Для PIC он делитель называется Postscaler Divider. Для STM8 делитель просто показан после мультиплексора (управляется битами CPUDIV). Для STM8, кроме того, есть делитель для внутреннего высокочастотного RC генератора (HSI). А для PIC (некоторых PIC), есть PLL умножитель частоты внешнего тактового сигнала.

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

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

Распределение тактового сигнала

После делителя тактовый сигнал распределяется по различным модулям микроконтроллера. При этом для STM8 делитель влияет только на частоту процессора.

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

Мониторинг тактовой частоты

Когда микроконтроллер работает от внешнего тактового генератора или использует внешний кварцевый резонатор существует потенциальная опасность пропажи тактового сигнала. Для ответственных применений остановка работы может быть недопустимой, поэтому нужно иметь возможность как то продолжать работу в такой аварийной ситуации.

Для этого в некоторых микроконтроллерах имеется встроенный модуль мониторинга тактовой частоты для источников связанных с внешним миром - Fail-Safe Clock Monitor или Clock security system. При обнаружении проблем с тактированием этот модуль автоматически переключает микроконтроллер на работу от внутреннего генератора.

Микроконтроллеры для начинающих. Часть 44. Тактовые генераторы

Это иллюстрация для PIC, но в STM8 все устроено примерно так же. Переключение на внутренний генератор далеко не всегда является отличным выходом из положения, но позволяет сохранить выполнение критичных функций и включить индикацию аварийной ситуации.

Вывод тактовой частоты

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

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

Заключение

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

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

До новых встреч!