Электронный компонент:Контроллер электродвигателей Hercules Dual 15A 6-20V

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Контроллер электродвигателей Hercules Dual 15A 6-20V[1]

Hercules Dual 15A 6-20V – это высокоамперная плата для управления электродвигателями. Она состоит из микроконтроллера, цепи для управления моторами, а также цепей для зарядки и защиты. Это комплексное решение, способное и обеспечивать проект питанием, и управлять им.

В отличие от драйвера L298, полумостовой драйвер IR2104 и N-канальный МОП-транзистор (которыми оснащен Hercules Dual 15A 6-20V) способны управлять даже высокомощными моторами, сила тока которых составляет до 15 ампер. Кроме того, контроллер Hercules Dual 15A 6-20V, как можно судить из названия, рассчитан на высокое напряжение, поэтому от него можно питать литий-полимерные батареи на 7.4 – 11.1 вольт, которыми оснащаются, к примеру, радиоуправляемые машины и модели самолетов. За защиту от перегрузок отвечают предохранитель и светодиод, показывающий статус защиты этим предохранителем.

Контроллер Hercules Dual 15A 6-20V совместим с Arduino. Более того, он как раз рассчитан на то, чтобы проект, создаваемый на его основе, можно было расширять. Для этого контроллер оснащен несколькими Grove-коннекторами для подключения сервомоторов, энкодеров, датчиков и т.д., благодаря которым проект можно сделать многофункциональным.

Купить контроллер электродвигателей Hercules Dual 15A 6-20V можно по этой ссылке.

Функционал

Характеристики

Параметр Минимум Типично Максимум Единица измерения
Рабочее напряжение 6.0 - 20.0 Вольты(постоянный ток)
Сила тока мотора на канал - - 15 Амперы
Входное/выходное напряжение - 5 - Вольты(постоянный ток)
Входная/выходная TTL-коммуникация - 5 - Вольты(постоянный ток)
Температура -40 - +125 Градусы Цельсия

Расположение компонентов

Коннекторы

  • Коннекторы для энкодеров. В моторы платформы Hercules встроены энкодеры для измерения их скорости. Контроллер Hercules Dual 15A 6-20V оснащен двумя коннекторами для подключения этих энкодеров. Кроме того, эти коннекторы позволяют питать каждый энкодер 5 вольтами постоянного тока.
  • Коннекторы для сервомоторов. Оснащены тремя контактами – GND, +5V и контактом для передачи данных. Коннекторы такого типа используются, как правило, для изменения угла сервомотора.
  • Винтовые зажимы для подключения батареи. Помечены на плате надписями «GND»' и «VM». Зажим VM – для положительного, а зажим GND – для отрицательного вывода батареи. Чтобы избежать повреждения платы, входное напряжение должно быть в диапазоне 6-20 вольт.
  • Винтовые зажимы для подключения моторов. Зажимы для канала 1 – это M1A/M1B, а для канала 2 – M2A/M2B. Каких-то специальных полюсов у моторов нет. Если мотор вращается в неправильном направлении, поменяйте провода мотора местами. Обратите внимание, что J20&J21 и J22&J23 подключены параллельно, поэтому 2 левых мотора следует подключать к одному каналу, а два правых – к другому.

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

Примечание: Контроллер Hercules Dual 15A 6-20V нельзя питать напрямую через программный коннектор (т.е. коннектор, который подключается к ПК для загрузки кода).

Контроллер нужно питать от зажимов J1, подключенных к батарее или другому источнику постоянного тока (6-20 вольт). Кроме того, для защиты Н-мостов контроллер использует два 15-амперных предохранителя. Подключив питание, проделайте следующее:

  • Подключите DC-мотор к винтовым зажимам канала 1
  • Подключите контроллер к компьютеру при помощи модуля UartSBee V4 и USB-кабеля
  • Загрузите библиотеку «Motor Controller» и запустите демо-скетч «motorDriverDemo»:
#include "motordriver_4wd.h"
    #include <seeed_pwm.h>

    void setup()
    {
        MOTOR.init();  //  инициализируем все контакты
    }

    void loop()
    {
        MOTOR.setSpeedDir(DIRF, 80); // задаем направление и скорость
                                     // для моторов 1 и 2;
                                     // направление – это «DIRF»,
                                     // а скорость – это «80»;
                                     // диапазон скорости: 0-100
        delay(3000);
        MOTOR.setSpeedDir(DIRR, 80); // задаем направление и скорость
                                     // для моторов 1 и 2;
                                     // направление – это «DIRR»,
                                     // а скорость – это «80»;
                                     // диапазон скорости: 0-100
        delay(3000);
    }

Примечание: Мотор может двигаться в двух направлениях – «DIRF» (т.е. вперед) и «DIRR» (т.е. назад). Если мотор вращается в неправильном направлении, поменяйте местами провода, через которые мотор подключен к контроллеру.

  • Отключите контроллер от компьютера
  • Через винтовые зажимы «GND» и «VM» подключите к контроллеру батарею или источник постоянного тока
  • Теперь мотор должен вращаться с заданной скоростью

Функции

В демо-скетче «motorDriverDemo» используются две функции из библиотеки «Motor Controller». О них, а также о нескольких других читайте ниже:

  • Функция setStop1(). Останавливает мотор 1
  • Функция setStop2(). Останавливает мотор 2
  • Функция setSpeedDir(). Задает направление и скорость вращения моторов 1 и 2
  • Функция setSpeedDir1(). Задает направление и скорость вращения мотора 1
  • Функция setSpeedDir2(). Задает направление и скорость вращения мотора 2

Расширенное использование

На базе контроллера Hercules Dual 15A 6-20V можно сделать радиоуправляемую машину – мощную и обладающую хорошей амортизацией. Этот проект будет состоять из двух частей: самой машины и ресивера.

Пульт управления

Для создания пульта управления понадобятся следующие компоненты:

Модуль RFBee будет использоваться для беспроводной передачи данных, Grove-модуль с регулятором – для управления машиной, а системная плата XBee Carrier – это основа всего устройства. Кроме того, XBee Carrier оснащена портом MiniUSB, через который мы будем загружать код на модуль RFBee.

Примечание: Чтобы обойтись без батареи, пульт управления можно запитать от ПК через USB-кабель.

Чтобы создать пульт, проделайте следующее:

  • Вставьте модуль RFBee в сокет Bee на системной плате XBee Carrier
  • Загрузите библиотеку «RFBee» и установите ее в IDE Arduino
  • Откройте в IDE Arduino скетч «Remote Ivc». Далее кликните в IDE Arduino на Инструменты > Плата > Arduino Pro or Pro Mini (Tools > Board > Arduino Pro or Pro Mini).

Затем выберите в меню Инструменты > Порт (Tools > Port) коннектор, через который контроллер подключен к ПК. Наконец, загрузите этот скетч на модуль RFBee

Примечание: О том, где находится батарейный коннектор на XBee Carrier, можно посмотреть на этой картинке. Ищите красную надпись «Battery Connector» в правой части схемы.

Ресивер

Для создания ресивера понадобятся следующие компоненты:

Модуль RFBee будет использоваться для беспроводной передачи данных, системная плата XBee Carrier – это основа проекта, оснащенная коннектором MiniUSB для загрузки кода на модуль RFBee, а контроллер электродвигателей Hercules Dual 15A 6-20V – для вращения моторов.

Далее проделайте следующее:

В нашем случае в качестве контроллера Hercules Dual 15A 6-20V используется мобильная робо-платформа 4WD Hercules, показанная на фото ниже:

  • Загрузите и установите в IDE Arduino библиотеку «Motordriver 4wd». Затем кликните в IDE Arduino на Инструменты > Плата > Arduino Duemilanove w/ ATmega328 (Tools > Board > Arduino Duemilanove w/ ATmega328)
  • Загрузите на модуль RFBee вот этот скетч:
// демо-скетч для модуля RFbee;
// задача – получение и отправка данных
    #include <Arduino.h>
    #include <EEPROM.h>
    #include <RFBeeSendRev.h>
    #include <RFBeeCore.h>
    #include <Wire.h>

    #define FRAMESTART1   0x53  //  блок данных для старта канала 1
    #define FRAMESTART2   0x01  //  блок данных для старта канала 2
    #define FRAMEEND1     0x2f  //  блок данных для остановки канала 1
    #define FRAMEEND2     0x45  //  блок данных для остановки канала 2

    void sendToI2C(unsigned char ilen, unsigned char *idata)
    {
        //  передаем данные на устройство #4:
        Wire.beginTransmission(4);
        //  отправляем один байт:
        for(int i = 0; i<ilen; i++) {Wire.write(idata[i]);}
        // останавливаем передачу данных:
        Wire.endTransmission();
    }

    void setup(){

        pinMode(10, OUTPUT);
        RFBEE.init();
        Wire.begin();
        Serial.begin(38400);
        Serial.println("ok");
    }

    unsigned char rxData1[200];       //  передаваемые данные
    unsigned char len1;               //  размер данных
    unsigned char srcAddress1;
    unsigned char destAddress1;
    char rssi1;
    unsigned char lqi1;
    int result1;

    unsigned char cntGetDta = 5;

    void loop()
    {
        if(RFBEE.isDta())
        {
            result1 = receiveData(rxData1, &len1, &srcAddress1, &destAddress1, (unsigned char *)&rssi1 , &lqi1);
            Serial.println(len1);
            for(int i = 0; i< len1; i++)
            {
                Serial.print(rxData1[i]);Serial.print("\t");
            }

            Serial.println();

            sendToI2C(6, rxData1);
        }
    }

Результат

Собранная р/у машина способна перевозить емкость с водой объемом до 19 литров.

Полезные ссылки

См.также

Внешние ссылки