Управление моторами
Моторы SPIKE Prime и Powered UP
| Мотор | Система | Скорость (RPM) | Крутящий момент (N·cm) | Источник / условия |
|---|---|---|---|---|
Technic Large Angular Motor (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)![]() |
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)![]() |
Powered UP | ≈141 (Philo, 7.5V) |
≈8.81 (Philo, 7.5V) |
Philo motor comparisonControl+ L, Loaded characteristics, строка 7.5V |
Technic XL Motor (88014)![]() |
Powered UP | ≈147 (Philo, 7.5V) |
≈8.81 (Philo, 7.5V) |
Philo motor comparisonControl+ XL, Loaded characteristics, строка 7.5V |
Medium Angular Motor (88018)![]() |
Powered UP | — | — | LEGO Shop 88018 на странице нет публичных RPM / torque |
Medium Linear Motor (88008)![]() |
Powered UP | ≈201 (Philo, 7.5V) |
≈4.08 (Philo, 7.5V) |
Philo motor comparisonPUP medium, Loaded characteristics, строка 7.5V |
Для честного сравнения моторов нужно совпадение напряжения и режима измерения. Здесь для Powered UP выбраны данные Philo при
7.5V(ближайшие к7.4VSPIKE 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)





