Керування кроковим двигуном за допомогою Python на Raspberry Pi
Оценка пользователей: / 12
ПлохоОтлично 
There are no translations available.

Stepper MotorКрокові двигуни відрізняються від двигунів постійного струму в тому, що контролер (в даному випадку, Raspberry Pi) повинен перемикати кожну з 4 котушок для того, щоб двигун повертався.
Кожні два "перемикання" є кроком. Чергуючи котушки, кроковий двигун обернеться навколо своєї осі. Якщо котушки підключаються у зворотному порядку, то двигун буде обертатися в інший бік.
Якщо код Python дав збій або RPi перестає відповідати на запити, то двигун зупиниться.
Є два типи крокових двигунів: уніполярні і біполярні крокові двигуни. На фундаментальному рівні, ці обидва типи працюють абсолютно однаково, бо електромагніти включені в послідовному режимі, заставляючи обертатися центральний вал двигуна.
Stepper Motor_1
Різниця між цими двома типами в рівні напруги. Уніполярний кроковий двигун працює тільки при позитивній напрузі, тому високі і низькі напруги, застосовувані до електромагнітних котушок будуть щось на зразок 5В і 0В. Біполярний кроковий двигун має дві полярності - позитивну і негативну, тому його високі і низькі напруги будуть щось на зразок 2,5В і -2,5В.
Беручи до уваги ці електричні відмінності, фізична відмінність між цими двома типами в тому, що уніполярна конфігурація вимагає додаткового проводу в середині кожної котушки, щоб дозволити току протікати через будь-який один кінець котушки до іншого. Ці два протилежні напрямки виробляють дві полярності магнітного поля, ефективно імітуючи позитивні і негативні напруги, як для біполярного крокового двигуна.
Хоча обидва з них мають загальний діапазон напруги 5В, біполярний кроковий двигун буде насправді мати більший крутний момент, тому що струм тече через всю котушку, виробляючи сильніше магнітне поле, щоб заставити вал обернутися на потрібний кут. А однополюсні крокові двигуни використовують тільки половину довжини котушки через додаткової вивід в середині котушки, тому менший крутний момент, щоб утримувати магнітом вал на місці.
Різні крокові двигуни можуть мати різну кількість проводів, як правило, 4, 5, 6, або 8 проводів. Компонування з 4-ма проводами має в змозі підтримувати лише біполярні крокові двигуни, оскільки немає ніякого доступного центрального проводу.
5-ти провідні та 6-ти провідні пристрої можуть бути використані для уніполярними або біполярних крокових двигунів, в залежності, використовується чи ні центральний провід на кожній з котушок. Конфігурація з 5-ма проводами означає, що центральний провід на двох наборах котушок спільний.
Stepper Motor_2
Конфігурація з 8-ми проводами, хоча і рідко використовується, але є найбільш гнучкою з усіх конфігурацій, бо може працювати в уніполярній конфігурації з 5-ма чи 6-ти проводами, або в біполярному режимі з паралельним чи послідовним вмиканням.
Ми використовуємо кроковий двигун, який має 5 проводів, беручи до уваги, що він має працювати як уніполярний кроковий двигун.
Також є чотири основних типи кроків, які ви можете використовувати зі своїм покроковим двигуном. Всі чотири види працюватимуть з будь-яким уніполярним або біполярним кроковим двигуном.
Stepper Motor_3
1. Одиночні кроки - це найпростіший тип кроків, який має найменшу потужність. Він використовує одну котушку, щоб "утримувати" двигун на місці, як показано на анімованому GIF вище.
2. Подвійні кроки - це також досить просто, але замість однієї котушки використовуються дві котушки відразу. Наприклад, замість того, щоб включити одну котушка № 1, ви підключаєте котушки № 1 і № 2 одночасно. При цьому споживається більше енергії (майже вдвічі), але більша потужність, ніж з покроковим типом (до 25%).
3. Змінні кроки - це поєднання одиночних і подвійних кроків, коли ми використовуємо одиночні кроки, що чередуються з подвійними. Ми отримуємо трохи більшу потужність, ніж в покрокового, і десь на 50% більше споживання. Що приємно в цьому типі, що ваш двигун робить в 2 рази більше кроків, забезпечуючи плавний перехід між кроками.
4. Мікро кроки - це коли ми використовуємо поєднання одиночних кроків з ШІМ для повільного переходу між кроками. Це буде повільніше, ніж з одиночними кроками, але має набагато більш високу точність. Рекомендується використовувати саме 8-м мікро кроків, що помножує число кроків крокового двигуна на 8.
Існує величезний вибір крокових двигунів, але найдоступніший для експериментів 28BJY-48 з платою керування ULN2003.
Критерії вибору даного пристрою:
• Дешевий
• Широко доступні в продавців
• Легко отримати плату контролера
• Невеликий, але потужний двигун
• Працює на 5V
• Простота інтерфейсу
Детальніше в Stepper Motor 28BJY-48 Datasheet.
Взаємодія з RPi
 Stepper Motor 28BJY-48
Двигун підключається до плати контролера за допомогою попередньо поставленого роз'єма. Плата контролера має 4 + 2 виводів, які повинні бути підключені до роз’єму RPi (P1).
• 5V (P1-02)
• Заземлення (P1-06)
і
• Inp1 (P1-18)
• Inp2 (P1-22)
• Inp3 (P1-24)
• Inp4 (P1-26)
Позначення Р1-XX вище, представляє собою використаних виводи роз’єму RPi. Вони визначені у прикладі Python нижче в списку StepPins, тому, якщо ви використовуєте інші виводи GPIO, то змініть код сценарію на Python.
Щоб повернути кроковий двигун, ви подаєте послідовність "високих" і "низьких" рівнів послідовно для кожного з 4 входів. Встановленням правильної послідовності високих і низьких рівнів ми заставляємо шпиндельний двигун обертатися. Напрямок може бути змінений на зворотній зміною послідовності.
Сценарій Python
Ось сценарій керування кроковим двигуном, який використаний. Спочатку завантажується бібліотека RPi.GPIO і визначається 4- чи 8-ми крокова послідовність.
#!/usr/bin/python
# Імпорт необхідних бібліотек
import sys
import time
import RPi.GPIO as GPIO

# Використовуємо параметри BCM GPIO
# замість фізичних номерів виводів
GPIO.setmode(GPIO.BCM)

# Задаємо GPIO сигнали для використання
# фізичних виводів 11,15,16,18
# GPIO17,GPIO22,GPIO23,GPIO24
StepPins = [17,22,23,24]

# Встановлюємо всі виводи, як вихідні
for pin in StepPins:
  print "Setup pins"
  GPIO.setup(pin,GPIO.OUT)
  GPIO.output(pin, False)

# Визначаємо основні послідовності
# як показано в специфікації виробника
Seq = [[1,0,0,1],
       [1,0,0,0],
       [1,1,0,0],
       [0,1,0,0],
       [0,1,1,0],
       [0,0,1,0],
       [0,0,1,1],
       [0,0,0,1]]
       
StepCount = len(Seq)
StepDir = 1 # Встановлюємо в 1 або 2 для руху за годинниковою стрілкою
            # Встановлюємо в -1 або -2 для руху проти годинникової стрілки

# Читаємо час очікування з командного рядка
if len(sys.argv)>1:
  WaitTime = int(sys.argv[1])/float(1000)
else:
  WaitTime = 10/float(1000)

# Ініціалізуємо змінні
StepCounter = 0

# Запускаємо основний цикл
while True:

  print StepCounter,
  print Seq[StepCounter]

  for pin in range(0, 4):
    xpin = StepPins[pin]
    if Seq[StepCounter][pin]!=0:
      print " Enable GPIO %i" %(xpin)
      GPIO.output(xpin, True)
    else:
      GPIO.output(xpin, False)

  StepCounter += StepDir

  # Якщо ми досягаємо кінця послідовності,
  # то починаємо все спочатку
  if (StepCounter>=StepCount):
    StepCounter = 0
  if (StepCounter<0):
    StepCounter = StepCount+StepDir

  # Чекаємо, перш ніж перейти
  time.sleep(WaitTime)
Ви можете завантажити сценарій прямо на свій RPi, використовуючи:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/stepper.py
Як і всі сценарії Python, які використовують бібліотеку GPIO, він має бути запущений за допомогою "sudo":
sudo python stepper.py
Натисніть Ctrl-C для виходу.
Щоб вказати інший час очікування ви можете передати кількість мілісекунд, як аргумент командного рядка, використовуючи:
sudo python stepper.py 20
де 20 - число мілісекунд.
У цьому прикладі час очікування за замовчуванням встановлений в 0,01 секунди (10 мілісекунд). Щоб змінити швидкість обертання можна змінити це значення. Автор знайшов, що його можна скоротити до 4 мс, перш ніж двигун перестане працювати. Якщо сценарій виконується занадто швидко, то контролер двигуна може не встигати. Цей параметр може варіюватися залежно від двигуна і його контролера.
4-х крокова послідовність швидша, але крутний момент менший. Тому обертання легко зупинити, утримуючи мотор шпинделя. 8-ми крокова послідовність повільніша, але крутний момент набагато вищий. Що вибрати, залежить від вашої мети.
Тепер ви можете управляти кроковим двигуном за допомогою RPi і сценарію Python. Додайте інший двигун і ви отримаєте початок маленького робота!
(За матеріалами EN: raspberrypi-spy.co.uk, learn.adafruit.com, instructables.com)
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting