Stepper

Stepper

Этот модуль содержит функции для управления шаговыми двигателями.

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

Модуль шагового двигателя может управлять до 8 двигателями, каждому двигателю требуются 2 GPIO для управления сигналами шага и направления.

Ключевые концепции

В реальных приложениях шаговые двигатели подключаются к кинематической системе. Перед использованием шагового двигателя вы должны прикрепить его (используя функцию attach) и установить переменные, определенные вашей кинематической системой:

  1. Единицы измерения, например 1 см.
  2. Количество шагов на единицу.
  3. Минимальная скорость, измеряемая в единицах / минуту.
  4. Максимальная скорость, измеряемая в единицах / минуту.

После прикрепления программист может перемещать шаговые двигатели, указывая:

  1. Сколько единиц переместить, например, 10 сантиметров.
  2. На какой скорости, например, 5 сантиметров / минуту.
  3. С каким ускорением, например, 0,1 сантиметра / секунду ^ 2

Функции настройки

instance = stepper.attach(direction pin, step pin, [stpu, min spd, max spd, accel])

Создать новый экземпляр для шагового двигателя.

Аргументы:

  • direction pin: GPIO для сигнала направления. Используйте определенные константы в модуле PIO, например pio.GPIO26.
  • step pin: GPIO для сигнала шага. Используйте определенные константы в модуле PIO, например pio.GPIO14.
  • stpu (необязательно): десятичное число, устанавливающее количество шагов на единицу.
  • min spd (необязательно): десятичное число, устанавливающее минимальную скорость (в единицах / минуту).
  • max spd (необязательно): десятичное число, устанавливающее максимальную скорость (в единицах / минуту).
  • accel (необязательно): десятичное число, устанавливающее стандартное ускорение (в единицах / секунду ^2).

По умолчанию (если вы не используете необязательные аргументы) шаговый двигатель определяется следующим образом:

  • Единицы измерения - обороты
  • stpu = 200 (200 шагов на оборот)
  • min spd = 60 об/мин (60 оборотов в минуту)
  • max spd = 1000 об/мин (1000 оборотов в минуту)
  • accl = 2 оборота / секунду ^ 2

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

-- Attach 2 steppers, using the default configuration
--
--   stepper1: dir pin at GPIO26, step pin at GPIO14
--   stepper2: dir pin at GPIO12, step pin at GPIO13

s1 = stepper.attach(pio.GPIO26, pio.GPIO14)
s2 = stepper.attach(pio.GPIO12, pio.GPIO13)

instance:move(units, [speed, accel])

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

Движение определяется следующим образом:

  • units (единицы): десятичное число, указывающее, сколько единиц необходимо переместить.
  • speed (скорость, необязательно): десятичное число, указывающее скорость движения.
  • accel (ускорение, необязательно): десятичное число, указывающее ускорение движения.

Возвращает: ничего или исключение.

-- Attach 2 steppers, using the default configuration
--
--   stepper1: dir pin at GPIO26, step pin at GPIO14
--   stepper2: dir pin at GPIO12, step pin at GPIO13

s1 = stepper.attach(pio.GPIO26, pio.GPIO14)
s2 = stepper.attach(pio.GPIO12, pio.GPIO13)

-- Move s1 10 revolutions
s1:move(10)

-- Move s2 5 revolutions
s2:move(5)

stepper.start(instance1, [instance2, instance3, …])

Запустить движение для группы шаговых двигателей, определенных функцией move. Эта функция блокируется до завершения движения.

Аргументы: нет

Возвращает: ничего или исключение.

stepper.start(table)

Запустить движение для группы шаговых двигателей, определенных функцией move. Эта функция блокируется до завершения движения.

Аргументы: нет

Возвращает: ничего или исключение.

-- Attach 2 steppers, using the default configuration
--
--   stepper1: dir pin at GPIO26, step pin at GPIO14
--   stepper2: dir pin at GPIO12, step pin at GPIO13

s1 = stepper.attach(pio.GPIO26, pio.GPIO14)
s2 = stepper.attach(pio.GPIO12, pio.GPIO13)

-- Move s1 10 revolutions
s1:move(10)

-- Move s2 5 revolutions
s2:move(5)

-- Start the movement
stepper.start(s1, s2)

stepper.stop()

Остановить все шаговые двигатели, которые находятся в движении.

Аргументы: нет

Возвращает: ничего или исключение.

Пример

dir = 1

-- Attach 2 steppers
--
--   stepper1: dir pin at GPIO26, step pin at GPIO14
--   stepper2: dir pin at GPIO12, step pin at GPIO13
--
-- Steppers are configured by default:
--
--   steps per unit (revolutions): 200
--   min speed: 60 rpm
--   max speed: 800 rpm
--   acceleration: 2 revolutions / secs^2
s1 = stepper.attach(pio.GPIO26, pio.GPIO14)
s2 = stepper.attach(pio.GPIO12, pio.GPIO13)

-- Move the steppers (10 revolutions), in loop, changing the
-- direction
while true do
  s1:move(dir * 10)
  s2:move(dir * 10)

  stepper.start(s1,s2)

  if (dir == 1) then
    dir = -1
  else
    dir = 1
  end
end