Stepper
Этот модуль содержит функции для управления шаговыми двигателями.
Обратите внимание, что для подключения двигателя к плате вам понадобится драйвер шагового двигателя. Шаговые двигатели работают при напряжениях и токах, которые несовместимы с вашей платой. Никогда не подключайте шаговый двигатель к плате без драйвера шагового двигателя, иначе ваша плата может быть повреждена.
Модуль шагового двигателя может управлять до 8 двигателями, каждому двигателю требуются 2 GPIO для управления сигналами шага и направления.
Ключевые концепции
В реальных приложениях шаговые двигатели подключаются к кинематической системе. Перед использованием шагового двигателя вы должны прикрепить его (используя функцию attach) и установить переменные, определенные вашей кинематической системой:
- Единицы измерения, например 1 см.
- Количество шагов на единицу.
- Минимальная скорость, измеряемая в единицах / минуту.
- Максимальная скорость, измеряемая в единицах / минуту.
После прикрепления программист может перемещать шаговые двигатели, указывая:
- Сколько единиц переместить, например, 10 сантиметров.
- На какой скорости, например, 5 сантиметров / минуту.
- С каким ускорением, например, 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