Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Глава 14

.pdf
Скачиваний:
26
Добавлен:
18.02.2016
Размер:
1.11 Mб
Скачать

ся в установке требуемых коэффициентов деления пред- и постделителей, а также записи необходимого модуля счета в регистр PR2. Эти операции производятся при ВЫКЛЮЧЕННОМ таймере (бит TMR2ON=0).

Запуск таймера (т.е. разрешение начала счета) осуществляется битом TMR2ON в этом же регистре T2CON. Когда в процессе работы таймера, число

импульсов (FOSC/4)/Kпредделителя достигает значения, записанного в регистр PR2, следующим тактовым импульсом он устанавливается в состояние 0х00. После

этого цикл работы таймера по подсчету импульсов (FOSC/4)/Kпредделителя продолжается. Индикатором этого события (как и в случае таймера TMR1) является флаг

TMR2IF в регистре PIR1 (0x0C), но не непосредственно, а через постделитель с программируемым коэффициентом деления. Другими словами, флаг TMR2IF ус-

танавливается в «1» через Kпостделителя раз срабатывания таймера. Если требуется отследить моменты срабатывания самого таймера, необходимо установить

Kпостделителя = 1.

Еще одна особенность этого таймера состоит в том, что регистр TMR2 доступен по шине данных для записи. Однако при выполнении этой операции происходит аппаратный сброс (установка значения 1:1) установленных ранее коэффициентов деления пред- и постделителей. Поэтому в процессе работы таймера записывать в него принудительно (т.е. фактически устанавливать новое начало отсчета) – запрещено, т.к. при этом изменяться результирующие параметры модуля (коэффициенты деления пред- и постделителей). Строго говоря, для таймера TMR2 устанавливать, таким образом, начальное значение – N (для того чтобы получить модуль счета 28 – N, как в случае TMR1) нет необходимости, т.к. для изменения модуля счета специально предназначен регистр PR2.

Назначение битов регистра T2CON приведено на рис. 165 в п. 14.5.2 при рассмотрении работы модуля ШИМ.

В заключение приведем рекомендуемый алгоритм работы с модулями таймеров на примере конфигурирования (на некоторые заданные из каких-либо соображений коэффициенты деления делителей) и ожидания окончания работы таймера TMR2 по биту TMR2IF=1. В примере используется тот факт, что при сбросе микроконтроллера состояние регистра PR2 = 0хFF, т.е. таймер TMR2 считает до 256.

Bcf

STATUS, RP0

Bcf

STATUS, RP1

Clrf

T2CON

Clrf

TMR2

Clrf

INTCON

Bsf

STATUS, RP0

Clrf

PIE1

Bcf

STATUS, RP0

;установка «0»-го банка памяти данных в котором находятся адресуемые ниже регистры

;выключение таймера для начала его конфигурирования (при этом обнулении коэффициенты деления пред- и постделителей устанавливаются 1:1)

;Очистка «старого», может быть накопленного, значения таймера

;запрещаем обработку прерываний от периферийных модулей, чтобы исключить переход к автоматическому обработчику в памяти команд, ведь прерывание возникнет при переполнении таймера (см. п. описание исходного кода примера ПО в 14.3.3)

;установка «1»-го банка памяти данных для обращения к PIE1

;дополнительное запрещение прерываний, рекомендуемое Microchip

;установка «0»-го банка памяти данных

Clrf PIR1

Movlw 0x72 Movwf T2CON

Bsf T2CON, TMR2ON

Flag

Btfss PIR1, TMR2IF

Goto Flag

Обработка события окончания счета

Bсf PIR1, TMR2IF

;сбросить ВСЕ флаги прерываний (хотя, строго говоря, нас интересует только флаг прерывания от модуля таймера TMR2IF)

;конфигурируем таймер: постделитель 1:15, предделитель 1:16 (числа взяты «с потолка», просто для примера)

;включаем таймер, т.е. разрешаем начало счета

;метка окончания счета

;проверка досчитал ли таймер 16 раз (Кпостделителя) до 0х00 по фла-

гу TMR2IF=1

;если – нет, то продолжаем ждать (переход на метку)

;таймер «обнулился», т.е. TMR2IF=1, в этом месте ПО должна находиться процедура обработки этого события, например, включения какого-либо устройства

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

14.5Модуль широтно-импульсной модуляции

14.5.1Физические принципы формирования аналоговых сигналов произ-

вольной формы с использованием микроконтроллеров

Существует два основных способа (см. Рис. 160) построения цифроаналоговых преобразователей (ЦАП, преобразующих цифровой сигнал в последовательном или параллельном коде в аналоговое напряжение) с использованием

 

 

 

R1

микроконтроллер

 

PORT

 

 

 

 

UВЫХ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R2

 

 

 

 

 

 

R0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RN

 

 

UВЫХ = ЕПИТ , где f (PORT )

микроконтроллер

PORT

 

 

R

 

 

UВЫХ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С

 

 

 

 

 

 

 

 

 

 

 

 

U

=

ЕПИТ

U

 

 

 

 

m

 

 

ВЫХ

 

 

q

 

 

 

 

 

 

 

 

 

Рис. 160 Способы построения ЦАП на микроконтроллерах

микроконтроллеров:

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

чаемых к выходам микроконтроллера, при этом сопротивления резисторов R1 - RN пропорциональны коду «8-4-2-1» и R0 , а результирующее сопротивление плеч делителя определяется числом логических «0» и «1» на выходах порта. В

этом случае на выходе обеспечивается любое постоянное напряжение с шагом 5В/2n , где n – разрядность порта;

-в случае последовательного кода цифрового сигнала: с использованием модуляции ширины импульсной последовательности с последующим выделени-

ем постоянной составляющей такого сигнала с помощью RC фильтров нижних

сиг-

частот (ФНЧ), либо электронных интеграторов (см. рис. 48 в п. 11.2).

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

На рис. 161 приведен график Uвых (t) аналогового сигнала с периодом Т нала, который требуется получить с помощью микроконтроллера. Эта задача решается в три этапа:

1 этап: дискретизация по времени с использованием ступенчатой аппроксимации аналогового напряжения «ступеньками» постоянного напряжения;

2этап: получение требуемой постоянной составляющей, либо требуемого закона ее изменения в соответствии с законом изменения амплитуд ступенек;

3этап: принятие специальных мер по увеличению ее амплитуды из-за наличия ФНЧ с низкой частотой среза (это «печальная» особенность контроллера TTF 5.0, изменить которую аппаратно невозможно).

На первом этапе исходный график напряжения (закон изменения UВЫХ(t)), точнее, период сигнала (либо интервал на котором требуется синтезировать ана-

логовый сигнал), дискретизируется по времени на равные промежутки t, число которых на периоде выбирается в соответствие с теоремой Котельникова – не менее 2-х. На практике это число лежит в пределах от 50 до 100. В пределах каждого такого интервала истинное значение сигнала заменяется приближенным постоянным значением: Е1, Е2, Е3, …. Ei и т.д. (рис. 161). Очевидно, что чем больше будет число отсчетов (иногда называемых дискретами) t, тем точнее будет воспроизводиться форма аналогового сигнала. Верхний предел ограничивается лишь быстродействием микроконтроллера. Таким образом, на этом этапе аналоговый сигнал заменяется набором постоянных напряжений Еi в течение равных промежутков времени, длительность которых выбирается из соотношения:

t = Тсигнала / (50 …… 100)

Обычно такое разбиение удобно реализовывать с использование специализированных программных пакетов, типа MathCAD и им подобным.

На втором этапе определяются параметры импульсной последовательности (период и длительность положительного импульса τИМП i), генерируемой микроконтроллером, из которой ФНЧ выделяет постоянную составляющую Ei в течение времени t (рис. 161). По известной величине постоянной составляющей (ее значение лежит в пределах 0-5В, т.к. ограничено напряжением питания микроконтроллера PIC 16F877), используя связь амплитуды импульса и постоянной составляющей, находят требуемую скважность импульсной последовательности

 

 

 

 

Рис. 161 Принцип

 

Uвых(t)

 

 

формирования

 

 

 

 

аналогового сиг-

Е5

 

 

 

нала

 

 

 

 

с использованием

Е4

 

 

 

 

 

 

широтно-

 

Е3

 

 

 

 

 

 

 

импульсной мо-

Е2

 

 

 

 

 

 

дуляции

 

 

 

 

 

 

Е1

 

.........

.........

 

 

 

 

 

 

 

 

Δt

 

Δt

 

Δt

 

 

 

Т сигнала

 

 

 

 

 

 

τИМП 2

 

+5В

τИМП 1

 

+5В

 

 

Е1

 

 

Е2

 

 

 

Δt

τИМП 1

< τИМП 2

Δt

 

 

 

 

 

 

 

Е1 < Е2

 

 

RC1,2

τШИМ = τИМП

 

 

 

 

 

 

ТШИМ

 

 

 

 

 

 

 

 

 

Δt = N TШИМ

 

 

для каждого i-го дискрета: qi = +5В/ Ei. В свою очередь, из определения скваж-

ности, зная период t, найденный на предыдущем шаге,

находим, требуемую

для каждого

из (50 … 100) дискретов, длительность положительного импульса

τИМП i = t/qi. В случае идеального интегратора, эти параметры являются пара-

метрами импульсов, которые и должен формировать модуль ШИМ микрокон-

троллера. Однако, с учетом физики процессов выделения постоянной состав-

ляющей, связанных с зарядом конденсатора в схеме интегратора, реальное на-

пряжение до которого он успевает зарядиться в течение одного периода

t, ока-

зывается значительно меньше теоретического значения Ei. Для снижения этого эффекта на практике и вводят дополнительный третий этап формирования аналогового напряжения с использованием ШИМ модулей микроконтроллеров.

На третьем этапе в течение времени полученную импульсную последовательность с периодом t (хотя теоретически это может и должен быть один импульс) повторяют N раз. На практике значение N лежит в пределах от 5 до 10. Снизу оно ограничено желаемым ростом амплитуды постоянной составляющей (при числе периодов менее 5-ти, рост амплитуды незаметен), а при увеличении N более 10 рост амплитуды существенно замедляется, т.к. результирующая частота импульсного сигнала выходит за пределы полосы пропускания ФНЧ. Из нижнего графика на рис. 161 можно определить требуемые период и длительность импульса ШИМ. Основные расчетные соотношения приведены на рис. 162.

1) t = Тсигнала / (50 … 100)

2) { Е1, Е2, Е3, …. Ei } → { q1, q2, q3, …. qi } = 5В/Ei

3) ТШИМ = t / (5 … 10)

τШИМ i = TШИМ / qi

i є [50 ... 100]

Рис. 162 Определение параметров импульсов ШИМ

Далее, программным образом реализуется генерация последовательности импульсов с рассчитанными параметрами, которая подается на вход ФНЧ. На выходе фильтра формируется непрерывный сигнал заданной формы (рис. 47 п.

11.2).

14.5.2 Структурная схема модуля ШИМ и управляющие регистры

В состав микроконтроллера входят два независимых идентичных встроенных модуля, позволяющие формировать импульсные сигналы с ШИМ. Выходом первого модуля является контакт RC2, выходом второго – RC1. Каждый из них позволяет генерировать последовательность прямоугольных импульсов с программируемыми значениями периода и длительности положительного импульса (Рис. 163). Принцип формирования заключается в предварительной записи требуемых значений периода и длительности в специальные управляющие регистры PR2, CCPR1L, CCP1CON, установки значений коэффициента предварительного

делителя таймера Kпредделителя TMR2, что при известной частоте кварцевого генератора микроконтроллера TOSC позволяет определить параметры генерируемых

импульсов по выражениям, приведенным на рис. 163. Изменение этих параметров в процессе работы микроконтроллера позволяет получать импульсную последовательность с регулируемой скважностью, путем вариации как периода ШИМ, так и длительности положительного импульса. Учитывая идентичность модулей, рассмотрим работу одного из них, называемого далее первым и имеющим выход на контакте RC2 PORTC. При использовании второго модуля надо иметь в виду две особенности второго модуля:

RC2

Период ШИМ = ТШИМ

 

 

Длительность импульса ШИМ = τИМП

 

ТШИМ = (PR2 + 1)*4*TOSC*Kпредделителя TMR2

 

τИМП = (CCPR1L, CCP1CON)*TOSC*Kпредделителя TMR2

 

τИМП ≤ ТШИМ, при любой их вариации

 

Рис. 163 Сигналы, генерируемые первым модулем ШИМ

-управляющими регистрами второго являются CCPR2L, CCPR2H и CCP2CON, адреса и банки регистров модуля приведены на полной карте памяти микроконтроллера PIC 16F877 (см. рис. 128);

-период ШИМ обоих модулей всегда будет одинаков, по причине использования ими обоими одного и того же таймера TMR2 (со своими управляющими регистрами T2CON, PR2, пред- и постделителями) для отсчета временных интервалов, а длительность может быть установлена индивидуально.

На рис. 164 представлена структурная схема первого модуля ШИМ. В ее основе лежит таймер TMR2, осуществляющий подсчет числа импульсов внутренней тактовой частоты 4ТOSC, где ТOSC – период кварцевого резонатора, равный

вслучае контроллера TTF 0,25 мкс. Эти импульсы поступают на вход счетчика TMR2 через предварительный делитель, коэффициент деления которого программируется путем соответствующей установки бит T2СKPS1, T2СKPS0 в регистре T2CON (адрес 0х12) и может принимать три значения: 1, 4, 16. Это сделано для возможности увеличения периода входных (а в конечном счете и выходных) импульсов таймера TMR2. Число импульсов, подсчитанное таймером TMR2, используется для решения двух задач сравнения:

-с помощью 8-разрядного компаратора оно сравнивается с числом, записанным в специальном регистре периода PR2 (адрес 0x92);

-к 8-ми разрядному счетчику TMR2 аппаратно добавляются два младших разряда (обозначенные на рис. 164 темными прямоугольниками), в результате чего он становится 10-ти разрядным, но при этом на вход этого «нового» счетчи-

ка подаются уже импульсы с периодом не 4ТOSC, а с периодом ТOSC. Этот факт отражен на рис. 164 наличием двух «независимых» выходов предделителя. C помощью 10-разрядного компаратора число импульсов, подсчитанное таким «новым» счетчиком TMR2, сравнивается с числом, записанным в специальном

регистре длительности положительного импульса CCPR1H (адрес 0x16), к которому также «добавлены» два младших разряда чтобы он тоже «стал 10-ти разрядным».

В результате этого, при первом сравнении состояния счетчика TMR2 изменяются с шагом 4ТOSC и при этом имеется 256 таких шагов (это фактически максимальная длительность периода). Для второго сравнения, состояния того же счетчика (т.е. тоже за время периода) уже меняются шагами по ТOSC , но таких шагов – 1024 (это максимальная длительность импульса). При частоте кварца в контроллере TTF, равной 4 МГц (длительность 0,25 мкс) это позволяет формировать отсчеты времени периода ТШИМ с дискретностью 1 мкс, а приращения длительности τИМП – 0,25 мкс. При увеличении коэффициента деления предделителя, эти значения пропорционально увеличиваются. Аналитически это выражается соотношениями, приведенными на рис. 163.

На аппаратном уровне, когда число импульсов, подсчитанное TMR2, сравнивается с числом, записанным в регистре периода PR2, происходит срабатывание 8-ми разрядного компаратора и, появляющаяся на его выходе логическая «1», вызывает четыре события

Рис. 164 Структурная схема 1-го модуля ШИМ контроллера PIC 16F877

W

W

CCPR1L (0x15)

CCPR1H (0x16)

 

 

 

 

 

 

 

 

 

 

Компаратор

10 разрядов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TOSC/K

 

 

 

 

 

 

 

 

 

 

OSC

 

 

 

 

 

 

 

 

8

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Предделитель

 

 

 

 

 

 

TMR2 (0x11)

 

 

 

 

 

 

T

 

 

 

 

 

 

 

 

 

 

 

 

(:1, :4, :16)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Reset

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Компаратор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4TOSC/K

 

 

 

 

 

 

 

 

 

 

 

 

 

8 разрядов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T2СKPS1 T2СKPS0

T2CON (0x12)

PR2 (0x92)

W

 

 

 

CCP1CON (0x17)

 

DС1B1

DС1B0

ССP1M3

 

ССP1M2

ССP1M1

ССP1M0

Загрузка нового

ШИМ

 

 

 

Вкл/Выкл режима ШИМ

 

 

 

 

 

 

 

значения τ

 

 

 

 

 

 

 

Конец импульса τ ШИМ

R

T

 

RC2

 

 

 

 

 

 

 

 

 

 

 

 

TRISC

 

 

ТШИМ и импульса τ ШИМ

S

 

 

0x0C)

 

 

 

 

 

Начало нового периода

 

 

 

 

 

 

 

 

 

Выходной дели-

