Вы находитесь на странице: 1из 6

6/6/6. Принцип и особенности работы модуля CCP в режиме ШИМ.

Речь пойдет о способе формирования ШИМ-сигнала широтно – импульсной


манипуляции.
Вопрос: "А как на счет ШИМ-сигнала широтно – импульсной модуляции"?
Ответ: пока пусть "в очереди постоит". Для начала, нужно разобраться с тем, что
попроще.
Главная особенность ШИМ-сигнала - линейная зависимость среднего значения
напряжения от скважности (коэффициента заполнения).
Именно от этого и начинаются все "песни и пляски" вокруг ШИМ.
Скважность есть частное от деления длительности периода на длительность
импульса (Тп/Ти).
Коэффициент заполнения есть величина обратная скважности (Ти/Тп).
Коэффициент заполнения не может быть большим, чем 1, поэтому его удобно
выражать в процентах: (Ти/Тп) х 100%. На это и буду ориентироваться.
Задача: необходимо, в течение "прохождения" некоего периода, сформировать импульс,
длительность которого можно было бы задать.
Так как работа происходит в "епархии" цифровой техники, то вполне разумно
предположить, что этот импульс будет состоять из суммы N-количества (N – целое
число) "шагов" (интервалов времени).
Следовательно, должна иметь место быть возможность задания количества этих
"шагов" как при формировании длительности импульса, так и при формировании
длительности периода (ведь и период тоже нужно сформировать).
Зафиксировав количество "шагов" формирования длительности периода, и, по ходу
работы, от периода к периоду, изменяя количество "шагов" формирования
длительности импульса (при этом изменяется скважность), можно сформировать ШИМ-
сигнал широтно – импульсной манипуляции.
Если задаются фиксированные (неизменные) длительности и периода, и импульса, то
можно сформировать сигнал с фиксированной (постоянной) скважностью.
Это можно сделать с помощью модуля CCP, работающего в режиме ШИМ.
Предположим, что нужно сформировать ШИМ-сигнал с фиксированной скважностью
равной 2 ("меандр") и с частотой 1000 Гц.
В этом случае, Тп = 1000 мкс., а Ти = 500 мкс.
ШИМ-сигнал формируется на выводе RB3 ("штатный" выход модуля CCP).

Ранее, при "разборках" с модулем TMR2, я намекал на то, что этот модуль может
работать в "связке" с модулем CCP.
Час "Ч" наступил: модуль TMR2 применяется при формировании периода ШИМ-сигнала
(и длительности импульса тоже, см. ниже).
А раз это так, то период ШИМ-сигнала формируется "расписанным" ранее способом
(один к одному): в регистр периода (PR2) предварительно записывается константа,
числовое значение которой задает значение периода.

1
Регистр TMR2 считает внутренний (или внешний) такт ПИКа (с учетом Кдел.
предделителя), от нуля (начало периода) и до момента совпадения числовых значений
байтов регистров TMR2 и PR2 (конец периода).
В момент начала формирования периода, на выводе RB3 устанавливается 1 (начало
импульса).
В части касающейся формирования импульса, имеет место быть то, что я называю
"совмещением функций", а именно: регистр TMR2 используется как при формировании
длительности периода, так и при формировании длительности импульса.
Но в этом случае, должно быть не одно, а 2 сравнения.
Так оно и есть: в результате 2-го сравнения, заканчивается формирование импульса
(но формирование периода продолжается).
До сих пор, все понятно (я надеюсь на это), но далее, при "углублении" в детали,
начинается "непонимайка" типа "что ж вы, братцы – кролики, продаете мне "кота в
мешке" и посмотреть не даете? А вдруг там не кот, а крыса"?
Ее примитивный смысл состоит в следующем.
При формировании периода, используется 8-битный регистр (256 состояний), а при
формировании импульса - 10-битный (1024 состояния), но длительность периода всегда
должна быть больше длительности импульса (???).
Казалось бы, логичнее сделать наоборот.
Значит, есть какой-то "прибамбас", с помощью которого можно объяснить такой
"расклад".
"Заход с другого конца": анализирую формулы, по которым вычисляются длительности
периода и импульса.
Тп = (PR2 + 1) х 4Tosc х Кдел.
Ти = (CCPR1L/CCP1CON,5,4) х Tosc х Кдел.

Допустим, что применяется кварц на 4 Мгц. (тогда Tosc = 0,25 мкс.), и выставлен Кдел.
предделителя модуля TMR2 = 4.
Предположим, что Тп = 1000 мкс., а Ти = 500 мкс.
Тогда, в регистр PR2 (период) нужно записать число .249, а в 10-разрядный регистр
CCPR1L/CCP1CON,5,4 (импульс) нужно записать число .500.
Если предположить, что, кроме предделителя модуля TMR2, никаких других делителей
нет, то получается "форменное безобразие" - длительность импульса будет в 2 раза
превышать длительность периода, хотя все должно быть ровным счетом наоборот.
Вывод: чтобы восстановить "статус – кво", необходимо наличие делителя на 4.
На это указывает и четверка в формуле расчета Тп (выделена синим цветом).
А раз это так, то дополнительное деление на 4 должно производиться в ходе
формирования периода (но не в ходе формирования длительности импульса).
В даташитах на это намекается так "туманно" и "суперкратко", что создается
впечатление того, что "установлена мина", предназначенная для "врагов".
Цитата: "8-разрядный таймер связан с 2-разрядным внутренним счетчиком Q …", или
"8-разрядный таймер объединяется с 2-х битным значением фазы Q …" ("хрен редьки
не слаще").
Поделюсь с Вами пришедшим мне в голову, после первого прочтения этого,
колоритным образом: фильм "Кин-дза-дза". Там часто приседают и произносят звук
"Ку". Выражение лица соответствующее.
Что за счетчик? Как он, конкретно, встроен в структурную схему модуля CCP,
работающего в режиме ШИМ?
Тот "туманный" прямоугольник, который "прилепился" справа от прямоугольника TMR2,
несет в себе какую-то слабенькую смысловую нагрузку (что-то там в мешке. И глянуть
не дают).
Я догадался, но ведь другие люди могут и не догадаться?
Делюсь.
Внутренний, 2-разрядный счетчик Q, это счетчик, обеспечивающий разделение сигнала
тактового генератора ПИКа на 4 такта Q1, Q2, Q3, Q4 (см. даташит PIC16F628A,
стр. 13 или "Справочник…", стр. 4-5).
Вот Вам и делитель на 4.
В результате дальнейшей "раскрутки", "родилось" вот это:

2
Вот теперь все в порядке (плюс, "пошире развернул" схему): 8-битный регистр считает
машинные циклы (4Fosc), а 10-битный регистр ситает такт тактового генератора ПИКа
(Fosc).
Главный, понятийный "геморрой" устранен, и теперь можно детализировать.
"Шаг" импульса = длительности периода тактового генератора ПИКа, а "шаг" периода =
длительности машинного цикла.
10-разрядный регистр длительности импульса состоит из 8-битного регистра CCPR1L и
2-битной защелки данных (ее можно назвать 2-битным регистром), которая
"прилеплена" со стороны младших разрядов.
В качестве этой 2-битной защелки данных, используются биты №№5 и 4 регистра
CCP1CON.
Таким образом, запись числового значения длительности импульса производится в 2
приема.
В режиме ШИМ, регистр CCPR1H частично выводится из под "власти" программы в
том смысле, что, программно, запись в него произвести нельзя (можно только считать).
Запись в него производится аппаратно.
К нему, по образу и подобию CCPR1L, со стороны младших разрядов, аппаратно
"прилеплена" 2-битная защелка данных, в которую также ничего нельзя, программно,
записать.
Запись в нее производится аппаратно.
Получается 10-битная защелка данных (буфер), в которую периодически
переписывается содержимое 10-битного регистра длительности импульса.
Эта буферизация необходима для предотвращения сбоев при загрузке данных в 10-
битный регистр длительности импульса.
Указанная выше "перепись" строго "привязана" (аппаратно) к "границам", которые
разделяют периоды и происходит очень быстро (до того, как регистр TMR2 посчитает
1-й, после сброса в 0, импульс).
"Границы" между периодами формирует устройство сравнения 1, в момент совпадения
содержимого регистров TMR2 и PR2.
3
Кроме того, что в этот момент происходит сброс TMR2 (и предделителя) и 10-битное
числовое значение длительности импульса копируется из регистра длительности
импульса в буфер, срабатывает RS триггер модуля CCP, и на выводе RB3
устанавливается единичный уровень (начало периода/импульса, см. рис. 1).
Примечание: вывод RB3 должен быть настроен на работу "на выход".
После этого, TMR2 начинает отсчет и длительности периода, и длительности импульса.
Соответственно, производятся два сравнения.
В регистр PR2 может быть записано число меньшее (в пределах дозволенного:
необходимо соблюдать пропорции), чем в 10-разрядный (10-битный) регистр
длительности импульса, но не смотря на это, длительность периода будет превышать
длительность импульса за счет того, что величина интервала времени одного "шага"
периода в 4 раза превышает величину интервала времени одного "шага" длительности
импульса.
Это обусловлено задействованием внутреннего, 2-разрядного счетчика.
Вопрос: "Почему такое происходит, ведь внутренний, 2-разрядный счетчик (Q)
задействуется в обеих случаях"?
Ответ:
- при формировании импульса, внутренний, 2-разрядный счетчик выполняет свою
прямую функцию 2-разрядного счетчика (со стороны младших разрядов),
- при формировании периода, внутренний, 2-разрядный счетчик выполняет функцию
делителя на 4.
Электронщики меня прекрасно поймут: "цепочка" из триггеров может работать и как
счетчик, и как делитель.
Предположим, что импульс сформировался, и как следствие этого, сработало
устройство сравнения 2.
Единственное что при этом происходит, так это "опрокидывание" (стандартный термин,
означает смену состояния) RS триггера модуля CCP, после чего, на выводе RB3
устанавливается 0 (см. рис. 1).
Формирование импульса завершено, но формирование периода еще не завершено.
TMR2 будет считать до тех пор, пока не произойдет совпадения содержимого
регистров TMR2 и PR2.
После этого, сработает устройство сравнения 1.
В результате этого:
1. RS триггер модуля CCP снова "опрокидывается", и на выводе RB3 устанавливается
1 (начало формирования следующего периода/импульса),
2. TMR2 и предделитель сбрасывается в 0 (подготовка к началу отсчета следующего
периода/импульса),
3. 10-разрядное число, задающее длительность импульса, копируется в буфер
(установка текущего значения длительности импульса).
И далее все повторяется снова (см. выше).
Запись текущего значения длительности импульса, в 10-разрядный регистр
CCPR1L/CCP1CON,5,4, можно произвести в любое время, но с учетом того, что:
1. значение длительности импульса, запись которого произведена в текущем цикле
ШИМ, будет определять длительность импульса в следующем цикле ШИМ,
2. запись не должна производиться в момент копирования в буфер (на "границах"
между периодами),
3. если речь идет о формировании импульсной последовательности с фиксированной
скважностью, то запись текущего значения длительности импульса (в 10-разрядный
регистр CCPR1L/CCP1CON,5,4) и длительности периода (в PR2) достаточно
произвести только один раз (например, в ПП START).
Проще всего реализовать пункт 3.
Пункты 1 и 2 предполагают "привязку" процедуры записи к "безопасному" интервалу
времени.
Ее можно осуществить, если "привязать" начало процедуры записи числового значения
длительности импульса к поднятию флага переполнения TMR2.
В даташите PIC16F628A, на рис. 10-3 (стр.63) даже и не указан выходной делитель
модуля TMR2, через который осуществляется "прямой выход" на флаг TMR2IF, а
сделано только примечание.
На рис. 2 я этот "дефект" исправил.
4
С помощью выходного делителя, можно задать частоту смены значений длительности
импульса (на каждом импульсе, на каждом 2-м, на каждом 3-м, … на каждом 16-м).
При этом, можно использовать либо проверку состояния флага TMR2IF, без ухода в
прерывание по пеполнению TMR2, либо обойтись без этой проверки, но "прерваться".

Расчеты ШИМ с помощью PIC - калькулятора

Настало время "введения в


эксплуатацию" еще одной
утилиты программы PIC -
калькулятора, о котором шла
речь в подразделе 6/5.
Пользоваться ей очень
просто.
В поле "OSC (Мгц)",
выставляете частоту кварца.
В поле "Частота" задаете
значение той частоты,
которая Вам нужна (в
герцах или килогерцах).
В поле "К заполн. (%)", при
помощи ползунка,
задаете требуемое значение
коэффициента заполнения.
Для "запуска" расчета,
щелкните мышью в любой
точке серого поля окна
программы.
Вы видите результаты
расчета параметров
импульсной
последовательности с
частотой 1 Кгц и скважностью 2 (коэффициент заполнения 50%, кварц 4 Мгц.).
В зависимости от значения исходных данных, может быть выдано от 0 (расчет не
возможен) до 3-х вариантов расчета (по количеству коэффициентов деления
предделителя модуля TMR2).
В данном случае, имеется 2 варианта, но Вы можете увидеть и 3, если, например,
смените 1 Кгц. на 4 Кгц.
Можно выбрать любой из предложенных вариантов, но результаты расчета, имеющего
минимальное отклонение от заданных параметров, выводятся в верхнюю строку.

В поле "Частота", выводится результат расчета "границ" диапазона частот, в котором


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

Поле "Варианты".
В столбец "Частота" выводятся фактические значения частот, которые будут иметь
место быть, если воспользоваться данными соответствующей строки.
Они могут отклоняться от заданного значения частоты (см. 2-ю строку).
В столбцы "Прескал" и "Битность" выводятся возможные значения Кдел.
предделителя модуля TMR2 и указывается количество разрядов регистра периода,
которое обеспечивает выполнение заданных условий (могут задействоваться не все 10
разрядов, а меньше).
В столбец "Макс. ШИМ", выводится максимальное число градаций длительности
импульса.

5
Это число соответствует
100%-му заполнению.
Например, в верхней строке,
указано количество градаций
= 1000.
Это означает то, что, в
данном случае, изменяя
числовое значение
константы длительности
периода (она может быть
либо 8-разрядной, либо 8+1
разрядной, либо 8+2
разрядной), можно
сформировать до 1000
различных значений
длительности импульса,
начиная от длительности
импульса в 1 "шаг" и
заканчивая длительностью
импульса в 1000 "шагов".
Значение одного "шага" (в
% от максимальной
длительности импульса)
выводится в столбец "Шаг
ШИМ (%)".
В данном случае, длительность одного "шага" (разрешение) равно 1 мкс.
Зависимость простая: при прочих, равных условиях, чем больше Кдел. предделителя
модуля TMR2, тем требуется меньшая разрядность регистра длительности импульса и
тем шире "шаг" (ухудшение разрешения).
Это соответствует уменьшению максимального количества градаций.
Во избежание возникновения понятийного "бардальеро", следует уточнить, что, если
говорится, например, о 8-разрядности (см. вторую строку расчета), то это
свидетельствует только о том, что счет, до остальных 2-х разрядов регистра
длительности импульса, просто "не доходит", а не о том, что происходит какая-то
аппаратная перестройка разрядности регистра длительности импульса (это же
относится и к буферу).
Он как был 10-разрядным, так им и останется при любом "раскладе", просто
"заполнение" его будет не полным.

Поле "Итог".
В таблицу этого поля выводится "золотая" информация - те числовые значения,
которые нужно установить в регистрах PR2, CCPR1L/CCP1CON,5,4 и тот Кдел.,
который нужно выставить в предделителе модуля TMR2.
В данном случае, выдано 2 варианта.
Лучшее разрешение имеет вариант (выделено красной рамкой), "прописанный" в
верхней строке (программа их "сортирует").

На мой взгляд, эта утилита, кроме того, что уменьшает трудоемкость соответствующей
работы, вполне может быть использована и в обучающих целях.
"Координаты" скрытой ссылки, по которой можно скачать этот вариант программы PIC –
калькулятора, указаны в "Инструкции по скачке программы PIC – калькулятора",
которая находится в конце подраздела 6/5 "Практикума…".
"Старую" версию программы нужно заменить на "новую".
В следующем подразделе, "состряпаю" какую-нибудь "ШИМ-железяку".

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru