Skip to content

GyverLibs/GyverMotor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

latest PIO Foo Foo Foo

Foo

GyverMotor

Библиотека для удобного управления коллекторными моторами через драйвер

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

Warning

Библиотека "состоит" из двух библиотек: GyverMotor и GyverMotor2. Вторая версия новее, легче, удобнее и лучше оптимизирована! Первая устарела и не рекомендуется к использованию

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

  • Для esp8266 (до SDK v3) не забудь переключить библиотеку в 10 бит или установить ШИМ в 8 бит на самой еспшке!

Содержание

Использование (GyverMotor2)

Типы драйверов

Константа Описание Пины Сигнал вперёд Сигнал назад
DRIVER2WIRE двухпроводной драйвер с инверсией шим GPIO, PWM 0, PWM 1, ~PWM
DRIVER2WIRE_NO_INVERT двухпроводной драйвер без инверсии ШИМ GPIO, PWM 0, PWM 1, PWM
DRIVER2WIRE_PWM_SPEED двухпроводной с двумя ШИМ (скорость) PWM, PWM 0, PWM PWM, 0
DRIVER2WIRE_PWM_POWER двухпроводной с двумя ШИМ (момент) PWM, PWM ~PWM, 1 1, ~PWM
DRIVER3WIRE трёхпроводной драйвер GPIO, GPIO, PWM 0, 1, PWM 1, 0, PWM
RELAY2WIRE реле в качестве драйвера GPIO, GPIO 0, 1 1, 0
  • Для двухпроводных мостовых драйверов стоит отдавать предпочтение типу DRIVER2WIRE_PWM_POWER. Он требует два ШИМ пина, но драйвер работает более правильно и меньше нагружается, а также скорость будет одинаковая в обе стороны, в отличие от простого DRIVER2WIRE
  • DRIVER2WIRE_PWM_SPEED даёт мотору более высокую скорость, а DRIVER2WIRE_PWM_POWER - более высокий крутящий момент и стабильное вращение

GyverMotor2

GMotor2<тип> motor(пин1, пин2, пин3);               // разрядность ШИМ 8 бит (0.. 255)
GMotor2<тип, разрядность> motor(пин1, пин2, пин3);  // общий случай, разрядность ШИМ в битах (умолч. 8 бит)
// инициализация с указанием пинов
GMotor2(uint8_t a, uint8_t b, uint8_t c = 0xff);

// установить минимальный ШИМ (умолч. 0)
void setMinDuty(uint16_t mduty);

// установить минимальный ШИМ в % (умолч. 0)
void setMinDutyPerc(uint8_t p);

// реверс направления (умолч. false)
void reverse(bool rev);

// остановка. Если включено ускорение, то плавная
void stop();

// активный тормоз
void brake();

// установить скорость (-макс.. макс)
void setSpeed(int16_t speed);

// установить скорость в процентах (-100.. 100%)
void setSpeedPerc(int16_t spd);

// установить deadtime в микросекундах (умолч. 0)
void setDeadtime(uint16_t us);

// плавное изменение к указанной скорости с ускорением setAccel, вызывать в loop
void tick();

// установить ускорение в единицах ШИМ в секунду. 0 чтобы отключить
void setAccel(uint32_t s);

// установить ускорение в процентах в секунду. 0 чтобы отключить
void setAccelPerc(uint8_t p);

// получить статус: мотор крутится (1 и -1), мотор остановлен (0)
int8_t getState();

// получить текущую скорость мотора в единицах ШИМ
int16_t getSpeed();

Настройки компиляции (объявляются до подключения библиотеки):

#define GMOTOR2_NO_ACCEL  // отключить поддержку плавного режима
#define GMOTOR2_DT 50     // период таймера ускорения, мс

Скорость

Скорость задаётся в setSpeed(-макс ШИМ.. макс ШИМ) в величине ШИМ сигнала, либо в setSpeedPerc(-100.. 100) в процентах. Скорость может быть отрицательной, тогда мотор будет крутиться в обратную сторону. При значении 0 мотор остановится и драйвер будет отключен.

Режимы работы

  • Вызов stop() равносилен setSpeed(0). При прямом управлении мотор будет сразу остановлен, при плавном - остановится плавно. Драйвер отключится, вал мотора будет освобождён
  • Вызов brake() остановит мотор и переключит драйвер в режим активного торможения (замкнёт мотор через себя). Вал мотора будет сопротивляться вращению
  • Вызов reverse(true) инвертирует направление вращения мотора

Минимальный ШИМ

В setMinDuty(-макс ШИМ.. макс ШИМ) можно установить минимальное значение ШИМ (при которой мотор начинает вращение, подбирается экспериментально), это удобно в большинстве применений: установленная в setSpeed() скорость будет автоматически масштабироваться с учётом минимального ШИМ. Также можно задать минимальную скорость в процентах setMinDutyPerc(-100.. 100).

Ускорение (плавный режим)

В плавном режиме установленная в setSpeed() скорость применяется не сразу, а плавно в течением времени с заданным ускорением. Для включения плавного режима нужно указать ускорение в setAccel(uint32_t s) в единицах ШИМ в секунду и поместить в основном цикле программы функцию-тикер tick(). Скорость изменения скорости можно задать и в процентах в секунду через setAccelPerc(uint8_t p). Для отключения режима нужно установить ускорение равным 0.

Пример

Остальные примеры смотри в examples!

#include <GyverMotor2.h>
GMotor2<DRIVER2WIRE> motor(5, 6);

void setup() {
  motor.setMinDuty(70);   // мин. ШИМ
  //motor.reverse(1);     // реверс
  //motor.setDeadtime(5); // deadtime
}

void loop() {
  motor.setSpeed(10);
  delay(1000);
  motor.setSpeed(-100);
  delay(1000);
  motor.setSpeed(50);
  delay(1000);
  motor.setSpeed(255);
  delay(1000);
  motor.brake();
  delay(3000);
}

Версии

  • v1.1 - убраны дефайны
  • v1.2 - возвращены дефайны
  • v2.0:
    • Программный deadtime
    • Отрицательные скорости
    • Поддержка двух типов драйверов и реле
    • Плавный пуск и изменение скорости
  • v2.1: небольшие фиксы и добавления
  • v2.2: оптимизация
  • v2.3: добавлена поддержка esp (исправлены ошибки)
  • v2.4: совместимость с другими библами
  • v2.5: добавлен тип DRIVER2WIRE_NO_INVERT
  • v3.0: переделана логика minDuty, добавлен режим для ШИМ любой битности
  • v3.1: мелкие исправления
  • v3.2: улучшена стабильность плавного режима
  • v3.2.1: вернул run() в public
  • v4.0: исправлен баг в GyverMotor. Добавлен GyverMotor2

Установка

  • Библиотеку можно найти по названию GyverMotor и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для удобного управления коллекторными моторами через драйвер

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages