Сборка мощного моторшилда (на базе L298)


Всем хороша L293 кроме тока — только 600мА на канал (у L293N — 1.2А, но со внешними диодами и только кратковременно).
Но есть у неё старший брат — L298, надо сказать брат-близнец — представляет из себя те же четыре полумоста объединённые по-два сигналами разрешения работы(ENABLE),

но пожилистей — до 4А.
Корпус тоже покрупнее — при необходимости его удобно прикрепить к радиатору.
Ну и тут уже без внешних диодов никуда — придётся ставить, причём желательно шоттки и желательно на ток не меньше чем ток нагрузки.
Принципы работы, методы управления, достоинства и недостатки совершенно те же что и у L293 — можно почитать тут и тут.
А соберём ка мы на ней мотрошилд=)

Кроме рук и паяльных принадлежностей нам понадобятся:
*собственно набор L298 с необходимой обвязкой
*протошилд
*три болтовых клеммника (один для подключения питания, два — для моторов)
*немного обрезков витой пары и/или МГТФ-а

Собирать будем по такой схеме

Резисторы R1 и R2 — шунты для замера(и ограничения внешним контроллером) тока через каналы. Если мерить и ограничивать не собираетесь — можно поставить перемычки.
Получилось как-то вот так:

тут я смухлевал и воткнул конденсатор по-мельче на 16В(в комплекте идёт на 50В — чтоб перекрыть весь рабочий диапазон ЭЛЬ-ки) — влез бы и штатный еслиб я не запаял так близко друг к другу клемники для моторов=\
Нижняя каша:

Так как управление, решительно, ничем не отличается от L293 просто немного подправим скетч noonv-а для неё:

/*
 * тестовый скетч с L293/L298
 */

struct MOTOR    // структура для хранения номеров pin-ов, к которым подключены моторчики
{
  int in1;      // INPUT1
  int in2;      // INPUT2
  int enable;   // ENABLE1
};

// определяем порты, к которым подключены моторчики
MOTOR MOTOR1 = { 2, 4, 3 };
MOTOR MOTOR2 = { 6, 7, 5 };

void setup()
{
  pinMode(MOTOR1.in1, OUTPUT); // настраиваем выводы
  pinMode(MOTOR1.in2, OUTPUT); // на ВЫВОД
  pinMode(MOTOR2.in1, OUTPUT);
  pinMode(MOTOR2.in2, OUTPUT);
}

void loop()
{
  forward1(50);   // вращаем оба моторчика вперёд на 50
  forward2(50);
  delay(3000);
  forward1(250);   // вращаем оба моторчика вперёд на 250
  forward2(250);
  delay(3000);
  back2(100);      // вращаем оба моторчика назад на 100
  back1(100);
  delay(5000);
  forward2(40);   // а теперь опять вращаем второй моторчик вперёд
  delay(1000)
}

void forward1(int pwm) // первый вперёд
{
  digitalWrite(MOTOR1.in1, HIGH);
  digitalWrite(MOTOR1.in2, LOW);
  analogWrite(MOTOR1.enable, pwm);
}

void forward2(int pwm) // второй вперёд
{
  digitalWrite(MOTOR2.in1, HIGH);
  digitalWrite(MOTOR2.in2, LOW);
  analogWrite(MOTOR2.enable, pwm);
}

void back1(int pwm) // первый назад
{
  digitalWrite(MOTOR1.in1, LOW);
  digitalWrite(MOTOR1.in2, HIGH);
  analogWrite(MOTOR1.enable, pwm);
}

void back2(int pwm) // второй назад
{
  digitalWrite(MOTOR2.in1, LOW);
  digitalWrite(MOTOR2.in2, HIGH);
  analogWrite(MOTOR2.enable, pwm);
}

Тестируем на недостойно-хилой нагрузке=)

Работает=)
Но тратить по три пина на управление каждым каналом — жуткое расточительство — поэтому дополним наш шилд парой инверторов (подробности про принцип работы этого решения можно почитать здесь) а точнее поставим одну 74hc00

— самая распространённая микросхема логики — 4 двухвходовых элемента И-НЕ — для моторшилдов довольно стандартное решение.
Схема у нас теперь будет выглядеть так:

Шилд сверху

снизу

Также немного переделаем скетч

/*
 * тестовый скетч с L293/L298 и 74hc00
 */

struct MOTOR    // структура для хранения номеров pin-ов, к которым подключены моторчики
{
  int in;    // INVERTOR INPUT
  int enable;   // ENABLE1
};

// определяем порты, к которым подключены моторчики
MOTOR MOTOR1 = { 4, 3 };
MOTOR MOTOR2 = { 6, 5 };

int FORWARD = HIGH;
int BACK = LOW;

void setup()
{
  pinMode(MOTOR1.in, OUTPUT); // настраиваем выводы
  pinMode(MOTOR2.in, OUTPUT);
}

void loop()
{
  motor1(FORWARD, 50);   // вращаем оба моторчика вперёд на 50
  motor2(FORWARD, 50);
  delay(3000);
  motor1(FORWARD, 250);   // вертимся в раздрай на 250 (поворачиваемся)
  motor2(BACK, 250);
  delay(3000);
  motor1(BACK, 100);      // оба назад на 100
  motor2(BACK, 100);
  delay(5000);
  motor2(FORWARD, 50);   // а теперь опять вращаем второй моторчик вперёд
  delay(1000);
}

void motor1(int dir, int pwm) // первый
{
  digitalWrite(MOTOR1.in, dir);
  analogWrite(MOTOR1.enable, pwm);
}

void motor2(int dir, int pwm) // второй
{
  digitalWrite(MOTOR2.in, dir);
  analogWrite(MOTOR2.enable, pwm);
}

Проверяем уже на мощных моторах

Работает!
Видео результата:


0 комментариев на «“Сборка мощного моторшилда (на базе L298)”»

  1. У нас эти L298 горели при токах ниже чем указано в паспорте, пришлось делать сборку. В итоге ничего не грелось и об охлаждении думать не пришлось

    • диоды ставили?, правильно ставили?=)
      Почему думаете что токи были меньше паспротных, как замеряли?
      Насколько я помню у вас шаговики были, так там масса нюансов…
      А на полевиках, конечно лучше, никто не спорит:

      … достоинства и недостатки совершенно те же что и у L293 — можно почитать тут

    • Да, со схемотехникой все в порядке. К тому же из соображений экономии делать на транзисторах дешевле выходит. У нас L298 стоит 130 рублей, сборка — порядка 40 рублей. Потом надежность, что-то полетело — можно заменить один из звеньев цепи.

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

    • а драйверы для полевиков? 😉

      Может я напишу статейку именно про то как рассчитал мой товарищ.

      ждём-ждём, было бы интересно=)

    • +1
      обязательно напишите! и как можно поподробнее, для начинающих, чтобы убрать эту пропасть между шилдами и самодельными модулями

  2. Резвая штука вышла:)

    А зачем инверторы? Почему бы не повесить ENABLE-ы на плюс, и не пускать ШИМ прямо на входы? Тоже будет по 4м линиям управляться, и инвертор не нужен.
    Интересно, как у этих входов с частотными параметрами:)

    • =))
      Так, ну во первых как направление менять?
      Или надо оба выхода с ШИМом использовать — один в нуле второй — ШИМим
      «IN1-0 IN2-ШИМ»/«IN1-ШИМ IN2-0»
      Или ШИМ инвертировать программно вместе со сменой состояния одного входа
      «IN1-0 IN2-ШИМ»/«IN1-1 IN2-~ШИМ»
      оба метода заморочны и сильно усложняют программирование, особенно средствами ArduinoIDE=)

      Ну и наконец это просто не сработает=))
      Обратите внимание на таблицу состояний ЭЛ-ек:

      Отсюда, там же подробно расписано почему ШИМ-ить надо именно EN 😉
      Если коротко — EN-1, NI-1, NI2-1, (состояние предложенной вами схемы в момент действия 1 на выходе ШИМ) — это торможение, будет жёсткий дёрг-дёрг, перегревы и вибрации=(
      Кстати не обязательно инвертор прям микросхемой — можно просто транзистор поставить — это кому как нравится — про транзистор объяснять дольше, вот и воткнул 74hc00.

      Интересно, как у этих входов с частотными параметрами:)

      Видимо так же как и у EN, (см. эквивалентную схему)
      fc (Vi) Commutation Frequency при IL = 2A типично 25KHz максимум 40KHz
      (см датащит)

    • Эмм? Где вы эту таблицу взяли? 🙂 Чем в вашей таблице отличается поворот вправо от торможения.

      Или надо оба выхода с ШИМом использовать — один в нуле второй — ШИМим
      «IN1-0 IN2-ШИМ»/«IN1-ШИМ IN2-0»

      Да, я так всегда и делаю, это мой верный и испытанный способ. Программный ШИМ на любой пин IO — задачка не трудная.

      А вот только что вырезанная из дш на 293ю таблица состояний:

    • Эмм? Где вы эту таблицу взяли? 🙂

      сам когда-то рисовал=(
      никто не читает, багов не видит=((
      Ща исправим, спасибо.

      Программный ШИМ на любой пин IO — задачка не трудная.

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

      А зачем инверторы?

      Мне кажется так понятнее и проще код=)

    • Ну вот и разъяснилось:)
      Сложность она относительная, мы тут не орбитальные станции проектируем все же.

    • =)))))))
      А от чего, извините, попахивает?
      Картинки, фотографии, текст, код?
      Разъёмы синенькие, платформа кругленькая?
      Включёные по датащиту микросхемы?
      Если вы о сверх оригинальном решении проинвертировать входы L29х то, да оно не моё, правда оно так же несколько старше самой робозоны вцелом.
      Вот, кстати, обратите внимание на ход мысли в статье:

      Но тратить по три пина на управление каждым каналом — жуткое расточительство — поэтому дополним наш шилд парой инверторов (подробности про принцип работы этого решения можно почитать здесь)

      далее:

      — самая распространённая микросхема логики — 4 двухвходовых элемента И-НЕ — для моторшилдов довольно стандартное решение.

      если пройдёте по последней ссылочке там можно нажать на надпись "this page" и оказаться на странице где данное решение датированно 2005-2006гг.

      Попрошу аргументировать ваше высказывание!

    • Дорогой Zoltberg!
      В вашем сообщении чувствуются высокие тона и негативные эмоции.
      Возможно мое заявление выглядело, как обвинение. Но оно им не является. Можете выполнять любые статьи, но с уточнением автора изделия.
      В моих кругах принято приводить подобные работы, а затем давать свои НОВЫЕ идеи. Иначе работа превращается в плагиат.
      В вашей статье ничего нового я не увидел.
      Ваше право копировать чужие идеи, но не забывается кодекс чести электронщика.

    • Ребят вам сколько лет? Минуса ставите. Скажите напрямую что не нравится.
      У меня поначалу складывалось впечатление, что здесь серьезное общество, которое понимает всю серьезность и ответственность своих действий.

    • В моих кругах принято приводить подобные работы, а затем давать свои НОВЫЕ идеи.

      Это не работа научная, это демонстрация, для начинающих, как из конкретных деталей сделать конкретную вещь. Типовую, рабочую, без заморочек.
      Ардуино-ориентированную, и именно для ардуино-ориентированной аудитории.
      Инструкция по типовому применению L298 c ардуино, если угодно.
      Автор изделия?
      Позвольте полюбопытствовать, в ваших кругах использование схемы с общим эмиттером тоже считают плагиатом, если не указать конкретного автора?=)
      Это более чем типовое и очевидное решение, автор его утерян в веках, я уж и не помню где я его увидел.
      И опять же, обращаю ваше внимание — в статье таки указан, причём куда более старый, источник такого решения(хотя я очень сомневаюсь что он первый).

    • Да вам Zoltberg в Китай надо ехать, да автомобиль Haima выпускать!

    • Нет, это не ПКЛ, это какой-то листовой пластик для рекламщиков, ЕМНИП — вспененый ПВХ.
      Нарисовал циркулем круг и вырезал концелярским ножём в три прохода.
      Крепления моторов — такие.

    • Тяжело ли режется этот вспененный ПВХ? А то все думаю попробовать использовать в своих конструкциях. С оргстеклом уже намучился.

    • Нормально режется, довольно легко.
      По сравнению с оргстеклом — просто как масло=)

  3. Микросхемы потрясающие!
    В текущем проекте использую похожую L6203 — там один полный мост. В качестве двигателя — 24Вт-ный привод ВАЗ-овского стеклоподъемника со стандартным редуктором. Номинальный рабочий ток 2А. Греется средне. Стоит радиатор.
    ШИМ используется прекрасно, в том числе по выходу En, что очень удобно — нужен всего один выход OCR. Остальными просто коммутирую направление. Рабочая частота до 100кГц, у меня 64кГц… Внутри кстати защита по перегреву стоит И она даже работает :).

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение