Драйвер управления шд. Драйверы от TI: Управляй любым электродвигателем

Николай Гурылёв.

Здравствуйте Юрий Валерьевич! Опишу изменения в схеме > Что меня подвигло к изменению схемы? В исходной схеме управление двигателем производится двумя кнопками каждая, из которых содержит по две группы контактов. Одна группа подаёт высокий логический уровень на вход микросхем, другая подаёт питание на двигатель. В виду того, что некоторые двигатели потребляют значительный ток, группа контактов, управляющая двигателем должна быть достаточно мощной, а, следовательно, и габаритной.

Это конечно не удобно и не желательно в виду снижения надёжности устройства по причине использования механических контактов в сильноточных цепях. Я предлагаю управлять питанием двигателя при помощи мощного полевого транзистора, который в свою очередь управляется теми же кнопками. При замыкании кнопок SB-1 или SB-2 высокий логический уровень через логический элемент ИЛИ образованный диодами VD-6 и VD-7 поступает на затвор полевого транзистора VT-5,открывая его, и тем самым замыкая цепь питания двигателя. Это даёт возможность разделить цепи питания и управления, и использовать для управления миниатюрные слаботочные кнопки например тактовые кнопки и кроме того даёт возможность производить управление от внешнего устройства (например компьютера) подачей соответствующих логических уровней. Естественно через дополнительное устройство согласования. Можно ещё реализовать пошаговое управление, но не буду усложнять. Ведь это ПРОСТОЕ устройство. Диоды можно применить любые, кремниевые, какие влезут. Полевой транзистор следует выбирать исходя из напряжения питания и потребляемого тока применяемого двигателя. Полевых транзисторов сейчас продаётся много различной мощности с напряжениями сток-исток до сотен вольт и с токами стока до десятков ампер. Если применяется низковольтный двигатель, то желательно и транзистор выбирать низковольтный, так как у них меньшее сопротивление сток-исток, что предполагает меньшее падение напряжения и меньший нагрев и потери мощности.

По этой же причине желательно и в качестве VT1-VT5, так же использовать полевики с N-каналом. В этом случае сопротивление резисторов в цепи базы можно уменьшить, это не приведёт к перегрузке логических элементов. В исходной схеме не указан тип применённого стабилизатора, но я думаю, что 12вольт будет как раз. Следует учитывать, что мощные полевики, как правило, начинают интенсивно открываться при напряжении на затворе около 4 вольт и насыщаются при напряжении около 10 вольт. Вот вроде и всё. Изменённая схема и изменённая печатка прилагаются.

Рассмотрим драйвер электродвигателей на транзисторах и микросхеме 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.

Шаговые двигатели интересны тем, что позволяют повернуть вал на определённый угол. Соответственно, с их помощью можно повернуть вал и на определённое число оборотов, потому что N оборотов — это тоже определённый угол, равный 360*N, и, в том числе, на нецелое число оборотов, например на 0.75 оборота, 2.5 оборота, на 3.7 оборота и т.д. Этими возможностями шаговых двигателей определяется и область их применения. В основном они используются для позиционирования различных устройств: считывающих головок в дисководах, печатающих головок в принтерах и плоттерах и т.д.

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

Итак, что нам понадобится для экспериментов. Во-первых, шаговый двигатель. Я брал 5-ти вольтовый китайский биполярный шаговик с загадочным названием, выдранный из старого 3,5" дисковода, аналог M20SP-GW15. Во-вторых, поскольку обмотки двигателя потребляют значительный ток (в данном случае до 300 мА), то вполне понятно, что подключить шаговик к контроллеру напрямую не удастся, нужен драйвер.

В качестве драйвера для биполярных шаговых двигателей обычно используют схему так называемого H-моста или специальную микросхему (в которой всё равно встроен H-мост). Можно конечно ваять самому, но я взял готовую микруху (LB1838) из того же старого дисковода. Собственно, кроме всего вышеописанного, для наших экспериментов также понадобятся: PIC-контроллер (был взят PIC12F629, как самый дешёвый) и пара кнопок.

Перед тем, как перейти непосредственно к схеме, давайте немного разберёмся с теорией.

Биполярный шаговый двигатель имеет две обмотки и, соответственно, подключается по четырём проводам. Найти концы обмоток можно простой прозвонкой — концы проводов, относящиеся к одной обмотке, будут между собой звониться, а концы, относящиеся к разным обмоткам, — нет. Концы первой обмотки обозначим буквами "a", "b", а концы второй обмотки буквами "c", "d".

На рассматриваемом экземпляре есть цифровая маркировка контактов возле мотора и цветовая маркировка проводов (бог его знает, может это тоже какой-то стандарт): 1 — красный, 2 — голубой — первая обмотка; 3 — жёлтый, 4 — белый — вторая обмотка.

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

За один полный цикл двигатель делает четыре шага.

Для правильной работы, должна строго соблюдаться указанная в таблице последовательность коммутаций. То есть, например, после второй комбинации (когда мы подали + на вывод "c" и минус на вывод "d") мы можем подать либо третью комбинацию (отключить вторую обмотку, а на первой подать — на "a" и + на "b"), тогда двигатель повернётся на один шаг вперёд, либо первую комбинацию (двигатель повернётся на один шаг назад).

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

То есть, допустим мы повернули двигатель на 5 шагов вперёд, подавая на него комбинации 2-3-4-1-2, потом обесточили, а потом захотели повернуть ещё на один шаг вперёд. Для этого на обмотки надо подать комбинацию 3. Пусть после этого мы его опять обесточили, а через какое-то время захотели вернуть его на 2 шага назад, тогда нам нужно подать на двигатель комбинации 2-1. И так далее в таком же духе.

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

На этом мы закончим с двигателем и перейдём к драйверу LB1838.

У этой микрухи есть четыре управляющие ноги (IN1, IN2, EN1, EN2), на которые мы как раз и будем подавать сигналы с контроллера, и четыре выходных ноги (Out1, Out2, Out3, Out4), к которым подключаются обмотки двигателя. Обмотки подключаются следующим образом: провод "a" подключается к Out1, провод "b" — к Out2, провод "c" — к Out3, провод "d" — к Out4.

Ниже представлена таблица истинности для микросхемы драйвера (состояние выходов в зависимости от состояния входов):

IN1 EN1 Out1 (a) Out2(b) IN2 EN2 Out3(c) Out4(d)
Low High + Low High +
High High + High High +
X Low откл откл X Low откл откл

Теперь давайте нарисуем на диаграмме, какую форму должны иметь сигналы IN1, EN1, IN2, EN2 для одного полного цикла вращения (4 шага), т.е. чтобы на выходах появились последовательно все 4 комбинации подключения обмоток:

Если присмотреться к этой диаграмме (слева), то становится очевидно, что сигналы IN1 и IN2 можно сделать абсолютно одинаковыми, то есть на обе этих ноги можно подавать один и тот же сигнал. В этом случае наша диаграмма будет выглядеть так:

Итак, на последней диаграмме нарисовано, какие комбинации уровней сигналов должны быть на управляющих входах драйвера (EN1, EN2, IN1, IN2) для того, чтобы получить соответствующие комбинации подключения обмоток двигателя, а также стрелками указан порядок смены этих комбинаций для обеспечения вращения в нужную сторону.

Вот в общем-то и вся теория. Необходимые комбинации уровней на управляющих входах формируются контроллером (мы будем использовать PIC12F629).

Схема :

Готовый девайс :

Программа управления реализует следующий алгоритм: при нажатии кнопки КН1 двигатель поворачивается на один шаг в одну сторону, а при нажатии кнопки КН2 — на один шаг в другую сторону.

Собственно говоря, можно прикрутить сюда и реализовать управление от компьютера (передавать с компа скорость, количество шагов и направление вращения).

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

Если вы хотите купить драйвер шагового двигателя , нажмите на информер справа


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

Шаговый двигатель – двигатель со сложной схемой управления, которому требуется специальное электронное устройство – драйвер шагового двигателя. Драйвер шагового двигателя получает на входе логические сигналы STEP/DIR, которые, как правило, представлены высоким и низким уровнем опорного напряжения 5 В, и в соответствии с полученными сигналами изменяет ток в обмотках двигателя, заставляя вал поворачиваться в соответствующем направлении на заданный угол. >Сигналы STEP/DIR генерируются ЧПУ-контроллером или персональным компьютером, на котором работает программа управления типа Mach3 или LinuxCNC.

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

Типы (виды) драйверов ШД


Драйверы делятся по способу закачки тока в обмотки на несколько видов:

1) Драйверы постоянного напряжения

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

2) Двухуровневые драйверы

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

3) Драйверы с ШИМ.

На текущий момент ШИМ-драйверы шаговых двигателей наиболее популярны, практически все драйверы на рынке – этого типа. Эти драйверы подают на обмотку шагового мотора ШИМ-сигнал очень высокого напряжения, которое отсекается по достижению током необходимого уровня. Величина силы тока, по которой происходит отсечка, задается либо потенциометром, либо DIP-переключателем, иногда эта величина программируется с помощью специального ПО. Эти драйверы достаточно интеллектуальны, и снабжены множеством дополнительных функций, поддерживают разные деления шага, что позволяет увеличить дискретность позиционирования и плавность хода. Однако, ШИМ-драйверы также весьма сильно отличаются друг от друга. Помимо таких характеристик, как питающее напряжение и максимальный ток обмотки, у них отличается частота ШИМ. Лучше, если частота драйвера будет более 20 кГц, и вообще, чем она больше – тем лучше. Частота ниже 20 кГц ухудшает ходовые характеристики двигателей и попадает в слышимый диапазон, шаговые моторы начинают издавать неприятный писк. Драйверы шаговых двигателей вслед за самими двигателями делятся на униполярные и биполярные. Начинающим станкостроителям настоятельно рекомендуем не экспериментировать с приводами, а выбрать те, по которым можно получить максимальный объем технической поддержки, информации и для которых продукты на рынке представлены наиболее широко. Такими являются драйверы биполярных гибридных шаговых двигателей.

Как выбрать драйвер шагового двигателя (ШД)

Первый параметр , на который стоит обратить внимание, когда вы решили выбрать драйвер шагового двигателя – это сила тока, которую может обеспечить драйвер. Как правило, она регулируется в достаточно широких пределах, но стоит драйвер нужно выбирать такой, который может выдавать ток, равный току фазы выбранного шагового двигателя. Желательно, конечно, чтобы максимальная сила тока драйвера была еще на 15-40% больше. С одной стороны, это даст запас на случай, если вы захотите получить больший момент от мотора, или в будущем поставите более мощный двигатель, с другой – не будет излишней: производители иногда «подгоняют» номиналы радиоэлектронных компонентов к тому или иному виду/размеру двигателей, поэтому слишком мощный драйвер на 8 А, управляющий двигателем NEMA 17 (42 мм), может, к примеру, вызывать излишние вибрации.

Второй момент – это напряжение питания. Весьма важный и неоднозначный параметр. Его влияние достаточно многогранно – напряжение питания влияет на динамику(момент на высоких оборотах), вибрации, нагрев двигателя и драйвера. Обычно максимальное напряжение питания драйвера примерно равно максимальному току I, умноженному на 8-10. Если максимальное указанное напряжение питания драйвера резко отличается от данных величин – стоит дополнительно поинтересоваться, в чем причина такой разницы. Чем больше индуктивность двигателя - тем большее напряжение требуется для драйвера. Существует эмпирическая формула U = 32 * sqrt(L), где L - индуктивность обмотки шагового двигателя. Величина U, получаемая по этой формуле, весьма приблизительная, но она позволяет ориентироваться при выборе драйвера: U должно примерно равняться максимальному значению напряжения питания драйвера. Если вы получили U равным 70, то по данному критерию проходят драйверы EM706, AM882, YKC2608M-H.

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

Четвертый аспект – наличие механизмов подавления резонанса. Резонанс шагового двигателя – явление, которое проявляется всегда, разница только в резонансной частоте, которая прежде всего зависит от момента инерции нагрузки, напряжения питания драйвера и установленной силы тока фазы мотора. При возникновении резонанса шаговый двигатель начинает вибрировать и терять крутящий момент, вплоть до полной остановки вала. Для подавления резонанса используется микрошаг и – встроенные алгоритмы компенсации резонанса. Колеблющийся в резонансе ротор шагового двигателя порождает микроколебания ЭДС индукции в обмотках, и по их характеру и амплитуде драйвер определяет, есть ли резонанс и насколько он силен. В зависимости от полученных данных драйвер несколько смещает шаги двигателя во времени относительно друг друга – такая искусственная неравномерность нивелирует резонанс. Механизм подавления резонанса встроен во все >драйверы Leadshine серий DM, AM и EM. Драйверы с подавлением резонанса – высококачественные драйверы, и если бюджет позволяет – лучше брать именно такие. Впрочем, и без этого механизма драйвер остается вполне рабочим устройством – основная масса проданных драйверов – без компенсации резонанса, и тем не менее десятки тысяч станков без проблем работают по всему миру и успешно выполняют свои задачи.

Пятый аспект – протокольная часть. Надо убедиться, что драйвер работает по нужному вам протоколу, а уровни входных сигналов совместимы с требуемыми Вам логическими уровнями. Эта проверка идет пятым пунктом, потому что за редким исключением подавляющее число драйверов работает по протоколу STEP/DIR/ENABLE и совместимо с уровнем сигналов 0..5 В, вам надо только лишь на всякий случай убедиться.

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

Седьмой аспект – наличие микрошаговых режимов. Сейчас практически в каждом драйвере есть множество микрошаговых режимов. Однако, из каждого правила есть исключения, и в драйверах Geckodrive режим только один – деления шага 1/10. Мотивируется это тем, что большее деление не приносит большей точности, а значит, в нем нет необходимости. Однако, практика показывает, что микрошаг полезен вовсе не повышением дискретности позиционирования или точности, а тем, что чем больше деление шага, тем плавней движение вала мотора и меньше резонанс. Соответственно, при прочих равных условиях стоит использовать деление чем больше, тем лучше. Максимально допустимое деление шага будет определяться не только встроенными в драйвер таблицами Брадиса, но и максимальной частотой входных сигналов – так, для драйвера со входной частотой 100 кГц нет смысла использовать деление 1/256, так как скорость вращения будет ограничена 100 000 / (200 * 256) * 60 = 117 об/мин, что для шагового двигателя очень мало. Кроме того, персональный компьютер тоже с трудом сможет генерировать сигналы с частотой более 100 кГц. Если вы не планируете использовать аппаратный ЧПУ контроллер, то 100 кГц скорее всего будет Вашим потолком, что соответствует делению 1/32.

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

Девятый, и самый важный аспект – качество драйвера. Оно практически не связано с характеристиками и т.п. На рынке существует множество предложений, и иногда характеристики драйверов двух производителей совпадают практически до запятой, а установив их по очереди на станок, становится ясно, что один из производителей явно занимается не своим делом, и в производстве недорогих утюгов ему больше повезет. Определить уровень драйвера заранее по каким-то косвенным данным новичку достаточно трудно. Можно попробовать ориентироваться на количество интеллектуальных функций, таких как «stall detect» или подавление резонанса, а также воспользоваться проверенным способом - ориентироваться на бренды.

Шаговые двигатели не сильно отличаются от многих классических двигателей. Для управления шаговым двигателем необходимо подавать постоянное напряжение на обмотки в точной последовательности. Благодаря этому принципу, можно обеспечить точный угол поворота оси.

Более того, оставив напряжение питания на одной или нескольких обмотках двигателя, мы переводим двигатель в режим удержания. Шаговые двигатели получили широкое распространение в технике, к примеру, их можно найти в гибких дисководах, сканерах и принтерах. Существует несколько типов шаговых двигателей.

Типы шаговых двигателей

Существуют три основных типа шаговых двигателей:

  1. Двигатель с постоянным магнитом
  2. Двигатель с переменным магнитным сопротивлением
  3. Гибридный двигатель

Шаговый двигатель с постоянными магнитами

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

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

Шаговый двигатель с переменным магнитным сопротивлением

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

Гибридный шаговый двигатель

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

Как работает гибридный двигатель

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

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

Когда ток протекает через одну из обмоток, ротор занимает одно из положений, показанных на рисунках. Это связано с тем что, постоянный магнит ротора пытается минимизировать магнитное сопротивление обмотки. Крутящий момент, что стремится держать ротор в этих положениях, как правило, небольшой и называется «релаксация крутящего момента». Ниже изображена схема работы двигателя с 12 шагами.

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

Изменяя ток первой до второй обмотки (В), магнитное поле статора поворачивается на 90 градусов и притягивает новую пару полюсов ротора. В результате этого ротор поворачивается на 30 градусов, что соответствует полному шагу. Возвращение к первому набору обмоток статора, но с питанием обратной полярности, изменяет магнитное поле статора еще на 90 градусов, и ротор поворачивается на 30 градусов (С).

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

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

Режим полшага

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

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

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

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

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

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

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

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

В качестве примера управления шаговым двигателем возьмем униполярный шаговый двигатель ШД-1ЕМ, имеющий характеристики: количество шагов - 200/об., ток обмотки – 0,5А, мощность - 12 Ватт.

Драйвером, управляющим обмотками шагового двигателя выберем микросхему ULN2003A. Эта уникальная микросхема, не что иное, как транзисторная сборка по схеме Дарлингтона с открытым коллектором, снабженная диодом, защищающим цепь питания нагрузки. ULN2003A имеет семь каналов управления с током нагрузки 500мА каждый.

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

Вывод 9 микросхемы ULN2003A подведен к источнику питания через стабилитрон, который защищает схему от ЭДС самоиндукции, появляющейся в момент выключения блока питания схемы. Управление шаговым двигателем производится с помощью компьютера через LPT порт при помощи программы:

(скачено: 1 845)