Mục lục bài viết

1. Giới thiệu DC motor

Motor (động cơ) là thiết bị biến điện năng thành chuyển động quay. DC motor là loại đơn giản, thường dùng trong các mô hình điều khiển bằng vi điều khiển.

DC motor

DC motor thông dụng thường là loại chổi than. Cấp điện áp phù hợp vào hai đầu, motor sẽ quay liên tục. Đảo cực nguồn thì motor quay ngược lại. Tốc độ quay phụ thuộc chủ yếu vào điện áp trung bình đặt lên motor và tải.

2. Thiết kế mạch điều khiển DC motor với board mạch Arduino

Mạch gồm Arduino, DC motor, biến trở để chỉnh tốc độ và một mạch khuếch đại dòng (transistor, MOSFET hoặc driver L298N, L9110S).

Chân Arduino chỉ nên cấp dòng khoảng 20 mA (giới hạn tuyệt đối 40 mA), còn motor cần hàng trăm mA. Vì vậy không nối motor trực tiếp vào chân Arduino.

Chân PWM (~3, ~5, ~6, ~9, ~10, ~11 trên Uno) chỉ xuất tín hiệu điều khiển. Motor lấy điện từ nguồn riêng, GND nối chung với Arduino.

Sơ đồ mạch DC motor với Arduino

Lưu ý: Sơ đồ trên nối motor thẳng vào chân 9, chỉ dùng để mô phỏng. Mạch thật có thể dùng TIP120: chân 9 qua điện trở 1kΩ vào cực B, motor nối giữa nguồn (+) và cực C, cực E nối GND. Mắc diode 1N4007 song song ngược với motor (vạch hướng về nguồn +). MOSFET logic-level sẽ ít nóng hơn TIP120.

Có thể dùng thêm biến trở để điều khiển tốc độ quay của DC motor.

Hiểu về biến trở

Biến trở

Biến trở là điện trở có thể thay đổi trị số. Arduino không đọc điện trở mà đọc điện áp do biến trở tạo ra.

Cấu tạo biến trở

Phần màu cam là lớp điện trở. Cây kim màu xanh dương là con chạy, luôn tiếp xúc với lớp điện trở này.

Hai chân ngoài nối 5V và GND, chân giữa nối con chạy và vào chân A0. Con chạy chia biến trở thành mạch phân áp, nên điện áp chân giữa thay đổi từ 0V đến 5V tùy vị trí con chạy.

3. Chương trình điều khiển tốc độ quay của DC motor với biến trở

analogRead(A0) trả về giá trị 0–1023, tương ứng 0–5V.

analogWrite() nhận giá trị 0–255, tương ứng độ rộng xung 0–100%. Xung càng rộng, motor quay càng nhanh. Nếu xung quá hẹp, motor có thể chỉ kêu ù mà không quay, đây là hiện tượng bình thường.

Dùng map() để đổi giá trị biến trở (0–1023) sang giá trị PWM (0–255).

int motor = 9;//Chân PWM điều khiển transistor/driver của motor
int rv = A0;//Chân kết nối biến trở với Arduino
void setup(){
  pinMode(motor, OUTPUT);//Khai báo chân motor sẽ là ngõ ra
}
void loop(){
  int value = analogRead(rv);//Đọc giá trị điện áp từ biến trở
  int motor_speed = map(value,0,1023,0,255);//chuyển thang đo của value từ 0-1023 sang 0-255
  analogWrite(motor, motor_speed);//Gán tốc độ quay của motor dựa vào giá trị biến trở
}
Kết quả
Tác giả

HV Lee

500+ bài viết về lập trình, phần cứng, mạng máy tính và công nghệ. Chia sẻ kiến thức từ những gì đã học, đã dạy và đã trải nghiệm — để người học CNTT hiểu sâu hơn và làm được nhiều hơn.

Gợi ý tiếp theo

Lập trình điều khiển Servo motor với board mạch Arduino

Học tiếp