Скачиваний:
21
Добавлен:
01.05.2014
Размер:
284.67 Кб
Скачать

4.8. Применение мк для управления шаговым двигателем

Одним из широко распространенных применений МК является управление приводами на базе шаговых двигателей (ШД). Вращение двигателя обеспечивается подачей на две его обмотки импульсных последовательностей, сдвинутых по фазе на /2 (см. рис. 4.2).

По каждому фронту импульса на одной из обмоток, т. е. с интервалом tш, ШД отрабатывает один элементарный шаг, поэтому скорость вращения определяется частотой импульсных последовательностей. Направление вращения определяется опережением или отставанием импульсов на второй обмотке относительно первой. При постоянной частоте импульсных последовательностей в обмотках скорость вращенияШД определяется формулой:

 = /(360tш ) [об/с],

где  - величина элементарного шага (в град.) Отсюда величина tш для заданной скорости вращения  вычисляется следующим образом: tш = /(360) [с].

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

поворот по часовой стрелке на 180со скоростью 2 об/с (фаза «Вращение_1»);

отсутствие вращения в течение 1 с. (фаза «Пауза_1»);

поворот против часовой стрелки на 90 со скоростью 0,5 об/с (фаза «Вращение_2»);

отсутствие вращения в течение 2 с. (фаза «Пауза_2»).

Основу алгоритма управления во всех четырех фазах составляет формирование временных интервалов различной длительности. В фазах «Вращение» необходимо формировать интервалы tш отработки элементарных шагов, обеспечивающие требуемую скорость вращения. В фазах «Пауза» также необходимо формировать задержки заданной длительности. Рассчитаем величины необходимых временных интервалов и соответствующих констант для загрузки в таймер.

Пусть элементарный шаг  = 1,8, тогда для скорости вращения  = 2 об/с получим tш1 = 1,8/(3602) = 0,0025 с = 2,5 мс. Для скорости вращения  = 0,5 об/с получим tш2 = 1,8/(3600,5) = 0,0025 с = 10 мс.

Определим значения констант k1 и k2, которые необходимо загружать в таймер для реализации задержек tш1 и tш2. Требуемое число n отсчетов таймера равно tш/tц, где tц - время одного отсчета, равное длительности машинного цикла. Например, при тактовой частоте МК 6 МГц tц = 2 мкс. Тогда для двух фаз «Вращение» получим:

n1 = tш1/tц = 2500/2 =1250; n2 = tш2/tц, = 10000/2 = 5000.

Поскольку таймер считает на увеличение, загружаемые константы k1 и k2, должны представлять собой дополнительный код величин n1 и n2. Для указанных выше значений получим: k1 = 1111101100011110B, k2 = 1110110001111000B.

Число S элементарных шагов, которые необходимо выполнить для поворота на заданный угол , равно [/1,8], где [...] - означает округление до ближайшего целого значения (при этом погрешность угла поворота не будет превышать 0,9). Для фаз «Вращение_1» и «Вращение_2» соответственно имеем S1 = 180/1,8 = 100, S2 = 90/1,8 = 50. Константы S1 и S2 должны загружаться в счетчик элементарных шагов (СчЭШ) всякий раз перед началом соответствующей фазы «Вращение». В качестве СчЭШ будем использовать регистр R2 нулевого банка РОН.

Большие задержки в фазах «Пауза» (1с. и 2 с.) должны реализовываться аппаратно-программным способом, т. к. максимальная величина задержки, обеспечиваемая таймером, при тактовой частоте 6 МГц равна 2162 мкс = 131072 мкс = 0,131072 с. При этом необходимо дополнительно использовать программный счетчик интервалов задержки (СчИЗ), подсчитывающий число M переполнений аппаратного таймера. Пусть в обеих фазах «Пауза» аппаратно формируемая задержка будет равна 0,1 с. (для этого в таймер необходимо загружать константу k3 = 0011110010110000B), тогда в СчИЗ должны загружаться константы M1 = 10 (при переходе в фазу «Пауза_1») и M2 = 20 (при переходе в фазу «Пауза_2»). В качестве СчИЗ будем использовать регистр R3 нулевого банка РОН.

Будем считать, что управление обмотками двигателя осуществляется через четыре младших разряда порта P1, причем каждой обмоткой двигателя управляют два бита, которые в каждый момент времени должны иметь взаимно инверсные значения. Пусть первой обмоткой управляют разряды P1.0 и P1.1, а второй - P1.2 и P1.3. Тогда для вращения двигателя необходимо обеспечить попеременное инвертирование старшей и младшей пары разрядов, при этом в порту P1 должна формироваться следующая последовательность кодов: xxxx0101B, xxxx1001B, xxxx1010B, xxxx0110B, xxxx0101B и т.д. Селективную инверсию пары разрядов в младшей тетраде можно реализовать, используя операцию «Исключающее ИЛИ» с константами 00000011B и 00001100B. Так как в этих байтах существенна только младшая тетрада, то можно хранить только одну маску 11000011B и, после инверсии очередной пары бит, менять местами тетрады с помощью команды SWAP. Пусть для хранения маски используется регистр общего назначения R4, тогда отработка очередного элементарного шага может быть эффективно реализована следующим фрагментом программы:

MOV A, R4; загрузка маски в аккумулятор

XRL P1, A ; инверсия одной пары разрядов (переключение в одной обмотке)

SWAP A ; перестановка тетрад в маске

MOV R4, A; сохранение скорректированной маски.

Для реализации всех временных задержек в рассматриваемом примере будем использовать таймер/счетчик T/C0. При этом программа обработки прерывания от T/C0 для выполнения соответствующих действий должна распознавать текущую фазу цикла управления ШД. Для кодирования текущей фазы необходимо иметь два программных флага, в качестве которых будем использовать прямо адресуемые биты с адресами 20h (флаг FL_1) и 21h (флаг FL_2). Примем следующее кодирование фаз:

FL_1 FL_2 Фаза управления ШД

0 0 «Вращение_1»

0 1 «Вращение_2»

1 0 «Пауза_1»

1 1 «Пауза_2»

Алгоритм процедуры обработки прерывания от T/C0 представлен на рис. 4.3. Основная программа выполняет все необходимые предварительные установки (выбор регистрового банка, настройку T/C0 в нужный режим, подготовку к фазе «Вращение_1»), после чего переходит к выполнению бесконечного пустого цикла. Все действия по управлению ШД выполняются программой обработки прерывания от T/C0. Начальная подготовка к фазе «Вращение_1» включает: сброс флагов FL_1 и FL_2, загрузку в СчЭШ константы S1, а в T/C0 - константы k1.

Текст программы приведен ниже. Предполагается, что основная программа размещена по адресу 1000h, а программа обработки прерывания - начиная с адреса 1100h. В программе использованы следующие символические

имена констант: K1_L, K2_L, K3_L - младшие байты соответственно констант k1, k2 и k3; K1_H, K1_H, K1_H - старшие байты соответственно констант k1, k2 и k3; S1, S2 - константы S1 и S2; M1, M2 - константы M1 и M2.

; Программа управления ШД, основной цикл

.ORG 1000h ;

Соседние файлы в папке Материалы по микроконтроллерам