Электронный компонент:Кейп Motor Bridge Cape v1.0

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Кейп Motor Bridge Cape v1.0[1]

Это кейп для плат BeagleBone, предназначенный для двунаправленного управления моторами. Он оснащен двумя двойными Н-мостами TB6612FNG, благодаря которым может управлять двумя шаговыми моторами или четырьмя коллекторными электромоторами постоянного тока, требующими постоянный ток с 6-15 вольтами и 1 ампером на мотор. Кейп обеспечивает плату BeagleBone регулируемым 5-вольтовым питанием, но входное напряжение не должно превышать 15 вольт. Кроме того, кейп оснащен 6 гребешками для управления сервомоторами и 6 дополнительными GPIO-контактами. Все функции обеспечиваются сопроцессором STM32F0, и этот микроконтроллер может «общаться» с BeagleBone при помощи I2C или UART.

Купить этот кейп можно по этой ссылке.

Особенности

  • Возможность управлять 2 шаговыми моторами или 4 электромоторами постоянного тока
  • Возможность управлять 6 сервомоторами
  • Платформа Mbed
  • Сопроцессор STM32F0
  • Два TB6612FNG
  • 6 дополнительных GPIO-контактов
  • Коммуникация с BBG/BBB через I2C или UART

Характеристики

  • Входное напряжение батареи – 6-15 вольт
  • Рабочее напряжение Н-моста – 6-15 вольт
  • Сила выходного 5-вольтового (DC/DC) тока – не более 2 ампер
  • Сила выходного 3.3-вольтового тока – не более 35 миллиампер (мА)
  • Сила тока одного канала Н-моста – 1.2 ампер (не более 3.2 ампер)
  • Рабочее напряжение драйвера сервомоторов – 5 вольт (суммарная сила тока – не более 1.5 ампер)
  • Защита от обратного тока – присутствует
  • Защита от избыточного тока – одноразовый быстродействующий 3-амперный предохранитель

Описание и расположение компонентов

  • 3-амперный одноразовый предохранитель – защита от избыточного тока
  • Кнопка сброса – сбрасывает сопроцессор
  • Интерфейс SWD (Serial Wire Debug) – отладочный интерфейс
  • GPIO-контакты – для расширения проекта
  • Сервомоторы - интерфейсы для подключения сервомоторов
  • STM32F030R8сопроцессор
  • DC/DC – Цепь для преобразования напряжения
  • TB6612FNGН-мосты, управляющие моторами
  • Индикаторысветодиоды, указывающие направление движения моторов
  • Переключатель режима работы – переключение между нормальным режимом и режимом ожидания
  • Защита от обратных токов – защитная цепь
  • Мотор3/Мотор4 – контакты для управления двумя моторами постоянного тока или одним шаговым мотором
  • Мотор1/Мотор2 – контакты для управления двумя моторами постоянного тока или одним шаговым мотором
  • Батарея – источник питания для моторов

С чего начать

Эта глава расскажет о функциях библиотеки «MotorBridgeCapeforBBG_BBB», а также о том, как ими пользоваться на практике. Скачать библиотеку можно по этой ссылке.

Чтобы использовать библиотеку «MotorBridgeCapeforBBG_BBB», просто импортируйте в свой проект файл «MotorBridge.py», а затем создайте объект MotorBridgeCape.

import MotorBridge
motor = MotorBridge.MotorBridgeCape()

Шаговый мотор

Интерфейсы для подключения шаговых моторов выглядят на кейпе Motor Bridge Cape v1.0 следующим образом:

Функции

Здесь будет краткое описание функций библиотеки «MotorBridgeCapeforBBG_BBB», предназначенных для управления шаговыми моторами.

  • StepperMotorAInit()
    • Инициализирует порт шагового мотора А.
  • StepperMotorAMove(MoveSteps,StepDelayTime)
    • Управляет пошаговым мотором А. Аргумент MoveSteps отвечает за то, на сколько шагов передвигается шаговый мотор. Если указать в этом аргументе положительное значение, мотор будет двигаться по часовой стрелке, а если отрицательное – против часовой. Аргумент StepDelayTime отвечает за время простоя между шагами (исчисляется в микросекундах).
  • StepperMotorBInit()
    • Инициализирует порт шагового мотора В.
  • StepperMotorBMove(MoveSteps,StepDelayTime)
    • Управляет пошаговым мотором B. Аргумент MoveSteps отвечает за то, на сколько шагов передвинется шаговый мотор. Если указать в этом аргументе положительное значение, мотор будет двигаться по часовой стрелке, а если отрицательное – против часовой. Аргумент StepDelayTime отвечает за время простоя между шагами (исчисляется в микросекундах).

Демо-программа для шагового мотора

Скопируйте код ниже в свой проект и сохраните его в формате Python-файла:

import MotorBridge
import time
 
def StepperMotorATest():
    print 'Hello From MotorBridge'
    motor.StepperMotorAInit()
    motor.StepperMotorAMove(1000,1000) # 1000 steppers  1000us every step
    time.sleep(1)
    motor.StepperMotorAMove(-1000,1000) #1000 steppers  1000us every step
    time.sleep(1)
 
def StepperMotorBTest():
    print 'Hello From MotorBridge'
    motor.StepperMotorBInit()
    motor.StepperMotorBMove(1000,1000) # 1000steppers  1000us every step
    time.sleep(1)
    motor.StepperMotorBMove(-1000,1000) # 1000 steppers  1000us every step
    time.sleep(1)
  
if __name__=="__main__":
    motor = MotorBridge.MotorBridgeCape()
    StepperMotorATest()
    StepperMotorBTest()

Электромотор постоянного тока

Интерфейсы для подключения электромоторов постоянного тока выглядят на кейпе Motor Bridge Cape v1.0 следующим образом:

Функции

Здесь будет краткое описание функций библиотеки «MotorBridgeCapeforBBG_BBB», предназначенных для управления электромоторами постоянного тока.

  • DCMotorInit(MotorName,Frequency)
    • Инициализирует электромотор постоянного тока и задает частоту. Аргумент MotorName отвечает за номер мотора; допустимые значения – от «1» до «4» (соответственно, для моторов от 1-ого до 4-ого). Аргумент Frequency отвечает за частоту электромотора.
    • Примечание: Если изменить частоту одного мотора, частота других моторов изменится тоже.
  • DCMotorMove(MotorName,Direction,PWMDuty)
    • Управляет электромотором постоянного тока, а если точнее – задает направление и коэффициент заполнения ШИМ. Аргумент MotorName отвечает за номер мотора; допустимые значения – от «1» до «4» (соответственно, для моторов от 1-ого до 4-ого). Аргумент Direction отвечает за направление движения мотора; если указать «1», мотор будет двигаться по часовой стрелке, если «2» – против часовой, если «3» – мотор остановится. Аргумент PWMDuty отвечает за коэффициент заполнения; допустимые значения варьируются между «0» и «100».
  • motor.DCMotorStop(Motorname)
    • Останавливает электромотор постоянного тока. Аргумент MotorName отвечает за номер мотора; допустимые значения – между «1» и «4» (соответственно, для моторов от 1-ого до 4-ого).

Демо-программа для электромотора постоянного тока

Скопируйте код ниже в свой проект и сохраните его в формате Python-файла:

import MotorBridge
import time
 
MotorName        = 1
ClockWise        = 1
CounterClockWise = 2
PwmDuty          = 90
Frequency        = 1000
 
if __name__=="__main__":
    motor = MotorBridge.MotorBridgeCape()
    motor.DCMotorInit(MotorName,Frequency)
    while True:
        motor.DCMotorMove(MotorName,ClockWise,PwmDuty)
        time.sleep(2)
        motor.DCMotorMove(MotorName,CounterClockWise,PwmDuty)
        time.sleep(2)
        print "hello"
        motor.DCMotorStop(MotorName)
        time.sleep(2)

Сервомотор

Интерфейсы для подключения электромоторов постоянного тока выглядят на кейпе Motor Bridge Cape v1.0 следующим образом:

Функции

Здесь будет краткое описание функций библиотеки «MotorBridgeCapeforBBG_BBB», предназначенных для управления сервомоторами.

  • ServoInit(ServoName,Frequency)
    • Инициализирует сервомотор и задает его частоту. Аргумент ServoName отвечает за номер мотора сервомотора; допустимые значения – между «1» и «6» (соответственно, для сервомоторов от 1-ого до 6-ого). Аргумент Frequency задает частоту сервомотора (значение по умолчанию – 50 Гц).
  • ServoMoveAngle(ServoName,Angle)
    • Управляет сервомотором (задает угол его поворота). Аргумент ServoName отвечает за номер сервомотора; допустимые значения – между «1» и «6» (соответственно, для сервомоторов от 1-ого до 6-ого). Аргумент Angle отвечает за градус поворота; допустимые значения – между «0» и «180» (т.е. от 0 до 180 градусов).

Демо-программа для сервомотора

Скопируйте код ниже в свой проект и сохраните его в формате Python-файла:

import MotorBridge
import time
ServoName   =  2
Frequency   =  50
Angle1      =  20
Angle2      =  160
 
if __name__=="__main__":
    motor = MotorBridge.MotorBridgeCape()
    motor.ServoInit(ServoName,Frequency)
 
    while True:
        print 'Servo Test'
        motor.ServoMoveAngle(ServoName,Angle1)
        time.sleep(2)
        motor.ServoMoveAngle(ServoName,Angle2)
        time.sleep(2)

Обновление прошивки

Если с кейпом возникла какая-то проблема, попробуйте обновить его прошивку. Эта глава рассказывает, как обновить прошивку «моторного» кейпа при помощи BeagleBone Green, но данная инструкция также подходит для BBGW и BBB.

1. Подключите кейп Motor Bridge Cape v1.0 к плате BeagleBone (будь то BBG, BBB или BBGW). Затем подключите плату BeagleBone к компьютеру при помощи USB-кабеля.

2. Подождите, пока плата подключится к интернету. Затем получите к ней доступ через SSH, как показано на картинке ниже:

3. Загрузите код с GitHub, выполнив следующие команды:

git clone https://github.com/Seeed-Studio/MotorBridgeCapeFirmware

4. Пройдите к «MotorBridgeCapeFirmware» и выполните команду make flash, чтобы записать прошивку.

cd MotorBridgeCapeFirmware/ && make flash

Спустя несколько секунд в терминале появится сообщение «Verification OK».

5. Проверьте, записалась ли прошивка, выполнив следующую команду:

i2cdetect -y -r 1

Если в ответ будет показан адрес «0x4b», это значит, что прошивка была записана успешно.

Возможные проблемы и их решение

Проблема 1: Я обновил прошивку, но не могу найти I2C-адрес. Что делать?

Убедитесь, что значением для P9_23 является HIGH, поскольку P9_23 подключен к контакту Reset на STM32. Я задаю контакту P9_23 значение HIGH в инициализирующей функции класса MotorBridgeCape.

Проблема 2: Я не могу обновить прошивку. Когда я пытаюсь сделать это, появляется сообщение об ошибке, которое говорит, что UART2 не найден. Помогите.

Вам нужно включить BB-UART2, потому что BBG прошивает кейп Motor Bridge Cape через UART2.

vi /boot/uEnv.txt

Затем уберите знак комментария у строчки

cape_enable=capemgr.enable_partno=BB-UART2

Сохраните изменения в файле, выйдите из редактора и перезапустите плату.

Проблема 3: Я успешно обновил прошивку и нашел I2C-адрес, но кейп по-прежнему не работает.

Обратите внимание, что на плате есть переключатель, позволяющий менять режим работы платы. Убедитесь, что этот переключатель стоит в положении «WORKING». Если кейп по-прежнему не работает, обратитесь за советом на форум.

Полезные ссылки

См.также

Внешние ссылки