Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С — страница 35 из 70

Модуль ATD в составе МК семейства HCS12 по своей архитектуре и исполняемым функциям крайне близок к рассмотренному модулю аналого-цифрового преобразования микроконтроллеров семейства 68HC12. Однако он имеет ряд отличий, которые позволили улучшить его функциональные характеристики:

• Программируемая разрядность аналого-цифрового преобразования: 8 или 10 бит;

• Несколько способов представления результата преобразования: в формате со знаком и без знака, со сдвигом кода 10-разрядного кода в старшие или младшие разряды 16-разрядного регистра результата;

• Возможность запуска измерительной последовательности от внешнего сигнала;

• Программируемое от 1 до 8 число преобразований в одной измерительной последовательности;

• В некоторых моделях МК число аналоговых входов увеличено до 16.

Далее мы кратко остановимся на каждом из этих дополнительных свойств модуля ATD в составе МК HCS12.

4.23.1. Выбор разрядности АЦП

Бит SRES8 в регистре управления ATDCTL4 (рис. 4.93) определяет число разрядов кода аналого-цифрового преобразования, которое выполняет встроенный АЦП модуля ATD. Использование 10-разрядного кода в представлении результата позволяет повысить разрешающую способность АЦП с 19,53 мВ до 4,88 мВ.

Рис. 4.93. Формат регистров модуля ATD в составе HCS12

4.23.2. Представление результата измерения

Результат аналого-цифрового преобразования модуля ATD может быть представлен в формате без знака или со знаком. Бит DSGN регистра ATDCTL5 (рис. 4.93) осуществляет выбор между представлением без знака (при DSGN = 0) или со знаком (при DSGN = 1). Код результата может размещаться со сдвигом влево, т.е. в старшие разряды 16-разрядного регистра результата (бит DJM = 0), или со сдвигом вправо, т.е. в младшие разряды регистра результата (бит DJM = 1).

4.23.3. Запуск измерительной последовательности от внешнего сигнала

Аппаратные средства модуля аналого-цифрового преобразования в составе МК HCS12 позволяют производить запуск измерительной последовательности по изменению внешнего сигнала, который подключается на вход AN7/ETRIG/PAD7 модуля. Такой режим чрезвычайно полезен для синхронизации проводимых измерений с режимами работы объекта управления. Режим внешнего запуска разрешается установкой бита ETRIGE регистра ATDCTL2 в 1. При ETRIGE = 0 реализуется обычный программный режим запуска.

Параметры внешнего сигнала запуска настраиваются посредством задания кодовой комбинации двух битов управления в регистре ATDCTL2. Бит ETRIGLE назначает запуск по уровню или по перепаду внешнего сигнала, бит ETRIGP определяет активный уровень сигнала запуска (логический 0 или 1). Формат обновленного регистра управления ATDCTL2 с перечисленными битами представлен на рис. 4.93. При ETRIGLE:ETRIGP = 00 реализуется запуск измерительной последовательности по спадающему фронту внешнего сигнала, при ETRIGLE:ETRIGP = 01 — по нарастающему фронту, при ETRIGLE:ETRIGP = 10 запуск осуществляется при низком логическом уровне внешнего сигнала, при ETRIGLE:ETRIGP = 11 — при высоком уровне сигнала.

4.23.4. Программируемое число преобразований в измерительной последовательности

Рассмотренный ранее модуль ATD в составе МК 68HC12 мог исполнять измерительные последовательности, состоящие из 4 или из 8 преобразований. В МК HCS12 число измерений в последовательности может быть любым в диапазоне от 1 до 8. Если бит MULT регистра управления ATDCTL5 установлен в 0, то все измерения в последовательности выполняются для одного канала. При этом номер канала определяют биты CC:CB:CA регистра ATDCTL5, а число измерений в последовательности – биты S8C:S4C:S2C:S1C. Например, если MULT = 0, CC:CB:CA = 010b, а S8C:S4C:S2C:S1C = 0101b, то измерительная последовательность будет состоять из 5 преобразований сигнала канала 2. Обратите внимание, что формат регистра ATDCTL5 в модуле аналого-цифрового преобразования HCS12 изменен (рис. 4.93).

Если бит MULT установлен в 1, то в измерительной последовательности будет производиться оцифровка сигналов разных каналов. При этом биты CC:CB:CA будут определять номер первого канала в последовательности, а биты S8C:S4C:S2C:S1C — число измерений в последовательности. Например, MULT = 1, CC:CB:CA = 010 b, а S8C:S4C:S2C:S1C = 011 b. Измерительная последовательность будет состоять из трех преобразований, последовательно будут измерены напряжения в каналах 2, 3, 4.

Дополнительные возможности по выборке данных из регистров результата модуля ADT HCS12 предоставляет режим FIFO (First In First Out — первым пришел, первым вышел). Если бит FIFO в регистре ATDCTL3 равен 0, то реализуется ранее рассмотренный порядок записи кодов преобразования в регистры результатов. При FIFO = 1 регистры результата образуют накопительный банк, который хранит 8 последних измерений. При каждом следующем преобразовании, результат преобразования записывается в банк, при этом первое из 8 хранящихся в банке измерений теряется.

4.23.5. Увеличение числа аналоговых входов

Увеличение числа аналоговых входов для подключения измеряемых сигналов в МК семейства HCS12 ведется не путем изменения структуры модуля ATD, который имеет 8 аналоговых входов, а путем увеличения числа модулей аналого-цифрового преобразования в составе отдельных моделей МК. Так МК MC9S12DP256B имеет в своем составе два модуля аналого-цифрового преобразования (ATD0 и ATD1).

4.23.6. Регистры модуля ATD HCS12

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

Регистр состояния ATDSTAT0

Регистр состояния ATDSTAT0 — это однобайтовый регистр. Флаг завершения измерительной последовательности SCF этого регистра устанавливается в 1, если все преобразования назначенной измерительной последовательности завершены.

Флаг SCF может быть сброшен тремя способами:

• Программной установкой бита SCF в 1 (обычный способ);

• Программным запуском новой измерительной последовательности посредством записи в регистр ATDCTL5;

• Чтением регистра результата при установленном флаге разрешения режима быстрого сброса AFFC в регистре ATDCTL2.

Регистр состояния ATDSTAT1

Регистр состояния ATDSTAT1 — также однобайтовый регистр состояния. Содержит биты CCF7…CCF0, которые устанавливаются, когда в процессе выполнения измерительной последовательности произошла запись в одноименный регистр результата.

Регистр разрешения цифрового входа порта ATDDIEN

Регистр ATDDIEN содержит восемь битов IENn (n — номер канала). Если бит IENn равен 1, то соответствующая линия порта AD работает в режиме обычной линии ввода (цифровой ввод), при IENn = 0 линия порта AD с номером n работает в режиме аналогового ввода.

4.24. Подсистема широтно-импульсной модуляции

Микроконтроллер 68HC912B32 и все МК семейства HCS12 имеют в своем составе модуль широтно-импульсного модулятора PWM (Pulse Width Modulation). Широтно-импульсная модуляция (ШИМ) — это способ регулирования скорости вращения двигателя постоянного тока посредством изменения среднего значения напряжения, приложенного к обмоткам двигателя. ШИМ-сигнал может также использоваться для изменения направления движения радиоуправляемой модели автомобиля.

Среднее значение напряжения на обмотках двигателя определяется отношением длительности импульса напряжения (состояние «on» на рис. 4.94) к длительности периода следования импульсов. Это отношение называют коэффициентом заполнения γ, который является величиной безразмерной. Например, если коэффициент заполнения равен 80%, то длительность импульса напряжения (состояние «on») составляет 80%, а длительность паузы (состояние «off») — 20% от длительности периода следования импульсов. На рис. 4.94 показана форма напряжения на обмотках двигателя постоянного тока при двух значениях коэффициента заполнения γ = 20% и γ = 80%.

а) Коэффициент заполнения — 20%

б) Коэффициент заполнения — 80%

Рис. 4.94. Временные диаграммы ШИМ-сигналов с различными коэффициентами заполнения


Рисунок 4.95 иллюстрирует способ управления двигателем постоянного тока с использованием ШИМ. Если коэффициент заполнения γ = 80%, то к обмоткам двигателя будет приложено среднее напряжение, равное 80% от напряжения сети постоянного тока Udc. Если коэффициент заполнения равен 100%, то это означает, что полупроводниковые ключи, используемые для коммутации напряжения к обмоткам двигателя, включены постоянно, и напряжение на обмотках двигателя не имеет импульсной формы. Отметим, что предельная нагрузочная способность выходов МК 68HC12/HCS12 недостаточна для коммутации токов и напряжений обмоток двигателя постоянного тока. Поэтому на выходах МК может быть воспроизведен только маломощный ШИМ-сигнал для управления двигателем, который затем должен быть усилен посредством специального полупроводникового коммутатора. Пример такого коммутатора будет рассмотрен в главе 5.

Рис. 4.95. Управление электрическим двигателем методом ШИМ


Широтно-импульсная модуляция используется не только для управления двигателем. Она имеет множество применений в технике управления различного рода исполнительными механизмами, в том числе в параграфе 4.24.5 будет рассмотрен пример формирования сигнала управления для серводвигателя, который приводит в движение рулевой механизм радиоуправляемой модели автомобиля.

Рис. 4.96. Использование ШИМ для поворота рулевого колеса радиоуправляемой модели автомобиля.

4.24.1. Структура модуля PWM

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

После того, как временные параметры генерируемых сигналов, выраженные в числе периодов E_CLOCK, подсчитаны, следует загрузить их в регистры периода PWPERx и регистры коэффициента заполнения PWDTYx (x — номер канала модуля PWM, x = 0…3).

Модуль PWM имеет в своем составе четыре канала, которые могут генерировать на своих выходах ШИМ-сигналы с независимыми временными параметрами. Каждый канал состоит из двоичного 8-разрядного счетчика PWCNTx с системой предварительных делителей, двух схем сравнения и двух программно доступных регистров PWPERx и PWDTYx. Если работа канала разрешена, то счетчик канала PWCNTx считает непрерывно. Код в счетчике PWCNTx нарастает с $00 до значения, которое записано в регистр периода PWPERx. В момент сравнения счетчик автоматически сбрасывается, и счет продолжается, начиная с кода $00. Код счетчика PWCNTx непрерывно сравнивается с кодом регистра коэффициента заполнения PWDTYx. Если код в регистре PWDTYx превышает текущий код счетчика PWCNTx, то на выходе канала формируется логический сигнал высокого уровня. В момент, когда код счетчика превысит код в регистре коэффициента заполнения, на выходе установится низкий логический уровень (рис. 4.97).

Рис. 4.97. Временная диаграмма, поясняющая формирование ШИМ-сигнала в модуле PWM. 


Импульсная последовательность E_CLOCK, частота которой равна частоте системной шины, является базовой для тактирования всех каналов модуля PWM. Система тактирования модуля состоит из нескольких программируемых делителей, которые позволяют расширить диапазон частот генерируемых ШИМ-сигналов. Включение дополнительных делителей частоты между входом E_CLOCK модуля и счетчиком текущего кода канала PWCNTx приведет к изменению единицы измерения временных интервалов для данного канала. Поэтому коды периода следования и коэффициента заполнения должны быть пересчитаны в соответствии с суммарным коэффициентом деления программируемых делителей.

Как было отмечено ранее, модуль PWM в составе МК B32 имеет четыре 8-разрядных канала. Допускается объединение каналов попарно с целью получения 16-разрядного канала, способного генерировать ШИМ-сигнал с 16-разрядным разрешением по коэффициенту заполнения и периоду следования импульсов. Используя программно устанавливаемые опции конфигурации, на основе модуля PWM с четырьмя каналами могут быть получены следующие структуры:

• Четыре независимых 8-разрядных генератора ШИМ-сигнала (HCS12: восемь 8-разрядных);

• Два независимых 16-разрядных генератора ШИМ-сигнала (HCS12: четыре 16-разрядных);

• Два 8-разрядных и один 16-разрядный генератор ШИМ-сигнала.

В 8-разрядных каналах значения коэффициента заполнения и кода периода могут изменяться от 0 до 255 (28–1). Для 16-разрядных каналов эти же параметры могут принимать значения от 0 до 65535 (216–1). Если задать код коэффициента заполнения равным коду периода, то выходной сигнал будет постоянным (без переключений между 1 и 0).

Объединенный 16-разрядный канал обладает всеми теми же свойствами, что и 8-разрядный. Он допускает регулирование периода и коэффициента заполнения, но отличается большей разрешающей способностью временной сетки в процессе регулирования. Например, минимальное значение коэффициента заполнения для 8-разрядного канала равно 1/256, в то время, как для 16-разрядного — 1/65536. Однако в 8-разрядном режиме достижимы большие частоты ШИМ-сигнала при той же базовой частоте тактирования канала.

4.24.2. Режимы центрированной и фронтовой ШИМ

Каждый из каналов может работать в режиме фронтовой ШИМ или в режиме центрированной ШИМ. В режиме фронтовой ШИМ счетчик текущего кода канала работает только в режиме инкрементирования. Его код изменяется от $00 до кода в регистре периода PWPERx. Далее счетчик сбрасывается, и процесс счета повторяется с кода $00.

В режиме центрированной ШИМ счетчик сначала считает от $00 до кода регистра периода, далее направление счета изменяется, и в вычитающем режиме код счетчика доходит до $00. Далее процесс повторяется.

Логика работы компараторов, которые участвуют в формировании импульса, длительность которого пропорциональна коду регистра коэффициента заполнения, полностью аналогична рассмотренной ранее. В результате, при фронтовой ШИМ импульс будет сформирован в начале периода сигнала, начиная с кода счетчика $00 (рис. 4.98). При центрированной ШИМ импульс с регулируемой длительностью будет формироваться в начале и в конце периода сигнала, в то время как в середине периода на выходе будет формироваться низкий логический уровень (рис. 4.99).

Рис. 4.98. Модуль PWM в режиме фронтовой ШИМ


Рис. 4.99. Модуль PWM в режиме центрированной ШИМ


Для каждого из режимов работы (фронтовая или центрированная ШИМ) имеется возможность выбора активного уровня модулированного по длительности импульса ШИМ-сигнала. Длительность импульса с высоким логическим уровнем пропорциональна коду в регистре коэффициента заполнения PWDTYx при PPOL = 1. При PPOL = 0 аналогичным образом регулируется длительность временного интервала с низким логическим уровнем, как показано на рис. 4.98 и 4.99.

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

Для фронтовой ШИМ (CENTR = 0) расчет временных параметров выходного сигнала следует производить по следующим формулам:

• Период ШИМ-сигнала равен

TPWM = (PWPERx + 1)/fx

• Длительность импульса с высоким активным уровнем при PPOLx = 1 равна

TIMP = (PWDTYx + 1) / [(PWPERx + 1) × fx]

Коэффициент заполнения в этом же режиме равен

γ =(PWPERx – PWDTYx)/[(PWPERx + 1) × fx] × 100%

• Длительность импульса с высоким активным уровнем при PPOLx = 0 равна

TIMP =(PWPERx – PWDTYx) / [(PWPERx + 1) × fx]

Коэффициент заполнения в этом же режиме равен

γ = (PWDTYx + 1)/[(PWPERx + 1) × fx] × 100%,

где PWPERx — десятичный эквивалент кода в регистре периода PWPERx, PWDTYx — десятичный эквивалент кода в регистре коэффициента заполнения PWDTYx, PPOLx — бит выбора полярности сигнала канала в регистре конфигурации PWPOL, CENTR — бит выбора формы сигнала в регистре управления PWCTL, fx — частота тактирования счетчика канала с номером «x».

Для центрированной ШИМ (CENTR = 1) расчет временных параметров выходного сигнала следует производить по формулам:

• Период ШИМ–сигнала равен

TPWM = 2 × (PWPERx + 1)/fx

• Длительность импульса с высоким активным уровнем при PPOLx = 1 равна

TIMP = 2 × (PWDTYx + 1) / [(PWPERx + 1) × fx]

Коэффициент заполнения в этом же режиме равен

γ = (PWPERx – PWDTYx)/[(PWPERx + 1) × fx] × 100%

• Длительность импульса с высоким активным уровнем при PPOLx = 0 равна

TIMP = 2 × (PWPERx – PWDTYx) / [(PWPERx + 1) × fx]

Коэффициент заполнения в этом же режиме равен

γ = [(PWDTYx + 1)/(PWPERx + 1)] × 100%,

Обратите внимание, что при одинаковой частоте тактирования и одинаковых кодах в регистрах периода и коэффициента заполнения длительность импульса и период формируемого сигнала центрированной ШИМ будет в два раза больше, чем при фронтовой ШИМ. А коэффициент заполнения при этом остается одинаковым, поскольку является величиной относительной.

4.24.3. Система тактирования

Структурная схема системы тактирования модуля PWM представлена на рис. 4.100. Первичным генератором для тактирования счетчиков каналов модуля PWM служит импульсная последовательность E_CLOСK. На выходе программируемого делителя формируются две импульсные последовательности CLOСK_A и CLOСK_B. Причем сигнал CLOСK_A используется для тактирования каналов 0 и 1, а CLOСK_B — каналов 2 и 3. Коэффициенты деления для последовательностей CLOСK_A и CLOСK_B задаются битами PCKA[2:0] и PCKB[2:0] регистра конфигурации PWCLK. Возможные значения коэффициентов деления приведены в таблице рис. 4.101.

Рис. 4.100. Структурная схема системы тактирования модуля PWM


PCKA2 (PCKB2)PCKA1 (PCKB1)PCKA0 (PCKB0)Частота CLOСK_A, CLOСK_B
000E
001E + 2
010E + 4
011E + 8
100E + 16
101E + 32
110E + 64
111E + 128