(PIR1

 

 

 

 

 

TMR2IF

 

 

 

 

 

 

тель (1-16)

 

 

 

 

 

 

 

Вкл/Выкл

 

 

 

 

 

 

TMR2

 

 

 

 

 

TMR2ON TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0

T2CON (0x12)

-устанавливает RS-триггер (по входу S) в «1» на выходе RC2. При этом начинается формирование периода импульсной последовательности и положительного импульса (см. рис. 163). Строго говоря, в этот момент формируется передний фронт выходного импульса;

-сброс счетчика TMR2 в ноль для начала отсчета следующего периода, равного некоторому числу импульсов 4TOSC;

-разрешается перезапись 10-ти разрядного числа из регистра CCPR1L (с двумя добавленными разрядами) в специальный «10-ти разрядный» регистр CCPR1Н. Никаким иным образом, например через W, запись в этот регистр невозможна, он доступен только для чтения (фактически считывается 8 старших разрядов). Записав в этот регистр другое число, можно в следующем периоде импульсов получит положительный импульс уже иной длительности, фактически осуществив широтно-импульсную модуляцию (ШИМ);

-устанавливает в «1» флаг переполнения TMR2IF в регистре PIR1 (0x0C), сигнализируя о начале следующего (или, что, тоже самое, об окончании предыдущего) периода импульсной последовательности. При необходимости этот сигнал можно сделать «реже», установив требуемый (от 1 до 16) коэффициент деления постделителя посредством битов TOUTPS3 – TOUTPS0 регистра T2CON (0x12).

Такое состояние модуля ШИМ (т.е. фактически генерация длительности положительного одиночного импульса, когда контакт RC2 = «1») продолжится до тех пор, пока таймер TMR2 «досчитает» до числа, записанного в «10-ти разрядный» регистр CCPR1Н. При этом на выходе 10-ти разрядного компаратора возникает логическая «1», которая по входу R сбрасывает RS триггер (а соответственно и выход RC2) в «0» (см. рис. 164), завершая формирование длительности положительного выходного импульса. Этот «0» будет удерживаться на выходе триггера до следующего совпадения таймера TMR2 с числом, записанным в регистре периода PR2, когда триггер установиться в «1» и т.д. Очевидно, что для «правильного» импульсного сигнала, длительность импульса должна быть меньше периода, иначе сигнал будет представлять собой постоянное напряжение логической «1». Поэтому на практике необходимо соответствующим образом устанавливать значения регистров PR2 и CCPR1L (с учетом соотношений, приведенных на рис. 163).

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

На рис. 165 показана структура и назначение битов регистра T2CON (0х12). Этот регистр доступен как для записи, так и для чтения и управляет рабо-

T2CON (0x12)

 

7

6

5

4

3

2

1

0

 

 

 

 

 

 

 

 

 

 

 

 

x

TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0

TMR2ON

T2CKPS1

T2CKPS0

 

 

 

 

 

 

 

 

 

 

 

коэффициент деления

Вкл/Выкл

коэффициент

постделителя

таймера

деления

0000 = 1:1

TMR2

предделителя

0001 = 1:2

 

00 = 1:1

…………

0 - выключен

01 = 1:4

1111 = 1:16

1 - включен

1х = 1:16

Рис. 165 Назначение битов регистра T2CON (0x12)

той таймера TMR2 (бит TMR2ON), включая или выключая таймер. При этом в выключенном состоянии показания таймера не изменяются и остаются равными 0, независимо от состояния всех других регистров и сигналов, при этом формирование импульсов модулем ШИМ не происходит. Генерация сигналов на контакте RC2 начинается после включения режима ШИМ в регистре CCP1CON. 4 бита TOUTPS3 - TOUTPS0 устанавливают (в коде «8-4-2-1») один их 16 возможных коэффициентов деления постделителя для выходного сигнала таймера. Выходной сигнал таймера формируется в виде логической «1» на выходе 8- разрядного компаратора (см. рис. 164), которая устанавливает бит TMR2IF в регистре PIR1 (0х0С) в «1». Выходной постделитель таймера позволяет управлять этим моментом, изменяя коэффициент деления постделителя. В свою очередь, контролируя состояние бита TMR2IF можно определить момент окончания пе-

риода (либо, при наличии делителя, в Кпостделителя – раз более редкие события). На практике этот момент и является моментом, когда начинается генерация сле-

дующего импульса с «новой» (если ее предварительно записали в регистр

CCPR2L) длительностью, для получения широтно-импульсной модуляции импульсной последовательности. Биты T2CKРS1 - T2CKРS0 являются битами установки одного из 3-х возможных коэффициентов деления предделителя для сигнала 4ТOSC , являющегося входным для таймера TMR2, из которого собственно и формируются период и длительность выходных импульсов модуля ШИМ. Изменение этих битов позволяет увеличить фактический период импульсов TOSC, подсчет которых осуществляется таймером TMR2, а, следовательно, пропорционально увеличится период и длительность выходного положительного импульса. Величина коэффициента деления предделителя входит в обе формулы на рис.

163.

На рис. 166 показана структура и назначение битов регистра CCP1CON (0x17). Этот регистр доступен как для записи, так и для чтения и решает две задачи:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]