Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

6. Завершить программу вечным циклом.

Схема процедуры обработки прерывания показана на рисунке 3.8.3.

1. Вывести в порт очередную кодовую комбинацию. Индекс элемента массива последовательно должен принимать значения 0, 1, 2, 3, 0, 1 и т. д. В то время как счетчик шагов n будет меняться от 0 до 10 и обратно до 0. Очевидно, что индекс массива можно вычислить как остаток от деления n на 4. Поэтому блок 1 реализуется командой

FIO0PIN=P[n%4];

2. Увеличить счетчик шагов n на величину приращения D.

3–5. Если n вышел за границы интервала [0; 10], сделать шаг в противоположном направлении вычитанием удвоенного D; далее изменить знак D. Это приведет к изменению порядка чередования кодовых комбинаций на противоположный и реверсу двигателя.

6. Завершить процедуру обработку прерывания сбросом флага запроса

(T0IR) и обнулением VICVectAddr.

3.9 Применение ШИМ для формирования низкочастотных аналоговых сигналов

3.9.1 Задание

Разработать программу, с помощью ШИМ формирующую на выходе AOUT учебной платы гармонический сигнал частой 2 Гц.

3.9.2 Основные сведения

Если обработать ШИМ-сигнал фильтром нижних частот, частота среза которого намного меньше частоты несущего колебания, то получим восстановленный модулирующий сигнал. Так ШИМ может использоваться для формирования низкочастотного аналогового сигнала. На плате EA-EDU-001 выход PWM2 микроконтроллера подключен к RC-фильтру нижних частот 1-го порядка (см. рисунок 3.9.1 R83=3 кОм, C39=22 мкФ). Частота среза фильтра примерно составляет 2,4 Гц (по уровню –3 дБ). Это позволит формировать лишь постоянное или медленно меняющее напряжение. Однако ограничение вызвано именно аналоговым фильтром, а не возможностями микроконтроллера. Практически возможно получить аналоговый сигнал с частотой, по крайней мере, до 20 кГц.

Рисунок 3.9.1 – Схема фильтра нижних частот

Другой фильтр позволит получить с помощью ШИМ сигнал, по крайней мере, в звуковом диапазоне частот.

На рисунке 3.9.2 (внизу) приведены осциллограммы ШИМ-сигнала, для которого длительность импульсов медленно меняется по гармоническо-

185

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

Осциллограмма для случая тысячекратного превышения ( кГц) показана на рисунке 3.9.3.

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

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

Рисунок 3.9.2 – Осциллограммы ШИМ-сигнала (f0 = 100 Гц, M = 50, N = 50) и гармонического сигнала, полученного с помощью его фильтрации

Рисунок 3.9.3 – Осциллограмма гармонического напряжения, полученного с помощью фильтрации ШИМ-сигнала (f0 = 2 кГц, M = 1000, N = 50)

186

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

Опираясь на выражение (1.14.1), выразим значение регистра PWMMR0, определяющее период модулированных импульсов:

. (3.9.1)

Аналогично в соответствии с (1.13.3) пороговое значение таймера, задающее интервал постоянства коэффициента заполнения:

. (3.9.2)

Каждый дискретный отсчет, определяющий длительность импульса рассчитывается по формуле

, (3.9.3)

3.9.3 Алгоритм основной программы

Схема алгоритма показана на рисунке 3.9.4. В программе используется функция расчета синуса, поэтому кроме привычного описания регистров, файла LPC2148.h, необходимо подключить библиотеку математических функций.

#include <math.h>

1. Для управления ШИМ будут использованы , , , смысл которых был разъяснен выше. Объявить константы в Си-программе необходимо директивами

#define f 2.0 // Частота гармонического сигнала #define M 100 // Число импульсов ШИМ в периоде #define N 100 // Число градаций длительности в периоде

В программе потребуется объявить глобальные переменные: целочисленные счетчик k, и массив u из N элементов.

int k, u[N];

2.Перевести линию P0.7 в режим PWM2 (регистр PINSEL0).

3.Задать частоту ШИМ через регистр PWMMR0 (3.8.1). Рекомендуется выразить ее через объявленные константы, например

PWMMR0=15E6/f/M-1;

Здесь 15E6 обозначает входную частоту счетчика ШИМ по умолчанию.

4. Через регистр PWMMCR разрешить сброс счетчика ШИМ при совпадении с пороговым значением PWMMR0.

187

Основная программа

7

Процедура обработки

 

 

 

 

прерывания

 

 

Начало

Расчеты таблицы

 

 

 

 

 

отсчетов сигнала

 

 

 

 

 

Начало

 

 

1

 

 

 

 

 

8

 

 

 

Ввод f

, M, N

1

 

 

 

 

 

0

 

k=0

 

 

 

 

PWMMR2=u[k]

 

2

 

 

 

 

 

 

9

 

 

 

Настройка режима

2

 

 

Настройка таймера:

 

 

 

 

 

портовой лини P0.7

Инкремент k

 

вкл. cброс и

 

 

 

 

 

 

3

 

 

запрос прерывания

3

 

 

 

 

 

Задание частоты ШИМ

10

Стробирование

 

 

 

 

защелки ШИМ

 

4

 

 

Задание порогового

 

 

 

 

 

 

Настройка схемы

значения для таймера

 

 

 

совпадения ШИМ

11

4

Да

 

 

 

k=N

 

5

 

 

Настройка системы

 

5

Вкл. cч. ШИМ в

прерываний

 

 

 

 

Нет

k=0

синхронном режиме

 

12

 

 

 

 

 

 

 

6

 

 

Запуск таймера

6

 

Включить канал PWM2

 

 

 

Инициализация

 

 

 

 

 

 

 

 

 

13

системы прерываний

 

 

 

 

 

 

 

 

 

Пустая команда

 

 

 

 

 

 

Конец

 

Рисунок 3.9.4 – Схемы алгоритмов основной программы

ипроцедуры обработки прерывания от таймера

5.Включить счетчик ШИМ в синхронном режиме (с использованием защелок) через регистр PWMTCR.

6.Включить выход канала PWM2 (регистр PWMPCR). Управление фазой для всех каналов оставить отключенной.

7.Расчет таблицы выполнить по формуле (3.9.3), которая реализуется на Си следующим образом:

for (k=0; k<N; k++) u[k]=floor((PWMMR0-1)/2*

(sin(2*3.1415927*k/N)+1)+0.5);

8. Значение счетчика будет использоваться в дальнейшем, поэтому после цикла важно присвоить ему нулевое значение.

9–13. Блоки абсолютно идентичны соответствующим блокам программы генератора прямоугольного сигнала (практическое занятие №2). Отметим лишь, что присвоить задать пороговое значение (3.9.2) удобно командой

T0MR0=15E6/f/N-1;

3.9.4 Алгоритм процедуры обработки прерывания

Оформление процедуры обработки прерывания от схемы совпадения таймера рассматривалось в практическом занятии №2.

1–2. Загрузить новое значение в пороговый регистр PMWMR2. Оба блока реализуются одной командой Си

188