Общие сведения:
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); // выключаем второй мотор
Применение:
- Управление моторами постоянного тока
Обсуждение