Servomoteur SG90

Как управлять серводвигателем с Raspberry Pi

Обновлено 29 октября 2019 - 0 Комментарии - , , , ,

ⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.

Это руководство является третьей частью файла, посвященного открытию электроники с помощью Raspberry Pi. Если вы не читали его, я советую вам обратиться к первому руководству по управлению светодиодом с помощью Raspberry Pi, а также ко второму руководству по использованию считывателя RFID с Raspberry Pi.

При запуске домашней автоматизации классическая потребность — контролировать физическое движение в реальности из программы.

В этом уроке мы увидим, как использовать Raspberry Pi для управления серводвигателем.

Аксессуары для управления серводвигателем

Чтобы иметь возможность следовать этому руководству и управлять серводвигателем, нам понадобится следующий материал:

В чем разница между двигателем, серводвигателем и шаговым двигателем?

Прежде чем приступить к подключению нашего серводвигателя к Raspberry Pi, давайте взглянем на различные типы двигателей, обычно используемых в электронике.

Не вдаваясь в подробности, мы можем примерно разделить двигатели, используемые в электронике, на три категории:

  • Двигатель: он работает, пока на него подается питание. Он подходит, если вы хотите выполнять непрерывное движение, не требующее большой точности.
  • Шаговый двигатель: он вращается небольшими последовательными скачками. То есть вы сможете попросить его сделать, например, 50 или 112 прыжков, которые будут соответствовать определенному движению (например, четверть оборота). Это подходит, если вы хотите сделать непрерывное движение с высокой точностью (например, они используются в 3D-принтерах).
  • Серводвигатель: он поворачивается под определенным углом, определенным в соответствии с сигналом типа ШИМ (широтно-импульсная модуляция). Часто небольшие двигатели ограничены и не могут сделать больше одного оборота. Поэтому они скорее используются для коротких движений с высокой точностью.
Различные типы двигателей
Слева направо двигатель, шаговый двигатель и серводвигатель.

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

В нашем случае мы собираемся использовать серводвигатель, потому что это самый простой прецизионный двигатель, которым можно управлять с Raspberry Pi.

Подключите серводвигатель к Raspberry Pi

Первое, что нужно сделать, чтобы использовать наш серводвигатель, — это подключить его к Raspberry Pi.

Приводы имеют 3 электрических разъема. Цвета могут меняться в зависимости от производителя, но обычно вы найдете что-то вроде:

  • Красный провод, служащий источником питания.
  • Черный или коричневый провод, служащий GDN.
  • Другой провод, который используется для передачи сигнала ШИМ, контролирующего положение двигателя.

Поэтому мы подключим эти разные кабели к Raspberry Pi, красный провод — к 5-вольтовому порту GPIO, а черный — к порту GND.

С другой стороны, для порта PWM нам обязательно нужно будет подключить его к 12-му контакту GPIO Raspberry Pi. Действительно, это единственный вывод GPIO, по умолчанию поддерживающий сигнал ШИМ.

Так что у вас должен получиться такой монтаж.

Схема сборки серводвигателя на Raspberry Pi
Красный провод -> GPIO 2, Черный провод -> GPIO 6, Желтый провод -> GPIO 12

Обратите внимание, здесь мы запитываем наш серводвигатель напрямую от Raspberry Pi. Это работает, потому что мы используем очень маленький серводвигатель, но для более крупной модели нам понадобится специальный источник питания.

Управляйте серводвигателем в командной строке

Теперь, когда мы подключили серводвигатель, мы сможем управлять им непосредственно из командной строки Raspberry Pi.

Для этого мы начнем с активации режима ШИМ на порту 12, то есть GPIO 18 в соответствии с нумерацией процессора.

gpio -o mode 18 pwm

И мы активируем режим ШИМ Mark / Space, который позволяет получить сигнал, более подходящий для нашего использования.

gpio pwm-ms

Наконец, мы настроим продолжительность цикла, используемые частоты и т. Д.

Серводвигатель настроен на работу с частотой 50 Гц, то есть 20 мс. Сигнал Raspberry Pi работает на другой частоте — 19,2 МГц. Используя эти две цифры, мы можем вычислить период и диапазон (спасибо ramboise314.fr за формулу):

50 = 19.2 * 10^6 / 192 / 2000
Выдержка из документации SG90.
В документации на двигатель представлена диаграмма периода и рабочего цикла SG90.

Поэтому мы настроим Raspberry Pi на использование этих значений:

gpio pwmc 192
gpio pwmr 2000

Наконец-то мы сможем запустить наш двигатель! Обратите внимание, что мы передаем серводвигателю не угол, а число, которое будет преобразовано в угол. Наш серводвигатель вращается от 0 ° до 180 °. После некоторого тестирования могло показаться, что 0 ° соответствует 230, 90 ° — 150 и 180 ° — 70.

Поэтому, чтобы направить наш двигатель под углом 90 °, мы будем использовать команду:

gpio -g pwm 18 150

И мы заменим 150 на 230, чтобы перейти к 0 °, 70, чтобы перейти на 180 °, или любое другое значение, которое нам нужно.

Обратите внимание, что эти маленькие моторы точно поддерживают угол 180 °, но у них есть небольшой запас, из-за которого они могут сделать 190 ° или 200 ° и даже сделать полный оборот, если вы установите достаточно низкое значение. Он индивидуален для каждой модели двигателя.

Управляйте серводвигателем с помощью Python

Как и в предыдущих руководствах этой серии, цель состоит в том, чтобы управлять нашим движком с помощью Python, а не напрямую из командной строки. Я считаю, что теперь у вас есть основы Python, если не прочитайте предыдущие руководства, ссылки доступны в начале этой статьи.

Чтобы управлять нашим движком из скрипта Python, мы снова воспользуемся библиотекой Rpi.GPIO.

В Python и Pi угол мотора рассчитывается как процент от цикла. Этот процент называется «Рабочий цикл».

Сигнал 0,5 мс соответствует 0 °, а сигнал 2,5 мс — 180 °. Зная, что наш цикл составляет 50 Гц, то есть 20 мс, это позволяет нам рассчитать рабочий цикл для 0 ° и 180 ° следующим образом:

x = 0.5 / 20
y = 2.5 / 20

Затем мы находим, что рабочий цикл, соответствующий 0 °, составляет 0,025, или 2,5%, а цикл, соответствующий 180 °, равен 0,125, или 12,5%.

Однако небольшая проблема, если это значение теоретически хорошее, на самом деле оно имеет тенденцию запускать полный оборот двигателя на 0 ° … Поэтому я рекомендую вам использовать 4% для 0 °. Значение 12,5% для 180 — это хорошо.

Чтобы управлять двигателем, нам просто нужно установить контакт 12 в качестве нашего сигнала ШИМ и использовать функции start и ChangeDutyCycle.

Поэтому вы можете создать файл servo.py и поместите туда следующий код:

#!/usr/bin/env python3
#-- coding: utf-8 --
import RPi.GPIO as GPIO
import time


#Set function to calculate percent from angle
def angle_to_percent (angle) :
    if angle > 180 or angle < 0 :
        return False

    start = 4
    end = 12.5
    ratio = (end - start)/180 #Calcul ratio from angle to percent

    angle_as_percent = angle * ratio

    return start + angle_as_percent


GPIO.setmode(GPIO.BOARD) #Use Board numerotation mode
GPIO.setwarnings(False) #Disable warnings

#Use pin 12 for PWM signal
pwm_gpio = 12
frequence = 50
GPIO.setup(pwm_gpio, GPIO.OUT)
pwm = GPIO.PWM(pwm_gpio, frequence)

#Init at 0°
pwm.start(angle_to_percent(0))
time.sleep(1)

#Go at 90°
pwm.ChangeDutyCycle(angle_to_percent(90))
time.sleep(1)

#Finish at 180°
pwm.ChangeDutyCycle(angle_to_percent(180))
time.sleep(1)

#Close GPIO & cleanup
pwm.stop()
GPIO.cleanup()

Все, что вам нужно сделать, это запустить сценарий, выполнив:

python3 ./servo.py

Затем вы должны увидеть, как ваш двигатель запускается при 0 °, затем переключается на 90 ° и, наконец, останавливается при 180 °.

Все, что вам нужно сделать, это адаптировать этот сценарий под свои нужды!

Notez cet article.
доля
Новостная рассылка
Автор:
Raspberry Pi FR
Присоединяйтесь к сообществу Raspberry Pi
Компьютер за 35 долларов уже продано 10 миллионов копий
КУПИТЬ НОВУЮ RASPBERRY PI 4
Связанные руководства
Прочтите Linux-раздел Raspberry SD-карты из Windows и Mac. Raspberry Pi, как загрузиться с USB-накопителя или внешнего жесткого диска. Создайте SD-карту в Windows, Mac или Linux с помощью Raspberry Pi Imager. Создайте SIN с помощью малины Пи и самбы. Как заставить Raspberry Pi читать текст с помощью eSpeak.
Комментариев нет

доля
Подписаться на новости
Подпишитесь на рассылку новостей.
Тебе понравилась эта статья ?
Подпишитесь и будьте в курсе!