Pull to refresh

Управляем шаговым электродвигателем с помощью драйвера

Reading time 4 min
Views 12K
Что такое шаговый электродвигатель?

Я его буду называть ниже просто “мотор”, для краткости.


Расскажу кратко, более подробно про него можно прочитать в википедии или тут.
Самый простой вариант:
Есть четыре электромагнитные катушки A, B, A’, B’. Если по ним пропускать ток — они становятся магнитами (катушки А и В активны при “прямом” направлении тока, A’ и B’ — при “обратном”).
Есть колесо с зубчиками (например, зубчик один — стрелка).
Зубчик притягивается к той катушке, по которой пропускают ток. Таким образом, если последовательно включать ток в катушках, то стрелка будет совершать вращательное движение.
Чтобы сделать это движение более плавным, можно добавлять зубчики, можно катушки, а можно и то и другое — принцип остаётся тот же, меняется только тяга и угол поворота за один вкл/выкл.
Обычно используется следующая конфигурация: катушки выстраиваются по четыре вдоль периметра вращения, на каждую четвёрку есть по зубцу, таким образом есть шестерёнка и много катушек вокруг неё.
Рассмотрим самую простую модель с четырьмя катушками и одним зубчиком.
Подумаем, какими способами можно вращать стрелку.
Допустим, начальное её положение — у B’.
1. Самое очевидное:
Включаем А: стрелка останавливается напротив А.
Выключаем А, включаем В: стрелка идёт к В и останавливает напротив.
Выключаем В, включаем A’: стрелка останавливает уже у A’.
Выключаем A’, включаем B’: стрелка идёт к B’ и останавливает напротив.
Выключаем B’, включаем А: стрелка останавливается напротив А. и т.д.

За каждый раз раз совершается вращение в 90 градусов, полный круг, соответственно, за четыре раза.
Быстро, но очень резко.
Чем плохо:
Резко, потому шумно.
Сразу большой угол поворота, поэтому в зависимости от груза инерция может быть большой, и разогнавшаяся стрелка не остановится сразу, поэтому нужна бОльшая задержка перед тем, как выключить текущую катушку и включить следующую.
Из-за проблемы выше, если скорость сделать слишком большой, можно потерять контроль над вращением, и у вас что-нибудь куда-нибудь улетит или движение станет совсем уж странным.
Чем хорошо: относительно просто реализуемо.

2. Чуть-чуть менее очевидное решение:
Включаем А и B’: стрелка останавливается между А и B’, ровно посередине.
Выключаем B’, включаем В: стрелка фиксируется между А и В.
Выключаем А, включаем A’: стрелка между В и A’.
Выключаем В, включаем B’: стрелка останавливается между A’ и B’.
Выключаем A’, включаем А: стрелка между B’ и А. И т.д.
За раз — те же 90 градусов, полный круг тоже за четыре раза.
Тоже резко.
Что плохо:
Все то же, что и в предыдущем методе
Плюс чуть-чуть сложнее в реализации, но не слишком.
Что хорошо:
Одновременно “в силе” сразу две катушки, то есть тяга гораздо лучше, чем у предыдущего метода.
Соответственно, порог скорость + инерция, после которого мы теряем управление, становится выше по сравнению с первым методом.

3. Измельчим шаги:
Пусть у нас для каждого мотора есть не только состояние вкл/выкл, а некая таблица состояний:
a)
0%
50%
100%
Здесь 50% означает, что сила тока в катушке 50% от максимальной.
Можно ещё мельче:
b)
0%
25%
50%
75%
100%
Или ещё мельче.
Тогда последовательность будет такой:
B’ 100%, А 0%
B’ 75%, А 25%
B’ 50%, А 50%
B’ 25%, А 75%
B’ 0%, А 100%
И то же самое для пар А-В, В-A’, A’-B’, B’-В
Что плохо:
Сложнее реализовать.
Что хорошо:
Шаг мельче, следовательно меньше шума и дребезжания, движение более плавное.
Меньше проблем с инерцией и потерей управления.
Можно сделать ещё мельче, и движение будет ещё плавнее.

4. Будем подавать ток аналоговым способом.
Так сказать предельный случай при увеличении частоты разбиения до бесконечности.
B’ плавно меняем от 100% до 0%, А от 0% до 100%, и так для всех пар А-В, В-A’, A’-B’, B’-В.
Чем хорошо:
Очень плавно, хороший контроль, хорошая тяга. И тишинааа.
Чем плохо:
Аналогово.
Запатентовано.

5. Используем следующий вариант:
Включаем B’ и А: стрелка между B’ и А.
Выключаем B’: стрелка у А.
Включаем В: стрелка между А и В.
Выключаем А: стрелка у В.
Включаем A’: стрелка между A’ и В.
Выключаем В: стрелка у A’.
Включаем B’: стрелка между B’ и A’.
Выключаем A’: стрелка у B’
Включаем А: стрелка между B’ и А.
И т.д.
Отличается от “0%,50%,100%” шага 3 только тягой. 5 — сильнее.

Методы 1, 2, 3, 5 — стандартные, у них даже есть обозначения.
Если считать положение “у катушки” за 1, а положение “между катушками” за 2, следующие обозначения станут понятными:
Режим 1 будет называться 1 phase (полношаговый) (стрелка останавливается только на фазе “1”), но он почти не используется — тяга нехороша и вообще.
Режим 2: 2 phase (полношаговый) (только на фазе “2”).
Режим 5: 1-2 phase (полушаговый) (останавливаемся и на “1” и на “2”).
Режим 3: В зависимости от частоты разбиения:
4 (Цикл от положения “перед катушкой” до “перед следующей катушкой” равен четырём шагам): 2W1-2 phase (2*2 = 4)
8: 4W1-2 phase (4*2 = 8)
По-русски микрошаговый.

Режим 3-а никак не называется, потому что не используется, а метод 4 — запатентован.

Таким образом, зависимость силы тока от времени на катушках А и В (A’ и B’ соответствуют отрицательным значениям силы тока) должна быть примерно такой (для случая 1-2 phase).
image

Драйвер.

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

В общем случае, у драйвера есть пины, отвечающие за выставление режима, и управляющие пины.
Например, так:
Сам режим
image
Максимальная сила тока (от максимальной по спецификации).
image
Управляющие пины: таймер, направление вращения(по часовой стрелке, против часовой стрелки), пин сброса и пин enabled.
image
CW — clock-wise
CCW — counter clock-wise
Initial mode — заранее определённое состояние катушек, соответствующее “начальному”. Может быть разным для разных режимов. Например, 100% на А и 0% на В для 1-2 phase, 100% на А и -100% на В для 2 phase. Подержав мотор в этом режиме некоторое время, мы гарантируем, что мотор повёрнут определённым заранее известным образом. Можно начинать отсчёт с этого состояния (нам же нужно в каждый момент времени знать, на какой позиции находится мотор).

Наконец, мы имеем правильно выставленный режим (например, 1-2 phase) и работающий таймер. Тогда выход драйвера будет выглядеть следующим образом:
image

В общем-то, всё.

Для примера использовался драйвер от Тошиба TB6560AHQ/AFG, хотя подробности не сильно важны, так как цель статьи — рассказать именно общий принцип, не вдаваясь в детали.
Tags:
Hubs:
+47
Comments 30
Comments Comments 30

Articles