КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Драйвер моторов с управляющим контроллером, FLASH-I2C, подключаем к Rasbperry



Общие сведения:

Модуль - Драйвер моторов с управляющим контроллером, I2C-flash - является драйвером коллекторных моторов с управлением по шине I2С.

Модуль относится к серии «Flash», а значит к одной шине I2C можно подключить более 100 модулей, так как их адрес на шине I2C (по умолчанию 0x09), хранящийся в энергонезависимой памяти, можно менять программно.

Для запуска мотора достаточно передать модулю число, определяющее коэффициент заполнения ШИМ от 0 до ±100%, значение определяет скорость, а знак, направление вращения мотора.

Модуль позволяет блокировать (стопорить) и освобождать вал остановленного (останавливаемого) мотора. В первом случае остановка мотора осуществляется с резким торможением и последующим удержанием вала, а во втором, торможение осуществляется плавно, по инерции, без удержания вала.

Модуль может получать данные с магнитного или оптического энкодера установленного на ротор мотора. В таком случае модулю нужно задать количество магнитов или оптических щелей энкодера. После чего скорость можно задавать не только коэффициентом заполнения ШИМ, но и количеством полных оборотов в минуту. Наличие энкодера позволит не только задавать скорость, но и получать реальную скорость вала и количество совершённых оборотов, даже если он вращается посредством внешних сил. Если на роторе мотора установлен редуктор, то модулю нужно указать его передаточное отношение.

Видео:

Редактируется ...

Спецификация:

  • Напряжение питания логики: 5 В (номинально), или 3,3 В.
  • Диапазон напряжений мотора поддерживаемый драйвером: 2,7 В ... 12 В.
  • Максимальный ток мотора поддерживаемый драйвером: до 3 А (пиковый ток до 4 А).
  • Драйвер оснащён защитой от перегрева и перегрузки по току.
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: Vcc.
  • Уровень логической 1 сигналов с энкодера: Vcc.
  • Рабочая температура: от -20 до +70 °С.
  • Габариты: 45 х 25 мм.
  • Вес: 7 г.

Подключение:

Перед подключением модуля ознакомьтесь с разделом "Смена адреса модуля на шине I2C" в данной статье.

Назначение разъёмов модуля:

Разъем из 4 выводов используется для подключения к шине I2C.

  • SCL - вход/выход линии тактирования шины I2C.
  • SDA - вход/выход линии данных шины I2C.
  • 5V - вход питания +5 В (номинально), или 3,3 В.
  • GND - общий вывод питания (соединён с выводом питания мотора -VMOT).

Разъем из 2 выводов используется для подачи питания на мотор через драйвер модуля.

  • +VMOT - вход питания мотора от +2,7 В до +12 В.
  • -VMOT - общий вывод питания (соединён с выводом GND).

Разъем из 6 выводов используется для подключения мотора и энкодера.

  • M - два выхода для подключения коллекторного мотора.
  • S - два входа сигналов от магнитного или оптического энкодера.
  • V - выход питания логики энкодера (соединён с выводом 5V).
  • G - общий вывод питания (соединён с выводом GND).

Подключение мотора без энкодера:

При подключении мотора без энкодера используются только выводы M (Motor).

Выводы G (GND), V (Vcc), S (Signal) остаются не задействованы.

Подключение мотора с энкодером:

Для подключения мотора используются выводы M.

Для подключения энкодера используются выводы G (GND), V (Vcc), S (Signal).

Подключение модуля к управляющей плате:

Модуль подключается к аппаратной шине I2C Raspberry Pi. В комплекте имеется кабель для быстрого и удобного подключения модуля к колодке I2C на Trema+Expander Hat. Если на шине I2C уже имеется другое устройство, то для подключения модуля, предлагаем воспользоваться I2C Hub.

Инструкция по подключению.

Питание:

Входное напряжение питания модуля 5В (номинально), или 3,3 В постоянного тока, подаётся на выводы 5V и GND.

Входное напряжение питания мотора от 2,7В до 12В постоянного тока, подаётся на выводы +VMOT и -VMOT.

Подробнее о модуле:

Модуль построен на базе микроконтроллера STM32F030F4, драйвера DRV8833 и снабжен собственным стабилизатором напряжения. Модуль способен поддерживать заданную скорость и направление вращения вала, сверяясь с показаниями энкодера. На плате модуля имеется красный светодиод информирующий об отличии реальной скорости от заданной.

Модуль без энкодера позволяет:

  • Менять свой адрес на шине I2C.
  • Управлять внутренней подтяжкой линий шины I2C (по умолчанию включена).
  • Указывать борт установки модуля (модуль левого колеса / модуль правого колеса).
  • Задавать скорость вращения вала от 0 до ±100%, при этом знак определяет направление.
  • Останавливать двигатель и/или указать тип его остановки. Двигатель может быть остановлен двумя способами: отключением мотора (свободный ход) или торможением (стопор). Заданный тип применяется ко всем последующим остановкам двигателя.
  • Останавливать двигатель по истечении заданного времени.
  • Определять наличие ошибки драйвера (перегрузка по току, перегрев, низкое напряжение).

Модуль с энкодером дополнительно позволяет:

  • Указывать передаточное отношение редуктора мотора.
  • Указывать количество магнитов или оптических щелей энкодера.
  • Задавать скорость вращения вала, указав количество оборотов в минуту или метров в секунду. Во всех случаях можно указывать отрицательные значения для вращения в обратную сторону.
  • Получать флаг отличия заданной скорости вращения вала от реальной, а так же указывать процент отклонения при котором будет устанавливаться данный флаг. На плате модуля имеется красный светодиод, который дублирует состояние этого флага.
  • Узнавать текущую скорость вращения вала. Скорость вращения вала определяется по показаниям энкодера, даже если мотор отключён, а вал вращается по средством внешних сил.
  • Узнавать количество совершённых полных оборотов вала. Количество оборотов вала определяется по показаниям энкодера, даже если мотор отключён, а вал вращается по средством внешних сил.
  • Остановить двигатель по истечении заданного количества полных оборотов вала. А зная размеры колеса, можно остановить двигатель по прохождении указанного расстояния.

Специально для работы с модулем - Мотор-редуктор с управляющим контроллером, I2C-flash, нами разработана библиотека pyiArduinoI2Cmotor которая позволяет реализовать все функции модуля.

Для работы с модулем необходимо включить шину I2C.

Ссылка на подробное описание как это сделать.

Внимание! Для корректной работы модулей FLASH-I2C на Raspberry Pi под управлением Raspberry OS "Buster" необходимо выключить динамическое тактирование ядра (опция core_freq_min должна быть равна core_freq в /boot/config.txt) Ссылка на подробное описание.

Для подключения библиотеки необходимо сначала её установить. Сделать это можно в менеджере модулей в Thonny Python IDE (тогда библиотека установится локально для этого IDE), в виртуальной среде командой pip3 install pyiArduinoI2Cmotor или в терминале Raspberry (тогда библиотека будет системной) командой:

sudo pip3 install pyiArduinoI2Cmotor

Подробнее об установке библиотек можно узнать в этой статье.

Смена адреса модуля на шине I2C:

По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09. Если вы планируете подключать более 1 модуля на шину I2C, необходимо изменить адреса модулей таким образом, чтобы каждый из них был уникальным. Более подробно о том, как изменить адрес, а также о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.

Настройка модуля:

Настройка модуля заключается в указании параметров энкодера и редуктора.

Настройка модуля на работу мотора без энкодера:

Если драйвер работает с мотором без энкодера, то необходимо сбросить количество магнитов энкодера и указать состояние флагов инверсии вращения. Дополнительно можно указать способ остановки мотора (с освобождением или блокировкой вала).

#   Подключаем библиотеку для работы с мотором I2C-flash.
from pyiArduinoI2Cmotor import *
from time import sleep

#   Объявляем объект для работы с функциями и методами библиотеки pyiArduinoI2Cmotor, указывая адрес модуля на шине I2C.
mot = pyiArduinoI2Cmotor(0x09)

# Указываем что энкодер отсутствует.
mot.setMagnet(0)

# Редуктор НЕ инвертирует направление вращения, ротор мотора вращается НЕ против часовой стрелки.
mot.setInvGear(False, False)

# Указываем освободить мотор при его остановке. Ротор остановленного мотора можно вращать.
mot.setStopNeutral(True)

while True:

    # Запускаем мотор на скорости  50% и ждём 5 секунд.
    mot.setSpeed( 50, MOT_PWM)
    sleep(5)

    # Останавливаем мотор и ждём 5 секунд.
    mot.setStop()
    sleep(5)

    # Запускаем мотор на скорости -50% и ждём 5 секунд.
    mot.setSpeed(-50, MOT_PWM)
    sleep(5)

    # Останавливаем мотор и ждём 5 секунд.
    mot.setStop()
    sleep(5)

Функция setMagnet() позволяет задать количество магнитов или оптических щелей энкодера. Так как данный пример демонстрирует настройку модуля на работу мотора без энкодера, то функция вызывается с параметром 0 - нет магнита или оптических щелей на валу энкодера.

Функция setInvGear() позволяет настроить инверсии вращения вала.

  • Первый параметр функции устанавливается в True если выходной вал редуктора вращается в сторону противоположную вращению ротора мотора.
  • Второй параметр функции устанавливается в True если ротор мотора вращается против часовой стрелки, при положительных скоростях.

Функция setStopNeutral() позволяет определить поведение вала при остановке. Если остановка должна быть плавной, то указывается True, иначе False.

В коде функции loop() демонстрируется работа модуля.

Функция setSpeed() задаёт скорость и направление вращения мотора, а функция setStop()останавливает мотор.

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

Настройка модуля на работу мотора с энкодером:

Если драйвер работает с мотором и энкодером, то необходимо указать количество магнитов энкодера, состояние флагов инверсии вращения и передаточное отношение редуктора. Дополнительно можно указать способ остановки мотора (с освобождением или блокировкой вала) и процент отклонения скорости до установки ошибки.

#   Подключаем библиотеку для работы с мотором I2C-flash.
from pyiArduinoI2Cmotor import *
from time import sleep

#   Объявляем объект для работы с функциями и методами библиотеки pyiArduinoI2Cmotor, указывая адрес модуля на шине I2C.
mot = pyiArduinoI2Cmotor(0x09)

# Указываем что энкодер установленный на роторе мотора содержит 7 магнитов или 7 оптических щелей.
mot.setMagnet(7)

# Редуктор НЕ инвертирует направление вращения, ротор мотора вращается НЕ против часовой стрелки.
mot.setInvGear(False, False)

# Указываем передаточное отношение редуктора 10.0 = 1:10. Если редуктора нет, то указывается 1.0 = 1:1.
mot.setReducer(10.0)

# Указываем освободить мотор при его остановке. Ротор остановленного мотора можно вращать.
mot.setStopNeutral(True)

# Указываем устанавливать ошибку при отклонении заданной скорости от реальной более чем на 20%.
mot.setError(20)

while True:
    # Запускаем мотор на скорости  120 об/мин и ждём 5 секунд.
    mot.setSpeed( 120, MOT_RPM)
    sleep(5)

    # Останавливаем мотор и ждём 5 секунд.
    mot.setStop()
    sleep(5)

    # Запускаем мотор на скорости -120 об/мин и ждём 5 секунд.
    mot.setSpeed(-120, MOT_RPM)
    sleep(5)

    # Останавливаем мотор и ждём 5 секунд.
    mot.setStop()
    sleep(5)
  • Настройку модуля достаточно выполнить один раз в коде функции setup().
  • Функция begin() инициирует работу с модулем.
  • Функция setMagnet() позволяет задать количество магнитов или оптических щелей энкодера. В данном примере указано 7 магнитов или оптических щелей.
  • Функция setInvGear() позволяет настроить инверсии вращения вала.
    • Первый параметр функции устанавливается в True если выходной вал редуктора вращается в сторону противоположную вращению ротора мотора.
    • Второй параметр функции устанавливается в True если ротор мотора вращается против часовой стрелки, при положительных скоростях.
  • Функция setReducer() позволяет указать передаточное отношение редуктора, от 1:0,01 до 1:167'772,15. В данном примере указано 1:10,0.
  • Функция setStopNeutral() позволяет определить поведение вала при остановке. Если остановка должна быть плавной, то указывается True, иначе False.
  • Функция setError() позволяет задать процент максимального отклонения скорости до установки ошибки. В данном примере, если заданная скорость будет отличаться от реальной более чем на 20%, то установится флаг ошибки, а на плате включится красный светодиод.
  • В коде функции loop() демонстрируется работа модуля.
  • Функция setSpeed() задаёт скорость и направление вращения мотора, а функция setStop()останавливает мотор.
  • Если модуль настроен правильно, то выходной вал редуктора будет вращаться по часовой стрелке при положительных скоростях.

Примеры работы с модулем:

Примеры работы с модулем при помощи библиотеки pyiArduinoI2Cmotor и описание всех её функций, доступны на странице Wiki - Мотор-редуктор с управляющим контроллером, FLASH-I2C, подключаем к Raspberry.

Функции setSpeed(), getSpeed(), setStop() и getSum(), вызванные с параметрами MOT_RPM, MOT_M_S, MOT_MET и MOT_REV поддерживаются только модулем с установленным энкодером.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями