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

однажды, но с избыточностью, например, для . На низких частотах будет использована вся таблица, а с ростом частоты только каждый 2-ой, 4-ый, 8-ой и т. д. элемент. Это легко реализуется, если в процедуре обработки прерывания придавать счетчику неединичное (переменное) приращение :

. (3.7.3)

Пример реализации на Си

n=N >> (int)floor(log(20E3*16/f)/log(2)); if (n==0) n=1;

Условный оператор вводит ограничение .

Блок 2 процедуры обработки прерывания потребуется заменить на

K+=n;

3.8 Управление двухфазным шаговым двигателем

3.8.1 Задание

Разработать программу, которая обеспечит колебательные движения ротора шагового двигателя в диапазоне углов 0–180°. Период колебания 10 с. Двигатель должен поворачиваться на 10 шагов по часовой стрелке, затем на 10 шагов против часовой стрелки. Шаги повторяются через 0,5 с.

3.8.2 Общие сведения

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

Рисунок 3.8.1 – Схема подключения шагового двигателя к микроконтроллеру

На учебной плате EA-EDU-001 установлен миниатюрный двигатель 20BY20L033 производства фирмы Finespin Motors. Двигатель имеет две обмотки. Полный оборот ротора состоит из 20 шагов (одному шагу соответствует угол поворота 18º). Обмотки двигателя включены в диагонали транзисторных мостов. Это обеспечивает смену направления тока в обмотках на обмотках. Функции мостовых преобразователей выполняют драйверы

182

MIC4428 фирмы Micrel (рисунок 3.8.1). Драйверы управляется портовыми линиями P0.12 и P0.21.Таблица 3.8.1 поясняет реакцию двигателя на импульсы тока в обмотках.

Вращение по часовой стрелке обеспечивается сменяющими друг друга состояниями 1, 6, 4, 7, против часовой стрелки — состояниями 5, 2, 8, 3.

Таблица 3.8.1 – Управление двухфазным шаговым двигателем

 

P0.12

P0.21

Направление поворота

 

ротора на один шаг (18º)

 

 

 

 

 

 

 

1

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

1

 

 

 

 

 

3

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

1

 

 

 

 

 

5

 

0

 

6

 

1

 

7

 

0

 

8

 

1

 

Чередующиеся кодовые комбинации 00–01–11–10 на P0.12, P021 представляет собой код Грея. Код, в котором запись любых двух смежных чисел отличаются только одним двоичным разрядом.

Временные диаграммы, иллюстрирующие управление двигателем, показаны на рисунке 3.8.2

P0.12

1

4

1

 

3

2

P0.21

6

7

6

8

5

8

Положение

 

 

 

 

 

 

ротора

 

 

 

 

 

 

Рисунок 3.8.2 – Временные диаграммы, поясняющие управление шаговым двигателем

3.8.3 Алгоритм программы

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

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

Схема алгоритма показана на рисунке 3.8.3.

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

183

Основная программа Начало

1 Включение

высокоскоростного режима порта 0

2 Настройка на вывод

P0.12 и P0.21

3 Задание маски

для порта 0

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

задание порога, вкл. сброс и прерывание

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

прерываний

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

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

 

Начало

 

1

 

Вывод в порт кода

 

P[n%4]

 

2

 

n = n + D

Нет

3

 

n < 0 или n > 10

 

Да

 

4

 

n = n – 2D

5

D = –D

6

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

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

Рисунок 3.8.3 – Схема программы управления шаговым двигателем

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

unsigned int P[]= {0x00000000,0x00001000,0x00201000,0x00200000};

1.Следует включить высокоскоростной режим обмена для порта 0 (регистр SCS). Далее для обращения к порту будут использованы только регистры FIO0….

2.Настроить линии P0.12 и P0.21 на вывод (регистр FIO0DIR).

3.С помощью маскирования запретить изменение всех линий порта 0 кроме P0.12 и P0.21. Для этого записать в регистр FIO0MASK все единицы кроме двух разрядов. Проще всего сделать это командой

FIO0MASK=~0x00201000;

4. Настроить таймер:

а) задать порог таймера (T0MR0) для получения интервала времени 0,5 с; расчет проводить по формуле (1.13.3), учитывая, что по умолчанию МГц;

б) включить сброс таймера и формирование запроса прерывания по совпадению (регистр T0MCR);

в) включить таймер (регистр T0TCR).

5. Включить прерывание от таймера через регистры VICVectAddr0, VICVectCntl0, VICIntEnable (раздел 1.11.5).

184