Рис. 4.101. Выбор частоты тактирования счетчиков каналов модуля PWM


При необходимости коэффициент деления может быть увеличен посредством подключения дополнительного делителя на входе каждой пары каналов. Делитель 0 обслуживает каналы 0 и 1 (рис. 4.100), он формирует свой выходной сигнал из импульсной последовательности CLOСK_A. Делитель 1 обслуживает каналы 2 и 3 (рис. 4.100) и формирует выходной сигнал из последовательности CLOСK_B. Коэффициент деления каждого из этих делителей определяет код в регистрах PWSCAL0 и PWSCAL1.

4.24.4. Регистры модуля PWM 

Множество регистров специальных функций, которые обслуживают модуль PWM, можно разделить на следующие группы:

• Регистры конфигурации;

• Регистр разрешения работы каналов; 

• Регистр дополнительного делителя;

• Регистры делителей 0 и 1;

• Регистры счетчика каналов;

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

• Регистры коэффициента заполнения каналов;

• Регистр управления;

• Регистр специальных режимов модуля;

• Регистры работы с портом P.

Рассмотрим перечисленные регистры более подробно.

Регистр конфигурации PWCLK

Регистр конфигурации PWCLK выполняет две функции. Во-первых, его биты определяют, будут ли каналы модуля использоваться в 8-разрядном режиме, или эти каналы объединят попарно для работы в 16-разрядном режиме. Во-вторых, биты регистра назначают два коэффициента деления частоты для образования из импульсной последовательности E_CLOСK сигнала тактирования каналов 0 и 1 (CLOСK_A) и сигнала тактирования каналов 2 и 3 (CLOСK_B).

Формат регистра PWCLK представлен на рис. 4.102. Биты CON23 и CON01 определяют режимы работы пар каналов 2:3 и 0:1 соответственно. Если значение бита CON23 равно 0, то каналы 2 и 3 работают независимо друг от друга с 8-разрядным разрешением. При CON23 = 1 каналы 2 и 3 объединяются в один 16-разрядный генератор ШИМ-сигнала. Действие бита CON01 по отношению к каналам 0 и 1 аналогично.

Рис. 4.102. Формат регистра конфигурации PWCLK


Если каналы объединены в пару, то ШИМ-сигнал пары 0:1 формируется на линии 0 порта PORT P, пары 2:3 — на линии 2 порта PORT P. Однако управление полярностью выходных сигналов 16-разрядных ШИМ-генераторов осуществляется битами PPOL1 для пары 0:1 и PPOL3 для пары 2:3. Биты управления полярностью PPOLx располагаются в регистре PWPOL.

Регистр конфигурации PWPOL

Регистр конфигурации PWPOL предназначен для задания активного уровня выходного сигнала каждого из четырех ШИМ-генераторов, а также для разрешения включения дополнительного делителя частоты для сигналов тактирования CLOСK_A и CLOСK_B. Формат регистра PWPOL приведен на рис. 4.103.

Рис. 4.103. Формат регистра конфигурации PWPOL


Каждому каналу поставлен в соответствие бит полярности сигнала PPOLx и бит выбора источника тактирования канала PCLKx (x — номер канала). Если бит PPOLx=1, то активный уровень ШИМ-сигнала — высокий логический (рис. 4.98). При PPOLx = 0 на выходе канала формируется ШИМ-сигнал с низким логическим уровнем на интервале γT (рис. 4.98).

Если бит PCLKx равен 0, то для соответствующего канала в качестве источника тактирования назначается импульсная последовательность CLOСK_A (каналы 0 и 1) или CLOСK_B (каналы 2 и 3). При PCLKx = 0 соответствующий канал тактируется от дополнительного делителя частоты, который конфигурируется битами регистров PWSCNT0/PWSCNT1 и PWSCAL0/PWSCAL1.

Регистр разрешения работы каналов PWEN

Отдельные биты регистра конфигурации PWEN используются для активизации каналов модуля PWM. Формат регистра PWEN представлен на рис. 4.104. Если бит PWENx установлен в 1, то канал с номером «x» генерирует импульсную последовательность на соответствующем выводе порта PORT P. При PWENx = 0 канал находится в неактивном режиме, соответствующая линия порта PORT P может использоваться как линия ввода/вывода общего назначения.

Рис. 4.104. Формат регистра разрешения работы каналов PWEN


Регистр дополнительного делителя PWPRES

Этот регистр используется только в специальных режимах работы МК. Его формат представлен на рис. 4.105. Более подробно мы не будем его рассматривать.

Рис. 4.105. Формат регистра дополнительного делителя PWPRES


Прежде, чем приступить к рассмотрению двух следующих регистров, возвратимся к рис. 4.100 и вспомним, как организована система тактирования отдельных каналов модуля PWM. Источником тактирования каналов является импульсная последовательность E_CLOСK. Два программируемых делителя образуют из E_CLOСK сигналы тактирования CLOСK_A для каналов 0 и 1 и CLOСK_B для каналов 2 и 3. Причем каждый из каналов может тактироваться от указанного сигнала или напрямую, или через дополнительный делитель. Регистры PWSCNT0/PWSCNT1 и PWSCAL0/PWSCAL1 устанавливают режимы работы этих двух дополнительных делителей.

Регистры делителей PWSCNT0/PWSCNT1 и PWSCAL0/PWSCAL0

Делитель 0 обслуживает каналы 0 и 1 (рис. 4.100), он формирует свой выходной сигнал из импульсной последовательности CLOСK_A. Делитель 1 обслуживает каналы 2 и 3 (рис. 4.100) и формирует выходной сигнал из последовательности CLOСK_B. Коэффициент деления каждого из этих делителей определяет код в регистрах PWSCAL0 и PWSCAL1 соответственно. Коэффициент деления Kx (x — номер делителя) вычисляется по формуле:

Kx = (PWSCALx + 1)/2,

где PWSCALx — десятичный эквивалент кода в регистре PWSCALx.

Код из регистров PWSCAL0 и PWSCAL1 автоматически загружается в вычитающие счетчики PWSCNT0 и PWSCNT1, когда последние обнуляются. Таким образом, счетчики выполняют функцию делителей частоты с плавно изменяющимся коэффициентом деления. Регистры счетчиков PWSCNT0 и PWSCNT1 доступны только для чтения. Форматы регистров PWSCAL0/PWSCAL1 и PWSCNT0/PWSCNT1 приведены на рис. 4.106 и 4.107.

Рис. 4.106. Формат регистров делителей PWSCALx


Рис. 4.107. Формат регистров вычитающих счетчиков PWSCNTx


Регистры счетчика каналов PWCNTx

При рассмотрении принципа действия отдельного канала генератора ШИМ-сигнала мы выяснили, что в формировании сигнала участвует непрерывно считающий 8-разрядный двоичный счетчик, текущий код которого сравнивается с кодом коэффициента заполнения и кодом периода. В регистрах PWCNTx (x — номер канала 0…3) отображается текущий код счетчика каждого канала. Формат регистров PWCNTx представлен на рис. 4.108. Регистры PWCNT0… PWCNT3 доступны только для чтения, попытка записи в регистр счетчика текущего кода вызывает сброс счетчика.

Рис. 4.108. Формат регистров счетчика каналов PWCNTx


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

Число регистров периода PWPERx равно числу каналов ШИМ в модуле PWM. Все регистры PWPER0…PWPER3 — 8-разрядные. Формат регистров PWPER0…PWPER3 приведен на рис. 4.109. Период следования ШИМ-сигнала каждого канала определяется кодом, который записан в соответствующем регистре периода PWPERx:

Рис. 4.109. Формат регистров периода каналов PWPERx


• для фронтовой ШИМ период сигнала равен

TPWM = (PWPERx + 1)/fx

• для центрированной ШИМ период сигнала равен

TPWM = 2 × (PWPERx + 1)/fx

где PWPERx — десятичный эквивалент кода в регистре периода PWPERx, fx — частота тактирования счетчика канала с номером «x».

Регистры коэффициента заполнения каналов PWDTYxФормат регистров коэффициента заполнения PWDTYx

Рис. 4.110.


Число регистров коэффициента заполнения PWDTYx также равно числу каналов ШИМ в модуле PWM. Все регистры PWDTY0…PWDTY3 — 8-разрядные. Формат регистров PWDTY0…PWDTY3 представлен на рис. 4.110. Длительность импульса в каждого канале определяется кодом, который записан в соответствующем регистре коэффициента заполнения PWDTYx:

• для фронтовой ШИМ длительность импульса равна

TIMP = (PWDTYx + 1) / [(PWPERx + 1) × fx]

• для центрированной ШИМ длительность импульса равна

TIMP = 2 × (PWDTYx + 1) / [(PWPERx + 1) fx]

Регистры коэффициента заполнения каналов PWDTYx

Число регистров коэффициента заполнения PWDTYx также равно числу каналов ШИМ в модуле PWM. Все регистры PWDTY0…PWDTY3 — 8-разрядные. Формат регистров PWDTY0…PWDTY3 представлен на рис. 4.110. Длительность импульса в каждого канале определяется кодом, который записан в соответствующем регистре коэффициента заполнения PWDTYx:

• для фронтовой ШИМ длительность импульса равна

TIMP = (PWDTYx + 1) / [(PWPERx + 1) × fx]

• для центрированной ШИМ длительность импульса равна

TIMP = 2 × (PWDTYx + 1) / [(PWPERx + 1) × fx]

Коэффициент заполнения в обоих режимах равен

γ = [(PWDTYx + 1)/(PWPERx + 1)] × 100%,

где PWDTYx — десятичный эквивалент кода в регистре коэффициента заполнения PWDTYx, PWPERx — десятичный эквивалент кода в регистре периода PWPERx, fx — частота тактирования счетчика канала с номером «x».

Регистр управления PWCTL

Формат регистра управления модулем PWMCTL представлен на рис. 4.111. В этом разделе мы рассмотрим только бит CENTR этого регистра. Этот бит определяет форму выходных сигналов всех каналов модуля PWM. Если бит CENTR = 1, то в каналах реализуется центрированная ШИМ, при CENTR = 0 выходные сигналы генерируются по способу фронтовой ШИМ.

Рис. 4.111. Формат регистра управления PWCTL


Регистр специальных режимов PWTST

Этот регистр используется только в специальных режимах работы МК. Его формат представлен на рис. 4.112. Более подробно мы не будем его рассматривать.

Рис. 4.112. Формат регистра PWTST


Регистры работы с портом P

Обслуживание модуля PWM — альтернативная функция линий порта PORT P. Линии PP0…PP3 порта P могут использоваться не только в качестве выходов модуля PWM, но и как линии порта ввода/вывода общего назначения. Если работа соответствующих каналов модуля PWM разрешена, то линии порта P автоматически конфигурируются для работы в качестве выходов, на которых формируются ШИМ-сигналы. Если каналы модуля PWM не активизированы, то линии PP0…PP3 работают как обычные линии ввода/вывода. Направление передачи сигнала линиями PP0…PP7 определяется битами регистра направления передачи DDRP. Формат регистра DDRP приведен на рис. 4.113. Запись 1 в соответствующий разряд регистра DDRP конфигурирует линию на вывод. Порт P обслуживается регистром данных PORTP (рис. 4.113).

Рис. 4.113. Формат регистров обслуживания порта PORTP 

4.24.5. Примеры программирования модуля PWM

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

Рассмотрим последовательность действий, которую необходимо проделать для инициализации модуля PWM:

• Для конкретного приложения следует определить разрешающую способность генерируемого ШИМ-сигнала, т.е. число дискретных отсчетов частоты таткирования канала в периоде и длительности импульса выходного сигнала канала. На основании полученных данных следует определить, в каком режиме, 8-разрядном или 16-разрядном, Вы будете использовать каналы модуля PWM;

• Для конкретного приложения следует определить требуемую частоту генерируемого ШИМ-сигнала. На основе полученных данных определить структуру подсистемы тактирования каналов модуля PWM;

• Установить биты CON23 и CON01 в регистре PWCLK для выбора 8-разрядного или 16-разрядного режима работы;

• Определить, будете ли Вы использовать режим центрированной или режим фронтовой ШИМ. В соответствие с выбранным режимом установить бит CENTR в регистре PWCTL;

• Определить активный уровень ШИМ-сигнала, в соответствии с выбором установить биты PPOL0…PPOL3 в регистре PWPOL;

• Назначить источники тактирования для каналов, для чего установить биты PCLK0…PCLK3 в регистре PWPOL;

• Установить коэффициенты деления для импульсных последовательностей CLOСK_A и CLOСK_B, используя для этого биты PCKA2…PCKA0 и PCKB2…PCKB0 регистра PWCLK;

• Установить для используемых каналов значения регистров периода и регистров коэффициента заполнения;

• Разрешить работу выбранных каналов модуля PWM, используя для этого биты PWEN0…PWEN3 регистра EPWM.

В конце данной главы в разделе самостоятельных заданий (задание 12) мы предложим Вам определить параметры инициализации модуля ШИМ самостоятельно. А пока приведем два примера.

Инициализация модуля PWM, пример 1

Определим параметры настройки модуля PWM для генерации ШИМ-сигнала с частотой 976 Гц и коэффициентом заполнения 66,7%.

Частоту тактирования канала ШИМ выберем равной 8МГц/32 = 250 кГц. Этой частотой будем тактировать 8-разрядный счетчик канала. Для формирования частоты 976 Гц потребуется 256 отсчетов частоты 250 кГц, что соответствует максимально возможному коэффициенту счета 8-разрядного счетчика периода канала.

Для формирования сигнала с коэффициентом заполнения 66,7% следует установить код периода, равный 256 отсчетам, а код коэффициента заполнения — 171 отсчету. Для формирования ШИМ-сигнала будем использовать канал 0 модуля PWM.

Программный фрагмент init_pwm.c производит начальную установку регистров специальных функций модуля PWM для генерации на выходе PP0 ШИМ-сигнала с частотой 976 Гц и коэффициентом заполнения 66,7%:

/*--------------------------------------------------------*/

/* Функция init_pwm задает начальные установки модуля PWM */

/*--------------------------------------------------------*/

void ini_pwm(void) {

 PWTST = 0x00; /*выбрать нормальный режим работы модуля PWM*/

 PWCTL = 0х00; /*выбрать режим фронтовой ШИМ*/

 PWCLK = 0x28 /*канал 0 в 8разрядном режиме, коэфф. деления*/

              /* частоты E_CLOСK равен 32*/

 PWPOL = 0х01; /*установить высокий активный уровень сигнала*/

 DDRP = 0хFF; /*настроить порт P на вывод*/

 PWEN = 0x01; /*разрешить работу канала 0 модуля PWM */

 PWPER0 = 255; /*установить код периода*/

 PWDTY0 = 171 /*установить код коэффициента заполнения*/

}

/*--------------------------------------------------------*/

Инициализация модуля PWM, пример 2

В начале раздела 4.24, мы рассматривали пример использования широтно-импульсной модуляции для управления серводвигателем. Для напоминания структурная схема управления серводвигателем приведена на рис. 4.114. В рассматриваемом примере серводвигатель приводит в движение рулевой механизм радиоуправляемой модели автомобиля. Вращение серводвигателя обеспечивает отклонение рулевого механизма на определенный угол от центрального положения. Этот угол определяется средним значением напряжения, которое прикладывается к двигателю. Напряжение регулируется способом широтноимпульсной модуляции, тогда среднее значение напряжения прямопропорционально коэффициенту заполнения ШИМ-сигнала. Значение коэффициента заполнения передается по радиоканалу. Изменение длительности импульсов напряжения, прикладываемого к серводвигателю, при сохранении частоты следования импульсов вызывает поворот рулевого механизма на определенный угол. Допустимый для рулевого управления диапазон регулирования коэффициента заполнения составляет от 4,5 до 10 %. При этом частота следования импульсов напряжения на двигателе должна составлять 50 Гц.


Рис. 4.114. Использование ШИМ для поворота рулевого колеса радиоуправляемой модели автомобиля.


Определим параметры настройки модуля PWM для генерации ШИМ-сигнала с частотой 50 Гц и коэффициентом заполнения 4,5…10,0 %. Предположим, что частота импульсной последовательности E_CLOСK равна 8 МГц. Тогда период следования импульсов E_CLOСK составляет:

TECLOCK = 1/fECLOCK = 1/8 МГц = 125 нс

Период следования формируемого ШИМ-сигнала составляет:

TPWM = 1/fPWM = 1/50 Гц = 20 мс

Число периодов импульсной последовательности E_CLOСK, которое должно быть отсчитано для формирования периода ШИМ-сигнала, составляет:

KE_CLOCK = TPWM/TE_CLOCK = 20 мс/125 нс = 160 000

Подсчитанное число слишком велико, чтобы его можно было разместить не только в 8-разрядном, но и 16-разрядном регистре. Поэтому при конфигурации модуля PWM необходимо воспользоваться программируемым делителем частоты E_CLOСK. Максимальное значение коэффициента этого делителя составляет 128: 160 000/128 = 1250.

Именно такое число отсчетов следует использовать для генерации ШИМ-сигнала с частотой 50 Гц. Число 1250 может быть размещено в 16-разрядном регистре, поэтому мы будем использовать объединение двух 8-разрядных каналов модуля PWM в один 16-разрядный. Аналогичным способом следует вычислить коды, соответствующие диапазону возможных коэффициентов заполнения 4,5…10,0%.

Запишите код инициализации модуля PWM для управления серводвигателем рулевого механизма самостоятельно, используя блок схему рис. 4.115 и программный фрагмент init_pwm.

Рис. 4.115. Последовательность действий МК при обслуживании модуля PWM

4.25. Ограничение энергии потребления