Mạch Cầu H 36V 15A 540W MKS H3615NS |
Mạch cầu H MKS H3615NS là trình điều khiển động cơ DC có khả năng cung cấp công suất cao lên đến 15A. Nó sử dụng logic tương tự như trình điều khiển động cơ L298, nơi bạn điều khiển trình điều khiển bằng 3 chân tín hiệu (IN1, IN2, ENABLE). Trình điều khiển động cơ này được điều khiển bởi MOSFET công suất cao, với bộ ghép quang tín hiệu điều khiển được cách ly để bảo vệ mọi sự cố về mạch điện và vòng tiếp đất. Bạn có thể điều khiển trình điều khiển này bằng cả logic 3,3V và 5V.
Thông số kỹ thuật
- Điện áp nguồn: 9 ~ 36 VDC. (Giới hạn: 6.5~27VDC).
- Mức tín hiệu điều khiển (Tương thích 3.3V/5V)
- Logic Cao (H): 2.0 ~ 5V
- Logic Thấp (L): 0 ~ 0.8V
- Dòng tín hiệu điều khiển: 3 ~ 11 mA
- Đầu ra tối đa với điện áp 5V: 500mA
- Dòng hoạt động liên tục tối đa: 15A (Có tản nhiệt)
- Xung PWM: 0.1% - 100%
- Tần số xung PWM ngõ vào: 0 ~ 100KHz
- Kích thước (Dài x Rộng x Cao): 55 x 55 x 16(mm)
Sơ đồ chân
Chức năng | Mô tả |
9~36VDC | Nguồn dương cấp cho tải |
PGND | Nguồn âm cấp cho tải |
OUT1 | Đầu ra Motor + |
OUT2 | Đầu ra Motor - |
PWM | Kích hoạt Motor/Ngõ vào điều khiển PWM |
5VO | Ngõ ra 5V |
COM | Kết nối âm chung hoặc dương chung |
Sơ đồ kết nối
Lưu ý: Cần gắn thêm cầu chì bảo vệ quá tải đầu vào và đầu ra như hình để tránh trường hợp động cơ bị chạm chập, quá tải dẫn đến quá công suất và làm cháy mạch.
Chức năng điều khiển logic
Bảng logic điều khiển động cơ (COM nối âm chung)
IN1 | IN2 | PWM | OUT1-OUT2 |
0 | 0 | X | Phanh (tắt) động cơ |
1 | 1 | X | Floating |
1 | 0 | PWM | Tiến + Điều khiển tốc độ |
0 | 1 | PWM | Lùi + Điều khiển tốc độ |
1 | 0 | 1 | Tiến tốc độ tối đa |
0 | 1 | 1 | Lùi tốc độ tối đa |
Bảng logic điều khiển động cơ (COM nối dương chung)
IN1 | IN2 | PWM | OUT1-OUT2 |
0 | 0 | X | Floating |
1 | 1 | X | Phanh (tắt) động cơ |
1 | 0 | PWM | Tiến + Điều khiển tốc độ |
0 | 1 | PWM | Lùi + Điều khiển tốc độ |
1 | 0 | 1 | Tiến tốc độ tối đa |
0 | 1 | 1 | Lùi tốc độ tối đa |
Ví dụ ứng dụng với Arduino
Điều khiển động cơ DC bằng Arduino với hai nút nhấn và biến trở
Chức năng chính:
-
Nút nhấn BT1: Bật/tắt động cơ.
-
Nút nhấn BT2: Chuyển đổi chế độ hoạt động:
- Mode 1: Động cơ quay thuận.
- Mode 2: Động cơ quay nghịch.
- Mode 3: Động cơ luân phiên quay thuận và nghịch sau mỗt khoảng thời gian.
Điều chỉnh tốc độ và thời gian:
- VR1 (biến trở): Thay đổi tốc độ quay (0-255).
- VR2 (biến trở): Thay đổi thời gian đổi chiều trong chế độ luân phiên (200ms - 10s).
Hiển thị qua Serial Monitor:
- Trạng thái động cơ (đang bật hay tắt).
- Chế độ hoạt động.
- Tốc độ quay và thời gian đổi chiều.
Thành phần cần thiết
STT | MKS-H3615NS | Số lượng |
1 | Arduino UNO | 1 |
2 | MKS-H3615NS | 1 |
3 | WH148-3P-103 Biến Trở 10 KOhm | 2 |
4 | Nút nhấn 2 chân | 2 |
Sơ đồ kết nối
MKS 3615NS | ARDUINO |
COM | GND |
IN1 | D9 |
IN2 | D8 |
PWM | D10 |
BUTTON | ARDUINO |
1 | GND |
BT1 (2) | D3 |
BT2 (2) | D4 |
VR 10Kohm | ARDUINO |
1 | GND |
3 | 5V |
VR1 (2) | A0 |
VR2 (2) | A1 |
Code
const int BT1 = 3; // Nút bật/tắt động cơ
const int BT2 = 4; // Nút chọn chế độ
const int IN1 = 9; // Điều khiển chiều 1
const int IN2 = 8; // Điều khiển chiều 2
const int PWM = 10; // Điều chỉnh tốc độ động cơ
int previousValue_VR1 = -1; // Giá trị trước đó của VR1
int previousValue_VR2 = -1; // Giá trị trước đó của VR2
unsigned long previousMillis = 0; // Biến lưu thời gian trước đó
unsigned long interval = 0; // Khoảng thời gian
bool isMotorOn = false; // Trạng thái bật/tắt động cơ
bool lastButtonState_BT1 = HIGH; // Trạng thái trước đó của BT1
bool lastButtonState_BT2 = HIGH; // Trạng thái trước đó của BT2
int mode = 1; // Chế độ hoạt động: 1, 2 hoặc 3
void setup() {
Serial.begin(9600); // Khởi động giao tiếp Serial
pinMode(BT1, INPUT_PULLUP);
pinMode(BT2, INPUT_PULLUP);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(PWM, OUTPUT);
}
void loop() {
int currentValue_VR1 = analogRead(A0); // Đọc giá trị từ chân A0
int mappedValue_VR1;
int thresholdSpeed = 4; // Ngưỡng thay đổi để xác định khi nào in giá trị
int thresholdInterval = 10; // Ngưỡng thay đổi để xác định khi nào in giá trị
// Cập nhật khoảng thời gian (interval) từ VR2
if (abs(currentValue_VR1 - previousValue_VR1) > thresholdSpeed) { // Chỉ in khi thay đổi lớn hơn ngưỡng
previousValue_VR1 = currentValue_VR1; // Cập nhật giá trị trước đó
mappedValue_VR1 = map(currentValue_VR1, 0, 1023, 0, 255); // Chuyển đổi giá trị VR1
Serial.print("Speed: ");
Serial.println(mappedValue_VR1); // In giá trị interval ra Serial
}
int currentValue_VR2 = analogRead(A1); // Đọc giá trị từ chân A1
int mappedValue_VR2;
// Kiểm tra trạng thái nút bật/tắt động cơ
bool buttonState_BT1 = digitalRead(BT1);
if (buttonState_BT1 == LOW && lastButtonState_BT1 == HIGH) { // Phát hiện nút nhấn BT1
isMotorOn = !isMotorOn; // Đổi trạng thái bật/tắt động cơ
Serial.println(isMotorOn ? "Motor ON" : "Motor OFF");
delay(50); // Chống dội phím
}
lastButtonState_BT1 = buttonState_BT1; // Cập nhật trạng thái BT1
// Kiểm tra trạng thái nút chọn chế độ
bool buttonState_BT2 = digitalRead(BT2);
if (buttonState_BT2 == LOW && lastButtonState_BT2 == HIGH) { // Phát hiện nút nhấn BT2
mode = (mode % 3) + 1; // Chuyển sang chế độ tiếp theo (1 -> 2 -> 3 -> 1)
// Hiển thị chế độ hiện tại
switch (mode) {
case 1:
Serial.println("Mode 1: Quay thuan"); // In chế độ quay thuận
break;
case 2:
Serial.println("Mode 2: Quay nghich"); // In chế độ quay nghịch
break;
case 3:
Serial.println("Mode 3: Quay thuan & nghich"); // In chế độ quay thuận và nghịch
break;
default:
Serial.println("Unknown Mode"); // Dự phòng lỗi (không nên xảy ra)
break;
}
delay(50); // Chống dội phím
}
lastButtonState_BT2 = buttonState_BT2; // Cập nhật trạng thái BT2
// Nếu động cơ đang bật
if (isMotorOn) {
// Cập nhật khoảng thời gian (interval) từ VR2
if (abs(currentValue_VR2 - previousValue_VR2) > thresholdInterval) {
previousValue_VR2 = currentValue_VR2; // Cập nhật giá trị trước đó
mappedValue_VR2 = map(currentValue_VR2, 0, 1023, 200, 10000); // Chuyển đổi giá trị
interval = mappedValue_VR2;
Serial.print("Interval: ");
Serial.println(mappedValue_VR2); // In giá trị interval ra Serial
}
// Thực hiện hành động dựa trên chế độ
if (mode == 1) {
Motor_Forward(mappedValue_VR1); // Chỉ quay thuận
} else if (mode == 2) {
Motor_Backward(mappedValue_VR1); // Chỉ quay nghịch
} else if (mode == 3) {
unsigned long currentMillis = millis(); // Đọc thời gian hiện tại
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Cập nhật thời gian trước đó
static bool isForward = true; // Biến lưu trạng thái quay
if (isForward) {
Motor_Forward(mappedValue_VR1); // Quay thuận
} else {
Motor_Backward(mappedValue_VR1); // Quay nghịch
}
isForward = !isForward; // Đổi chiều quay
}
}
} else {
Motor_Brake(); // Nếu động cơ tắt, dừng motor
}
}
void Motor_Forward(int Speed) {
digitalWrite(IN1, HIGH); // Bật IN1
digitalWrite(IN2, LOW); // Tắt IN2
analogWrite(PWM, Speed); // Điều chỉnh tốc độ motor
}
void Motor_Backward(int Speed) {
digitalWrite(IN1, LOW); // Tắt IN1
digitalWrite(IN2, HIGH); // Bật IN2
analogWrite(PWM, Speed); // Điều chỉnh tốc độ motor
}
void Motor_Brake() {
digitalWrite(IN1, LOW); // Tắt IN1
digitalWrite(IN2, LOW); // Tắt IN2
}
Bạn nên chú ý hai động cơ DC quay tiến và lùi với hành động phanh.
Nhận xét