Monster Moto Shield

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

Monster Moto Shield (2 канала) - используется для управления до двух коллекторных моторов постоянного тока.

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

  • Напряжение питания на входе питания моторов Vin: 5,5 ... 16 В;
  • Напряжение логики: 5 В;
    • Основан на чипе VNH3ASP30;
    • Количество каналов: 2;
    • Тип: Н-мост;
    • Ток нагрузки: до 6 А без охлаждения, до 14 А с охлаждением;
    • Максимальный импульсный ток до 30 А;
    • Ток покоя: до 100 мА;
    • Защита от обратного тока;
    • Возможность считывать ток нагрузи;
    • Рабочая температура от -40° до 150°;
    • Защита от перегрева;
    • ШИМ до 20 кГц.

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

    Выводы ArduinoВыводы Monster Moto Shield
    A0состояние ключей A1 B1
    A1состояние ключей A2 B2
    A2аналоговый выход значения тока первого драйвера
    A3аналоговый выход значения тока второго драйвера
    4управление ключом A2
    5управление ШИМ первого драйвера
    6управление ШИМ второго драйвера
    7управление ключом А1
    8управление ключом В1
    9управление ключом В2

    Monster Moto Shield устанавливается на Arduino UNO и управляется через 6 цифровых выходов и 4 аналоговых.



    Питание:

    Выходы Monster Moto Shield работают только от внешнего источника питания 5,5 - 16 В, который должен подключаться к вводам питания Vin.

    Подробнее о Monster Motor Shield:

    Monster Moto Shield построен на базе чипа VNH2SP30, что позволяет управлять, как скоростью движения, так и направлением подключённых двигателей, а так же блокировать моторы и считывать ток потребления, используя аналоговые выводы Arduino.

    Управление моторами постоянного тока: осуществляется при помощи функций: motorGo(номер мотора, направление, ШИМ) и motorOff(номер мотора).

    • Управление первым мотором постоянного тока осуществляется через выходы 7 (ключ А1), 8 (ключ В1) и 5 (ШИМ). В зависимости от состояния ключей мотор будет вращаться в ту или другую стороны. ШИМ контролирует скорость мотора.
    • Управление вторым мотором постоянного тока осуществляется через выходы 4 (ключ А2), 9 (ключ В2) и 6 (ШИМ). В зависимости от состояния ключей мотор будет вращаться в ту или другую стороны. ШИМ контролирует скорость мотора.
    • Направление в функции motorGo() устанавливается подачей логических уровней на A и В: A=LOW, B=HIGH - мотор вращается в одну сторону; A=HIGH, B=LOW - мотор вращается в другую сторону.
    • Скорость устанавливается подачей сигнала ШИМ, коэффициент заполнения которого, прямо пропорционален скорости.

    Примеры:

    Управление двумя моторами моторами:

    #define BRAKEVCC 0                  // определяем значение резкого тормоза
    #define CW   1                      // определяем значение вращения по часовой стрелке
    #define CCW  2                      // определяем значение вращения против часовой стрелки
    #define BRAKEGND 3                  // определяем значение остановки
    
    const uint8_t inApin[2] = {7, 4};   // определяем выводы ключей A
    const uint8_t inBpin[2] = {8, 9};   // определяем выводы ключей B
    const uint8_t pwmpin[2] = {5, 6};   // определяем выводы ШИМ
    const uint8_t cspin[2]  = {A2, A3}; // определяем выводы считывания тока
    const uint8_t enpin[2]  = {A0, A1}; // определяем выводы состояния ключей AB. Ключи открываются, если притянуть к 0.
    void setup()
    {
      Serial.begin(9600); 
      // переводим выводы управления в режим "выход"
      for (int i=0; i<2; i++)
      {
        pinMode(inApin[i], OUTPUT);     // выводы ключей A
        pinMode(inBpin[i], OUTPUT);     // выводы ключей B
        pinMode(pwmpin[i], OUTPUT);     // выводы ШИМ
      }
      // инициируем моторы выключенными
      motorOff(0);
      motorOff(1);
    }
    
    void loop()
    {
      motorGo(0, CW, 32);               // мотор 0 по часовой стрелке, ШИМ 17,5%
      motorGo(1, CCW, 127);             // мотор 1 против часовой стрелки, ШИМ 50%
      delay(3000);                      // ждём 3 секунды, моторы вращаются
      Serial.print(analogRead(cspin[0]));
      Serial.print("\t");
      Serial.print(analogRead(cspin[1]));
      delay(3000);
    // переводим вывод состояния ключей мотора 1 в режим "выход":
      pinMode(enpin[1], OUTPUT);
    // выключаем мотор 1:   
      digitalWrite(enpin[1], LOW);
    // на три секунды: 
      delay(3000);
    // включаем мотор 1, 
    // переводя вывод состояния ключей в режим "вход":             
      pinMode(enpin[1], INPUT); 
      delay(3000);   
      motorGo(0, BRAKEVCC, 32);         // останавливаем мотор 0 в режим "тормоз"
      motorGo(1, BRAKEGND, 32);         // останавливаем мотор 1 в режим "выключен"
      while(true);                      // скетч не выполняется дальше
      
    }
    
    // функция выключения мотора:
    void motorOff(int motor)            
    {
      for (int i=0; i<2; i++)
      {
        digitalWrite(inApin[i], LOW);
        digitalWrite(inBpin[i], LOW);
      }
      analogWrite(pwmpin[motor], 0);
    }
    
    
    // функция включения мотора:
    void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)  
    {
    // если номер мотора правильный:
      if (motor <= 1)
      {
    // если направление совпадает со значениями направлений:
        if (direct <=3)
        {
    // если направление мотора по часовой или плавный стоп,
    // устанавливаем соответствующие значения ключа А выбранного мотора:
          if (direct <=1)
            digitalWrite(inApin[motor], HIGH);
          else
            digitalWrite(inApin[motor], LOW);
    
    // если направление мотора по часовой или резкий стоп,
    // устанавливаем соответствующие значения ключа B выбранного мотора:
          if ((direct==0)||(direct==2))
            digitalWrite(inBpin[motor], HIGH);
          else
            digitalWrite(inBpin[motor], LOW);
    // устанавливаем ШИМ выбранного мотора
          analogWrite(pwmpin[motor], pwm);
        }
      }
    }

    Описание функции motorGo():

    • Назначение: управление мотором;
    • Синтаксис: motorGo();
    • Параметры: № мотора (0, 1), направление (CW, CCW, BRAKEVCC, BRAKEGND), ШИМ (0-255);
    • Возвращаемые значения: void;
    • Примечание: направление может быть CW - по часовой стрелке, CCW - против часовой стрелки, BRAKEVCC - остановить мотор с блокировкой, BRAKEGND - остановить мотор без блокировки.
    • Пример:
    motorGo(0, CCW, 127); // включаем мотор 1, против часовой стрелки, скорость 50%

    Описание функции motorOff():

    • Назначение: остановка мотора
    • Синтаксис: motorOff();
    • Параметры: № мотора (0, 1)
    • Возвращаемые значения: void;
    • Примечание: функция так же выставляет значение ШИМ равным нулю выбранного мотора
    • Пример:
    motorOff(1); // выключаем второй мотор

    Применение:

    Ссылки:

    Обсуждение