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

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

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

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

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

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

Видео:

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

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

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

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

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

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

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

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

Питание:

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

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

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

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

Модуль позволяет:

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

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

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

Примеры:

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

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

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

uint8_t newAddress = 0x09;                        // Назначаемый модулю адрес (0x07 < адрес < 0x7F).
                                                  //
#include <Wire.h>                                 // Подключаем библиотеку для работы с аппаратной шиной I2C.
#include <iarduino_I2C_Motor.h>                  // Подключаем библиотеку для работы с мотором I2C-flash.
iarduino_I2C_Motor mot;                           // Объявляем объект mot для работы с функциями и методами библиотеки iarduino_I2C_Motor.
                                                  // Если при объявлении объекта указать адрес, например, mot(0xBB), то пример будет работать с тем модулем, адрес которого был указан.
void setup(){                                     //
    Serial.begin(9600);                           //
    if( mot.begin() ){                            // Инициируем работу с мотором.
        Serial.print("Найден мотор 0x");          //
        Serial.println( mot.getAddress(), HEX );  // Выводим текущий адрес модуля.
        if( mot.changeAddress(newAddress) ){      // Меняем адрес модуля на newAddress.
            Serial.print("Адрес изменён на 0x");  //
            Serial.println(mot.getAddress(),HEX );// Выводим текущий адрес модуля.
        }else{                                    //
            Serial.println("Адрес не изменён!");  //
        }                                         //
    }else{                                        //
        Serial.println("Мотор не найден!");       //
    }                                             //
}                                                 //
                                                  //
void loop(){                                      //
}                                                 //

Для работы данного примера, на шине I2C должен быть только один мотор.

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

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

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

#include <Wire.h>                                 // Подключаем библиотеку для работы с аппаратной шиной I2C.
#include <iarduino_I2C_Motor.h>                   // Подключаем библиотеку для работы с мотором I2C-flash.
iarduino_I2C_Motor mot(0x09);                     // Объявляем объект mot для работы с функциями и методами библиотеки iarduino_I2C_Motor, указывая адрес модуля на шине I2C.
                                                  // Если объявить объект без указания адреса (iarduino_I2C_Motor mot;), то адрес будет найден автоматически.
void setup(){                                     //
    mot.begin();                                  // Инициируем работу с мотором.
}                                                 //
                                                  //
void loop(){                                      //
    mot.setSpeedRPM(120);     delay(5000);        // Запускаем мотор на скорости  120 об/мин и ждём 5 секунд.
    mot.setStop();            delay(5000);        // Останавливаем мотор и ждём 5 секунд.
    mot.setSpeedRPM(-120);    delay(5000);        // Запускаем мотор на скорости -120 об/мин и ждём 5 секунд.
    mot.setStop();            delay(5000);        // Останавливаем мотор и ждём 5 секунд.
}                                                 //

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

Функцию setSpeedRPM() можно заменить функцией setSpeedPWM() указав не скорость, а коэффициент заполнения ШИМ от 0 до ±4095.

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

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

#include <Wire.h>                                 // Подключаем библиотеку для работы с аппаратной шиной I2C.
#include <iarduino_I2C_Motor.h>                   // Подключаем библиотеку для работы с мотором I2C-flash.
iarduino_I2C_Motor mot(0x09);                     // Объявляем объект mot для работы с функциями и методами библиотеки iarduino_I2C_Motor, указывая адрес модуля на шине I2C.
                                                  // Если объявить объект без указания адреса (iarduino_I2C_Motor mot;), то адрес будет найден автоматически.
void setup(){                                     //
    mot.begin();                                  // Инициируем работу с мотором.
    mot.radius = 12.2;                            // Указываем радиус колеса в мм.
    mot.setSpeedRPM(100,   50, MOT_MM );          // Запускаем мотор на скорости 100 об/мин с остановкой через   50 миллиметров.
//  mot.setSpeedRPM(100,    5, MOT_REV);          // Запускаем мотор на скорости 100 об/мин с остановкой через    5 полных оборотов.
//  mot.setSpeedRPM(100, 2000, MOT_MS );          // Запускаем мотор на скорости 100 об/мин с остановкой через 2000 миллисекунд.
                                                  //
void loop(){                                      //
}                                                 //

Данный пример запускает мотор на скорости 100 об/мин, передав модулю условие остановки мотора. Обратите внимание, что если условием остановки является расстояние (как в примере), то необходимо однократно (в коде setup) указать радиус колеса mot.radius используемого для движения.

Функцию setSpeedRPM() можно заменить функцией setSpeedPWM() указав не скорость, а коэффициент заполнения ШИМ от 0 до ±4095. Условия остановки указываются без изменений.

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

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

#include <Wire.h>                                 // Подключаем библиотеку для работы с аппаратной шиной I2C.
#include <iarduino_I2C_Motor.h>                   // Подключаем библиотеку для работы с мотором I2C-flash.
iarduino_I2C_Motor mot(0x09);                     // Объявляем объект mot для работы с функциями и методами библиотеки iarduino_I2C_Motor, указывая адрес модуля на шине I2C.
                                                  // Если объявить объект без указания адреса (iarduino_I2C_Motor mot;), то адрес будет найден автоматически.
void setup(){                                     //
    mot.begin();                                  // Инициируем работу с мотором.
}                                                 //
                                                  //
void loop(){                                      //
//  Запускаем и плавно останавливаем мотор:       //
    mot.setSpeedPWM(4095);     delay(500);        // Запускаем мотор на максимальной скорости, указав максимальное значение ШИМ = 4095 = 100%.
    mot.setStopNeutral(true);                     // Указываем освободить мотор при его остановке. Ротор остановленного мотора можно вращать.
    mot.setStop();             delay(500);        // Останавливаем мотор. Обратите внимание на то, что ротор мотора останавливается плавно.
//  Запускаем и резко останавливаем мотор:        //
    mot.setSpeedPWM(4095);     delay(500);        // Запускаем мотор на максимальной скорости, указав максимальное значение ШИМ = 4095 = 100%.
    mot.setStopNeutral(false);                    // Указываем не освобождать мотор при его остановке. Ротор остановленного мотора будет застопорен.
    mot.setStop();             delay(500);        // Останавливаем мотор. Обратите внимание на то, что ротор мотора останавливается резко.
}                                                 //

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

Функцию setSpeedPWM() можно заменить функцией setSpeedRPM() указав не коэффициент заполнения ШИМ, а количество оборотов в минуту.

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

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

#include <Wire.h>                                 // Подключаем библиотеку для работы с аппаратной шиной I2C.
#include <iarduino_I2C_Motor.h>                   // Подключаем библиотеку для работы с мотором I2C-flash.
iarduino_I2C_Motor mot1(0x09);                    // Объявляем объект mot1 для работы с функциями и методами библиотеки iarduino_I2C_Motor, указывая адрес модуля на шине I2C.
iarduino_I2C_Motor mot2(0x0A);                    // Объявляем объект mot2 для работы с функциями и методами библиотеки iarduino_I2C_Motor, указывая адрес модуля на шине I2C.
                                                  // При наличии нескольких моторов на шине I2C нельзя объявлять объект без указания адреса.
void setup(){                                     //
    mot1.begin();                                 // Инициируем работу с 1 мотором.
    mot2.begin();                                 // Инициируем работу с 2 мотором.
    mot1.reverseDir(true);                        // Задаём обратное направление вращения для одного из моторов. Направление вращения сохраняется в энергонезависимой памяти модуля.
    mot2.reverseDir(false);                       // Задаём прямое   направление вращения для другого   мотора.  Направление вращения сохраняется в энергонезависимой памяти модуля.
}                                                 //
                                                  //
void loop(){                                      //
    mot1.setSpeedRPM(120);                        // Запускаем мотор 1 на скорости  120 об/мин.
    mot2.setSpeedRPM(120);                        // Запускаем мотор 2 на скорости  120 об/мин.
    delay(5000);                                  // Ждём 5 секунд.
    mot1.setStop();                               // Останавливаем мотор 1.
    mot2.setStop();                               // Останавливаем мотор 2.
    delay(5000);                                  // Ждём 5 секунд.
}                                                 //

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

Не используйте функцию reverseDir() вне кода функции setup().

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

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

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

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

  • Если адрес модуля известен (в примере используется адрес 0x09):
#include <iarduino_I2C_Motor.h>  // Подключаем библиотеку для работы с модулем.
iarduino_I2C_Motor mot(0x09);    // Создаём объект mot для работы с функциями и методами библиотеки iarduino_I2C_Motor, указав адрес модуля на шине I2C (0x09).
  • Если адрес модуля неизвестен (адрес будет найден автоматически):
#include <iarduino_I2C_Motor.h>  // Подключаем библиотеку для работы с модулем.
iarduino_I2C_Motor mot;          // Создаём объект mot для работы с функциями и методами библиотеки iarduino_I2C_Motor, без указания адреса.
  • При создании объекта без указания адреса, на шине должен находиться только один модуль.

Функция begin();

  • Назначение: Инициализация работы с модулем.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемое значение: bool - результат инициализации (true или false).
  • Примечание: По результату инициализации можно определить наличие модуля на шине.
  • Пример:
if( mot.begin() ){ Serial.print( "Модуль найден и инициирован!" ); }
else             { Serial.print( "Модуль не найден на шине I2C" ); }

Функция reset();

  • Назначение: Перезагрузка модуля.
  • Синтаксис: reset();
  • Параметры: Нет.
  • Возвращаемое значение: bool - результат перезагрузки (true или false).
  • Пример:
if( mot.reset() ){ Serial.print( "Модуль    перезагружен" ); }
else             { Serial.print( "Модуль не перезагружен" ); }

Функция changeAddress();

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

Функция getAddress();

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

Функция getVersion();

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

Функция setPullI2C();

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

Функция getPullI2C();

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

Функция setSpeedRPM();

  • Назначение: Установка скорости в об/мин.
  • Синтаксис: setSpeedRPM( СКОРОСТЬ [, УСЛОВИЕ, ТИП ] );
  • Параметры:
    • int СКОРОСТЬ - количество оборотов в минуту, от 0 до ±32'767.
    • uint8_t ТИП - тип условия остановки: MOT_REV, MOT_MS, MOT_MM.
    • float УСЛОВИЕ - условие остановки, значение зависит от типа условия:
      • Если тип задан значением MOT_REV, то в качестве условия указывается количество оборотов до остановки, от 0.01 до 655.35.
      • Если тип задан значением MOT_MS, то в качестве условия указывается время до остановки, от 1 до 65'535 мс.
      • Если тип задан значением MOT_MM, то в качестве условия указывается расстояние до остановки в мм (от 0.01 мм до 655.35 x 2 x 3.14 x mot.radius мм).
  • Возвращаемое значение: bool - результат установки скорости (true или false).
  • Примечание:
    • СКОРОСТЬ может быть отрицательной, знак указывает на направление вращения.
    • Если функция указана без параметров УСЛОВИЕ и ТИП, то мотор будет запущен на указанной скорости, пока не будет остановлен функцией setStop().
    • Если функция указана с параметрами УСЛОВИЕ и ТИП, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
    • Если в качестве типа остановки указано значение MOT_MM (расстояние в мм), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС;.
    • Пока мотор не достигнет указанной скорости, на плате модуля будет светиться красный светодиод, а функция getError() будет возвращать ошибку скорости MOT_ERR_SPD.
  • Пример:
mot.setSpeedRPM(60);                 // Запускаем мотор на скорости 60 об/мин.
mot.setSpeedRPM(60,  100, MOT_MM );  // Запускаем мотор на скорости 60 об/мин с остановкой через 100 миллиметров пути.
mot.setSpeedRPM(60,    3, MOT_REV);  // Запускаем мотор на скорости 60 об/мин с остановкой через 3 полных оборота.
mot.setSpeedRPM(60, 2000, MOT_MS );  // Запускаем мотор на скорости 60 об/мин с остановкой через 2000 миллисекунд.

Функция setSpeedPWM();

  • Назначение: Установка скорости через ШИМ.
  • Синтаксис: setSpeedPWM( ШИМ [, УСЛОВИЕ, ТИП ] );
  • Параметры:
    • int ШИМ - коэффициент заполнения от 0 до ±4095.
    • uint8_t ТИП - тип условия остановки: MOT_REV, MOT_MS, MOT_MM.
    • float УСЛОВИЕ - условие остановки, значение зависит от типа условия:
      • Если тип задан значением MOT_REV, то в качестве условия указывается количество оборотов до остановки, от 0.01 до 655.35.
      • Если тип задан значением MOT_MS, то в качестве условия указывается время до остановки, от 1 до 65'535 мс.
      • Если тип задан значением MOT_MM, то в качестве условия указывается расстояние до остановки в мм (от 0.01 мм до 655.35 x 2 x 3.14 x mot.radius мм).
  • Возвращаемое значение: bool - результат установки скорости (true или false).
  • Примечание:
    • ШИМ может быть отрицательным, знак указывает на направление вращения.
    • Если функция указана без параметров УСЛОВИЕ и ТИП, то мотор будет запущен с указанным коэффициентом ШИМ, пока не будет остановлен функцией setStop().
    • Если функция указана с параметрами УСЛОВИЕ и ТИП, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
    • Если в качестве типа остановки указано значение MOT_MM (расстояние в мм), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС;.
    • Задавать скорость через ШИМ удобно в тех случаях, когда мотор требуется запустить в процентах от его максимальной скорости: 0=0% ... ±2047=50% ... ±4095=100%.
  • Пример:
mot.setSpeedPWM(2047);                 // Запускаем мотор на 50%.
mot.setSpeedPWM(2047,  100, MOT_MM );  // Запускаем мотор на 50% с остановкой через 100 миллиметров пути.
mot.setSpeedPWM(2047,    3, MOT_REV);  // Запускаем мотор на 50% с остановкой через 3 полных оборота.
mot.setSpeedPWM(2047, 2000, MOT_MS );  // Запускаем мотор на 50% с остановкой через 2000 миллисекунд.

Функция getSpeed();

  • Назначение: Получение реальной скорости или ШИМ.
  • Синтаксис: getSpeed( ТИП );
  • Параметр: uint8_t ТИП - тип получаемого значения: MOT_RPM или MOT_PWM.
  • Возвращаемое значение: int - одно из значений:
    • Если тип задан значением MOT_RPM, то функция возвращает реальную скорость.
      (от 0 до ±655.35 об/мин).
    • Если тип задан значением MOT_PWM, то функция возвращает установленный ШИМ.
      (от 0 до ±4095).
  • Примечание:
    • Скорость вращения вала определяется по показаниям с датчиков Холла, вне зависимости от того, как запущен мотор (функциями setSpeedRPM() или setSpeedPWM()), даже если мотор отключён, а вал вращается по средством внешних сил.
    • Коэффициент заполнения ШИМ возвращается только если мотор запущен функциями setSpeedRPM() или setSpeedPWM().
    • Возвращаемое значение может быть отрицательным, знак указывает на направление вращения.
  • Пример:
int i = mot.getSpeed( MOT_RPM );  // Получить реальную скорость в об/мин.
int j = mot.getSpeed( MOT_PWM );  // Получить установленный коэффициент заполнения ШИМ.

Функция setStop();

  • Назначение: Остановка мотора с условием или без.
  • Синтаксис: setStop( [ УСЛОВИЕ, ТИП ] );
  • Параметры:
    • uint8_t ТИП - тип условия остановки: MOT_REV, MOT_MS, MOT_MM.
    • float УСЛОВИЕ - условие остановки, значение зависит от типа условия:
      • Если тип задан значением MOT_REV, то условием является количество оборотов до остановки. (от 0.01 до 655.35).
      • Если тип задан значением MOT_MS, то условием является время до остановки.
        (от 1 до 65'535 мс).
      • Если тип задан значением MOT_MM, то условием является расстояние до остановки.
        (от 0.01 мм до 655.35 x 2 x 3.14 x mot.radius мм).
  • Возвращаемое значение: bool - результат записи данных остановки в модуль.
  • Примечание:
    • Если функция указана без параметров, то мотор будет остановлен сразу.
    • Если функция указана с параметрами УСЛОВИЕ и ТИП, то мотор будет остановлен модулем самостоятельно, по истечении указанного условия остановки.
    • Если в качестве типа остановки указано значение MOT_MM (расстояние в мм), то до обращения к данной функции должен быть указан радиус колеса mot.radius=РАДИУС;.
    • Если в качестве условия остановки указать 0, то мотор не остановится, а ранее заданное условие того же типа будет отменено, при этом типы MOT_REV и MOT_MM приравнены.
  • Пример:
mot.setStop();               // Остановить мотор сразу (без условий).
mot.setStop( 100, MOT_MM );  // Остановить мотор через 100 миллиметров пути.
mot.setStop(   3, MOT_REV);  // Остановить мотор через 3 полных оборота.
mot.setStop(2000, MOT_MS );  // Остановить мотор через 2000 миллисекунд с текущего момента.
mot.setStop(   0, MOT_MM );  // Отменить заданную ранее остановку мотора по пройденному пути и количеству оборотов.
mot.setStop(   0, MOT_REV);  // Отменить заданную ранее остановку мотора по количеству оборотов и пройденному пути.
mot.setStop(   0, MOT_MS );  // Отменить заданную ранее остановку мотора по времени.

Функция getStop();

  • Назначение: Получение значения оставшегося до остановки.
  • Синтаксис: getStop( ТИП );
  • Параметр: uint8_t ТИП - тип получаемого значения: MOT_REV, MOT_MS, MOT_MM.
  • Возвращаемое значение: float - одно из значений:
    • Если тип задан значением MOT_REV, то функция возвращает количество оборотов оставшихся до остановки. (от 0.01 до 655.35 полных оборотов).
    • Если тип задан значением MOT_MS, то функция возвращает время оставшееся до остановки в мс. (от 1 до 65'535 мс).
    • Если тип задан значением MOT_MM, то функция возвращает расстояние оставшееся до остановки в мм. (от 0.01 мм до 655.35 x 2 x 3.14 x mot.radius мм).
  • Примечание:
    • Функция getStop() возвращает значение оставшееся до остановки мотора, заданное ранее функциями setStop(), setSpeedRPM(), или setSpeedPWM(), того же типа.
    • Если запрошено расстояние оставшееся до остановки мотора, то ранее должен быть определён радиус колеса mot.radius=РАДИУС;.
  • Пример:
mot.setSpeedRPM(100, 50, MOT_REV);         //   Запускаем мотор на скорости 100 об/мин с остановкой мотора после 50 полных оборотов.
while( mot.getStop(MOT_REV) ){             //   Если до остановки ещё есть не пройденное количество оборотов.
    Serial.print( mot.getStop(MOT_REV) );  //   Выводим оставшееся оставшееся количество оборотов до остановки.
}                                          //

Функция setStopNeutral();

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

Функция getStopNeutral();

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

Функция getSum();

  • Назначение: Получение количества совершённых оборотов или пройденного пути.
  • Синтаксис: getSum( ТИП );
  • Параметр: uint8_t ТИП - тип получаемого значения: MOT_REV или MOT_MM.
  • Возвращаемое значение: float - одно из значений:
    • Если тип задан значением MOT_REV, то функция возвращает количество совершённых оборотов с момента их сброса. (от 0.01 до 167'772.15 полных оборотов).
    • Если тип задан значением MOT_MM, то функция возвращает пройденный путь в мм, с момента его сброса. (от 0.01 мм до 167'772.15 x 2 x 3.14 x mot.radius мм).
  • Примечание:
    • Функция getSum() возвращает количество совершённых оборотов или пройденный путь с момента их сброса функцией delSum().
    • Количество совершённых оборотов и пройденный путь определяются по показаниям с датчиков Холла, вне зависимости от того, как запущен мотор (функциями setSpeedRPM() или setSpeedPWM()), даже если мотор отключён, а вал вращается по средством внешних сил.
    • Если запрошен пройденный путь, то ранее должен быть определён радиус колеса mot.radius=РАДИУС;.
  • Пример:
float i = mot.getSum( MOT_REV );  // Получить количество совершённых полных оборотов вала.
float j = mot.getSum( MOT_MM  );  // Получить пройденный путь.

Функция delSum();

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

Функция getError();

  • Назначение: Получение наличия ошибки модуля.
  • Синтаксис: getError();
  • Параметр: Нет.
  • Возвращаемое значение: uint8_t - может принимать следующие значения:
    • 0 - модуль работает без ошибок.
    • MOT_ERR_SPD - ошибка скорости.
      Ошибка возникает при отличии реальной скорости от заданной функцией setSpeedRPM().
    • MOT_ERR_DRV - ошибка драйвера.
      Ошибка возникает при перегрузке по току, перегреве чипа и при низком напряжении Vmot.
  • Примечание:
    • При наличии двух ошибок MOT_ERR_SPD и MOT_ERR_DRV, будет возвращена первая.
  • Пример:
uint8_t i = mot.getError();  // Получить ошибку модуля.

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

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

Функция reverseDir();

  • Назначение: Установка обратного направления движения ротора и определения скорости.
  • Синтаксис: reverseDir( ОБРАТНОЕ_НАПРАВЛЕНИЕ [, ОБРАТНЫЙ_ЗНАК] );
  • Параметры:
    • bool ОБРАТНОЕ_НАПРАВЛЕНИЕ - флаг установки обратного направления вращения.
    • bool ОБРАТНЫЙ_ЗНАК - флаг определения скорости с обратным знаком.
  • Возвращаемое значение: bool - результат применения новых данных.
  • Примечание:
    • Заданные значения сохраняются в энергонезависимую память модуля, при этом модуль не сохраняет значения повторно, если они не изменились.
    • Установка флага обратного направления позволяет задать левое или правое положение установки модуля на подвижных механизмах (см. пример).
    • Установка флага обратного знака позволяет получать скорость getSpeed() с противоположным знаком, как будто были перепутаны провода мотора.
    • По умолчанию установлено прямое направление движения и правильный знак.
  • Пример:
mot.reverseDir(true);        // Задаём обратное направление вращения.
mot.reverseDir(false);       // Задаём прямое   направление вращения.
mot.reverseDir(false, true); // Задаём обратное подключение проводов.

Функция setFreqPWM();

  • Назначение: Установка частоты ШИМ подаваемого на мотор.
  • Синтаксис: setFreqPWM( ЧАСТОТА );
  • Параметр: uint16_t ЧАСТОТА - значение от 1 до 1000 Гц.
  • Возвращаемое значение: bool - результат применения новой частоты.
  • Примечание:
    • Заданное значение сохраняется в энергонезависимую память модуля, при этом модуль не сохраняет значение повторно, если оно не изменилось.
    • Функции задания скорости позволяют задавать уровень ШИМ (коэффициент заполнения) не влияя на частоту. А данная функция позволяет изменить частоту ШИМ (период следования импульсов) не влияя на уровень ШИМ.
    • Частота по умолчанию 500 Гц.
  • Пример:
mot.setFreqPWM(100);  // Задаём частоту ШИМ равную 100 Гц.

Функция setMagnet();

  • Назначение: Установка количества полюсов многополюсного магнитного вала.
  • Синтаксис: setMagnet( КОЛИЧЕСТВО );
  • Параметр: uint8_t КОЛИЧЕСТВО - значение от 1 до 63.
  • Возвращаемое значение: bool - результат сохранения нового количества полюсов.
  • Примечание:
    • Заданное значение не сохраняется в энергонезависимую память модуля.
    • В качестве параметра указывается количество полюсов одной полярности.
    • Функция может быть полезной, только при смене магнитного вала.
    • Магнитный вал закреплён на роторе мотора возле датчиков Холла, по показаниям которого определяется скорость.
  • Пример:
mot.setMagnet(7);  // Указываем что магнитный вал содержит 7 полюсов одной полярности.

Функция getMagnet();

  • Назначение: Получение количества полюсов многополюсного магнитного вала.
  • Синтаксис: getMagnet();
  • Параметр: Нет.
  • Возвращаемое значение: uint8_t КОЛИЧЕСТВО.
  • Пример:
uint8_t i = mot.getMagnet();  // Получаем сохранённое количество полюсов одной полярности.

Функция setReducer();

  • Назначение: Установка передаточного отношения редуктора.
  • Синтаксис: setReducer( ОТНОШЕНИЕ );
  • Параметр: float ОТНОШЕНИЕ - значение от 0.01 до 167'772.15.
  • Возвращаемое значение: bool - результат сохранения нового передаточного отношения.
  • Примечание:
    • Заданное значение не сохраняется в энергонезависимую память модуля.
    • Если указать отношение равное 1, значит редуктор отсутствует.
    • Если указать значение выше 1, значит редуктор понижающий.
    • Если указать значение меньше 1, значит редуктор повышающий.
    • Функция может быть полезной, только при смене редуктора.
  • Пример:
mot.setReducer(49.2);  // Указываем передаточное отношение редуктора как 1:49.2

Функция getReducer();

  • Назначение: Получение передаточного отношения редуктора.
  • Синтаксис: getReducer();
  • Параметр: Нет.
  • Возвращаемое значение: float ОТНОШЕНИЕ.
  • Пример:
float i = mot.getReducer();  // Получаем сохранённое передаточное отношение редуктора.

Функция setError();

  • Назначение: Установка процента максимального отклонения скорости до установки ошибки.
  • Синтаксис: setError( ПРОЦЕНТ );
  • Параметр: float ПРОЦЕНТ - значение от 1 до 100.
  • Возвращаемое значение: bool - результат сохранения нового процента отклонения.
  • Примечание:
    • При отличии реальной скорости от заданной функцией setSpeedRPM(), на плате модуля включается красный светодиод, а функция getError() начинает возвращать ошибку скорости MOT_ERR_SPD. Это происходит при отличии реальной скорости от заданной на указанный функцией setError() процент. Меняя этот процент Вы меняете поведение светодиода и функции getError().
    • Значение по умолчанию 10%
  • Пример:
mot.setError(10);  // Установить максимальное отклонение скорости до установки ошибки как 10%.

Ссылки:




Обсуждение

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