Алгоритм управления двухполюсным шаговым двигателем в микрошаговом режиме


PDF версия

В статье приведен простой алгоритм, предполагающий использование традиционных микроконтроллеров для управления серийно выпускаемыми мостами Н-типа. Такой алгоритм позволяет обеспечить работу двухполюсных шаговых двигателей в микрошаговом режиме. Статья представляет собой сокращенный перевод [1].

Двухполюсные шаговые двигатели предполагают простой способ позиционирования с выбранной скоростью перемещения и не требуют применения замкнутых контуров регулирования с использованием датчиков углового положения и других аналогичных средств. Для улучшения рабочих характеристик можно применить метод, известный как микрошаговое позиционирование, при котором на типовой сигнал, обеспечивающий работу в полношаговом режиме, накладывается синусоидальный ток.
Шаговые двигатели являются замечательными исполнительными устройствами для управления перемещением, поскольку они могут работать в пошаговом режиме. Эта особенность предоставляет два преимущества:
– требуемое положение легко достигается перемещением на расчетное число шагов с последующей остановкой;
– точность скорости перемещения достигается за счет управления шагами во времени.
Шаговый двигатель может останавливаться в заданном положении и удерживаться в этом состоянии независимо от изменений внешней нагрузки, и в то же самое время скорость вращения двигателя может поддерживаться равномерной даже при изменении напряжения источника питания. При использовании других типов двигателей без применения замкнутых контуров регулирования добиться таких результатов невозможно, в то время как для шаговых двигателей ничего подобного не требуется.
Однако шаговые двигатели имеют и свои недостатки, которые в некоторых случаях создают существенные проблемы. Одним из самых серьезных недостатков является резонанс или вибрации, возникающие при генерации последовательности шагов в моменты изменения знака угловой скорости. На рисунке 1 показано, что происходит с угловым положением двигателя в режиме полного шага для осуществления требуемого позиционирования. Когда ротору необходимо переместиться на следующую позицию, расположенную на расстоянии 1,8° от его текущего положения, перед достижением заданной цели он неминуемо будет колебаться в определенных угловых пределах.

 

Рис. 1. Режим полного шага и колебания углового положения ротора в процессе установки. Резонансные явления наблюдаются, если шаги задаются в моменты времени, когда ротор находится слишком далеко от требуемого положения

В момент принятия решения о следующем шаге важным параметром является расстояние между целью и текущим положением. Расстояние, проходимое ротором, во многом зависит от его стартовой позиции, и от того насколько она удалена от цели. Данное расстояние определяет скорость вращения ротора, изменение которой может привести к вибрации двигателя и потере им крутящего момента. Очень легко проследить, когда появляются вибрации на каждом конкретном двигателе: нужно медленно ускорять двигатель для постепенного увеличения скорости. При этом можно отметить зоны, в которых при изменении скорости вибрации либо увеличиваются, либо уменьшаются.
Как вибрация, так и потеря крутящего момента являются очень нежелательными явлениями. Поэтому при работе с шаговым двигателем важно их устранять. Один способ устранения этих недостатков заключается в ограничении тока до значений, позволяющих значительно снизить вибрации. К сожалению, если ток не модулировать динамически в соответствии с изменением нагрузки, система будет страдать от «выпадения» шагов, что является даже большей угрозой, поэтому всегда тяжело искать компромисс между точностью позиционирования и скоростью.
Более хорошим решением этой проблемы является ограничение вибраций за счет уменьшения расстояния, которое ротор должен преодолеть за один шаг. Двигатели характеризуются пошаговым разрешением. 200-ступенчатый шаговый двигатель за один шаг перемещается на 1,8°. Если удастся каким-либо способом разделить каждый шаг на несколько микрошагов, расстояние, проходимое ротором за один микрошаг, станет гораздо меньше 1,8°. Чем меньше шаг перемещения, тем меньше энергии потребуется для достижения заданного положения, а угроза возникновения вибраций станет минимальной.

Регулирование тока

Для формирования множества микрошагов, составляющих один полный шаг, необходимо иметь возможность регулирования тока. Большинство серийно выпускаемых интегрированных Н-мостов может решить эту задачу. Как показано на рисунке 2, регулировку тока в таком случае легко осуществить, измеряя ток, протекающий через чувствительный резистор RSENSE
Чувствительный резистор RSENSE стоит последовательно с обмоткой двигателя, поэтому измеряется реальный ток в обмотке. Падение напряжения на этом резисторе подается на усилитель с известным коэффициентом усиления. Напряжение необходимо усиливать для минимизации потерь, поскольку используемый резистор очень мал. После этого усиленное напряжение сравнивается с эталонным напряжением VREF. Когда напряжение, пропорциональное току в обмотке, становится больше напряжения VREF, Н-мост отключается на заданное время. По истечении этого времени Н-мост снова подключается. Процесс отключения Н-моста, как только ток достигает заданного значения ITRIP, постоянно повторяется, что и обеспечивает регулирование тока.

 

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

Подача эталонного напряжения обеспечивается внешними цепями. При модуляции напряжения VREF происходит модуляция тока в обмотке. Таким образом удается получить разбиение шага на микрошаги. При изменении величины тока изменяется магнитное поле статора. Управляя током обмотки, можно регулировать напряженность магнитного поля статора, которое, в свою очередь, определяет положение ротора. Например, если на 200-ступенчатый шаговый двигатель подан полный ток, каждый шаг составляет 1,8°. Но если на тот же двигатель помимо полного тока подается еще и половина от полного тока, то каждый шаг будет равен 0,9°, т.е. ток можно делить произвольным образом и получать еще меньшие шаги, а, значит, и лучшее разрешение.

Управление двигателем в микрошаговом режиме

Двухполюсные шаговые двигатели часто работают в режиме полных шагов. Для этого управляют фазами токов в каждой из обмоток, реализуя одну из четырех возможных комбинаций, показанных на рисунке 3: HI-LO, HI-HI, LO-HI и LO-LO, где LO означает ток –IMAX, а HI соответствует +IMAX. Если соблюдать такую последовательность переключений, двигатель будет вращаться в одном направлении. Если перевернуть эту последовательность, двигатель будет вращаться в противоположном направлении.
Положение ротора контролируется количеством шагов, выполняемых относительно известной стартовой позиции. Для установки скорости перемещения требуется задавать интервал времени между шагами. Скорость в таком случае будет обратно пропорциональна этому времени и измеряться количеством шагов в секунду (SPS). Для генерации этих шагов применяют внутренний таймер, настроенный на вычисление временных интервалов. После чего для управления фазами в соответствии с направлением вращения может быть использована подпрограмма обслуживания прерываний (ISR). Например, если текущий шаг находится в квадратурной позиции HI-HI, можно использовать полярность коммутации LO-HI, чтобы переместить двигатель на один шаг вперед, или HI-LO, чтобы передвинуться назад.
При модуляции значения VREF, поданного в схему Н-моста, происходит наложение на коммутационный сигнал, формирующий полный шаг токового компонента, что и позволяет получить микрошаги. На рисунке 4 показан этот механизм. Отметим, что сигнал PHASE всегда имеет положительное значение. При этом, когда уровень сигнала PHASE равен HI, ток в обмотке двигателя положительный, а когда LO — ток считается отрицательным. Это означает, что цифровой сигнал PHASE (также называемый в некоторых Н-мостах Direction (направление)), задает направление тока, но не его величину. Величина тока определяется модуляцией VREF.

 

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

Рис. 4. Информация по VREF-модуляции накладывается на коммутационный сигнал, формирующий полный шаг. В результате на обмотки двухполюсного шагового двигателя поступает коммутационный сигнал, состоящий из микрошагов

В следующем примере на вывод VREF подается сигнал, соответствующий половине полной синусоидальной волны. В принципе, можно использовать любые непрерывные сигналы, главное, чтобы они обеспечивали плавное перемещение. Синусоидальные сигналы являются промышленным стандартом, необязательным для исполнения. Разработчики могут применять и другие формы сигналов, лишь бы это вело к хорошим результатам. Поэтому для формирования микрошагов часто используются микроконтроллеры или цифровые сигнальные процессоры (DSP).
В результате наложения VREF-сигнала на фазовый сигнал формируется переменный сигнал (в рассматриваемом случае синусоидальный), используемый для управления всеми обмотками шагового двигателя. Рассмотрим, как генерируется VREF-сигнал.
Для формирования VREF-сигнала можно использовать модуль ЦАП. Поскольку у двухполюсного шагового двигателя две обмотки, требуются два канала ЦАП. Вместо ЦАП для формирования вполне приемлемого программируемого аналогового напряжения можно использовать быстродействующий широтно-импульсный модулятор (PWM), на выходе которого стоит фильтр нижних частот. Амплитуда такого аналогового сигнала выбирается при помощи внутренней справочной таблицы, хранящей форму сигнала, определенную для каждого конкретного приложения. Каждый раз при подготовке шага из справочной таблицы выбирается соответствующее значение и пересылается в регистр ЦАП.
При формировании и использовании справочной таблицы нельзя забывать о нескольких важных моментах. Первый из них — глубина данной таблицы. Количество элементов таблицы всегда превышает число значений тока в два раза. Поэтому, если требуется разделить полный шаг на восемь частей (восемь микрошагов), необходимо формировать восемь значений тока, и, значит, таблица должна содержать 16 элементов. Такая таблица будет хранить информацию о вращении на 180°. Для следующих 180° используется та же самая таблица, но с противоположной полярностью. Таким образом, сначала таблица используется для положительных токов, а потом — для отрицательных.
На практике для управления любым двухполюсным шаговым двигателем требуются два сигнала со сдвигом фаз: PHASE A и PHASE B. В случае синусоидальных сигналов PHASE A и PHASE B являются синусоидами, смещенными относительно друг друга на 90°. Другими словами, если PHASE A является синусоидой, PHASE B будет косинусоидой. Поэтому нет необходимости использовать две таблицы, можно ипользовать одну и ту же таблицу дважды.
Если для формирования синусоидального сигнала PHASE A используется таблица на 16 элементов, то для получения косинусоидального сигнала PHASE В можно применить ту же таблицу, сместившись по ней на 8 элементов. Эту процедуру можно описать следующим псевдокодом:

#define TABLE_DEPTH 16
VREF_PHASEA = LOOKUPTABLE[INDEX]
VREF_PHASEB = LOOKUPTABLE[(INDEX + TABLE_DEPTH / 2) & (TABLE_DEPTH-1)]
Increase INDEX.

Отметим, что индекс PHASE В необходимо нормализовать в соответствии с размером таблицы. Если для PHASE A из таблицы выбирается значение элемента #15, для PHASE B надо использовать не элемент #23, поскольку он выходит за пределы таблицы, а элемент #7. Корректное нормализованное значение можно получить, применив логическую операцию «И» к индексу справочной таблицы и размеру таблицы, отняв от него 1. Такой элемент «И» часто называют INDEX_MASK.
Разобравшись с тем, как получить из справочной таблицы информацию о величине тока, будем разбираться с фазовой информацией. Требуется ответить на вопрос, надо ли ее также хранить в таблице. Если да, то будет ли размер такой таблицы в четыре раза больше числа значений тока на один шаг. В действительности, в создании новой таблицы нет необходимости, поскольку информацию о фазе сигнала PHASE можно получить из самой переменной INDEX.
Значение INDEX меняется в пределах 0… TABLE_DEPTH — 1. Но если позволить переменной INDEX меняться в пределах 0… 2×TABLE_DEPTH, старший значащий разряд результирующего числа можно использовать для определения полярности сигнала PHASE. Рассмотрим случай из микрошагов по 8°. В этом случае TABLE_DEPTH равно 16, но параметр INDEX будет меняться в диапазоне 0…31. Поскольку теперь требуется две маски: одна для фазовой информации (PHASE_MASK), а другая для извлечения данных из справочной таблицы (INDEX_MASK), необходимо изменить стратегию формирования индекса. Новый псевдокод будет выглядеть следующим образом:

#define  PHASE_MASK  0x10
PHASEA = INDEX & PHASE_MASK
PHASEB = (INDEX + TABLE_DEPTH / 2) & PHASE_MASK.

Отметим, что при получении фазы сигнала PHASE нет необходимости заботиться о преобразовании значения INDEX, поскольку за это несет ответственность старший значащий разряд. Другими словами, старший значащий разряд определяет фазу сигнала, а все более младшие разряды используются в качестве индекса справочной таблицы для извлечения информации о величине тока.

#define  TABLE_DEPTH 16
#define  INDEX_MASK TABLE_DEPTH — 1
VREF_PHASEA = LOOKUPTABLE[INDEX & INDEX_MASK]
VREF_PHASEB = LOOKUPTABLE[(INDEX + TABLE_DEPTH / 2) & (INDEX_MASK)]
INDEX = INDEX + IndexIncrement.

Здесь изменен способ увеличения индекса. Но иногда возникает потребность не увеличивать индекс, а уменьшать его. Например, когда есть необходимость извлечь из справочной таблицы информацию о направлении вращения. Другими словами, перемещение по таблице вперед соответствует вращению двигателя по часовой стрелке, а назад — против часовой стрелки.
Теперь рассмотрим технические средства реализации представленного кода для корректного использования справочной таблицы. Для формирования пошаговых команд используется аппаратно реализованный запуск ISR. Это может быть либо захват входа таймера, либо соответствующая конфигурация порта входов/выходов общего назначения (GPIO) для осуществления прерывания. Необходимо заранее определиться, как будет распознаваться пошаговая команда: по переднему, заднему или по обоим фронтам. Как только регистрируется такой переход, начинает выполняться код, определенный выше.
Вторая ISR отвечает за запросы о направлении вращения. И здесь может быть использована любая форма аппаратного входа, обеспечивающая прерывание по переходу, при этом такой вход должен реагировать как на передний, так и на задний фронт. При регистрации переднего фронта индекс увеличивается на +1. При регистрации заднего фронта индекс уменьшается на –1.
Из всего сказанного видно, что довольно просто превратить драйвер шагового двигателя в микрошаговый коммутатор, и при этом код программы для осуществления одного микрошага будет достаточно мал.

Простое решение проблемы

Использование микроконтроллера или DSP для реализации режима микрошагов на базе стандартного алгоритма полношаговой коммутации является довольно простым способом решения проблемы с резонансом. То, что режим микрошагов реализуется больше программным, а не аппаратным способом, делает его универсальным, что и привлекает внимание разработчиков. Здесь может быть использована любая форма сигнала, если того требует конкретный проект. Количество микрошагов определяется заданной разрешающей способностью. Для приложений, требующих очень плавного перемещения, количество микрошагов может доходить до тысячи.

Литература
1. A simple algorithm for microstepping a bipolar stepper motor// http://www.eetimes.com .

Оставьте отзыв

Ваш емейл адрес не будет опубликован. Обязательные поля отмечены *