Драйвер для мотор редуктор

Содержание
  1. Управление щёточными моторами с Arduino
  2. Мосфет
  3. Реле и мосфет
  4. Специальный драйвер
  5. Моторы переменного тока
  6. Библиотеки
  7. Помехи и защита от них
  8. Индуктивный выброс напряжения
  9. Помехи от щёток
  10. Помехи по питанию, просадка
  11. Разделение питания
  12. Экранирование
  13. Видео
  14. Мотор-редуктор с управляющим контроллером, FLASH-I2C
  15. Общие сведения:
  16. Видео:
  17. Спецификация:
  18. Подключение:
  19. Способ — 1: Используя провода и Piranha UNO
  20. Способ — 2: Используя провода и Shield
  21. Питание:
  22. Подробнее о модуле:
  23. Смена адреса модуля на шине I2C:
  24. Примеры:
  25. Запуск мотора с указанием скорости:
  26. Запуск мотора для движения на указанное расстояние:
  27. Остановка мотора с освобождением ротора или без такового:
  28. Изменение установки мотора (мотор слева / мотор справа):
  29. Описание функций библиотеки:
  30. Подключение библиотеки:
  31. Функция begin();
  32. Функция reset();
  33. Функция changeAddress();
  34. Функция getAddress();
  35. Функция getVersion();
  36. Функция setPullI2C();
  37. Функция getPullI2C();
  38. Функция setSpeed();
  39. Функция getSpeed();
  40. Функция setStop();
  41. Функция getStop();
  42. Функция setStopNeutral();
  43. Функция getStopNeutral();
  44. Функция getSum();
  45. Функция delSum();
  46. Функция setDirection();
  47. Функция getDirection();
  48. Функция getError();
  49. Функция getVoltage();
  50. Функция getNominalRPM();
  51. Функция getMagnet();
  52. Функция getReducer();
  53. Функции библиотеки используемые для настройки:

Управление щёточными моторами с Arduino

Как вы знаете, никакую нагрузку мощнее светодиода нельзя подключать к Ардуино напрямую, особенно моторчики. Ардуино, да и вообще любой микроконтроллер – логическое устройство, которое может давать только логические сигналы другим железкам, а те уже могут управлять нагрузкой. Кстати, урок по управлению мощной нагрузкой постоянного и переменного тока у меня тоже есть. “Драйвером” мотора могут быть разные железки, рассмотрим некоторые из них.

При помощи обычного реле можно просто включать и выключать мотор по команде digitalWrite(пин, состояние) , прямо как светодиод:

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

Купить модуль реле можно на Aliexpress.

Мосфет

Полевой транзистор, он же мосфет, позволяет управлять скорость вращения мотора при помощи ШИМ сигнала. При использовании мосфета обязательно нужно ставить диод, иначе индуктивный выброс с мотора очень быстро убьёт транзистор. Скорость мотора можно задавать при помощи ардуиновской analogWrite(пин, скорость) .

Вместо “голого” мосфета можно использовать готовый китайский модуль:

Купить мосфет модуль можно на Aliexpress.

Реле и мосфет

Если объединить реле и мосфет – получим весьма колхозную, но рабочую схему управления скоростью и направлением мотора:

Специальный драйвер

Лучше всего управлять мотором при помощи специального драйвера, они бывают разных форм и размеров и рассчитаны на разное напряжение и ток, но управляются практически одинаково. Рассмотрим основные драйверы с китайского рынка:

Драйвер Vmot Ток (пик)

Стоимость

Aliexpress
L298N 4-50V 1A (2A) 100р Купить
MX1508 2-9.6V 1.5A (2.5A) 20р Купить
TA6586 3-14V 5A (7A) 100р (чип 30р) Купить, купить, купить чип
L9110S 2.5-12V 0.8A (1.5A) 50р Купить
TB6612 4.5-13.5V 1.2A (3A) 80р Купить
BTS7960 5.5-27V 10A (43A) 300р Купить
Большой 3-36V 10A (30A) 700р Купить

Остальные драйверы смотри у меня вот тут. Схемы подключения и таблицы управления:




Пины направления управляются при помощи digitalWrite(pin, value) , а PWM – analogWrite(pin, value) . Управление драйвером по двум пинам может быть двух вариантов:

Моторы переменного тока

Мотором переменного тока (220V от розетки) можно управлять при помощи диммера на симисторе, как в уроке про управление нагрузкой.

Библиотеки

У меня есть удобная библиотека для управления мотором – GyverMotor, документацию можно почитать вот здесь. Особенности библиотеки:

  • Контроль скорости и направления вращения
  • Работа с ШИМ любого разрешения
  • Программный deadtime
  • Отрицательные скорости
  • Поддержка всех типов драйверов
  • Плавный пуск и изменение скорости
  • Режим “минимальная скважность”

Помехи и защита от них

Индуктивный выброс напряжения

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

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

  • При работе с драйвером и управлением в обе стороны диод ставить не нужно и даже нельзя!
  • При управлении ШИМ сигналом рекомендуется ставить быстродействующие диоды (например серии 1N49xx ) или диоды Шоттки (например серии 1N58xx).
  • Максимальный ток диода должен быть больше или равен максимальному току мотора.
  • Защитный диод, принимающий на себя обратный выброс ЭДС самоиндукции, также называется шунтирующим диодом, снаббером, flyback диодом.
  • В природе существуют мосфеты со встроенным защитным диодом. Этот диод является отдельным элементом и такой мосфет обычно имеет нестандартный корпус, читайте документацию на конкретный транзистор.
  • Диод, который показан на схематическом изображении мосфета, не является защитным диодом: это слабый и медленный “паразитный” диод, образованный при производстве транзистора. Он не защитит мосфет от выброса, нужно обязательно ставить внешний!

Помехи от щёток

Искрящиеся щетки мотора, особенно старого и разбитого, являются сильным источником электромагнитных помех, и здесь проблема решается установкой керамических конденсаторов с ёмкостью 0.1-1 мкФ на выводы мотора. Такие же конденсаторы можно поставить между каждым выводом и металлическим корпусом, это ещё сильнее погасит помехи. Для пайки к корпусу нужно использовать мощный паяльник и активный флюс, чтобы залудиться и припаяться как можно быстрее, не перегревая мотор.

Помехи по питанию, просадка

Мотор потребляет ток не очень равномерно, особенно во время разгона или в условиях переменной нагрузки на вал, что проявляется в виде просадок напряжения по питанию всей схемы. Беды с питанием решаются установкой ёмких электролитических конденсаторов по питанию, логично что ставить их нужно максимально близко к драйверу, то есть до драйвера. Напряжение должно быть выше чем напряжение питания, а ёмкость уже подбирается по факту. Начать можно с 470 мкф и повышать, пока не станет хорошо.

Разделение питания

Если описанные выше способы не помогают – остаётся только одно: разделение питания. Отдельный малошумящий хороший источник на МК и сенсоры/модули, и отдельный – для силовой части, в том числе мотора. Иногда ради стабильности работы приходится вводить отдельный БП или отдельный аккумулятор для надёжности функционирования устройства.

Экранирование

В отдельных случаях критичными являются даже наводки от питающих проводов моторов, особенно при управлении ШИМ мощными моторами и управлении мощными шаговиками в станках. Такие наводки могут создавать сильные помехи для работающих рядом чувствительных электронных компонентов, на аналоговые цепи, наводить помехи на линии измерения АЦП и конечно же на радиосвязь. Защититься от таких помех можно при помощи экранирования силовых проводов: экранированные силовые провода не всегда удаётся купить, поэтому достаточно обмотать обычные провода фольгой и подключить экран на GND питания силовой части. Этот трюк часто используют RC моделисты, летающие по FPV.

Видео


Источник

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

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

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

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

Модуль можно использовать для управления подвижными механизмами (машины, танки, тракторы), а так же для управления роботами и станками.

Модуль выполнен в двух вариантах — с энкодером и без энкодера

Без энкодера С энкодером
Управление скоростью, ШИМ
Управление скоростью, м/c, обороты/c
Остановка по заданному времени
Остановка по заданному расстоянию
Остановка по заданному кол-ву оборотов вала
Получение пройденного пути

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

Видео:

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

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

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

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

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

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

А так же разъем из 2 выводов для подачи питания на мотор через драйвер модуля.

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

Модуль удобно подключать 2 способами, в зависимости от ситуации:

Способ — 1: Используя провода и Piranha UNO

Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Вывод Arduino Вывод модуля
SDA (A4) SDA
SCL (A5) SCL
5V 5V
GND GND

Способ — 2: Используя провода и Shield

Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Питание:

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

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

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

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

  • Менять свой адрес на шине I2C.
  • Управлять внутренней подтяжкой линий шины I2C (по умолчанию включена).
  • Менять передаточное отношение редуктора мотора (при его замене).
  • Менять количество полюсов (одной полярности) магнитного вала (при его замене).
  • Менять борт установки мотора (левый мотор / правый мотор).
  • Задать скорость вращения вала указав количество оборотов в минуту, ШИМ в % или метры в секунду. Во всех случаях можно указывать отрицательные значения для вращения в обратную сторону.
  • Узнать отличается ли заданная скорость вращения вала от реальной, а так же указать процент отклонения при котором будет включаться красный светодиод на плате модуля.
  • Узнать текущую скорость вращения вала.
    Скорость вращения вала определяется по показаниям с датчиков Холла, даже если мотор отключён, а вал вращается по средством внешних сил.
  • Узнать количество совершённых полных оборотов вала.
    Количество оборотов вала определяется по показаниям с датчиков Холла, даже если мотор отключён, а вал вращается по средством внешних сил.
  • Остановить двигатель и/или указать тип его остановки. Двигатель может быть остановлен двумя способами: отключением мотора (свободный ход) или торможением (стопор).
    Заданный тип применяется ко всем последующим остановкам двигателя.
  • Остановить двигатель по истечении заданного количества полных оборотов вала, по истечении пройденного пути, или по истечении заданного времени.
  • Узнать о наличии ошибки драйвера (перегрузка по току, перегрев, низкое напряжение).

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

Подробнее про установку библиотеки читайте в нашей инструкции.

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

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

В первой строке скетча необходимо записать в переменную newAddress адрес, который будет присвоен модулю. После этого подключите модуль к контроллеру и загрузите скетч. Адрес может быть от 0х07 до 0х7F.

Примеры:

В данном разделе раскрыты примеры работы с модулем по шине I2C с использованием библиотеки iarduino_I2C_Motor. Сама библиотека содержит больше примеров, доступных из меню Arduino IDE: Файл / Примеры / iarduino I2C Motor (мотор).

Запуск мотора с указанием скорости:

Пример позволяет запустить мотор указав количество оборотов в минуту.

После загрузки данного примера, начнёт выполняться цикл состоящий из 4 действий: запуск мотора на скорости 120 об/мин на 5 секунд, остановка мотора на 5 секунд, запуск мотора на скорости 120 об/мин на 5 секунд в противоположную сторону, остановка мотора на 5 секунд.

Второй параметр функции setSpeed() указывает как задана скорость:

  • MOT_RPM — скорость задана количеством оборотов в минуту от 0 до ±32’767 об/мин.
  • MOT_PWM — скорость задана коэффициентом заполнения ШИМ от 0 до ±100.0%.
  • MOT_M_S — скорость задана в м/сек. (должен быть указан радиус колеса mot.radius ).

Запуск мотора для движения на указанное расстояние:

Пример запускает мотор однократно, указав модулю самостоятельно остановить мотор после преодоления определённого расстояния.

Данный пример запускает мотор на скорости 100 об/мин, передав модулю условие остановки мотора.

Второй параметр функции setSpeed() указывает как задана скорость:

  • MOT_RPM — скорость задана количеством оборотов в минуту от 0 до ±32’767 об/мин.
  • MOT_PWM — скорость задана коэффициентом заполнения ШИМ от 0 до ±100.0%.
  • MOT_M_S — скорость задана скоростью движения в м/сек.

Четвёртый параметр функции setSpeed() указывает как задано условие остановки:

  • MOT_REV — условие остановки задано количеством оборотов вала от 0,01 до 167’772,15.
  • MOT_SEC — условие остановки задано временем от 0,001 до 16’777,215 секунд.
  • MOT_MET — условие остановки задано расстоянием пройденного пути в метрах.

Обратите внимание на то, что если скорость задана в м/сек ( MOT_M_S ) или условием остановки является расстояние пройденного пути в метрах ( MOT_MET ), то необходимо однократно (в коде setup) указать радиус колеса в миллиметрах ( mot.radius=РАДИУС; ) используемого для движения.

Остановка мотора с освобождением ротора или без такового:

