Подключение мотора к Ардуино ► потребуется при сборке машинки или катера. Рассмотрим различные варианты подключения коллекторного двигателя к Arduino.
Подключение мотора постоянного тока к Ардуино (коллекторного двигателя) требуется при сборке машинки или катера на микроконтроллере Arduino. Рассмотрим различные варианты подключения двигателей постоянного тока: напрямую к плате, через биполярный транзистор, а также с использованием модуля L298N. В обзоре размещены схемы подключения и коды программ для всех перечисленных вариантов.
- Управление двигателем на Ардуино
- Как подключить моторчик к Arduino
- Скетч. Подключение мотора через транзистор
- Пояснения к коду:
- Скетч. Подключение мотора через драйвер
- Управление двигателем постоянного тока с помощью Arduino Uno
- Общие принципы ШИМ
- Принцип работы H-моста
- Необходимые компоненты
- Работа схемы
- Исходный код программы
- Мотор-редуктор с управляющим контроллером, FLASH-I2C
- Общие сведения:
- Видео:
- Спецификация:
- Подключение:
- Способ — 1: Используя провода и Piranha UNO
- Способ — 2: Используя провода и Shield
- Питание:
- Подробнее о модуле:
- Смена адреса модуля на шине I2C:
- Примеры:
- Запуск мотора с указанием скорости:
- Запуск мотора для движения на указанное расстояние:
- Остановка мотора с освобождением ротора или без такового:
- Изменение установки мотора (мотор слева / мотор справа):
- Описание функций библиотеки:
- Подключение библиотеки:
- Функция begin();
- Функция reset();
- Функция changeAddress();
- Функция getAddress();
- Функция getVersion();
- Функция setPullI2C();
- Функция getPullI2C();
- Функция setSpeed();
- Функция getSpeed();
- Функция setStop();
- Функция getStop();
- Функция setStopNeutral();
- Функция getStopNeutral();
- Функция getSum();
- Функция delSum();
- Функция setDirection();
- Функция getDirection();
- Функция getError();
- Функция getVoltage();
- Функция getNominalRPM();
- Функция getMagnet();
- Функция getReducer();
- Функции библиотеки используемые для настройки:
- Видео:
Видео:Тест ардуино мотор-редукторовСкачать
Управление двигателем на Ардуино
Коллекторный моторчик может быть рассчитан на разное напряжения питания. Если двигатель работает от 3-5 Вольт, то можно моторчик подключать напрямую к плате Ардуино. Моторы для машинки с блютуз управлением, которые идут в комплекте с редукторами и колесами рассчитаны уже на 6 Вольт и более, поэтому ими следует управлять через полевой (биполярный) транзистор или через драйвер L298N.
Принцип работы и устройство мотора постоянного тока
На схеме показано устройство моторчика постоянного тока и принцип его работы. Как видите, для того, чтобы ротор двигателя начал крутиться к нему необходимо подключить питание. При смене полярности питания, ротор начнет крутиться в обратную сторону. Драйвер двигателей L298N позволяет инвертировать направление вращения мотора fa 130, поэтому его удобнее использовать в своих проектах.
Видео:Управление джостиком от ардуино мотор редукторомСкачать
Как подключить моторчик к Arduino
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- мотор постоянного тока (Motor DC);
- транзистор полевой/биполярный;
- драйвер двигателей L298N;
- провода «папа-папа», «папа-мама».
Перед выбором способа управления двигателем от Arduino Uno r3, уточните на какое напряжение рассчитан ваш моторчик. Если питание требуется более 5 Вольт, то следует использовать транзистор или драйвер. Распиновка транзисторов может отличаться от приведенного примера (следует уточнить распиновку для своего типа). Драйвер L298N позволит не только включать мотор, но и изменять направление вращения.
Скетч. Подключение мотора через транзистор
Подключение мотора через транзистор к Ардуино потребуется, если двигатель никак не хочет включаться от платы напрямую, то следует использовать порт 5 Вольт на микроконтроллере или внешний источник питания. Транзистор будет играть роль ключа, замыкая/размыкая электрическую цепь. Сам транзистор управляется цифровым портом. Соберите схему, как на картинке и загрузите программу.
Подключение FA-130 мотора постоянного тока — Motor DC Arduino
Пояснения к коду:
- при необходимости можно подключить два мотора FA-130 к Ардуино;
- в зависимости от характеристик, двигатель подключается к 3,3 или 5 Вольтам.
Скетч. Подключение мотора через драйвер
Подключение мотора к Ардуино через драйвер L298N или Motor Shield L293D позволит менять направление вращения ротора. Но для использования данных модулей потребуется установить соответствующие библиотеки для Ардуино. В примере мы использовали схему подключения двигателя с помощью модуля L298N. Соберите схему, как на картинке ниже и загрузите следующий скетч с использованием.
Видео:Управление моторами с ArduinoСкачать
Управление двигателем постоянного тока с помощью Arduino Uno
В этой статье мы будем подключать двигатель постоянного тока к Arduino Uno и управлять скоростью его вращения. Делать мы это будем с помощью ШИМ (широтно-импульсной модуляции, в англ. языке PWM — Pulse Width Modulation) – эта функция реализована в Arduino чтобы на основе постоянного напряжения иметь возможность получения изменяющегося напряжения.
Видео:Коллекторные моторы 12 мм. Железки АмперкиСкачать
Общие принципы ШИМ
Метод осуществления ШИМ показан на следующем рисунке.
Если на представленном рисунке кнопка нажата, то двигатель начнет вращение и он будет вращаться до тех пор пока кнопка не будет отжата. Эта ситуация происходит если кнопка будет нажата постоянно – верхний график на представленном рисунке. Если же мы будем нажимать кнопку только в течение 8 мс из всего цикла в 10 мс, то в этом случае двигатель уже не будет в полной мере получать все напряжение батареи 9 В – в этом случае среднеквадратичная величина напряжения, получаемого двигателем, будет около 7 В. Соответственно, двигатель по сравнению с первым случаем (когда кнопка нажата постоянно) будет вращаться с меньшей скоростью. Поэтому цикл занятости (который еще называют коэффициентом заполнения ШИМ) в этом случае составит время включенного состояния/(время включенного состояния + время выключенного состояния) = 8/(8+2)=80%.
В следующих рассмотренных на рисунке случаях кнопка будет находиться в нажатом состоянии еще меньше чем в рассмотренном случае (80%). Соответственно, среднеквадратичная величина напряжения, получаемого двигателем, будет составлять еще меньшую величину, поэтому и скорость вращения двигателя также уменьшится. Это уменьшение скорости вращения двигателя вследствие уменьшения среднеквадратичной величины напряжения будет происходить до тех пор, пока получаемое двигателем напряжение не станет не достаточным для его вращения. То есть, изменяя величину цикла занятости (коэффициент заполнения ШИМ), можно управлять скоростью вращения двигателя постоянного тока.
Видео:Уроки Arduino. Управление моторами с библиотекой GyverMotorСкачать
Принцип работы H-моста
Перед тем, как переходить непосредственно к управлению двигателем, обсудим что такое H-BRIDGE (H-мост). Собранная нами далее схема будет осуществлять две функции: управлять двигателем постоянного тока с помощью управляющих сигналов малой мощности и изменять направление вращения двигателя.
Нам известно, что для изменения направления вращения двигателя постоянного тока необходимо изменить полярность приложенного к нему питающего напряжения. И как раз для смены полярности напряжения хорошо подходит устройство, называемое H-мостом. На представленном выше рисунке мы имеем 4 выключателя. Как показано на рисунке 2 если выключатели A1 и A2 замкнуты, то ток через двигатель течет справа налево как показано на второй части рисунка 2 – то есть в этом случае двигатель будет вращаться по часовой стрелке. А если выключатели A1 и A2 разомкнуты, а B1 и B2 – замкнуты, то ток через двигатель в этом случае будет протекать слева направо как показано на второй части рисунка, то есть двигатель будет вращаться против часовой стрелки. В этом и заключается принцип работы H-моста.
Мы в качестве H-моста будем использовать специализированную микросхему L293D, которую еще называют драйвером двигателей. Эта микросхема предназначена для управления двигателями постоянного тока малой мощности (см. рисунок) и содержит в своем составе два H-моста, то есть с ее помощью можно управлять двумя двигателями. Эта микросхема часто используется для управления двигателями в различных роботах.
В следующей таблице указаны необходимые значения напряжений на выводах INPUT1 и INPUT2 микросхемы L293D для смены направления вращения двигателя.
Enable Pin | Input Pin 1 | Input Pin 2 | Motor Direction |
High | Low | High | вправо |
High | High | Low | влево |
High | Low | Low | стоп |
High | High | High | стоп |
То есть, чтобы двигатель вращался по часовой стрелке необходимо чтобы на 2A было напряжение высокого уровня (high), а на контакте 1A – напряжение низкого уровня (low). Аналогично для вращения двигателя против часовой стрелки необходимо обеспечить на 1A напряжение высокого уровня, а на 2A – низкого.
Как показано на следующем рисунке Arduino UNO имеет 6 ШИМ каналов (обозначенных на плате специальным знаком – тильдой), любой из которых мы можем использовать для получения изменяющего напряжения (на основе ШИМ). В данном проекте мы будем использовать в качестве ШИМ выхода контакт PIN3 Arduino UNO.
Видео:Уроки Arduino - управление бесколлекторным моторомСкачать
Необходимые компоненты
- Плата Arduino UNO (купить на AliExpress).
- Драйвер двигателей L293D (купить на AliExpress).
- Электродвигатель постоянного тока.
- Светодиод (купить на AliExpress).
- Резистор 10 кОм (2 шт.) (купить на AliExpress).
- Кнопка (2 шт.).
- Конденсатор 100 пФ (купить на AliExpress).
- Переключатель.
- Источник питания с напряжением 5 В.
Видео:ПОДКЛЮЧАЕМ ШАГОВЫЙ ДВИГАТЕЛЬ К ARDUINO [Уроки Ардуино #14]Скачать
Работа схемы
Схема устройства (на макетной плате) представлена на следующем рисунке.
В рассматриваемой схеме мы имеем две кнопки, у каждой из которых, естественно, будет присутствовать эффект, называемый «дребезгом контактов». Но в данном случае для нас он не будет нести никакого негативного эффекта и не будет вызывать ошибок в работе схемы.
На нашем сайте мы уже рассматривали управление ШИМ с помощью микроконтроллера AVR ATmega и это управление было не самым простым делом – необходимо было сконфигурировать различные регистры. В отличие от этого управление ШИМ в Arduino UNO является крайне простым занятием, не требующем всего этого.
Видео:Как подключить шаговый двигатель к ArduinoСкачать
Исходный код программы
По умолчанию все необходимые заголовочные файлы подключаются автоматически самой средой ARDUINO IDE, она же конфигурирует сама и все регистры, необходимые для работы ШИМ, поэтому нам в программе уже не нужно заботиться об этих вещах. Все что нам нужно будет сделать – это определить на каком контакте мы будем использовать ШИМ.
То есть для использования ШИМ на нужном контакте нам необходимо сделать следующие вещи:
pinMode(ledPin, OUTPUT)
analogWrite(pin, value)
analogWriteResolution(neededresolutionnumber)
Сначала мы должны выбрать один из доступных 6 выходов (контактов) ШИМ. Потом необходимо установить этот контакт в режим на вывод данных.
После этого мы должны задействовать функции ШИМ на этом выходе используя функцию “ analogWrite(pin, value) ”. Здесь ‘pin’ обозначает номер контакта, на котором мы будем использовать ШИМ, в нашем случае это будет 3-й контакт.
Value в этой функции представляет собой цикл занятости (коэффициент заполнения) ШИМ, оно может принимать значения от 0 (всегда выключено) до 255 (всегда включено). Мы будем увеличивать и уменьшать это значение с помощью кнопок, присутствующих на схеме.
Читайте также: Редуктор применение в машинах
Плата Arduino UNO имеет максимальное разрешение (разрешающую способность) ШИМ, равную 8, что означает что value в функции analogWrite(pin, value) может принимать значения от 0 до 255. Но если в этом есть необходимость, мы можем уменьшать разрешение ШИМ используя функцию “ analogWriteResolution() ”, в скобках которой мы можем записать число в диапазоне 4-8, которое и будет определять разрешающую способность ШИМ платы Arduino UNO.
Переключатель на схеме служит для изменения направления вращения двигателя.
А теперь непосредственно сам код программы с комментариями.
Видео:Умный мотор-редуктор с энкодером и управляющим контроллером, FLASH-I2C для Arduino, Raspberry PiСкачать
Мотор-редуктор с управляющим контроллером, 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 поддерживаются только модулем с установленным энкодером.
Видео:Набор самодельных креплений для ардуино мотор-редуктора.Скачать
Видео:
Видео:Самодельное колёсное шасси 4х4 с ардуино мотор-редукторами.Скачать
Спецификация:
- Напряжение питания логики: 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.
Видео:Управление ШИМ мотор-редуктором на ArduinoСкачать
Подробнее о модуле:
Модуль построен на базе двигателя 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.
Видео:Arduino UNO + Драйвер двигателей + Двигатель от стеклоподъемника ВАЗ 2110 #РоботСкачать
Примеры:
В данном разделе раскрыты примеры работы с модулем по шине 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 слева. То при одинаковых положительных скоростях механизм будет двигаться строго вперёд, а при одинаковых отрицательных, строго назад.
Видео:NEMA17 Управление шаговым двигателем - Stepper motor with ArduinoСкачать
Описание функций библиотеки:
Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано в статье Wiki — расширенные возможности библиотек iarduino для шины I2C.
Подключение библиотеки:
- Если адрес модуля известен (в примере используется адрес 0x09):
- Если адрес модуля неизвестен (адрес будет найден автоматически):
- При создании объекта без указания адреса, на шине должен находиться только один модуль.
Функция begin();
- Назначение: Инициализация работы с модулем.
- Синтаксис: begin();
- Параметры: Нет.
- Возвращаемое значение: bool — результат инициализации (true или false).
- Примечание: По результату инициализации можно определить наличие модуля на шине.
- Пример:
Функция reset();
- Назначение: Перезагрузка модуля.
- Синтаксис: reset();
- Параметры: Нет.
- Возвращаемое значение: bool — результат перезагрузки (true или false).
- Пример:
Функция changeAddress();
- Назначение: Смена адреса модуля на шине I2C.
- Синтаксис: changeAddress( АДРЕС );
- Параметр:
- uint8_t АДРЕС — новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
- Адрес модуля сохраняется в энергонезависимую память, а значит будет действовать и после отключения питания.
- Текущий адрес модуля можно узнать функцией 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 — скорость задана в м/сек.
- Если тип скорости задан значением MOT_RPM, то скорость указывается количеством оборотов в минуту, от 0 до ±32’767.
- Если тип скорости задан значением MOT_PWM, то скорость указывается коэффициентом заполнения ШИМ, от 0 до ±100,0%. (шаг 0,025%).
- Если тип скорости задан значением MOT_M_S, то скорость указывается в м/сек.
- MOT_REV — условие остановки задано количеством полных оборотов вала.
- MOT_SEC — условие остановки задано временем.
- MOT_MET — условие остановки задано расстоянием.
- Если тип условия задан значением MOT_REV, то в качестве условия указывается количество полных оборотов до остановки, от 0.01 до 167’772.15 оборотов.
- Если тип условия задан значением MOT_SEC, то в качестве условия указывается время до остановки, от 0,001 до 16’777,215 секунд.
- Если тип условия задан значением MOT_MET, то в качестве условия указывается расстояние до остановки в метрах.
- СКОРОСТЬ может быть отрицательной, знак указывает на направление вращения.
- Если функция указана без параметров УСЛОВИЕ и ТИП УСЛОВИЯ, то мотор будет запущен на указанной скорости, пока не будет остановлен функцией setStop() .
- Если функция указана с параметрами УСЛОВИЕ и ТИП УСЛОВИЯ, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
- Если в качестве типа скорости указано значение MOT_M_S (скорость в м/сек) или в качестве типа условия остановки указано значение MOT_MET (расстояние в метрах), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС; . Радиус указывается в мм, его можно указать однократно в коде setup() .
- Если скорость задана не значением ШИМ, то пока мотор не достигнет указанной скорости, на плате модуля будет светиться красный светодиод, а функция getError() будет возвращать ошибку скорости MOT_ERR_SPD .
- Задавать скорость через ШИМ удобно в тех случаях, когда мотор требуется запустить в процентах от его максимальной скорости.
- Если на роторе мотора нет кольцевого магнита, или в модуле нет датчиков Холла, тогда:
- Установка скорости с параметром MOT_RPM или MOT_M_S будет проигнорирована.
- Условие остановки с параметром MOT_REV или MOT_MET будет проигнорировано.
Функция getSpeed();
- Назначение: Получение реальной скорости или ШИМ.
- Синтаксис: getSpeed( ТИП );
- Параметр: uint8_t ТИП — тип получаемого значения:
- MOT_RPM — получить реальную скорость количеством оборотов в минуту.
- MOT_PWM — получить текущий коэффициент заполнения ШИМ.
- MOT_M_S — получить реальную скорость в м/сек.
- Если тип задан значением 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 — условие остановки задано расстоянием.
- Если тип задан значением MOT_REV, то в качестве условия указывается количество полных оборотов до остановки, от 0.01 до 167’772.15 оборотов.
- Если тип задан значением MOT_SEC, то в качестве условия указывается время до остановки, от 0,001 до 16’777,215 секунд.
- Если тип задан значением MOT_MET, то в качестве условия указывается расстояние до остановки в метрах.
- Если функция указана без параметров, то мотор будет остановлен сразу.
- Если функция указана с параметрами УСЛОВИЕ и ТИП, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
- Если в качестве типа условия остановки указано значение 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 — получить расстояние оставшееся до остановки.
- Если тип задан значением 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 — получить пройденное расстояние.
- Если тип задан значением 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 ФЛАГ — флаг вращения вала в прямом направлении.
- Если ФЛАГ установлен, то при положительных скоростях вал будет вращаться по часовой стрелке, а при отрицательных скоростях, против часовой стрелки.
- Если ФЛАГ сброшен, то при положительных скоростях вал будет вращаться против часовой стрелки, а при отрицательных скоростях, по часовой стрелке.
- Функцию удобно использовать при установке моторов на подвижные механизмы, слева и справа. Если не обращаться к функции 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 памяти модуля, а значит сохраняются и после отключения питания:
- Свежие записи
- Чем отличается двухтактный мотор от четырехтактного
- Сколько масла заливать в редуктор мотоблока
- Какие моторы бывают у стиральных машин
- Какие валы отсутствуют в двухвальной кпп
- Как снять стопорную шайбу с вала
- Правообладателям
- Политика конфиденциальности
Механика © 2023
Информация, опубликованная на сайте, носит исключительно ознакомительный характер📸 Видео
Распаковка мотор редукторов с колесами для ArduinoСкачать
- bool ФЛАГ — флаг вращения вала в прямом направлении.
- uint8_t ТИП — тип условия остановки, принимает одно из тёх значений:
- uint8_t ТИП СКОРОСТИ — принимает одно из трёх значений: