Перейти к содержанию
Материалы раздела

Сервоприводы

Сервоприводы подключаются через стандартное трёхпроводное соединение:

  • питание — обычно красный провод, подключённый к подходящему источнику питания;
  • земля — обычно чёрный или коричневый провод, общий для сервопривода, платы и источника питания;
  • сигнал — обычно жёлтый, оранжевый или белый провод, подключённый к GPIO платы.

Модуль формирует стандартный управляющий сигнал частотой 50 Гц. Значению 0° соответствует импульс 1000 мкс, 90° — 1500 мкс, 180° — 2000 мкс.

Не питайте сервопривод от GPIO или от маломощного выхода питания платы: пусковой ток двигателя может вызвать перезагрузку или повредить плату. Используйте подходящий источник питания и обязательно соедините его землю с землёй платы. Допустимые напряжение, ток и диапазон управляющих импульсов уточняйте в документации сервопривода.

Пример работы с сервоприводом:

  1. Создайте объект сервопривода функцией servo.attach().

    -- Подключить сигнальный вывод к GPIO26
    s = servo.attach(pio.GPIO26)
    
  2. Задайте положение методом write().

    -- Переместить сервопривод в положение 45°
    s:write(45)
    
  3. Освободите ресурсы методом detach(), когда сервопривод больше не нужен.

    -- Отключить сервопривод
    s:detach()
    

instance = servo.attach(pin)

Создать новый экземпляр сервопривода. Модуль занимает канал PWM и сразу запускает сигнал 50 Гц с нейтральным импульсом 1500 мкс, соответствующим 90°.

Аргументы:

  • pin: GPIO сигнального провода, например pio.GPIO26.

Возвращает: объект сервопривода или исключение.

-- Подключить сигнальный вывод к GPIO26
s = servo.attach(pio.GPIO26)

instance:detach()

Остановить управляющий сигнал и освободить канал PWM. После этого сервопривод больше не получает команду удержания положения; его питание при этом не отключается.

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

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

-- Отключить сервопривод
s:detach()

instance:write(value)

Задать конечное значение от 0 до 180 включительно. Значение должно быть конечным числом; NaN и бесконечность не допускаются.

  • Для позиционного сервопривода значение задаёт требуемый угол: 0 соответствует импульсу 1000 мкс, 90 — 1500 мкс, 180 — 2000 мкс. Реальный механический диапазон и точность зависят от модели.

  • Для сервопривода непрерывного вращения эти же импульсы обычно задают скорость и направление, а 90 соответствует номинальной остановке. Точная точка остановки, направления и максимальная скорость зависят от модели и её калибровки.

write() сразу меняет длительность PWM-импульса. Модуль не строит траекторию, не ограничивает скорость, ускорение или рывок и не получает обратную связь о фактическом положении вала. Встроенный регулятор позиционного сервопривода самостоятельно движется к новой команде, поэтому скорость зависит от самого сервопривода, нагрузки и питания. Если приложению нужен плавный программно управляемый переход, оно должно задавать промежуточные углы с нужными интервалами времени.

Аргументы:

  • value: конечное число от 0 до 180.

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

-- Подключить сигнальный вывод к GPIO26
s = servo.attach(pio.GPIO26)

-- Переместить стандартный сервопривод в положение 45°
s:write(45)
-- Подключить сигнальный вывод к GPIO26
s = servo.attach(pio.GPIO26)

-- Вращать сервопривод непрерывного вращения по часовой стрелке
s:write(180)