Код товара: RDKT0324
Плата расширения RA078. Шилд мощных (до 30 Ампер) мостовых драйверов электродвигателей VNH2SP30
Бренд: DIY
|
Обратите внимание на близкий |
|
Радиоконструктор RP241. Драйвер шагового двигателя |
Monster Moto Shield VNH2SP30 - это усиленная версия Arduino motor shield.
Для увеличения мощности H-мост был заменен с L298 на два полномостовых драйвера VNH2SP30.
Monster Moto Shield VNH2SP30 может управлять двумя высокотоковыми моторами. Питания VIN и выходы имеют утолщенную контактную поверхность, на случай пайки толстых проводов. При использовании платы следует следить за температурным режимом, так как при протекании больших токов плата может весьма существенно нагреваться и даже может требовать принудительного охлаждения.
Характеристики:
максимальное напряжение: 16В (до 40В в пиках); максимальный ток: 14А (пиковый до 30А);
токовый датчик доступен на аналоговом выводе Arduino;
максимальная частота управляющего сигнала ШИМ: 20 кГц;
защита от перегрева;
защита от слишком слабого и слишком большого напряжения.
Рассмотрим использование Monster Moto Shield VNH2SP30 с платой Arduino.
Нам потребуются следующие детали:
Плата Arduino Uno с USB-кабелем;
Monster Motor Shield VNH2SP30;
2 двигателя постоянного тока 12 В;
Блок питания 5.5 - 16 Вольт;
Провода.
Схема использования пинов Monster Motor Shield VNH2SP30
Назначение пинов в схеме:
A0: включение (1) / выключение (0) двигателя 1;A1: включение (1) / выключение (0) двигателя 2;
A2: датчик тока для двигателя 1;
A3: датчик тока для двигателя 2;
D7: движение по часовой стрелке (CW) для 1 двигателя;
D8: движение против часовой стрелки (CСW) для двигателя 1;
D4: движение по часовой стрелке (CW) для 2 двигателя;
D9: движение против часовой стрелки (CСW) для двигателя 2;
D5: ШИМ для двигателя 1;
D6: ШИМ для двигателя 2.
И таблица необходимых значений на выводах Arduino для запуска двигателей
Подключаем двигатель 1 к клеммам A1:B1, а двигатель 1 к клеммам A2:B2.
Подключаем блок питания к клеммам питания на Monster Moto Shield.
Загрузим на плату Arduino следующий скетч:
// Константы
#define BRAKE 0
#define CW 1
#define CCW 2
#define CS_THRESHOLD 15 //безопасное значение тока
//MOTOR 1
#define MOTOR_A1_PIN 7
#define MOTOR_B1_PIN 8
//MOTOR 2
#define MOTOR_A2_PIN 4
#define MOTOR_B2_PIN 9
#define PWM_MOTOR_1 5
#define PWM_MOTOR_2 6
#define CURRENT_SEN_1 A2
#define CURRENT_SEN_2 A3
#define EN_PIN_1 A0
#define EN_PIN_2 A1
#define MOTOR_1 0
#define MOTOR_2 1
short usSpeed = 150; // пользовательское значение скорости
unsigned short usMotor_Status = BRAKE;
void setup()
{
pinMode(MOTOR_A1_PIN, OUTPUT);
pinMode(MOTOR_B1_PIN, OUTPUT);
pinMode(MOTOR_A2_PIN, OUTPUT);
pinMode(MOTOR_B2_PIN, OUTPUT);
pinMode(PWM_MOTOR_1, OUTPUT);
pinMode(PWM_MOTOR_2, OUTPUT);
pinMode(CURRENT_SEN_1, OUTPUT);
pinMode(CURRENT_SEN_2, OUTPUT);
pinMode(EN_PIN_1, OUTPUT);
pinMode(EN_PIN_2, OUTPUT);
Serial.begin(9600); // запуск последовательного порта
Serial.println("Begin motor control");
Serial.println();
// Пункты меню для пользователя
Serial.println("Enter number for control option:");
Serial.println("1. STOP");
Serial.println("2. FORWARD");
Serial.println("3. REVERSE");
Serial.println("4. READ CURRENT");
Serial.println("+. INCREASE SPEED");
Serial.println("-. DECREASE SPEED");
Serial.println();
}
void loop()
{
char user_input;
while(Serial.available())
{
user_input = Serial.read();
// Чтение для определения выбора пользователем
// пункта меню
digitalWrite(EN_PIN_1, HIGH);
digitalWrite(EN_PIN_2, HIGH);
if (user_input =="1")
{
Stop();
}
else if(user_input =="2")
{
Forward();
}
else if(user_input =="3")
{
Reverse();
}
else if(user_input =="+")
{
IncreaseSpeed();
}
else if(user_input =="-")
{
DecreaseSpeed();
}
else
{
Serial.println("Invalid option entered.");
}
}
}
void Stop()
{
Serial.println("Stop");
usMotor_Status = BRAKE;
motorGo(MOTOR_1, usMotor_Status, 0);
motorGo(MOTOR_2, usMotor_Status, 0);
}
void Forward()
{
Serial.println("Forward");
usMotor_Status = CW;
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void Reverse()
{
Serial.println("Reverse");
usMotor_Status = CCW;
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void IncreaseSpeed()
{
usSpeed = usSpeed + 10;
if(usSpeed > 255)
{
usSpeed = 255;
}
Serial.print("Speed +: ");
Serial.println(usSpeed);
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
void DecreaseSpeed()
{
usSpeed = usSpeed - 10;
if(usSpeed < 0)
{
usSpeed = 0;
}
Serial.print("Speed -: ");
Serial.println(usSpeed);
motorGo(MOTOR_1, usMotor_Status, usSpeed);
motorGo(MOTOR_2, usMotor_Status, usSpeed);
}
// Функция установки
// motor(0 ou 1) - выбор двигателя
// direction (cw ou ccw) - направление
// pwm (entra 0 e 255 - значение скорости
{
if(motor == MOTOR_1)
{
if(direct == CW)
{
digitalWrite(MOTOR_A1_PIN, LOW);
digitalWrite(MOTOR_B1_PIN, HIGH);
}
else if(direct == CCW)
{
digitalWrite(MOTOR_A1_PIN, HIGH);
digitalWrite(MOTOR_B1_PIN, LOW);
}
else
{
digitalWrite(MOTOR_A1_PIN, LOW);
digitalWrite(MOTOR_B1_PIN, LOW);
}
analogWrite(PWM_MOTOR_1, pwm);
}
else if(motor == MOTOR_2)
{
if(direct == CW)
{
digitalWrite(MOTOR_A2_PIN, LOW);
digitalWrite(MOTOR_B2_PIN, HIGH);
}
else if(direct == CCW)
{
digitalWrite(MOTOR_A2_PIN, HIGH);
digitalWrite(MOTOR_B2_PIN, LOW);
}
else
{
digitalWrite(MOTOR_A2_PIN, LOW);
digitalWrite(MOTOR_B2_PIN, LOW);
}
analogWrite(PWM_MOTOR_2, pwm);
}
}
В мониторе последовательного порта выбираем необходимый пункт меню:
При выборе пунктов 2 или 3, можем регулировать пунктами + и - скорость вращения двигателей.
------------------
КВЛЕ0324:640
Купившие этот товар также заказали: |