Arduino Motor Shield VNH2SP30 điều khiển 2 động cơ 30A
Mã sản phẩm: (Đang cập nhật...)
Thương hiệu: cập nhật
Còn hàng
180.000₫
Freeship đơn hàng từ 500k
Kiểm tra khi nhận hàng
Hỗ trợ khách hàng 24/7
- Thông tin sản phẩm
- Hướng dẫn
Arduino Motor Shield VNH2SP30 là một lựa chọn tối ưu mạnh mẽ thay thế cho module thông dụng L298 với 2 cầu H, module sử dụng 1 cặp IC VNH2SP30 full-bridge với khả năng tải dòng cao cho 2 motor lên đến 30A.

THÔNG SỐ KỸ THUẬT
- Dải điện áp: 5.5v-16v
- Dòng tối đa: 30A
- Dòng liên tục: 14A
- Trở kháng nội MOSFET: 19mΩ (mỗi chân)
- Tần số PWM tối đa: 20khz
- Có chân current sensor (có thể kết nối với chân analog để đo dòng)
- Bảo vệ quá dòng và quá áp
SƠ ĐỒ KẾT NỐI Arduino Motor Shield VNH2SP30 điều khiển 2 động cơ 30A

———————CODE THAM KHẢO———————-
/*
* Cắm trực tiếp Shield lên Arduino Mega/Uno.
* A1 B1 kết nối với động cơ 1.
* A2 B2 kết nối với động cơ 2.
* Cấp nguồn 5.5 - 16V cho Shield.
* Mở Serial Monitor:
* Gửi '1' dừng động cơ.
* Gửi '2' quay 2 động cơ.
* Gửi '3' đảo chiều động cơ.
* Gửi '+' tăng tốc độ động cơ.
* Gửi '-' giảm tốc độ động cơ.
*/
#define BRAKE 0
#define CW 1
#define CCW 2
#define CS_THRESHOLD 15 // Definition of safety current (Check: "1.3 Monster Shield Example").
//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; //default motor speed
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); // Initiates the serial to do the monitoring
Serial.println(); //Print function list for user selection
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(); //Read user input and trigger appropriate function
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);
}
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) //Function that controls the variables: motor(0 ou 1), direction (cw ou ccw) e 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);
}
}
Xem thêm
Thu gọn
Xin mời nhập nội dung tại đây