DevGang
Авторизоваться

Как управлять двигателем постоянного тока (или двигателями) с помощью Raspberry Pisvsav

Управлять двигателями постоянного тока с помощью Raspberry Pi довольно просто! Независимо от того, хотите ли вы управлять одним двигателем или построить схему Raspberry Pi NERF, принципы будут одинаковы, разница лишь в необходимом оборудовании. Для проекта вы можете использовать любой Raspberry Pi (Zero, Zero W, 3 и т. д.).

В этом руководстве мы рассмотрим пример использования TB6612 для управления одним двигателем постоянного тока, который затем будет использоваться в моем проекте Amazon Echo Furby project. Эта маленькая микросхема предлагается в версии Adafruit (и других), но я предпочитаю версию Adafruit, поскольку она включает в себя диоды для защиты Pi и двигателей. Некоторые микросхемы требуют пайки вашей собственной диодной схемы (например, Sparkfun TB6612FNG), а я бы предпочел этого не делать.

Этот маленький чип может приводить в движение либо два двигателя постоянного тока, либо один шаговый двигатель. Также чип стоит всего 5 долларов, что довольно неплохо.

Аппаратное обеспечение: Есть несколько компонентов, которые обеспечивают управление двигателем постоянного тока Raspberry Pi: 

1. Драйвер/контроллер двигателя (в данном примере TB6612). 

2. Источник питания двигателя (например, аккумулятор). 

3. Непосредственно Raspberry Pi.

GPIO и PWM: По сути, ваши контакты GPIO (вход/выход общего назначения) вашего Pi подключаются к плате драйвера, обеспечивая питание платы и сигналы данных, которые сообщат двигателю, когда он должен работать с использованием PWM (pulse-width modulation). Затем мы напишем простой скрипт на Python, который будет переключать контакты GPIO HIGH или LOW, тем самым активируя двигатель!

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

1. Питание для двигателей (от внешнего аккумулятора/источника питания) 

2. Питание для драйвера мотора (от выводов GPIO Pi).

В любом случае, это очень простой проект, который отлично подходит для реализации на Raspberry Pi GPIO и PWM. Давайте начнем!

Нам понадобиться:

Adafruit TB6612 1.2A DC/Stepper Motor Driver×1 
Raspberry Pi×1 

 

1. Выбор платы для двигателя(ей)

Для моего проекта понадобиться только один мотор. Однако, если вы хотите создать робота на Raspberry Pi, вам потребуется управлять многими моторами. В этом случае стоит использовать плату с драйверами, которая поддерживает возможность работы с большим количеством двигателей (и больший блок питания для их управления). В этом руководстве мы будем работать с Adafruit TB6612 (так же, как TB6612FNG).

Эта плата может управлять двумя двигателями постоянного тока или одним шаговым двигателем - с максимальным током 1,2 А. При выборе двигателя обратите внимание на силу тока, она не должна превышать максимальное значение.

2. Построение схемы

Building the circuit

Перед пайкой соединений, я рекомендую сделать прототип схемы ваших соединений.

Прилагаемая схема показывает соединения, которые необходимо выполнить для построения схемы платы драйвера TB6612. Я также создал диаграмму Fritzing, если вы понимаете о чем я .

Помните (согласно схеме), мощность, подаваемая на двигатель, отличается от мощности, подаваемой на логическую схему драйвера двигателя!

STBY = Pin 13 (GPIO #21)Motor A:
PWMA = Pin 7 (GPIO #4)
AIN2 = Pin 11 (GPIO #17)
AIN1 = Pin 12 (GPIO #18)Motor B:
BIN1 = Pin 15 (GPIO #22)
BIN2 = Pin 16 (GPIO #23)
PWMB = Pin 18 (GPIO #24)

Примечание:
Если вы используете только один двигатель, просто не выполняйте подключения BIN1, BIN2 или PWMB.

3. Пишем код

Данный код можно использовать для управления двигателями постоянного тока. Этот пример кода будет приводить в движение двигатели по часовой стрелке в течение 5 секунд, а затем и против часовой стрелки в течение 5 секунд.

Войдите в свой Raspberry Pi и создайте новый файл:

sudo nano ~/motor/motor.py

Вставьте следующий код, сохраните и выйдите:

Запуск одного двигателя:

#!/usr/bin/env python# Import required modules
import time
import RPi.GPIO as GPIO# Declare the GPIO settings
GPIO.setmode(GPIO.BOARD)# set up GPIO pins
GPIO.setup(7, GPIO.OUT) # Connected to PWMA
GPIO.setup(11, GPIO.OUT) # Connected to AIN2
GPIO.setup(12, GPIO.OUT) # Connected to AIN1
GPIO.setup(13, GPIO.OUT) # Connected to STBY# Drive the motor clockwise
GPIO.output(12, GPIO.HIGH) # Set AIN1
GPIO.output(11, GPIO.LOW) # Set AIN2# Set the motor speed
GPIO.output(7, GPIO.HIGH) # Set PWMA# Disable STBY (standby)
GPIO.output(13, GPIO.HIGH)# Wait 5 seconds
time.sleep(5)# Drive the motor counterclockwise
GPIO.output(12, GPIO.LOW) # Set AIN1
GPIO.output(11, GPIO.HIGH) # Set AIN2# Set the motor speed
GPIO.output(7, GPIO.HIGH) # Set PWMA# Disable STBY (standby)
GPIO.output(13, GPIO.HIGH)# Wait 5 seconds
time.sleep(5)# Reset all the GPIO pins by setting them to LOW
GPIO.output(12, GPIO.LOW) # Set AIN1
GPIO.output(11, GPIO.LOW) # Set AIN2
GPIO.output(7, GPIO.LOW) # Set PWMA
GPIO.output(13, GPIO.LOW) # Set STBY

Запуск двух двигателей: 

#!/usr/bin/env python# Import required modules
import time
import RPi.GPIO as GPIO# Declare the GPIO settings
GPIO.setmode(GPIO.BOARD)# set up GPIO pins
GPIO.setup(7, GPIO.OUT) # Connected to PWMA
GPIO.setup(11, GPIO.OUT) # Connected to AIN2
GPIO.setup(12, GPIO.OUT) # Connected to AIN1
GPIO.setup(13, GPIO.OUT) # Connected to STBY
GPIO.setup(15, GPIO.OUT) # Connected to BIN1
GPIO.setup(16, GPIO.OUT) # Connected to BIN2
GPIO.setup(18, GPIO.OUT) # Connected to PWMB# Drive the motor clockwise
# Motor A:
GPIO.output(12, GPIO.HIGH) # Set AIN1
GPIO.output(11, GPIO.LOW) # Set AIN2
# Motor B:
GPIO.output(15, GPIO.HIGH) # Set BIN1
GPIO.output(16, GPIO.LOW) # Set BIN2# Set the motor speed
# Motor A:
GPIO.output(7, GPIO.HIGH) # Set PWMA
# Motor B:
GPIO.output(18, GPIO.HIGH) # Set PWMB# Disable STBY (standby)
GPIO.output(13, GPIO.HIGH)# Wait 5 seconds
time.sleep(5)# Drive the motor counterclockwise
# Motor A:
GPIO.output(12, GPIO.LOW) # Set AIN1
GPIO.output(11, GPIO.HIGH) # Set AIN2
# Motor B:
GPIO.output(15, GPIO.LOW) # Set BIN1
GPIO.output(16, GPIO.HIGH) # Set BIN2# Set the motor speed
# Motor A:
GPIO.output(7, GPIO.HIGH) # Set PWMA
# Motor B:
GPIO.output(18, GPIO.HIGH) # Set PWMB# Disable STBY (standby)
GPIO.output(13, GPIO.HIGH)# Wait 5 seconds
time.sleep(5)# Reset all the GPIO pins by setting them to LOW
GPIO.output(12, GPIO.LOW) # Set AIN1
GPIO.output(11, GPIO.LOW) # Set AIN2
GPIO.output(7, GPIO.LOW) # Set PWMA
GPIO.output(13, GPIO.LOW) # Set STBY
GPIO.output(15, GPIO.LOW) # Set BIN1
GPIO.output(16, GPIO.LOW) # Set BIN2
GPIO.output(18, GPIO.LOW) # Set PWMB

Благодарю Alex Wilkinson за предоставленную основу для этого примера кода!

Тайная записка:

Некоторые Pi HATs могут использовать вышеперечисленные выводы - поэтому, если у вас есть какая-либо плата HAT/board, подключенная к разъему GPIO вашего Pi, может потребоваться отрегулировать выбранные выводы для правильной выдачи.

Например, я использую Pimoroni Speaker pHAT на моторном Pi; Я проверил вывод Speaker pHAT pinout и обнаружил, что вывод 12 GPIO использует HAT, поэтому вместо него я использую альтернативный вывод (16).

Читайте также : How to log in to a Raspberry Pi via SSH

4. Запустим код

Чтобы включить мотор(ы), запустите скрипт Python:

sudo python ~/motor/motor.py
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться