Управление моторами

Моторы SPIKE Prime и Powered UP

Мотор Система Скорость (RPM) Крутящий момент (N·cm) Источник / условия
Technic Large Angular Motor (45602)
45602
SPIKE Prime 175 (без нагрузки)
135 (макс. эффективность)
≈126 (Philo, 7.5V)
8 (макс. эффективность)
25 (стопор)
≈8.47 (Philo, 7.5V)
LEGO Education Tech Specs (PDF)
7.2V, ±15%
Philo motor comparison
Spike L, Loaded characteristics, строка 7.5V
Technic Medium Angular Motor (45603)
45603
SPIKE Prime 185 (без нагрузки)
135 (макс. эффективность)
≈105 (Philo, 7.5V)
3.5 (макс. эффективность)
18 (стопор)
≈4.48 (Philo, 7.5V)
LEGO Education Tech Specs (PDF)
7.2V, ±15%
Philo motor comparison
Spike M, Loaded characteristics, строка 7.5V
Technic Large Motor (88013)
88013
Powered UP ≈141 (Philo, 7.5V) ≈8.81 (Philo, 7.5V) Philo motor comparison
Control+ L, Loaded characteristics, строка 7.5V
Technic XL Motor (88014)
88014
Powered UP ≈147 (Philo, 7.5V) ≈8.81 (Philo, 7.5V) Philo motor comparison
Control+ XL, Loaded characteristics, строка 7.5V
Medium Angular Motor (88018)
88018
Powered UP LEGO Shop 88018
на странице нет публичных RPM / torque
Medium Linear Motor (88008)
88008
Powered UP ≈201 (Philo, 7.5V) ≈4.08 (Philo, 7.5V) Philo motor comparison
PUP medium, Loaded characteristics, строка 7.5V

Для честного сравнения моторов нужно совпадение напряжения и режима измерения. Здесь для Powered UP выбраны данные Philo при 7.5V (ближайшие к 7.4V SPIKE Prime), а для SPIKE приведены официальные значения LEGO Education при 7.2V.

Методы управления

Класс Motor предоставляет множество методов для точного управления.

Инициализация

from pybricks.pupdevices import Motor
from pybricks.parameters import Port, Direction

# Простая инициализация
motor = Motor(Port.A)

# С инверсией направления и настройкой шестеренок
# gears=[12, 36] означает, что мотор (12 зубьев) крутит колесо (36 зубьев)
motor = Motor(Port.B, Direction.COUNTERCLOCKWISE, gears=[12, 36])

Основные команды движения

Метод Пример Описание
run(speed) motor.run(500) Вращает мотор с заданной скоростью (град/сек) бесконечно.
run_time(speed, time) motor.run_time(500, 2000) Вращает мотор заданное время (мс).
run_angle(speed, angle) motor.run_angle(500, 90) Поворачивает мотор на заданный угол (относительно текущего положения).
run_target(speed, target_angle) motor.run_target(500, 180) Поворачивает мотор к абсолютной позиции (например, к отметке 180°).
stop() motor.stop() Останавливает мотор (используя режим остановки по умолчанию).
dc(duty) motor.dc(50) Подает напряжение в % (от -100 до 100). Без контроля скорости (PID выключен).

Получение данных

Метод Описание
motor.speed() Текущая скорость (град/сек).
motor.angle() Текущий угол поворота (градусы).
motor.load() Текущая нагрузка на мотор (в мА, приблизительно).
motor.stalled() Возвращает True, если мотор застрял (не может двигаться).

Режимы остановки (Stop)

В методах run_time, run_angle, run_target можно передать аргумент then=Stop..., чтобы указать поведение после завершения движения.

  • Stop.COAST: Отключить питание, мотор вращается по инерции.
  • Stop.COAST_SMART: Аналогично COAST, но также сбрасывает накопленную ошибку PID-регулятора. Полезно для сброса интегральной ошибки перед новым движением.
  • Stop.BRAKE: Замкнуть обмотки, пассивное торможение.
  • Stop.HOLD: Активное удержание позиции (мотор сопротивляется повороту).
  • Stop.NONE: Не останавливать мотор. Используется для плавного перехода к следующей команде (например, чтобы слить два движения в одно).
from pybricks.parameters import Stop

# Проехать 90 градусов и жестко зафиксироваться
motor.run_angle(500, 90, then=Stop.HOLD)

# Разогнаться и отключить питание (катиться по инерции)
motor.run_time(1000, 2000, then=Stop.COAST)

# Проехать часть пути и сразу начать следующее движение без остановки
motor.run_angle(500, 180, then=Stop.NONE)
motor.run_angle(500, 90, then=Stop.BRAKE)