Управление 4 dc моторами на Arduino Nano

al072
Offline
Зарегистрирован: 20.04.2017

Всем доброго времени суток! После долгого ожидания мне пришёл мотор шилд из китая:http://s.aliexpress.com/IzA3ArUN

Данный шилд рассчитан на подключение 4-х dc моторов. Уважаемые господа поделитесь пожалуйста опытом как правильно подключить этот шилд к Arduino Nano? И где можно найти примеры скетчей по Управлению моторами через этот шилд? Спасибо.

 

 

Araris
Offline
Зарегистрирован: 09.11.2012

По ключевым словам "l298n arduino" поисковики много чего выдают, а то, что у Вас сдвоенный шилд, принципиального значения не имеет.

al072
Offline
Зарегистрирован: 20.04.2017

Посмотрел схемы подключения на 2-х моторные мотор шилды l298n, но схема подключения отличается от моего шилда. Подскажите пожалуйста, на моей плате имеются три контакта (Vin, Gnd, +5v) на какие из них подавать питание? Также рядом с контактами Vin и Gnd находится джампер off/on, для чего он нужен и в каком положении должен находится? 

Araris
Offline
Зарегистрирован: 09.11.2012

Метод аналогии и эта http://zelectro.cc/Motor_shield_L298N_Arduino статья Вам поможет. Третья и четвёртая картинки с объяснениями.

al072
Offline
Зарегистрирован: 20.04.2017

Спасибо за информацию! Статья помогла, разобрался. 

al072
Offline
Зарегистрирован: 20.04.2017

Запитал L298N от 7.2 v Ni-Cd аккумулятора, после 5-10 минут непрерывной езды L298N сильно греется и соответственно значительно падает производительность моторов, они практически перестают крутиться. Спустя определенное время, после того, как схема остывает, производительность моторов восстанавливается. Подскажите плиз что обычно делают в таких случаях и какие есть достойные альтернативы L298N?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Схему подключения, скетч управления - в студию. Мой ХШ отдан на СТО на замену масла.

al072
Offline
Зарегистрирован: 20.04.2017

Arhat109-2 пишет:

Схему подключения, скетч управления - в студию. Мой ХШ отдан на СТО на замену масла.

Заранее извиняюсь, хорошую схему нарисовать все равно не смогу, по этому опишу словами.

Драйвер моторов - Arduino Nano (для управления скоростью моторов я не использую ШИМ, в целях экономии пинов на ардуине, по этому все ШИМ контакты на драйвере L298N соединены с VCC джамперами, собственно джамперы оставлены на том же месте где они стояли изначально когда драйвер приехал из китая. Моторы подключены соответственно к выходам Motor1+,Motor1-...Motor4+,Motor4-):

IN1 - D2

IN2 - D3

IN3 - D4

IN4 - D5

IN5 - D6

IN6 - D7

IN7 - D8

IN8 - D9

GND - GND(4)

GND - 7.2v батарея (-)

VCC - 7.2v батарея (+)

Arduino Nano - 3dr telemetry:

GND(29) - GND

+5v(27) - Vin 

Tx - Rx

Rx - Tx

GND(4) - 7.2v батарея(-)

Vin(30) - 7.2v батарея(+)

Скетч управления:

int IN1 = 2; 
int IN2 = 3;
int IN3 = 4;
int IN4 = 5;
int IN5 = 6;
int IN6 = 7;
int IN7 = 8;
int IN8 = 9;
int command;
void setup()
{
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
  pinMode (IN5, OUTPUT);
  pinMode (IN6, OUTPUT);
  pinMode (IN7, OUTPUT);
  pinMode (IN8, OUTPUT);
  serial.begin(57600);
}
void loop()
{
  
  serial.read(command);
  if(command==1)
{\\движение вперёд 
  digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW); 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);
  digitalWrite (IN5, HIGH);
  digitalWrite (IN6, LOW);
  digitalWrite (IN7, HIGH);
  digitalWrite (IN8, LOW);
}

}

 


 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

А где "вторая половина" описания схемы? В смысле какие моторы и как включены ..

al072
Offline
Зарегистрирован: 20.04.2017

Arhat109-2 пишет:

А где "вторая половина" описания схемы? В смысле какие моторы и как включены ..

Мотор драйвер - мотор:

Motor1(+) - плюсовая клемма моторчика 1

Motor1(-) - минусовая клемма моторчика 1

Motor2(+) - плюсовая клемма моторчика 2

Motor2(-) - минусовая клемма моторчика 2

Motor3(+) - плюсовая клемма моторчика 3

Motor3(-) - минусовая клемма моторчика 3

Motor4(+) - плюсовая клемма моторчика 4

Motor4(-) - минусовая клемма моторчика 4

Мотор- редукторы 6v, шли в комплекте с шасси: http://s.aliexpress.com/IbmYbmYn

фото моторов:

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Замечательно. Только у ваших моторов нет параметров "скока они жрут" на вашем питании. Проверяйте потребление моторов под нагрузкой. Нагрузку можете создать пальцами удерживая колеса. Если жрут больше 2А, то не удивительно что шилд греется. По виду этих моторов ничего сказать нельзя, надо мерить. Их бывает самых разных - просто вагон.

Кстати, блокировочные конденсаторы параллельно клеммам мотора - стоят? Если нет, то ставьте керамику на примерно 100нФ..

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Да и программу желательно так выполнить 

class Cl_motor {
  public:
    Cl_motor (byte pin1, byte pin2): plus_pin(pin1), minus_pin(pin2) {};
    setup() {
      pinMode (plus_pin, OUTPUT);
      digitalWrite (plus_pin, LOW);
      pinMode (minus_pin, OUTPUT);
      digitalWrite (minus_pin, LOW);
    };
    forward() {
      digitalWrite (plus_pin, HIGH);
      digitalWrite (minus_pin, LOW);
    };
  private:
    byte plus_pin;
    byte minus_pin;
};
Cl_motor Motor1(2, 3), Motor2(4, 5), Motor3(6, 7), Motor4(8, 9);
int command;
void setup() {
  Serial.begin(57600);
  Motor1.setup();
  Motor2.setup();
  Motor3.setup();
  Motor4.setup();
}
void loop() {
  command=Serial.read();
  if (command == '1') { // движение вперёд
    Motor1.forward();
    Motor2.forward();
    Motor3.forward();
    Motor4.forward();
  }
}

 

al072
Offline
Зарегистрирован: 20.04.2017

Arhat109-2 пишет:

Замечательно. Только у ваших моторов нет параметров "скока они жрут" на вашем питании. Проверяйте потребление моторов под нагрузкой. Нагрузку можете создать пальцами удерживая колеса. Если жрут больше 2А, то не удивительно что шилд греется. По виду этих моторов ничего сказать нельзя, надо мерить. Их бывает самых разных - просто вагон.

Кстати, блокировочные конденсаторы параллельно клеммам мотора - стоят? Если нет, то ставьте керамику на примерно 100нФ..

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

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

без нагрузки и под нагрузкой:

al072
Offline
Зарегистрирован: 20.04.2017

Спасибо за код!

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Жрут действительно немного, от такого L298N не греется от слова "совсем". Мои даже со снятыми радиаторами от такого не греются.

Блокировочные конденсаторы да, ставят обязательно керамечиские от одной щетки мотора до другой. Их же ещё зовут "искрогасящими". Вполне достаточно одного конденсатора на мотор. Емкость 50-200нф, по идее лучше больше чем меньше, но не критично. В свое время ставил от 10нф до 1.0мкф .. после 50-100нф особой разницы нет, кроме резонансного значения емкости (индивидуально от мотора к мотору). Резонансный кондер у меня сожрал шетки мотора примерно за 10 часов работы .. не знаю, может мне так повезло, случай - единичный.

Напряжение пробоя надо смотреть не хуже на 3*U питания мотора. Я предпочитаю ставить (есть запас ещё) старую СССР-овскую керамику, зная что она вся на 50в - хватает точно. Еще надо посмотреть, есть ли блокирующие диоды на вашем шилде. Посмотрите сколько их стоит на одиночном L298N и есть ли такие на вашем. Дело в том, что в момент смены полярности или при ШИМ управлении мотором (регулировка "скорости", на самом деле мощности) с катушек мотора можете лететь нехилая ЭДС в генераторном режиме .. но, судя по вашей программе Вы не используете управление скоростью мотора через ШИМ (подают на вход EN этого драйвера).

Можно ставить блокирующие кондеры в кол-ве 3шт: между щетками + с каждой щетки на корпус мотора. Видел и такое, но чем это лучше - не знаю. По идее, якорь изолирован от корпуса мотора.

Да и ещё. Управление направлением вращения. Если Вы часто дергаете ноги направлений INx, то старайтесь вперед управлять той ногой, которую ВЫключаете, делать небольшую задержку в 5-10микросекунд и только потом Включать требуемую ногу в программе. Подбирая задержку можно полностью избежать сквозных токов через драйвер при переключении направлений, когда первый транзистор ещё не успел закрыться физически, а второй уже начал открываться. В этом разе ток течет через драйвер мимо двигла, поэтому его и зовут "сквозняком". Часто именно он греет шилд.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015
class Cl_motor {
// ...
/** ТАК был, это неверно: */
    forward() {
      digitalWrite (plus_pin, HIGH);
      digitalWrite (minus_pin, LOW);
    };
/**
 *   Правильно делать так (и остальные смены направлений по аналогии
 * предварительно определив константу так или этак:
 * #define TIME_CHANGE_DIRECTION 10
 * const uint8_t TIME_CHANGE_DIRECTION = 10;
 */
    forward() {
      digitalWrite (minus_pin, LOW);           // сначала вЫключаем
      delaMicroseconds(TIME_CHANGE_DIRECTION); // ждем чутка
      digitalWrite (plus_pin, HIGH);           // апосля включаем
    };
//================= 

 

al072
Offline
Зарегистрирован: 20.04.2017

Спасибо за развёрнутый ответ!Попробую поставить эти блокировочные конденсаторы. А те которые вы советовали для организации диодного моста тоже подойдут: 1000.0x25в? Просто я их купил уже штук 10.. Диодный мост пока собрать не получилось, наверное что-то делаю не правильно описал проблему в соседней ветке.. 

За код спасибо, учту все рекомендации..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Arhat109-2 пишет:

class Cl_motor {
// ...
/** ТАК был, это неверно: */
    forward() {
      digitalWrite (plus_pin, HIGH);
      digitalWrite (minus_pin, LOW);
    };
/**
 *   Правильно делать так (и остальные смены направлений по аналогии
 * предварительно определив константу так или этак:
 * #define TIME_CHANGE_DIRECTION 10
 * const uint8_t TIME_CHANGE_DIRECTION = 10;
 */
    forward() {
      digitalWrite (minus_pin, LOW);           // сначала вЫключаем
      delaMicroseconds(TIME_CHANGE_DIRECTION); // ждем чутка
      digitalWrite (plus_pin, HIGH);           // апосля включаем
    };
//================= 

Если используются именно ардуиновские digitalWrite (а, например, не из Вашей библиотеки), то достаточно поменять местами (верхний пример), т.к. сам digitalWrite занимает 7 микросекунд, соответственно, такая же будет и задержка между воздействием на пины.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну .. один L298N судя по замерам потребляемого тока, мне пришлось увеличивать задержку до 50мксек или даже больше, уже не помню. Он все равно сгорел позже (случайно подал его 12в на ножку питания 5в .. вместе с ним погорела УНО, несколько датчиков линии/препятствий ..). Есть смысл поэкспериментировать с задержкой, замеряя ток, потребляемый драйвером.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, ещё. В той схеме все донельзя примитивно, просто перечитайте внимательно. На вашем фото непонятно что-куда подключено, поскольку провода идут за предел фотографии, и то что сфотано не говорит ни о чем.