Пример определяет поведение мотора при остановке. Мотор может быть остановлен двумя способами: отключением мотора (свободный ход) или торможением (стопор). Тип остановки заданный функцией setStopNeutral() применяется ко всем последующим остановкам двигателя.

После загрузки данного примера, мотор будет запускаться и останавливаться, но остановка мотора будет либо плавной (ротор свободно останавливается), либо резкой (ротор стопорится).

Функция setStopNeutral() не останавливает мотор, а указывает его поведение при остановке. Останавливается мотор функцией setStop() .

Второй параметр функции setSpeed() указывает как задана скорость:

  • MOT_RPM — скорость задана количеством оборотов в минуту от 0 до ±32’767 об/мин.
  • MOT_PWM — скорость задана коэффициентом заполнения ШИМ от 0 до ±100.0%.
  • MOT_M_S — скорость задана в м/сек. (должен быть указан радиус колеса mot.radius ).

Изменение установки мотора (мотор слева / мотор справа):

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

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

Если моторы расположить: 1 справа, 2 слева. То при одинаковых положительных скоростях механизм будет двигаться строго вперёд, а при одинаковых отрицательных, строго назад.

Описание функций библиотеки:

Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано в статье Wiki — расширенные возможности библиотек iarduino для шины I2C.

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

  • Если адрес модуля известен (в примере используется адрес 0x09):
  • Если адрес модуля неизвестен (адрес будет найден автоматически):
  • При создании объекта без указания адреса, на шине должен находиться только один модуль.

Функция begin();

  • Назначение: Инициализация работы с модулем.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемое значение: bool — результат инициализации (true или false).
  • Примечание: По результату инициализации можно определить наличие модуля на шине.
  • Пример:

Функция reset();

  • Назначение: Перезагрузка модуля.
  • Синтаксис: reset();
  • Параметры: Нет.
  • Возвращаемое значение: bool — результат перезагрузки (true или false).
  • Пример:

Функция changeAddress();

  • Назначение: Смена адреса модуля на шине I2C.
  • Синтаксис: changeAddress( АДРЕС );
  • Параметр:
    • uint8_t АДРЕС — новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
  • Возвращаемое значение: bool — результат смены адреса (true или false).
  • Примечание:
    • Адрес модуля сохраняется в энергонезависимую память, а значит будет действовать и после отключения питания.
    • Текущий адрес модуля можно узнать функцией getAddress().
  • Пример:

Функция getAddress();

  • Назначение: Запрос текущего адреса модуля на шине I2C.
  • Синтаксис: getAddress();
  • Параметры: Нет.
  • Возвращаемое значение: uint8_t АДРЕС — текущий адрес модуля на шине I2C (от 0x08 до 0x7E)
  • Примечание: Функция может понадобиться если адрес модуля не указан при создании объекта, а обнаружен библиотекой.
  • Пример:

Функция getVersion();

  • Назначение: Запрос версии прошивки модуля.
  • Синтаксис: getVersion();
  • Параметры: Нет
  • Возвращаемое значение: uint8_t ВЕРСИЯ — номер версии прошивки от 0 до 255.
  • Пример:

Функция setPullI2C();

  • Назначение: Управление внутрисхемной подтяжкой линий шины I2C.
  • Синтаксис: setPullI2C( [ФЛАГ] );
  • Параметр:
    • bool ФЛАГ требующий установить внутрисхемную подтяжку линий шины I2C (true или false).
  • Возвращаемое значение:
    • bool — результат включения / отключения внутрисхемной подтяжки (true или false).
  • Примечание:
    • Вызов функции без параметра равносилен вызову функции с параметром true — установить.
    • Флаг установки внутрисхемной подтяжки сохраняется в энергонезависимую память модуля, а значит будет действовать и после отключения питания.
    • Внутрисхемная подтяжка линий шины I2C осуществляется до уровня 3,3 В, но допускает устанавливать внешние подтягивающие резисторы и иные модули с подтяжкой до уровня 3,3 В или 5 В, вне зависимости от состояния внутрисхемной подтяжки модуля.
  • Пример:

Функция getPullI2C();

  • Назначение: Запрос состояния внутрисхемной подтяжки линий шины I2C.
  • Синтаксис: getPullI2C();
  • Параметры: Нет.
  • Возвращаемое значение: bool — ФЛАГ включения внутрисхемной подтяжки (true или false).
  • Пример:

Функция setSpeed();

  • Назначение: Установка скорости.
  • Синтаксис: setSpeed( СКОРОСТЬ, ТИП СКОРОСТИ [, УСЛОВИЕ, ТИП УСЛОВИЯ ] );
  • Параметры:
    • uint8_t ТИП СКОРОСТИ — принимает одно из трёх значений:
      • MOT_RPM — скорость задана количеством оборотов в минуту.
      • MOT_PWM — скорость задана коэффициентом заполнения ШИМ.
      • MOT_M_S — скорость задана в м/сек.
    • float СКОРОСТЬ — значение зависит от указанного типа скорости.
      • Если тип скорости задан значением MOT_RPM, то скорость указывается количеством оборотов в минуту, от 0 до ±32’767.
      • Если тип скорости задан значением MOT_PWM, то скорость указывается коэффициентом заполнения ШИМ, от 0 до ±100,0%. (шаг 0,025%).
      • Если тип скорости задан значением MOT_M_S, то скорость указывается в м/сек.
    • uint8_t ТИП УСЛОВИЯ — принимает одно из тёх значений:
      • MOT_REV — условие остановки задано количеством полных оборотов вала.
      • MOT_SEC — условие остановки задано временем.
      • MOT_MET — условие остановки задано расстоянием.
    • float УСЛОВИЕ — условие остановки, значение зависит от указанного типа условия:
      • Если тип условия задан значением MOT_REV, то в качестве условия указывается количество полных оборотов до остановки, от 0.01 до 167’772.15 оборотов.
      • Если тип условия задан значением MOT_SEC, то в качестве условия указывается время до остановки, от 0,001 до 16’777,215 секунд.
      • Если тип условия задан значением MOT_MET, то в качестве условия указывается расстояние до остановки в метрах.
  • Возвращаемое значение: bool — результат установки скорости (true или false).
  • Примечание:
    • СКОРОСТЬ может быть отрицательной, знак указывает на направление вращения.
    • Если функция указана без параметров УСЛОВИЕ и ТИП УСЛОВИЯ, то мотор будет запущен на указанной скорости, пока не будет остановлен функцией setStop() .
    • Если функция указана с параметрами УСЛОВИЕ и ТИП УСЛОВИЯ, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
    • Если в качестве типа скорости указано значение MOT_M_S (скорость в м/сек) или в качестве типа условия остановки указано значение MOT_MET (расстояние в метрах), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС; . Радиус указывается в мм, его можно указать однократно в коде setup() .
    • Если скорость задана не значением ШИМ, то пока мотор не достигнет указанной скорости, на плате модуля будет светиться красный светодиод, а функция getError() будет возвращать ошибку скорости MOT_ERR_SPD .
    • Задавать скорость через ШИМ удобно в тех случаях, когда мотор требуется запустить в процентах от его максимальной скорости.
    • Если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла, тогда:
      • Установка скорости с параметром MOT_RPM или MOT_M_S будет проигнорирована.
      • Условие остановки с параметром MOT_REV или MOT_MET будет проигнорировано.
    • Проверить наличие магнита и датчиков Холла можно функцией getMagnet() .
  • Пример:

Функция getSpeed();

  • Назначение: Получение реальной скорости или ШИМ.
  • Синтаксис: getSpeed( ТИП );
  • Параметр: uint8_t ТИП — тип получаемого значения:
    • MOT_RPM — получить реальную скорость количеством оборотов в минуту.
    • MOT_PWM — получить текущий коэффициент заполнения ШИМ.
    • MOT_M_S — получить реальную скорость в м/сек.
  • Возвращаемое значение: float — реальная скорость, значение зависит от запрошенного типа:
    • Если тип задан значением MOT_RPM, то функция возвращает реальную скорость количеством оборотов в минуту от 0 до ±32’767.
    • Если тип задан значением MOT_PWM, то функция возвращает текущий коэффициент заполнения ШИМ от 0 до ±100.0% (шаг 0,025%).
    • Если тип задан значением MOT_M_S, то функция возвращает реальную скорость в м/сек.
  • Примечание:
    • Скорость вращения вала определяется по показаниям с датчиков Холла, вне зависимости от того, как запущен мотор, функцией setSpeed() или его вал вращается по средством внешних сил, даже если мотор отключён.
    • Возвращаемое значение может быть отрицательным, знак указывает на направление вращения.
    • Если в качестве типа получаемого значения указано MOT_M_S (получить скорость в м/сек), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС; . Радиус указывается в мм, его можно указать однократно в коде setup() .
    • Если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла, тогда функция будет возвращать 0, если её вызвать с параметром MOT_RPM или MOT_M_S .
    • Проверить наличие магнита и датчиков Холла можно функцией getMagnet() .
  • Пример:

Функция setStop();

  • Назначение: Остановка мотора с условием или без.
  • Синтаксис: setStop( [ УСЛОВИЕ, ТИП ] );
  • Параметры:
    • uint8_t ТИП — тип условия остановки, принимает одно из тёх значений:
      • MOT_REV — условие остановки задано количеством полных оборотов вала.
      • MOT_SEC — условие остановки задано временем.
      • MOT_MET — условие остановки задано расстоянием.
    • float УСЛОВИЕ — условие остановки, значение зависит от типа условия:
      • Если тип задан значением MOT_REV, то в качестве условия указывается количество полных оборотов до остановки, от 0.01 до 167’772.15 оборотов.
      • Если тип задан значением MOT_SEC, то в качестве условия указывается время до остановки, от 0,001 до 16’777,215 секунд.
      • Если тип задан значением MOT_MET, то в качестве условия указывается расстояние до остановки в метрах.
  • Возвращаемое значение: bool — результат записи данных остановки в модуль.
  • Примечание:
    • Если функция указана без параметров, то мотор будет остановлен сразу.
    • Если функция указана с параметрами УСЛОВИЕ и ТИП, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
    • Если в качестве типа условия остановки указано значение MOT_MET (расстояние в метрах), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС; . Радиус указывается в мм, его можно указать однократно в коде setup() .
    • Если в качестве условия остановки указать 0, то мотор не остановится, а ранее заданное условие того же типа будет отменено, при этом типы MOT_REV и MOT_MET приравнены.
    • Если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла, тогда
      условие остановки с параметром MOT_REV или MOT_MET будет проигнорировано.
    • Проверить наличие магнита и датчиков Холла можно функцией getMagnet() .
  • Пример:

Функция getStop();

  • Назначение: Получение значения оставшегося до остановки.
  • Синтаксис: getStop( ТИП );
  • Параметр: uint8_t ТИП — тип получаемого значения:
    • MOT_REV — получить количество оборотов вала оставшихся до остановки.
    • MOT_SEC — получить время оставшееся до остановки.
    • MOT_MET — получить расстояние оставшееся до остановки.
  • Возвращаемое значение: float — одно из значений:
    • Если тип задан значением MOT_REV, то функция возвращает количество оборотов оставшихся до остановки, от 0.01 до 167’772.15 полных оборотов.
    • Если тип задан значением MOT_SEC, то функция возвращает время оставшееся до остановки, от 0,001 до 16’777,215 секунд.
    • Если тип задан значением MOT_MET, то функция возвращает расстояние оставшееся до остановки в метрах.
  • Примечание:
    • Функция getStop() возвращает значение оставшееся до остановки мотора, заданное ранее функциями setStop() или setSpeed() , того же типа.
    • Если тип условия остановки заданный функциями setStop() или setSpeed() отличается от запрашиваемого типа, то функция возвращает значение рассчитанное с учётом текущей скорости вращения вала. Это значение может сильно отличаться от действительного, пока мотор не набрал заданную ему скорость.
    • Если запрошено расстояние оставшееся до остановки MOT_MET , то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС; . Радиус указывается в мм, его можно указать однократно в коде setup() .
    • Если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла, тогда функция сможет вернуть только время до остановки MOT_SEC , при том что условие остановки так же было задано функциями setStop() или setSpeed() через время MOT_SEC , иначе функция вернёт 0.
    • Проверить наличие магнита и датчиков Холла можно функцией getMagnet() .
  • Пример:

Функция setStopNeutral();

  • Назначение: Установка нейтрального положения при остановке мотора.
  • Синтаксис: setStopNeutral( ФЛАГ );
  • Параметр: bool ФЛАГ — указывает переводить ротор в нейтральное положение при остановке.
  • Возвращаемое значение: bool — результат применения данных.
  • Примечание:
    • Функция не останавливает мотор, а определяет его поведение при остановке.
    • Если вызвать функцию с параметром true , то при остановке мотор будет отключён, при этом ротор можно вращать, как при нейтральном положении машины.
    • Если вызвать функцию с параметром false , то при остановке мотор будет застопорен, при этом ротор будет трудно вращать.
    • Выбранное состояние мотора будет применяется ко всем последующим остановкам.
    • По умолчанию ротор можно вращать при остановке.
  • Пример:

Функция getStopNeutral();

  • Назначение: Получение установленного поведения мотора при остановке.
  • Синтаксис: getStopNeutral();
  • Параметр: Нет.
  • Возвращаемое значение: bool ФЛАГ — наличия нейтрального положения при остановке.
  • Примечание: Функция возвращает значение заданное ранее функцией setStopNeutral() .
  • Пример:

Функция getSum();

  • Назначение: Получение количества совершённых оборотов или пройденного пути.
  • Синтаксис: getSum( ТИП );
  • Параметр: uint8_t ТИП — тип получаемого значения:
    • MOT_REV — получить количество совершённых оборотов вала.
    • MOT_MET — получить пройденное расстояние.
  • Возвращаемое значение: float — количество совершённых оборотов или пройденный путь:
    • Если тип задан значением MOT_REV, то функция возвращает количество совершённых оборотов с момента их сброса, от 0.01 до 167’772.15 полных оборотов.
    • Если тип задан значением MOT_MET, то функция возвращает пройденный путь с момента его сброса в метрах
  • Примечание:
    • Функция getSum() возвращает количество совершённых оборотов или пройденный путь с момента их сброса функцией delSum() .
    • Количество совершённых оборотов и пройденный путь определяются по показаниям с датчиков Холла, вне зависимости от того, как запущен мотор, функцией setSpeed() или его вал вращается по средством внешних сил, даже если мотор отключён.
    • Если запрошен пройденный путь MOT_MET , то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС; . Радиус указывается в мм, его можно указать однократно в коде setup().
    • Функция не будет работать если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла.
    • Проверить наличие магнита и датчиков Холла можно функцией getMagnet() .
  • Пример:

Функция delSum();

  • Назначение: Сброс количества совершённых оборотов и пройденного пути.
  • Синтаксис: delSum();
  • Параметр: Нет.
  • Возвращаемое значение: bool — результат сброса совершённых оборотов и пройденного пути.
  • Примечание:
    • Функция сбрасывает количество совершённых оборотов и пройденного пути, которые можно получить функцией getSum() .
    • Сброс количества совершённых оборотов и пройденного пути так же осуществляется обращением к функциям setStop() или setSpeed() вызванным с параметром MOT_REV или MOT_MET .
  • Пример:

Функция setDirection();

  • Назначение: Установка направления вращения вала.
  • Синтаксис: setDirection( ФЛАГ );
  • Параметры:
    • bool ФЛАГ — флаг вращения вала в прямом направлении.
      • Если ФЛАГ установлен, то при положительных скоростях вал будет вращаться по часовой стрелке, а при отрицательных скоростях, против часовой стрелки.
      • Если ФЛАГ сброшен, то при положительных скоростях вал будет вращаться против часовой стрелки, а при отрицательных скоростях, по часовой стрелке.
  • Возвращаемое значение: bool — результат применения настройки.
  • Примечание:
    • Функцию удобно использовать при установке моторов на подвижные механизмы, слева и справа. Если не обращаться к функции setDirection() и задать двум моторам одинаковую скорость функцией setSpeed() , то один мотор будет двигать механизм вперёд, а второй назад. Механизм будет разворачиваться на месте, как танк.
    • Если для правого мотора вызвать функцию setDirection(true) , а для левого мотора setDirection(false) , то задав положительную скорость обоим моторам, они будут двигать механизм в прямом направлении, а при отрицательных скоростях в обратном.
    • Функцию достаточно однократно вызвать в коде setup() для каждого мотора.
    • По умолчанию установлено прямое направление вращения вала.
  • Пример:

Функция getDirection();

  • Назначение: Получение направления вращения вала.
  • Синтаксис: getDirection();
  • Параметр: Нет.
  • Возвращаемое значение: bool — ФЛАГ вращения вала в прямом направлении.
    • Если ФЛАГ == 1, то при положительных скоростях вал будет вращаться по часовой стрелке, а при отрицательных скоростях, против часовой стрелки.
    • Если ФЛАГ == 0, то при положительных скоростях вал будет вращаться против часовой стрелки, а при отрицательных скоростях, по часовой стрелке.
  • Пример:

Функция getError();

  • Назначение: Получение наличия ошибки модуля.
  • Синтаксис: getError();
  • Параметр: Нет.
  • Возвращаемое значение: uint8_t — может принимать следующие значения:
    • 0 — модуль работает без ошибок.
    • MOT_ERR_SPD — ошибка скорости.
      Ошибка возникает при отличии реальной скорости от заданной функцией setSpeed() с параметром MOT_RPM или MOT_M_S .
    • MOT_ERR_DRV — ошибка драйвера.
      Ошибка возникает при перегрузке по току, перегреве чипа и при низком напряжении Vmot.
  • Примечание:
    • При наличии двух ошибок MOT_ERR_SPD и MOT_ERR_DRV , будет возвращена первая.
    • Если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла, тогда в качестве ошибки можно получить только ошибку драйвера MOT_ERR_DRV .
    • Проверить наличие магнита и датчиков Холла можно функцией getMagnet() .
  • Пример:

Функция getVoltage();

  • Назначение: Получение номинального напряжения электродвигателя.
  • Синтаксис: getVoltage();
  • Параметр: Нет.
  • Возвращаемое значение: float — номинальное напряжение питания мотора в Вольтах.
  • Примечание:
    • Функция возвращает напряжение на которое рассчитан электродвигатель установленный в модуле, а не текущее напряжение на нём.
    • Возвращаемое значение можно изменить функцией setVoltage() , до отключения питания или перезагрузки модуля. Но это не изменит номинальное напряжение мотора.
    • Если обратиться к функции setVoltage() указав любое значение, то функция getVoltage() будет возвращать не номинальное напряжение питания мотора, а указанное вами значение, до отключения питания или перезагрузки модуля.
  • Пример:

Функция getNominalRPM();

  • Назначение: Получение номинальной скорости вращения вала.
  • Синтаксис: getNominalRPM();
  • Параметр: Нет.
  • Возвращаемое значение: uint16_t — номинальная скорость вращения от 0 до 65’535 об.мин.
  • Примечание:
    • Функция возвращает номинальную скорость вращения вала редуктора. Скорость заявленную производителем при номинальном напряжении и 100% коэффициенте заполнения ШИМ.
    • Возвращаемое значение можно изменить функцией setNominalRPM() , до отключения питания или перезагрузки модуля. Но это не изменит номинальную скорость.
    • Если обратиться к функции setNominalRPM() указав любое значение, то функция getNominalRPM() будет возвращать не номинальную скорость вращения, а указанное вами значение, до отключения питания или перезагрузки модуля.
  • Пример:

Функция getMagnet();

  • Назначение: Получение количества полюсов многополюсного магнитного вала.
  • Синтаксис: getMagnet();
  • Параметр: Нет.
  • Возвращаемое значение: uint8_t КОЛИЧЕСТВО — значение от 1 до 255, или 0 — нет магнита.
  • Примечание:
    • Если функция вернула 0, значит на роторе мотора нет кольцевого магнита, или в модуле отсутствуют датчики Холла. По этой причине модуль не может отслеживать вращение вала, следовательно, функции: setSpeed() , getSpeed() , setStop() , getStop() и getSum() не будут работать с параметрами: MOT_RPM , MOT_M_S , MOT_MET и MOT_REV , а функция getError() не будет возвращать ошибку скорости MOT_ERR_SPD .
  • Пример:

Функция getReducer();

  • Назначение: Получение передаточного отношения редуктора.
  • Синтаксис: getReducer();
  • Параметр: Нет.
  • Возвращаемое значение: float ОТНОШЕНИЕ — значение от 0.01 до 167’772.15.
  • Пример:

Функции библиотеки используемые для настройки:

Некоторые данные указываемые / получаемые следующими функциями хранятся в Flash памяти модуля, а значит сохраняются и после отключения питания:

Источник

Читайте также:  Как мне усилить мотор у приору
Поделиться с друзьями