Как управлять шаговым двигателем с компьютера

Обновлено: 05.07.2024

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


Расскажу кратко, более подробно про него можно прочитать в википедии или тут.
Самый простой вариант:
Есть четыре электромагнитные катушки 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 — запатентован.

image

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

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

В общем случае, у драйвера есть пины, отвечающие за выставление режима, и управляющие пины.
Например, так:
Сам режим

Максимальная сила тока (от максимальной по спецификации).

Управляющие пины: таймер, направление вращения(по часовой стрелке, против часовой стрелки), пин сброса и пин enabled.

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

image

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

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

Шаговый двигатель используется в машинах для точного перемещения. Наладим управление шаговым двигателем через USB с компьютера своими руками. Нам потребуется:

1) Шаговый двигатель, возьмем - Nema23 76 мм, вместо него может быть другой, управлять будем биполяным методом, любой гибридный и биполярный шаговый двигатель будет работать с таким же управлением.

2) Блок питания, возьмем - импульсный блок питания мощностью 360W с выходным напряжением 24V / 15A, может использоваться любой другой блок питания, если будет достаточно мощности и напряжения для работы двигателя. Более мощному двигателю будет нужно больше напряжения. Предел напряжения нашего драйвера ограничивается максимальным напряжением, которое выдерживают транзисторы, это 100V, у нас блок питания на 24V. В случае большего напряжения транзисторы в схеме необходимо заменить на более мощные, также при увеличении напряжения, транзисторы могут начать греться, если такое случилось, необходимо дополнительно обдувать их куллером (у меня все в порядке и куллер не требуется). Для подключения блока питания к сети 220V также нужен шнур и нужно определить где в вашей розетке ноль, а где фаза. Контакт блока N подключается к нулю, а L к фазе, также можно подключить заземление (но не обязательно). Определение возможно при помощи индикаторной отвертки, у меня определилось, что слева ноль, а справа фаза.

Nema 17 купить

Импульсн. блок питания купить

Шнур с вилкой купить

Индикаторная отвертка купить

Соединитель Nema 17 купить

Как крутить шаговый двигатель

Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки - 4 провода, первая обмотка - черный (A) и зеленый (A*) провод, вторая обмотка - красный (B) и синий (B*). За одну смену комбинаций делается 1 шаг - 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться - крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.

Чтобы крутить шаговый двигатель, надо:

1) Собрать устройство - USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут - контроллер USB. Если USB связь работает нормально, то можно приступать к изготовлению драйвера.

2) Написать программу для компьютера, которая будет посылать USB команды устройству.

3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель.

USB контроллер шаговых двигателей и USB драйвер шагового двигателя

Взятый нами двигатель является гибридным и поддерживает несколько вариантов управления. Управлять двигателем будем биполярным методом и соответственно собираем мы драйвер биполярного шагового двигателя с USB контроллером. Сначало покажу готовый результат, а потом подробно рассмотрим его. Вот фото собранного драйвера шагового двигателя с USB управлением, который я собрал:

Драйвер шагового двигателя с USB управлением своими руками

Схема драйвера биполярного шагового двигателя и USB контроллера (схема длинная и нуждается в прокрутке для просмотра):

Драйвер шагового двигателя USB на микроконтроллере AVR своими руками

Драйвер шагового двигателя USB на микроконтроллере AVR своими руками - схема своими руками

ATmega16A купить

Драйвер IR2101 купить

Транзистор IRF540N купить

Диод Зенера 3V6 купить

Диод 1n4148 купить

Конденсатор 20 pF купить

Конденсатор 3.3 nF купить

Кварцевый генератор 12 купить

Конденсатор 2A104J купить

Клеммник купить

Резистор 1.5 кОм купить

Резистор 100 Ом купить

Резистор 10 Ом купить

Резистор 0.1 Ом купить

Кабель USB купить

Макетная плата купить

Размер: 63 x 2 горизонтальных линий и 4 вертикальные линии

Проводки купить

Набор проводков купить

Дополнительно нужно (нет в наличии):

1) Модуль питания DC-DC SMAU01L-12 (вместо него пойдет любой конвертер DC-DC с 5V до 10V-15V) - 1 шт., возможно можно без него, от 5V питать (не проверено)

Главным компонентом схемы является программируемый микроконтроллер AVR - ATmega16A, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье
управление машиной. Для устройства можно использовать и другой микроконтроллер AVR, я выбрал ATmega16A, т.к. в нем с запасом имеется много памяти и контактов для подключения нескольких двигателей и большого количества рабочих инструментов.

Управление двигателем подключается к контактам PB0, PB1, PB2, PB3, на остальные свободные P-контакты можно в будующем подключить еще двигатели и рабочие инструменты, но пока они пустуют. Микроконтроллер ATmega16 отдает команды и обрабатывает USB сигналы после того как в него записана программа (ниже она будет написана). После него идет конструкция из микросхем IR2102 и транзисторов IRF540N (2 так называемых H-моста) - она приводит шаговый двигатель в движение.

Драйвер IR2101 нужен для преодаления большой емкости затвора транзистора IRF540N, что позволяет открывать и закрыть транзистор с большой скоростью (например принимать сигнал ШИМ, которым может регулироваться скорость двигателя при необходимости - об этом сигнале дальше напишу), что нам и нужно. К сожалению для питания этого драйвера необходимо 10-15V, у нас есть только 5V от USB. Поэтому пришлось поставить компонент DC-DC SMAU01L-12, который преобразует 5V в 12V, вместо него можно использовать любой другой способ получения такого напряжения, например, при помощи трансформатора или любым другим путем. К VCC подключается +12V, к COM -12V. Один драйвер работает с 2мя транзисторами - верхним (H) и нижним (L). Контакты HIN и LIN - входной сигнал с микроконтроллера для верхнего и нижнего транзистора, по этому сигналу транзисторы открываются и закрываются. HO и LO - это выходные сигналы, транзисторы подключаются гейтами (G) к этим контактам. Они подключаются не просто так - справа на линиях 2 резистора 10/100 Ом и диод, они нужны для нормальной работы транзисторов - чтобы они замедлялись при открытии и не замедлялись при закрытии, эти транзисторы слишком быстро открываются и это может вызвать проблемы. Диод и конденсаторы 3300 пФ - нужны для работы драйвера IR2101 согласно документации на эту микросхему.

Каждая обмотка (фаза) двигателя (у двигателя 2 обмотки A и B - 4 контакта) подключается к H-мосту из транзисторов IRF540N. H-мост - это специальная схема соединения транзисторов, которая позволяет подавать через них напряжение высокого уровня (24V) в разных направлениях. Один мост изготавливается из 4-х транзисторов. В итоге здесь вы видите 2 H-моста, которые позволяют гонять разнонаправленное напряжение высокого уровня по 2м обмоткам двигателя и тем самым крутить его.

Обратите внимание, что в мосту - HIN верхнего драйвера соединяется с LIN нижнего драйвера, а LIN верхнего с HIN нижнего. Это сделано для одновременной подачи сигналов. Если вы включили HIN сверху, то обязаны включить LIN с низу, иначе произойдет короткое замыкание. Такое подключение позволяет автоматом включать пару. Впрочем короткое замыкание все же возможно, если вы откроете и HIN и LIN на одном мосте, поэтому не допускайте этого. На контактах PB0 - PB3 допустимы только значения 0000, 1010, 0110, 0101, 1001. Их перебор крутит двигатель. Подача других значений скорей всего приведет к короткому замыканию моста.

Мощные резисторы с низким номиналом 0.1 Ом и высокой мощностью (3-5 Вт) нужны для защиты от высокого тока - это шунты. Если что их можно снять и заменить простым соединением с минусом питания, если например не будет хватать мощности. Для слабых резисторов мощность берется от тока USB: 0.05 А * 5 V = 0.25 Вт (ток USB задается программно, по умолчанию в нашей программе стоит 0.05). Черная полоска на диодах соответствует вертикальной линии на схеме.

Шаговый двигатель и блок питания подключаются к H-мостам, как показано на схеме. Минусы питания 24V, 12V и 5V соединяются. Между плюсом и минусом 24V линии ставится сглаживающий пленочный конденсатор.

FL57STH76

В уроке разработаем драйвер шагового двигателя с управлением от компьютера. Я расскажу о текстовом протоколе обмена данными с использованием AT команд. Научимся управлять двигателем через монитор последовательного порта Arduino IDE и с помощью программы верхнего уровня StepMotor.

Я поставил задачу разработать интеллектуальный драйвер шагового двигателя на базе платы Ардуино. Драйвер должен позволять управлять двигателем от компьютера через стандартный кабель подключения платы Ардуино или через любой другой последовательный порт.

Функциональные возможности устройства определяются библиотекой StepMotor из урока 29.

Аппаратная часть драйвера.

Для подключения униполярного двигателя к плате Ардуино я использовал схему из Урока 28.

Схема подключения биполярного шагового двигателя

Но можно применить любую другую схему для униполярного или биполярного шаговых двигателей.

Я подключил достаточно мощный двигатель FL57STH76-1006. У него 400 шагов на полный оборот, ток фазы 1 А.

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

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

Обмен данными между платой Ардуино и компьютером.

Разработка программной части драйвера сводится к получению данных от компьютера и вызове функций библиотеки StepMotor из Урока 29. Работу с библиотекой StepMotor мы подробно разбирали в этом уроке. А вот полноценным обменом данными с компьютером мы еще не занимались.

Прежде всего, необходимо определить протокол обмена. С помощью последовательного порта мы можем обмениваться байтами. А нам надо посылать команды, числа. Протокол и определяет то, как интерпретировать последовательность байтов.

Протокол обмена данными – это набор правил, соглашений, которые определяют обмен данными между программами. В нашем случае между программой драйвера платы Ардуино и программой верхнего уровня на компьютере.

Протоколы бывают текстовыми и числовыми. Например, число ”231” в текстовом протоколе будет передано как 3 байта с кодами символов ”2”,”3” и ”1”. А в числовом протоколе для передачи этого же числа достаточно передать один байт с двоичным кодом 231. Из этого примера видно главное достоинство числовых протоколов – для передачи одинакового объема информации требуется значительно меньше передаваемых данных.

Но у текстовых протоколов есть свое преимущество, благодаря которому они применяются чаще, чем числовые. Это возможность контроля, отладки их стандартными средствами – текстовыми терминалами. Когда мы отлаживали программы на Ардуино с помощью последовательного порта, мы посылали данные на компьютер в текстовом формате. Запускали монитор последовательного порта и видели на экране компьютера напряжение, или температуру, или какое-нибудь другое данное в понятном нам виде. Но ведь мы могли послать данные в двоичном коде командой Serial.write(byte). Данных было бы значительно меньше, но для их расшифровки пришлось бы использовать специальную программу, которая понимает, что это за данные и как их интерпретировать.

Лично я сторонник числовых протоколов, особенно на устройствах с ограниченными ресурсами. Но для разработки драйвера я выбрал текстовый протокол из-за его универсальности, простоты демонстрации и отладки.

Текстовый протокол обмена через AT команды.

AT команды это простой текстовый протокол обмена данными, в котором каждая команда начинается символами “AT”. Далее следуют параметры и коды также в текстовом виде.

Последовательность символов “AT” происходит от английского “Attention” (внимание) и означает, что пришла новая команда. Стандартным ответом AT протокола является последовательность “OK” (все нормально).

AT команды широко используются для обмена данными с модемами, в том числе и с модулями GSM, с модулями WiFi, GPS и многими другими устройствами. Мы вернемся к AT командам в уроках о беспроводных технологиях связи.

AT команды драйвера шагового двигателя.

Разработаем наш протокол обмена.

Какие команды нам нужны? Если мы используем библиотеку StepMotor, то нам нужны команды для каждой функции библиотеки:

  • инициировать вращение на заданное количество шагов;
  • задать режимы коммутации и остановки двигателя;
  • задать скорость вращения;
  • считать число оставшихся шагов;
  • проверить связь.

К командам соответствующим методам библиотеки добавлена команда проверки обмена. Надо иметь возможность узнать, включен ли драйвер.

Общий формат команды выглядит так:

  • Каждая команда должна начинаться с ”AT”.
  • Далее следует последовательность символов – кодов, чисел, параметров.
  • Заканчивать команду принято управляющими символами ”\r” (возврат каретки, код 13) и ”\n” (перевод строки, код 10). Об этих символах написано в предыдущем уроке. Монитор последовательного порта автоматически добавляет ”\r\n” к любым данным. Т.е. когда Вы набираете в мониторе ”AT” и нажимаете клавишу “Enter”, то монитор передает 4 символа ”AT\r\n”.
  • В ответе используется последовательность ”OK\r\n”. Благодаря управляющим символам каждый ответ в окне монитора последовательного порта будет печататься с новой строки.

Используя эти правила, я выбрал для драйвера следующие форматы AT команд.

  • 0 – шаговый режим;
  • 1 – полу шаговый режим;
  • 2 – между шаговый режим.
  • 0 – без фиксации двигателя при остановке;
  • 1 – фиксация ротора остановленного двигателя.

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

Еще в протоколе отсутствует защита целостности данных контрольными кодами. Но AT команды, как правило, используются для устройств, расположенных вблизи друг от друга и в контрольных кодах нет необходимости. К тому же наличие контрольных сумм сведет на нет главное достоинство текстового протокола – возможность управления с любого текстового терминала. Не будете же Вы рассчитывать контрольные коды вручную.

Реализация резидентной программы драйвера.

Программу можете загрузить по этой ссылке:

Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Должны быть установлены библиотеки TimerOne.h и StepMotor.h. Обе библиотеки есть в Уроке 29. Как установить написано в Уроке 9.

О работе с библиотекой StepMotor я подробно писал в уроке 29. Остается пояснить блок обмена данными с компьютером.

В цикле loop() расположен программный блок выделения команды.

// обмен с компьютером
letterNum= Serial.available(); // чтение числа принятых символов

if ( letterNum == 0 )
// данных нет
timeOutCount= 0;
>
else
// есть данные
if ( letterNum != prevDataNum ) timeOutCount= 0; // новое данное
prevDataNum= letterNum; // перегрузка числа принятых символов
>

if ( timeOutCount > TIME_OUT )
// пауза между данными больше тайм-аута

// команда принята, расшифровка

Блок работает по следующему алгоритму:

  • Определяет, поступило ли в порт новое данное.
  • Если данное пришло, то сбрасывает счетчик времени timeOutCount.
  • Если счетчик времени timeOutCount превысил значение TIME_OUT, т.е. данные перестали поступать, то определяет, что команда принята и переходит к расшифровке команды.

По сути, блок выделяет паузы между символами более 30 мс (TIME_OUT). Затем символы считываются из буфера последовательного порта и расшифровываются.

Обратите внимание, что программа драйвера не подвешивает программу. В цикле loop() можно еще выполнять другие задачи параллельно.

Блок расшифровки команды я описывать не буду. В нем совершаются последовательные действия: сравниваются символы, преобразуются числа, формируются ответы. Комментариев достаточно, можно разобраться.

Проверка работы драйвера.

Загружаем скетч в плату, запускаем монитор последовательного порта Arduino IDE. Проверяем команды. Я указываю параметры для моего двигателя (400 шагов на оборот).

Отправляем Получаем Действие
AT OK Проверка обмена
ATD=20 OK Устанавливаем скорость
ATS=400 OK Сделать оборот против часовой стрелки
ATS=-400 OK Сделать оборот по часовой стрелке
ATS=1 OK Сделать шаг против часовой стрелки
ATS=-1 OK Сделать шаг по часовой стрелки
ATM=1,0 OK Установить полу шаговый режим
ATS=800 OK Сделать оборот против часовой стрелки
ATS=-800 OK Сделать оборот против часовой стрелки
ATS=30000 OK Вращение против часовой срелки
ATR? 3772OK Чтение оставшихся шагов
ATR? 3410OK Чтение оставшихся шагов
ATR? 3052OK Чтение оставшихся шагов
ATS=0 OK Остановка

Как видите, управлять двигателем можно с помощью стандартной программы – монитора последовательного порта. Существует много подобных мониторов, терминалов, с помощью которых можно подавать команды. Только надо установить скорость 9600 и режим добавления в конце команды управляющих символов “возврат каретки”, “перевод строки”. В мониторе последовательного порта режим выбирается справа в низу окна и называется ”NL & CR”.

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

Я написал простенькую программу для управления от компьютера шаговым двигателем через драйвер на плате Ардуино. Программа поддерживает все доступные режимы.

Загрузить программу можно по этой ссылке:

Зарегистрируйтесь и оплатите. Всего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Подключение, первый запуск, выбор порта происходит так же, как в программе Thermometer из Урока 24. Скажу только, что для начала удобнее использовать виртуальный порт, который формирует драйвер платы Ардуино при подключении платы к компьютеру. Запускать Arduino IDE необязательно. При первом включении в программе StepMotor необходимо выбрать номер порта. Программа запомнит его и будет использовать при последующих запусках.

Основное окно программы выглядит так.

Окно программы StepMotor

Панель ”Шаги” позволяет инициировать вращение двигателя на заданное число шагов. Шаги задаются ползунком или в редактируемом окошке и отсылаются в драйвер кнопкой ”-->” справа от панели.

С помощью панели ”Скорость” задается значение делителя коммутации шагов, а значит и скорость вращения. Загружается в драйвер кнопкой ”-->” справа от панели.

Панель ”Режим” позволяет задать режим коммутации фаз и выбрать режим остановки двигателя.

Надо помнить, что параметры, заданные в этих трех панелях посылаются в драйвер при нажатии кнопок ”-->” справа от соответствующих панелей.

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

В панели ”Драйвер” :

  • Отображается число оставшихся шагов. Этот параметр постоянно, в цикле считывается из драйвера.
  • Кнопка ”Стоп” останавливает двигатель в любом режиме.
  • Кнопка ”<<” запускает двигатель в режиме непрерывного вращения против часовой стрелки.
  • Кнопка ”>>” запускает двигатель в режиме непрерывного вращения по часовой стрелке.
  • Кнопка ”+1 шаг” заставляет двигатель сделать один шаг против часовой стрелки.
  • Кнопка ”-1 шаг” заставляет двигатель сделать один шаг по часовой стрелке.
  • Светодиод “Обмен” индицирует состояние связи. Красный цвет означает ошибку, зеленый – нормальную работу.

Программа позволяет легко проверить работу драйвера во всех режимах. Но главная цель – показать принцип управления контроллером Ардуино от компьютера по протоколу AT команд. Мы будем использовать эту программу в последующих уроках о подключении к Ардуино биполярного двигателя и драйвера на основе модуля TB6560-V2.

В следующем уроке попробую сделать на основе этого драйвера шагового двигателя следящую систему без обратной связи.

Параллельный порт является великолепным интерфейсом, позволяющим подключать к персональному компьютеру множество самых различных устройств. Однако он может быть легко поврежден, поэтому при его использовании для подсоединения самодельных внешних устройств нужно быть очень внимательным. Если вы не уверены в том, что вы все делаете правильно, сначала проконсультируйтесь у специалистов и только потом экспериментируйте. Ниже приводится краткое описание параллельного порта. Параллельный порт имеет несколько линий ввода/вывода, которые могут быть разделены на две группы — линии передачи данных и линии сигналов управления. Линии передачи данных — двунаправленные (разумеется, речь идет о режимах ЕСР/ЕРР), и именно их мы и будем использовать. В табл.1 описано назначение выводов разъема порта LPT.

  1. Подсоедините вывод любой обмотки двигателя к выводу питания +12 В, а к другому выводу этой обмотки — общий провод. Вал должен провернуться на небольшой угол. Пометьте первый вывод цифрой 1.
  2. Оставьте эти два вывода в одном месте. Теперь подключите выводы других обмоток к источнику питания 12 В. Обратите внимание, что эти два вывода заставляют шаговый двигатель поворачивать вал на небольшой угол в другую сторону. Отметьте один из них номером 2, другой — номером 4.
  3. Оставшийся вывод обозначьте номером 3.

Прим. переводчика: я использовал шаговый двигатель от русского дисковода. Тип двигателя: ПБМГ-200-265Ф. Для определения выводов применялся тестер. При этом я зарисовал схему обмоток, фиксируя на ней измеренные сопротивления. Оказалось, что двигатель имеет четыре обмотки. Две обмотки соединены друг с другом и имеют общий провод белого цвета, вторые выводы этих обмоток красного и зеленого цвета. Две другие обмотки также соединены друг с другом и имеют общий провод черного цвета, вторые выводы этих обмоток голубого и желтого цвета. Если соединить белый и черный провода, получается практически та же схема, что и описанная в оригинальной статье. Порядок подключения выводов я определил опытным путем.
Для управления шаговым двигателем можно использовать микросхему драйвера ULN2003, которая содержит семь мощных транзисторных ключей, собранных по схеме Дарлингтона. Каждый ключ способен управлять нагрузкой с током потребления до 500 мА. Микросхема имеет резисторы в цепи базы, что позволяет напрямую подключить ее входы к обычным цифровым микросхемам. Все эмиттеры соединены вместе и выведены на отдельный вывод. На выходах транзисторных ключей имеются защитные диоды, что позволяет управлять с помощью этой микросхемы индуктивными нагрузками при минимуме внешних компонентов. В нашей конструкции использовано только четыре транзисторных ключа. Электрическая схема подключения шагового двигателя показана на рис. 2.

Обратите внимание, что первый вывод шагового двигателя, идентифицированный с помощью описанной ранее процедуры, подсоединен к линии DO параллельного порта (разумеется, через микросхему ULN2003). Каждый следующий вывод подсоединен к соответствующему выводу параллельного порта. Если порядок подключения выводов шагового двигателя неверный, вал мотора будет не вращаться, а лишь поворачиваться на небольшой угол из одной стороны в другую и наоборот. Общий провод схемы подсоединен к источнику питания не напрямую, а через стабилитрон. Это сделано с целью защиты схемы от напряжения ЭДС самоиндукции, возникающего в катушках при резком выключении напряжения питания схемы.
Программа, разработанная для описываемого устройства, достаточно проста. Она управляет выводами порта и формирует на них специальную последовательность импульсов. Эта последовательность показана в табл. 2 и 3.
Различие между алгоритмами (полным и половинным углом поворота вала на один шаг) состоит в том, что во втором случае скорость вращения оказывается в два раза ниже, при этом в два раза уменьшается угол поворота вала двигателя на каждом шаге, т. е. увеличивается разрешающая способность системы. Также во втором случае примерно в два раза увеличивается потребляемая мощность, и кроме того, двигатель способен развивать в два раза больший крутящий момент.
Для изменения направления вращения вала двигателя необходимо формировать указанные последовательности в обратном порядке.

Таблица 2
№ шага DO D1 D2 D3
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
Таблица 3
№ шага DO D1 D2 D3
1 1 0 0 0
2 1 1 0 0
3 0 1 0 0
4 0 1 1 0
5 0 0 1 0
6 0 0 1 1
7 0 0 0 1
8 0 0 0 1

Ниже приведен короткий пример программы для Turbo С, работающей в операционной системе MS-DOS. Эта программа заставляет шаговый двигатель вращаться в прямом направлении, в режиме полного угла на один шаг.

Читайте также: