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

Рассмотрим драйвер электродвигателей на транзисторах и микросхеме L298, разберемся с принципом работы H-моста. Узнаем особенности подключения драйверов на L298 к разным двигателям и источникам питания, проведем простые эксперименты с шаговыми движками и двигателями постоянного напряжения. Подключение к Raspberry Pi и простейшие программы для теста управления драйвером.

Что такое H-мост

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

Почему такое название? - потому что схема включения двигателя и переключателей для коммутации напоминает латинскую букву H. Принципы работы H-моста показан нарисунке ниже.

Рис. 1. Как работает H-мост, принцип коммутации двигателя для вращения в разные стороны.

Как видим, при помощи 4х переключателей мы можем подключать мотор к источнику питания в разной полярности, что в свою очередь заставит вращаться его вал в разные стороны. Переключатели можно заменить на реле, или же на мощные электронные ключи на транзисторах.

Важно заметить что НЕЛЬЗЯ допускать замыкания двух ключей на одной стороне H-моста, поскольку получится короткое замыкание, при проектировании схемы моста нужно заложить это правило в логику и таким образом реализовать защиту.

Схема простого H-моста на кремниевых транзисторах

Собрать простой драйвер двигателя постоянного тока (или для обмотки шагового двигателя) можно на распространенных кремниевых транзисторах.

Рис. 2. Принципиальная схема простого драйвера электродвигателя на кремниевых транзисторах.

Такой драйвер позволяет управлять электродвигателем постоянного тока с питающим напряжением до 25В (для КТ817А, КТ816А) и до 45В (для КТ817Б-Г, КТ816Б-Г) с током не более 3А. При большом рабочем и нагрузочном токе двигателя выходные транзисторы КТ817 и КТ816 должны быть установлены на радиаторы достаточного размера.

Установка диодов VD1-VD2 обязательна, они нужны для защиты выходных транзисторов от обратного тока. На их место можно поставить отечественные КД105А или другие на больший ток.

Собрав две такие схемки (2х6 транзисторов) можно также управлять шаговым двигателем или же двумя двигателями постоянного тока.

Для того чтобы не городить огород из 12 транзисторов можно применить специализированные микросхемы, ниже мы рассмотрим пример с микросхемой L298 и готовым блоком на ее основе.

Микросхема L298, характеристики и возможности

Интегральная микросхема L298 - это мощный универсальный мостовой драйвер для управления двигателями постоянного тока, шаговыми движками, электромагнитными реле и электромагнитами (соленоидами). В микросхеме содержится два H-моста, выполненных на мощных транзисторах, а также логика совместимая с TTL.

Рис. 3. Микросхема L298 в корпусах Multiwatt15 PowerSO20.

Основные технические характеристики:

  • Рабочее напряжение - до 46В;
  • Максимальный постоянный ток - 4А (с радиатором);
  • Низкое напряжение насыщения;
  • Защита от перегрева;
  • Логический "0" = напряжение до 1,5В.

Где можно применить драйвер на микросхеме L298? - несколько идей:

  • Управление шаговым двигателем;
  • Управление двумя двигателями постоянного тока (DC motors);
  • Коммутация катушек мощных реле;
  • Управление соленоидами (электромагнитами).

Если посмотреть на структурную схему микросхему L298 то мы можем увидеть что-то на подобии схемы на рисунке 2, только с дополнительными логическими элементами.

Рис. 4. Внутренняя схема микросхемы L298N - мощный двойной H-мост.

Для каждого H-моста мы имеем по 3 входа: In1 - для подачи напряжения в одном направлении, In2 - в противоположном, и еще один вход En для подачи питания на выходные транзисторы моста.

Таким образом мы можем установить направление прохождения тока и управлять его подачей (включено или выключено, а также ШИМ).

Схема драйвера на микросхеме L298

Ниже представлена простая схема для драйвера двигателей на микросхеме L298N. Управление осуществляется по четырем проводам (вместо шести у L298) благодаря использованию дополнительных инверторов в микросхеме CD4011.

Рис. 5. Принципиальная схема драйвера электродвигателей на микросхеме L298N.

Для питания логики обеих микросхем нужно стабилизированное напряжение +5В (P2), можно использовать интегральный стабилизатор, например L7805 или же питать логику от имеющейся линии питания +5В. Для подачи питающего напряжения на двигатели используется отдельная линия питания P1.

Выводы P4, P5 используются для установки полярности каждого из каналов, а выводы P6, P7 - разрешают подачу питания на каскады (ключи) внутреннего H-моста для каждого канала.

Микросхему CD4011 можно заменить на отечественную К176ЛА7. Диоды Шоттки можно поставить другого номинала, на 35В/4А и более. Если не планируется ограничивать ток обмоток двигателя(двигателей) то низкоомные ограничивающие резисторы R9-R10 можно исключить из схемы, заменив их на перемычки.

В интернете можно заказать готовый модуль на L298, правда в нем будет 6 входов для управления.

Рис. 6. Готовые модули на L298.

Я для своих нужд приобрел готовый модуль по типу как на рисунке слева. В нем присутствует микросхема L298 и небольшой стабилизатор для подачи +5В на логику микросхемы.

Для подключения данной платки важно четко уяснить одну особенность:

  • Если для питания двигателей используется напряжение более чем 12В то перемычку нужно убрать и подавать отдельно 5В на выделенный для этого коннектор
  • Если питание двигателей будет осуществляться от напряжения 5-12В то перемычку нужно утсановить и дополнительное питание 5В не понадобится.

Если же подать на двигатели, например 20В и оставить перемычку установленной, то на модуле выгорит микросхемка-стабилизатор на 5В. Почему разработчики не установили интегральный стабилизатор с более широким диапазоном входных напряжений - не понятно.

Для того чтобы сэкономить два входа при подключении такого блока к Arduino или Raspberry Pi можно добавить часть схемы на CD4001, как на рисунке 5.

L298 + DC двигатели + Raspberry Pi

Для данного эксперимента к модулю на L298 были подключены два двигателя постоянного тока. Питание всего модуля осуществляется от одного аккумулятора на 6В. Поскольку это напряжение меньше 12В (смотрим выше описание) то перемычку внутреннего стабилизатора оставляем установленной и дополнительное питание +5В для логики не потребуется.

Перемычки "ENA" и "ENB", которые разрешают подачу питания на выходные мосты, оставлены установленными. Таким образом, для управления каждым из двигателей используем оставшиеся четыре входа: IN1, IN2, IN3, IN4.

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

Где взять +5В? - в данном случае это напряжение присутствует на разъеме питания, справа возле GND. Для теста можно воспользоваться кусочком проволоки - перемычкой.

Теперь подключим наш модуль к Raspberry Pi и напишем простую тестовую программу на Python. Для подключения модуля я использовал выводы GPIO вот в таком соответствии:

Рис. 7. L298 + Raspberry Pi + электродвигатели постоянного тока.

Мини-компьютер у меня питается через понижающий импульсный стабилизатор от второго аккумулятора на 6В. Перейдем к написанию программы для нашего эксперимента, наша цель - управлять вращением вала каждого из двигателей при помощи клавиатуры, которая подключена к Raspberry Pi или же удаленно по SSH, VNC.

Теперь испробуем простую программу, написанную на Python, которая поможет понять принцип управления электродвигателем постоянного тока.

Загружаем малинку, открываем Терминал или же подключаемся к ней удаленно при помощи SSH. Создаем новый файл и открываем его для редактирования при помощи команды:

Nano /home/pi/l298_dc_motors_test.py

Вставляем в редактор код скрипта на Python, который приведен ниже:

#!/usr/bin/env python # -*- coding: utf-8 -*- import time import RPi.GPIO as GPIO # Подготавливаем пины GPIO. GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.output(4, GPIO.LOW) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.LOW) # Включаем вращение двигателя 1 в одну сторону. GPIO.output(4, GPIO.HIGH) # ждем 5 секунд. time.sleep(5) # Выключаем двигатель 1. GPIO.output(4, GPIO.LOW) # ждем 10 секунд. time.sleep(10) # Включаем вращение двигателя 1 в другую сторону. GPIO.output(17, GPIO.HIGH) # ждем 5 секунд. time.sleep(5) # Выключаем двигатель 1. GPIO.output(17, GPIO.LOW)

Выходим из редактора и сохраняем файл. Делаем скрипт исполняемым и запускаем его:

Chmod +x /home/pi/l298_dc_motors_test.py /home/pi/l298_dc_motors_test.py

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

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

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

#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import curses import time import RPi.GPIO as GPIO # Установим номера пинов GPIO, с которыми будем работать M1_RIGHT = 4 M1_LEFT = 17 M2_RIGHT = 27 M2_LEFT = 22 # Функция для подготовки пинов GPIO def setup(*ports): GPIO.cleanup() # Режим именования пинов по названию, а не по номеру на плате GPIO.setmode(GPIO.BCM) for port in ports: # Установка пина на вывод + низкий уровень "0" GPIO.setup(port, GPIO.OUT) GPIO.output(port, GPIO.LOW) # Функция для установки низкого уровня на всех пинах (выключение) def stop_all(): GPIO.output(M1_LEFT, GPIO.LOW) GPIO.output(M1_RIGHT, GPIO.LOW) GPIO.output(M2_LEFT, GPIO.LOW) GPIO.output(M2_RIGHT, GPIO.LOW) # Функция для управления вращением движков def rotate(motor=1, mode="s"): # Выключаем все пины stop_all() # Для мотора 1 if motor == 1: if mode == "r": # Устанавливаем высокий уровень на пине M1_RIGHT (4) GPIO.output(M1_RIGHT, GPIO.HIGH) elif mode == "l": # Устанавливаем высокий уровень на пине M1_LEFT (17) GPIO.output(M1_LEFT, GPIO.HIGH) # Для мотора 2 elif motor == 2: if mode == "r": GPIO.output(M2_RIGHT, GPIO.HIGH) elif mode == "l": GPIO.output(M2_LEFT, GPIO.HIGH) # Выполним инициализацию пинов GPIO setup(M1_RIGHT, M1_LEFT, M2_RIGHT, M2_LEFT) # Инициализация экрана (модуль curses) stdscr = curses.initscr() # Реагировать на нажатие клавиш без подтверждения при помощи ENTER curses.cbreak() # Разрешить использование стрелочек на клавиатуре stdscr.keypad(1) # Не блокировать программу по времени при опросе событий stdscr.nodelay(1) # Отобразим на экране данные по умолчанию stdscr.addstr(0, 10, "Hit "q" to quit") stdscr.addstr(2, 10, "A - M1 Left, D - M1 Right") stdscr.addstr(3, 10, "< - M2 Left, > - M2 Right") stdscr.addstr(4, 10, "S - stop") stdscr.refresh() # Главный цикл while True: # Получаем код нажатия клавиши и проверяем его key = stdscr.getch() if key != -1: # Если клавиша "стрелка влево" то вращаем движок 2 влево if key == curses.KEY_LEFT: # Выводим на экран строку "M2 <---" в позиции 6, 10 stdscr.addstr(6, 10, "M2 <---") rotate(2, "l") # Если клавиша "стрелка вправо" то вращаем движок 2 вправо elif key == curses.KEY_RIGHT: stdscr.addstr(6, 10, "M2 --->") rotate(2, "r") # Если клавиша "а" то вращаем движок 1 влево elif key == ord("a"): stdscr.addstr(6, 10, "M1 <---") rotate(1, "l") # Если клавиша "d" то вращаем движок 1 вправо elif key == ord("d"): stdscr.addstr(6, 10, "M1 --->") rotate(1, "r") # Если клавиша "s" то останов всех движков elif key == ord("s"): stdscr.addstr(6, 10, "STOP 12") stop_all() # Если клавиша "s" то выходим из программы elif key == ord("q"): # Восстановление прежних настроек терминала stdscr.keypad(0) curses.echo() curses.endwin() # Очистка и выход os.system("clear") sys.exit() # Обновляем текст на экране и делаем небольшую задержку stdscr.refresh() time.sleep(0.01)

Запустив скрипт можно понажимать стрелочки клавиатуры "влево" и "вправо", а также клавиши с буквами "A" и "D" - двигатели должны вращаться поочередно и в разные стороны, а программа будет отображать их текущий режим работы.

Рис. 8. Программа на Python для управления двигателями при помощи драйвера L298 (терминал Konsole, KDE).

Краткая видео-демонстрация работы данного эксперимента приведена ниже:

Что такое шаговый двигатель, типы шаговиков

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

Шаговые двигатели надежны, стойки к износу и позволяют контролировать вращение на определенный угол, применяются в автоматизации процессов, на производстве, в электронно-вычислительной аппаратуре(CD-DVD приводы, принтеры, копиры) и т.п.

Такие двигатели бывают следующих видов:

  • Биполярный - 2 обмотки, по одной на каждую фазу, для управления можно использовать схему на 2 H-моста или один полу-мост с двуполярным питанием;
  • Униполярный - 2 обмотки, каждая с отводом от середины, удобно переключать фазы сменой половинок каждой из обмоток, упрощает схему драйвера (4 ключа), а также использовать как быполярный без использования отводов от обмоток;
  • С четирьмя обмотками - универсальный, подключив обмотки соответствующим образом можно использовать как быполярный или униполярный движок.

Рис. 9. Типы шаговых двигателей: биполярный, униполярный, с четырьмя обмотками.

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

L298 + шаговый двигатель + Raspberry Pi

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

Для подключения одного биполярного двигателя потребуется два выхода драйвера на L298 (два H-моста). Для данного эксперимента модуль L298 нужно подключить к Raspberry Pi так же, как и в варианте с .

Прежде можете поэкспериментировать без малинки - подавать поочередно на входы модуля L298 напряжение 5В и посмотреть как вал двигателя будет выполнять шаги.

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

Рис. 10. Подключение биполярного шагового двигателя к модулю L298 для управления через Raspberry Pi.

Если все уже подключено, то переходим к экспериментам с простой тестовой программой на Python, которая поможет понять как работать с шаговыми двигателем используя L298 + Raspberry Pi.

Создадим файл для скрипта и откроем его для редактирования:

Nano /home/pi/l298_stepper_motor_test.py

Вставляем в редактор следующий код скрипта на Python:

#!/usr/bin/env python # -*- coding: utf-8 -*- import time import RPi.GPIO as GPIO # Подготавливаем пины GPIO. GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.output(4, GPIO.LOW) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.LOW) GPIO.setup(27, GPIO.OUT) GPIO.output(27, GPIO.LOW) GPIO.setup(22, GPIO.OUT) GPIO.output(22, GPIO.LOW) # Временная задержка между шагами, сек. step_timeout = 0.0105 # Длительность импульса, сек. impulse_timeout = 0.008 # Шаг 1. GPIO.output(4, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(4, GPIO.LOW) time.sleep(step_timeout) # Шаг 2. GPIO.output(17, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(17, GPIO.LOW) time.sleep(step_timeout) # Шаг 3. GPIO.output(27, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(27, GPIO.LOW) time.sleep(step_timeout) # Шаг 4. GPIO.output(22, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(22, GPIO.LOW) time.sleep(step_timeout) # Ждем 10 секунд. time.sleep(10) # 20 раз по 4 шага в цикле. for i in range(0,20): GPIO.output(4, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(4, GPIO.LOW) time.sleep(step_timeout) GPIO.output(17, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(17, GPIO.LOW) time.sleep(step_timeout) GPIO.output(27, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(27, GPIO.LOW) time.sleep(step_timeout) GPIO.output(22, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(22, GPIO.LOW) time.sleep(step_timeout)

Делаем файл со скриптом исполняемым и запускаем его на исполнение:

Chmod +x /home/pi/l298_stepper_motor_test.py /home/pi/l298_stepper_motor_test.py

осле запуска скрипта, шаговый двигатель должен совершить 4 шага (вращение в одну сторону), потом подождав 10 секунд он снова начнет свое вращение и сделает уже 20*4 шагов.

А теперь рассмотрим пример интерактивной программы, которая позволяет управлять направлением и скоростью вращения (последовательные шаги) шагового двигателя с использованием клавиатуры.

#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import curses import time import RPi.GPIO as GPIO # Функция для подготовки пинов GPIO def setup(*ports): GPIO.cleanup() # Режим именования пинов по названию, а не по номеру на плате GPIO.setmode(GPIO.BCM) for port in ports: # Установка пина на вывод + низкий уровень "0" GPIO.setup(port, GPIO.OUT) GPIO.output(port, GPIO.LOW) # Функция для подачи импульса на пин с некоторой задержкой (1 шаг) def impulse(port=0): GPIO.output(port, GPIO.HIGH) # Set the timeout value to be anough for one step time.sleep(0.008) GPIO.output(port, GPIO.LOW) time.sleep(timeout) # Выполняем установку нужных нам пинов GPIO setup(4, 17, 27, 22) # Задержка между шагами (по умолчанию) timeout = 0.0105 # Направление вращения (по умолчанию) direction = "r" # Инициализация экрана (модуль curses) stdscr = curses.initscr() # Реагировать на нажатие клавиш без подтверждения при помощи ENTER curses.cbreak() # Разрешить использование стрелочек на клавиатуре stdscr.keypad(1) # Не блокировать программу по времени при опросе событий stdscr.nodelay(1) # Отобразим на экране данные по умолчанию stdscr.addstr(0, 10, "Hit "q" to quit") stdscr.addstr(2, 10, "--->") stdscr.addstr(3, 10, "Timeout: " + str(timeout)) stdscr.refresh() # Главный цикл while True: # Набор импульсов для вращения вала мотора вправо if direction == "r": impulse(4) impulse(17) impulse(27) impulse(22) # Набор импульсов для вращения вала мотора влево elif direction == "l": impulse(22) impulse(27) impulse(17) impulse(4) # Считываем код нажатия клавиши и проверяем его key = stdscr.getch() if key != -1: # Клавиша "влево" меняет направление вращения: ВЛЕВО if key == curses.KEY_LEFT: # отображаем текст "<---" в позиции экрана 2, 10 stdscr.addstr(2, 10, "<---") # Изменим значение переменной с направлением вращения direction = "l" # Клавиша "вправо" меняет направление вращения: ВПРАВО elif key == curses.KEY_RIGHT: stdscr.addstr(2, 10, "--->") direction = "r" # Клавиша "вверх" ускоряет вращение elif key == curses.KEY_UP: # Уменьшаем задержку между шагами timeout = timeout - 0.0005 # Клавиша "вниз" замедляет вращение elif key == curses.KEY_DOWN: # Увеличиваем задержку между шагами timeout = timeout + 0.0005 # Клавиша "q" выполняет выход из программы elif key == ord("q"): stdscr.keypad(0) curses.echo() curses.endwin() os.system("clear") sys.exit() # Смотрим чтобы время задержки не перешло границу 0 if timeout <= 0: timeout = 0.0005 # Обновляем текст на экране stdscr.addstr(3, 10, "Timeout: " + str(timeout)) stdscr.refresh() time.sleep(0.01)

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

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

Рис. 11. Программа управления биполярным шаговым двигателем, L298, Raspberry Pi.

Видео-демонстрация работы шагового двигателя:

Заключение

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

Важно заметить что в интернете можно найти готовые библиотеки и скрипты на Python для удобного управления двигателями при помощи H-моста на L298 с использованием Raspberry Pi.

Итак, задумывая драйвер на полевиках для биполярников, я и не думал что тема вызовет такой интерес и придется писать маленькую статью по сборке и настройке. Здесь будет рассматриваться драйвер как отдельный блок. Т.к. я использую блочную конструкцию. Т.е. три драйвера, интерфейсная плата, блок питания. Во первых при выходе из строя одного драйвера, просто меняется драйвер на запасной, а во вторых (и главное) планируется модернизация, мне проще снять один драйвер, и поставить модернизируемый вариант для обкатки. «Одноплатник» это уже развитие темы, и на вопросы по настройке ИБП я думаю с удовольствием ответит Dj _ smart , а также дополнит и поправит мой труд. А теперь к делу…

Пункт первый (набившим плату можно не читать J ). После травления, лужения, и сверловки, внимательно осмотрите всю плату на предмет косяков. Сопли, протравленные дорожки, и т.д. могут серьезно обломать весь кайф. Далее набиваем плату, сначала все перемычки, затем сопротивления, диоды, панели, емкости и биполярные транзисторы. Хочу обратить особое внимание на Ваше внимание, извините за… Не ленитесь перед впайкой проверить деталь на исправность. Прозвонка иногда спасает от дыма… Я зная цветовую кодировку резисторов на ура, подкалывался несколько раз, причем со спец. эффектами. Когда используешь резисторы из загашников которые годами выпаивались из всего что под руку попадет, забываешь, что при нагреве красный может стать оранжевым, а оранжевый - желтым… Впаиваем провода питания +5В, степ, GND , и провода контроля Vref . Примерно вот так это выглядит:

Пункт второй (настраиваем режимы работы и удержания). 555 я лично впаиваю в плату, кто поставил панель, значит втыкаем, блок индикации должен быть отключен. Подстроечники на середину. Вывод степ замыкаем на общий (раб. режим). Прозваниваем цепь +5В и если нет короткого, включаем питание. Тестер подключен к контрольным точкам Vref (молодец Dj _ smart , предусмотрел на плате), если номиналы подстроечников и сопротивления между ними соответствуют схеме, то подстроечником раб. режима можно регулировать напряжение около 0 - 1В т.е. ток 0 - 5А. Настроим на 1А. Тут все просто. R изм. у нас 0,2 Ом. Нам нужен 1А. 0,2х1=0,2В. Т.е. если мы установим Vref - 0,2В, ток в обмотке будет 1А. Если нам нужен ток в обмотке скажем 2,5А, то Vref =0,2х2,5=0,5В.

Короче мы выставили 0,2В.

Теперь размыкаем степ и общ. Если все элементы в норме и по схеме, то после размыкания примерно через полсекунды Vref снизится вдвое (если второй подстроечник посередине) Настраиваем им Vref удержания. У меня 50 проц. от рабочего:

Главное обратите внимание на обязательную задержку при переключении. При замыкании степ на общий, мгновенно должен включаться рабочий режим, а при размыкании уходить на удержание с задержкой 0.5с. Если задержки нет ищите проблемы, иначе при работе будут не хилые глюки. Если не заводится, идите в тему форума, не устраивайте пожаров J .

Пункт третий (настраиваем блок индикации). Печатка разведена под 315-361, как и у Dj _ smarta тоже мешок, надо куда то паять… Но в принципе туда можно паять любую пару, из наших я испытывал 502 - 503, 3102 - 3107, все пашет, только будьте внимательны с цоколевкой! Если все правильно впаяно и рабочее, то работает без проблем. Индикация вносит небольшую корректировку в Vref , так что после подключения индикации, окончательно отрегулируйте ток под свой ШД (лучше для начала 70% от номинального). Фотки как горят светодиоды делать не стал J .

Пункт четвертый, важный (297) Выключив питание втыкаем 297 на свое место. Еще раз проверяем монтаж, и элементы обвязки, если все ОК (при любом сомнении проверяем дважды) врубаем питание. Проверяем осциллографом сигнал на первой ноге, он такой:

Либо на 16 ноге, он такой:

Это означает что шим запустился, счастливчики имеющие частотомер могут померить частоту, она очень приблизительно должна соответствовать 20кГц.

ВНИМАНИЕ!!! Это важно!!! Даже если шим не запустится, логическая часть 297 будет работать, т.е. при подключении нагрузки все сигналы пойдут… Но прикиньте 24В без шима на ШД 2Ом. Так что важно убедиться в запуске генератора микросхемы.

Пункт пятый. Опять выключаем питание и вставляем IR , впаиваем полевики. При использовании ШД с током обмотки более 2,5А, необходимо полевики вынести на радиатор. Обратите внимание при впайке диодов, они могут различаться по меткам. Мне правда не встречалось (у меня в перемешку 522 и 1 N 4148 (аналог) у них цоколевка совпадает) Но учитывая что людям IR

Шаг 1.

Нам потребуется…

От старого сканера:

  • 1 шаговый двигатель
  • 1 микросхема ULN2003
  • 2 стальных прута

Для корпуса: - 1 картонная коробка

Инструменты:

  • Клеевой пистолет
  • Кусачки
  • Ножницы
  • Принадлежности для пайки
  • Краска

Для контроллера:

  • 1 разъем DB-25 - провод
  • 1 цилиндрическое гнездо для питания постоянного тока Для испытательного стенда
  • 1 стержень с резьбой
  • 1 подходящая под стержень гайка - разные шайбы и шурупы - куски древесины

Для управляющего компьютера:

  • 1 старый компьютер (или ноутбук)
  • 1 копия TurboCNC (отсюда)

Шаг 2.

Берем детали от старого сканера. Чтобы построить собственный ЧПУ контроллер нужно для начала извлечь из сканера шаговый двигатель и плату управления. Здесь не приведено никаких фотографий, потому что каждый сканер выглядит по-своему, но обычно нужно просто снять стекло и вывернуть несколько винтов. Кроме двигателя и платы можно оставить еще металлические стержни, которые потребуются для тестирования шагового двигателя.

Шаг 3.

Извлекаем микросхему из платы управления Теперь нужно найти на плате управления шаговым двигателем микросхему ULN2003. Если вы не смогли обнаружить ее на своем устройстве, ULN2003 можно купить отдельно. Если она есть, ее нужно выпаять. Это потребует некоторого умения, но не так уж сложно. Сначала при помощи отсоса удалите как можно больше припоя. После этого осторожно просуньте под микросхему конец отвертки. Осторожно прикоснитесь концом паяльника к каждому выводу, продолжая при этом нажимать на отвертку.

Шаг 4.

Пайка Теперь нам нужно припаять микросхему на макетную плату. Припаяйте к плате все выводы микросхемы. На показанной здесь макетной плате имеется две шины электропитания, поэтому положительный вывод ULN2003 (смотрите схему и на рисунке ниже) припаивается к одной из них, а отрицательный - к другой. Теперь, нужно соединить вывод 2 коннектора параллельного порта с выводом 1 ULN2003. Вывод 3 коннектора параллельного порта соединяется с выводом 2 ULN2003, вывод 4 - с выводом 3 ULN2003 и вывод 5 - с выводом 4 ULN2003. Теперь вывод 25 параллельного порта припаивается к отрицательной шине питания. Далее к управляющему устройству припаивается мотор. Делать это придется путем проб и ошибок. Можно просто припаять провода так, чтобы потом цеплять на них крокодилы. Еще можно использовать клеммы с винтовым креплением или что-нибудь подобное. Просто припаяйте провода к выводам 16, 15, 14 и 13 микросхемы ULN2003. Теперь припаяйте провод (желательно черный) к положительной шине питания. Управляющее устройство почти готово. Наконец, подсоедините к шинам электропитания на макетной плате цилиндрическое гнездо для питания постоянного тока. Чтобы провода не могли отломаться, их закрепляют клеем из пистолета.

Шаг 5.

Установка программного обеспечения Теперь о программном обеспечении. Единственная вещь, которая точно будет работать с вашим новым устройством - это Turbo CNC. Скачайте его . Распакуйте архив и запишите на CD. Теперь, на компьютере, который вы собираетесь использовать для управления, перейдите на диск C:// и создайте в корне папку "tcnc". Затем, скопируйте файлы с CD в новую папку. Закройте все окна. Вы только что установили Turbo CNC.

Шаг 6.

Настройка программного обеспечения Перезагрузите компьютер чтобы перейти к работе в MS-DOS. В командной строке наберите "C: cncTURBOCNC". Иногда лучше использовать загрузочный диск, тогда копия TURBOCNC помещается на него и нужно набирать, соответственно "A: cncTURBOCNC". Возникнет экран, похожий на изображенный на рис. 3. Нажмите пробел. Теперь вы находитесь в главном меню программы. Нажмите F1, и при помощи клавиш со стрелками выберите меню "Configure". При помощи клавиш со стрелками выберите "number of axis". Нажмите Enter. Введите количество осей, которые будут использоваться. Поскольку у нас только один мотор, выбираем "1". Нажмите Enter чтобы продолжить. Снова нажмите F1 и в меню "Configure" выберите пункт "Configure axes", затем дважды нажмите Enter.

Появится следующий экран. Нажимайте Tab пока не перейдете к ячейке "Drive Type". При помощи стрелки вниз выберите пункт "Phase". Снова при помощи Tab выберите ячейку "Scale". Чтобы использовать калькулятор, нам нужно найти число шагов, которые двигатель делает за один оборот. Зная номер модели двигателя, можно установить на сколько градусов он поворачивается за один шаг. Чтобы найти число шагов, которые двигатель делает за один оборот, теперь нужно поделить 360 на число градусов за один шаг. Например, если мотор поворачивается за один шаг на 7,5 градусов, 360 поделить на 7,5 получится 48. Число, которое получится у вас, забейте в калькулятор шкалы (scale calculator).

Остальные настройки оставьте как есть. Нажмите OK, и скопируйте число в ячейке Scale в такую же ячейку на другом компьютере. В ячейке Acceleration установите значение 20, поскольку установленных по умолчанию 2000 слишком много для нашей системы. Начальную скорость установите равной 20, а максимальную - 175. Нажимайте Tab пока не дойдете до пункта "Last Phase". Установите в нем значение 4. Нажимайте Tab пока не дойдете до первого ряда иксов.

Скопируйте следующее в четыре первых ячейки:

1000XXXXXXXX
0100XXXXXXXX
0010XXXXXXXX
0001XXXXXXXX

Остальные ячейки оставьте без изменений. Выберите OK. Теперь вы настроили программное обеспечение.

Шаг 7.

Строим тестовый вал Следующим этапом работы будет сборка простого вала для тестовой системы. Отрежьте 3 бруска дерева и скрепите их друг с другом. Чтобы получить ровные отверстия проведите на поверхности дерева ровную линию. Просверлите на линии два отверстия. Еще 1 отверстие просверлите посередине ниже первых двух. Отсоедините бруски. Через два отверстия, что находятся на одной линии, проденьте стальные пруты. Чтобы закрепить пруты воспользуйтесь небольшими шурупами. Проденьте пруты сквозь второй брусок. На последнем бруске закрепите двигатель. Не имеет значения, как вы это сделаете, будьте изобретательны.

Чтобы закрепить двигатель, имевшийся в наличии, использовали два отрезка стержня с резьбой 1/8. Брусок с прикрепленным двигателем надевается на свободный конец стальных прутов. Снова закрепите их шурупами. Сквозь третье отверстие на первом бруске проденьте стержень с резьбой. Заверните на стержне гайку. Проденьте стержень сквозь отверстие во втором бруске. Поворачивайте стержень до тех пор, пока он не пройдет сквозь все отверстия и не дойдет до вала двигателя. Соедините вал двигателя и стержень при помощи шланга и зажимов из проволоки. На втором бруске гайка удерживается при помощи дополнительных гаек и винтов. В завершение, отрежьте брусок дерева для подставки. Привинтите ее шурупами ко второму бруску. Проверьте, установлена ли подставка ровно на поверхности. Регулировать положение подставки на поверхности можно при помощи дополнительных винтов и гаек. Так делается вал для тестовой системы.

Шаг 8.

Подсоединяем и тестируем двигатель Теперь нужно соединить двигатель с контроллером. Во-первых, соедините общий провод (смотрите документацию к двигателю) с проводом, который был припаян к положительной шине питания. Другие четыре провода соединяются путем проб и ошибок. Соедините их все, и затем меняйте порядок соединения, если ваш двигатель делает два шага вперед и один назад или что-либо подобное. Для проведения тестирования подключите 12 В 350 мА источник питания постоянного тока в цилиндрическое гнездо. Затем соедините разъем DB25 c компьютером. В TurboCNC проверьте как соединен двигатель. В результате тестирования и проверки правильного подсоединения двигателя у вас должен получиться полностью работоспособный вал. Чтобы проверить масштабирование вашего устройства, прикрепите к нему маркер и запустите тестовую программу. Измерьте получившуюся линию. Если длина линии составляет порядка 2-3 см, устройство работает правильно. В противном случае, проверьте вычисления в шаге 6. Если у вас все получилось, поздравляем, самое трудное уже позади.


Шаг 9.

Изготовление корпуса

Часть 1

Изготовление корпуса - это завершительный этап. Присоединимся к защитникам природы и сделаем его из вторсырья. Тем более, что контроллер у нас тоже не с магазинных полок. У представленного вашему вниманию образца плата имеет размер 5 на 7,5 см, поэтому корпус будет размером 7,5 на 10 на 5 см, чтобы оставить достаточно места для проводов. Из картонной коробки вырезаем стенки. Вырезаем 2 прямоугольника размером 7,5 на 10 см, еще 2 размером 5 на 10 см и еще 2 размером 7,5 на 5 см (см. рисунки). В них нужно вырезать отверстия для разъемов. Обведите контуры разъема параллельного порта на одной из 5 х 10 стенок. На этой же стенке обведите контуры цилиндрического гнезда для питания постоянного тока. Вырежьте по контурам оба отверстия. То, что вы будете делать дальше, зависит от того, припаивали ли вы к проводам двигателя разъемы. Если да, то закрепите их снаружи второй пока пустой стенки размером 5 х 10. Если нет, проткните в стенке 5 отверстий для проводов. При помощи клеевого пистолета соедините все стенки вместе (кроме верхней, см. рисунки). Корпус можно покрасить.

Шаг 10.

Изготовление корпуса

Часть 2

Теперь нужно приклеить все компоненты внутрь корпуса. Убедитесь, что на разъемы попало достаточно много клея, потому что они будут подвергаться большим нагрузкам. Чтобы коробка оставалась закрытой, нужно сделать защелки. Из пенопласта вырежьте пару ушек. Затем вырежьте пару полос и четыре небольших квадратика. Приклейте по два квадратика к каждой из полос как показано на рисунке. Приклейте ушки по обеим сторонам корпуса. Сверху коробки приклейте полосы. Этим завершается изготовление корпуса.

Шаг 11.

Возможные применения и заключение Этот контроллер можно применять как: - ЧПУ устройство - плоттер - или любую другую вещь, которой нужно точное управление движением. - добавление- Здесь приведены схема и инструкции по изготовлению контроллера с тремя осями. Чтобы настроить программное обеспечение, следуйте вышеуказанным шагам, но в поле "number of axis" введите 3.

зарегистрироваться .

Большинство на начальном этапе останавливается на выборе покупного (чаще всего — китайского) контроллера для шаговых двигателей, потому как это экономит время. Но уже после того, как станок готов и запущен, начинает закрадываться ощущение, что что-то не то… Чего-то не хватает или что-то сделано не правильно, или не доделано… Появляется некоторое недовольство, вопросы, связанные с точностью станка с ЧПУ. Люди начинают долго и мучительно читать форумы в поисках волшебного рецепта исцеления своего родного станочка от постоянного непопадания «в десятку» (имеются в виду десятые доли миллиметра, которые должен стабильно отрабатывать даже самый пластилиновый станок с ЧПУ, сделанный своими руками).

Моя бабушка всегда говорит: «Где узко, там и рвется». И так действительно происходит! Это же справедливо и для основы основ станка с ЧПУ — механизма линейного перемещения и электроники управления, а именно — контроллера шагового двигателя. О какой точности можно говорить, если человек поставил дешевый китайский контроллер, включил на нем микрошаг 1/8 или даже 1/16 и пытается выдавить из станка микронные перемещения?

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

Первое, что я хочу получить от своего контроллера шагового двигателя — это калиброванный микрошаг, который бы настраивался под конкретный экземпляр шагового двигателя. О нелинейности характеристик шаговых двигателей я уже писал в своей статье про и . Если вам лень перейти по ссылке, то вкратце скажу, что в режиме микрошага вы посылаете двигателю команду повернуться на 1/8 шага (к примеру), а он поворачивается вообще не известно на сколько или вообще не поворачивается! Все это как раз из-за нелинейности характеристики шагового двигателя. Вот почему нельзя использовать микрошаговый режим в обычных китайских контроллерах для повышения точности (разрешающей способности) перемещений своего станка с ЧПУ!

Кто-то, возможно, задастся вопросом — откуда берется эта нелинейность? А все дело в том, что на самом деле шаговый двигатель вообще не предназначен для работы в режиме микрошага ! Шаговый двигатель предназначен только для того, чтобы шагать — ать, два! Это мы — ЧПУшники от своей голытьбы решили привнести в мир цифрового двигателя (двигателя с конечными состояниями) немного аналоговости и придумали «микрошаг», в котором шаговый двигатель «зависает» в некотором промежуточном состоянии между двумя шагами. А производители контроллеров радостно подхватили эту фишку и преподносят микрошаг, как некий стандарт де-факто! И впаривают свои контроллеры невдумчивым потребителям.

Если вы — «счастливый» обладатель контроллера с микрошагом, то сказанное мной выше вы сможете сами очень легко проверить по методу лазерной калибровки, описанному мной выше в статье про калибровку шагового двигателя. Достаточно снять со станка шаговик, приделать к нему лазерную указку, включить в контроллере режим микрошага (хотя он, конечно же, у вас включен!) и подавать ему на вход импульсы STEP. Можно прямо из Mach3 или LinuxCNC, выбрав самую минимальную подачу в ручном режиме или задавая микро-перемещения через G-коды. После каждого микрошага делайте отметки на листе бумаги, закрепленному на стене скотчем, в том месте, куда светит луч лазера. Уже после нескольких микрошагов, вы заметите, что между насечками получилось ну просто неприлично разное расстояние!

Закончим на этом ругать производителей. Они на самом деле ничего плохого не делают. Люди хотели микрошаг — люди его получили! Сосредоточимся лучше на том, чего на самом деле хотели получить конечные пользователи от своего контроллера шагового двигателя? А хотели они получить не деление управляющего шаговыми двигателями сигнала на 8, на 16 и т.д., а деление угла поворота шагового двигателя на указанные делители! Но какое же для этого нужно подавать управляющее напряжение? Отвечу однозначно — хрен его знает! Поясню… Дело в том, что разные производители делают разные двигатели, применяют разные технологии с разным качеством и разной погрешностью. И получается так, что все шаговые двигатели разные! Даже в пределах одного типа и одной партии. Легла где-то в обмотке шагового двигателя проволочка слегка не на ту сторону — характеристика поменялась! У одного двигателя X витков, у другого двигателя X+Y витков в обмотке — опять характеристики разные. Ну и так далее — до фанатизма

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

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

Схема моего контроллера будет очень проста. Силовыми элементами, непосредственно управляющими обмотками двигателя, будут являться ключевые MOSFET-транзисторы, подключенные в виде Н-моста. Ключами будет управлять микроконтроллер. Никаких дорогостоящих микросхем-драйверов в моей схеме не будет. Вместо них будет парочка ферритовых колечек из сгоревших энергосберегающих ламп, которые отлично подходят для управления затворами MOSFET-транзисторов. В общем, я стараюсь сделать контроллер шагового двигателя доступным для повторения в домашних условиях. Также одним из его достоинств будет являться высокая ремонтопригодность (например, если сгорит какой-либо MOSFET-транзистор в силовой части, то стоимость замены составит ~20-30 рублей).

Слева представлена схема управления затвором силового MOSFET-ключа моего контроллера шаговых двигателей. Как видно, управление затвором осуществляется через повышающий импульсный трансформатор на ферритовом кольце. Повышающий трансформатор нужен, чтобы силовой ключ полностью открывался от 5-тивольтового сигнала управления, поступающего с выхода микроконтроллера. Для полного гарантированного открытия силовым MOSFET-ам обычно требуется от 10 вольт (более детально характеристику MOSFET-а можно посмотреть на графиках в его datasheet). Особенность такого включения заключается в том, что емкость затвора MOSFET используется в режиме памяти, т.е. при прохождении открывающего импульса через диод D1, транзистор будет открыт сколь угодно долго до тех пор, пока его не закроет открывшийся транзистор Q2, разрядив емкость затвора на «землю». Благодаря такой схеме при управлении ШИМ-сигналом (PWM) удается получить до 100% глубины модуляции (в англоязычных источниках — duty circle или «цикл загрузки»). В стандартной же схеме включения трансформатора затвора (GDT — gate drive transformer), когда положительный импульс открывает MOSFET, а следующий за ним отрицательный импульс восстановления разряжает емкость затвора, удается получить лишь менее 50% периода ШИМ-сигнала.

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

Программа управления шаговым двигателем может быть условно разделена на несколько взаимосвязанных функциональных блоков. Подробнее об этих блоках и о их работе я постараюсь написать в ближайшее время. Следите за обновлениями — проект находится в активной разработке

Written By: . Tagged: , .

Post navigation

  • Недавно приобрел ARDUINO в Китае. Мыслей по изготовление различных устройств- море. Мигать светодиодом на плате очень быстро надоело, захотелось чего то более существенного. Конечно надо бы заказать набор но цена его несколько завышена и пришлось что то искать в интернете, что то придумывать самому. В итоге все равно заказал в том же Китае различные датчики, реле, индикаторы… Немного попозже пришел знаменитый индикатор 1602. С ним поучился работать, тоже довольно быстро освоился. Захотелось поуправлять шаговым двигателем от CD-DVD привода. Ждать с Востока посылку 1-2 месяца не захотелось и я решил попробовать сделать драйвер самостоятельно. Нашел вот такую схему включения биполярного шагового двигателя:

    Микросхемы в нашей глуши я не нашел, или заказывать микросхемы в российских интернет-магазинах по стоимости 2-3 готовых драйверов за 1 микросхему. Микросхема представляет собой Н- мост из транзисторов. Кстати включать в мост надо или составные биполярные транзисторы (так называемые сборки Дарлингтона), или полевые транзисторы. Одиночным биполярным транзисторам нужна хорошая раскачка, которую контроллер дать не может, иначе получается очень высокое падение напряжение на транзисторе из за того что он открыться не может. Т.к. хороший товарищ занимается ремонтом компьютеров, то с полевиками проблем не возникло. Сначала хотел сделать на биполярниках- но получается в 2 раза больше транзисторов, что не совсем хорошо для габаритов драйвера, да и ток они выдержат гораздо меньший. Выпаяв около десятка полевых транзисторов и почитав на них даташиты я снова впал в уныние- в интернете есть схемы только на парах полевых транзисторов n- и p- типов. И ниодной схемы на транзисторах одного типа я просто не нашел. В компьютерах же используются транзисторы n- типа. Пришлось мудрить на макетной плате небольшой девайс на полевиках, попробовал управлять светодиодами, получилось и я решил собрать готовое устройство. Драйвер не нуждается в налаживании ибо налаживать здесь практически нечего. Единственная проблема возникла с программным обеспечением. Нашел даташит на похожий двигатель и по графикам работы выставил состояния выходов. После этого осталось только подобрать delay и все- устройство готово! Собственно схема замены микросхемы L293D.


    Данные транзисторов даны просто так- в мультисиме никак не смог их изменить. Я использовал транзисторы P60N03LDG в корпусе ТО-252 . В ней все довольно просто: при поступлении напряжения на один из входов U1 или U2 открываются 2 транзистора в верхнем и нижнем плече, причем крест- накрест. Таким образом переключается полярность напряжения на двигателе. А чтобы не подавалось напряжение сразу на 2 входа (это вызовет КЗ цепи питания) и использовал схему включения L293D. При таком включении NPN-транзистор не позволяет открывать сразу все 4 транзистора Н-моста. Кстати 1 двигатель будет управляться по 2 выходам Arduino, что крайне важно для экономии выходов и входов микроконтроллера. Еще условие- минусовой провод транзисторных ключей обязательно должен быть соединен с минусовым выводом платы управления. Питание подается на плату управления от Arduino, на ключи- от внешнего БП. Это позволяет подключить достаточно мощные двигатели. Все зависит от характеристик транзисторов. Итак для одного драйвера вам нужно 8 полевых транзисторов (P60N03LDG или любые другие n-канальные), любые 2 SMD-биполярных транзистора NPN (у меня стоят с маркировкой t04), smd-резисторы типоразмера 0805, и 4 такие же перемычки того же размера (на них написано 000 или просто 0). Все эти детали можно найти на старых и негодных материнских платах. Обязательно проверьте детали перед установкой.


    Плата драйвера Arduino

    Выкладываю плату в формате Layout6. . Замечу что у вас должен получится именно такой вид- надписи должны быть читабельными а не перевернутыми, учитывайте это при печати платы, детали ведь будут установлены со стороны дорожек. Разъемы тоже выпаиваем из материнки феном, отрезаем сколько по надо количеству пинов и впаиваем в нашу плату- так гораздо удобнее и надежнее нежели чем паять провода в плату. Разберемся с назначением выводов: выводы Out1 и Out2- подключение обмоток шагового двигателя, In1,2- вход от Arduino, ±5V- питание управления от Arduino (сделал двойной разъем т.к. подключать питание можно шлейфом сразу к нескольким блокам), 2 перемычки располагаются на другой стороне платы, по ним подается напряжение на ключи. Размер платы- 43х33мм. Кто желает- может еще больше минимизировать.

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


    Диаграмма работы шагового двигателя

    Цифрами указаны номера шагов. Исходя из того что при переключении контроллером высокого уровня на низкий драйвер сам переключит нужные ключи, то пишем, например, состояния только для верхних графиков каждой обмотки. Первый шаг: первая обмотка- первый провод +(HIGH), другой автоматически переключится драйвером на минус (LOW), напоминаю что описываем по первому проводу каждой обмотки. Вторая обмотка: первый провод — (LOW), второй + (HIGH), второй провод переключится драйвером автоматически. Переходим к первому изменению графика. Это 2 шаг. Описываем состояние только первых проводов. 1 провод первой обмотки остался HIGH, 1 провод второй сменился с LOW на HIGH . Третий шаг- 1 провод первой обмотки сменился HIGH на LOW, 1 провод второй остался HIGH. Четвертый шаг: 1 провод первой обмотки остался LOW, 1 провод второй обмотки сменился с HIGH на LOW. Описывать можно с любого шага, главное сохранять последовательность. Чтобы двигатель вращался в другую сторону нужно просто сдвинуть в диаграмме значения любой обмотки на полцикла в любую сторону. Таким образом можно писать программное обеспечение для драйверов. Нужно лишь знать диаграмму и правильно описать ее состояние на выходные пины.

    Теперь подключаем плату к Arduino, двигателю. Забрасываем такой скетч:

    // подключаемся к 8,9 выводам arduino
    int input1 = 8;
    int input2 = 9;
    int stepCount = 5; //задержка между шагами регулирует скорость двигателя

    void setup()
    {
    pinMode(input1,OUTPUT);
    pinMode(input2,OUTPUT);
    }

    void loop()
    {
    //1-ый шаг
    digitalWrite(input1,LOW);
    digitalWrite(input2,HIGH);
    delay(stepCount);

    //2-ой шаг
    digitalWrite(input1,HIGH);
    digitalWrite(input2,HIGH);
    delay(stepCount);

    //3-ий шаг
    digitalWrite(input1,HIGH);
    digitalWrite(input2,LOW);
    delay(stepCount);

    digitalWrite(input1,LOW);
    digitalWrite(input2,LOW);
    delay(stepCount);

    Подаем питание на драйвер, меняем, если надо, выводы одной обмотки и думаем куда приспособить данный девайс (можно открывать по времени и температуре форточки в теплице, управлять жалюзи и многое другое). Обращаю внимание что двигатель будет крутиться без остановки по данному скетчу, если надо- загоните в цикл и крутите на требуемое значение или, что еще лучше, напишите библиотеку и подключайте ее напрямую. Конечно это не такой крутой драйвер как на микросхеме, но для экспериментов, пока идут нормальные драйверы из Китая, его более чем достаточно. Всем удачи и успехов в осваивании микроконтроллеров. Подробнее о микроконтроллерах ARDUINO читайте .

  • Понравилось? Лайкни нас на Facebook