DC Motor Speed Control Using Arduino & PWM (Điều khiển tốc độ động cơ Arduino PWM).
Điều khiển tốc độ động cơ DC bằng Arduino & PWM
Điều khiển tốc độ động cơ DC với Giao diện PC là một dự án DIY dễ dàng. Trong dự án này, tốc độ của động cơ DC được điều khiển bằng cách gửi lệnh qua PC. Arduino được kết nối trực tiếp với PC thông qua cáp USB và lệnh được đưa cho Arduino trên màn hình nối tiếp của Arduino IDE.
Động cơ được kết nối với một bóng bán dẫn và đế của bóng bán dẫn được kết nối với chân PWM của Arduino và tốc độ động cơ thay đổi tùy theo tín hiệu PWM đến từ Arduino.
Điều khiển động cơ DC Arduino - Hoạt động
Arduino được kết nối với PC thông qua cáp USB. Chúng ta có thể gửi lệnh tới PC trên màn hình nối tiếp. Chúng ta có thể thay đổi tốc độ của động cơ từ 0 đến 9. Khi 0 được gửi qua Màn hình nối tiếp, động cơ sẽ chạy ở tốc độ tối thiểu (đó là 0). Khi thay đổi tốc độ từ 1 đến 9, tốc độ tăng lên, với giá trị 9 được đặt là tốc độ lớn nhất của động cơ.
Công nghệ bộ điều khiển động cơ DC PWM được sử dụng để điều khiển tốc độ. Trong PWM, Arduino gửi một sóng xung tương tự như chế độ ổn định của IC hẹn giờ 555.
Điều khiển tốc độ PWM (Điều chế độ rộng xung)
Vi điều khiển và Arduino là các thiết bị kỹ thuật số; chúng không thể đưa ra đầu ra tương tự. Bộ vi điều khiển cho Zero và ONE làm đầu ra, trong đó ZERO là THẤP hợp lý và MỘT là CAO hợp lý. Trong trường hợp của chúng tôi, chúng tôi đang sử dụng phiên bản 5 vôn của Arduino. Vì vậy, ZERO logic là điện áp 0 và HIGH logic là 5 điện áp.
Đầu ra kỹ thuật số tốt cho các thiết bị kỹ thuật số nhưng đôi khi chúng ta cần đầu ra tương tự. Trong trường hợp này, PWM rất hữu ích. Trong PWM, tín hiệu đầu ra chuyển đổi giữa 0 và 1, ở tần số cao và cố định, như thể hiện trong hình bên dưới.
Như trong hình trên, thời gian BẬT là “Ton” và thời gian TẮT là “Toff”. T là tổng của “Ton” và “Toff” được gọi là Khoảng thời gian. Theo khái niệm của PWM, “T” không thay đổi và “Ton” và “Toff” có thể khác nhau, theo cách này khi “Ton” tăng “Toff” sẽ giảm và “Toff” tăng khi “Ton” giảm tương ứng.
Chu kỳ nhiệm vụ là một phần của một Khoảng thời gian. Chu kỳ nhiệm vụ thường được biểu thị dưới dạng phần trăm hoặc tỷ lệ. Khoảng thời gian là khoảng thời gian cần thiết để một tín hiệu hoàn thành một chu kỳ bật và tắt. Theo một công thức, một chu kỳ nhiệm vụ có thể được biểu thị như sau:
DUTY CYCLE = (Tấn ÷ T) x100%
Giờ đây, tốc độ của động cơ thay đổi theo chu kỳ làm việc. Giả sử nhiệm vụ bằng 0, động cơ không chạy và khi chu kỳ làm việc là 100%, động cơ chuyển động trên RPM tối đa. Nhưng khái niệm này không phải lúc nào cũng đúng bởi vì động cơ bắt đầu chạy sau khi cung cấp một số điện áp cố định được gọi là điện áp ngưỡng.
Bóng bán dẫn (2N2222)
Bộ vi điều khiển và Arduino có thể xử lý tín hiệu và tiêu thụ dòng điện gần 20 đến 40mA nhưng động cơ cần dòng điện và điện áp cao, vì vậy chúng tôi đang sử dụng bóng bán dẫn để điều khiển động cơ. Bóng bán dẫn được mắc nối tiếp với động cơ và đế của bóng bán dẫn được kết nối với chân PWM của Arduino thông qua một điện trở. Tín hiệu PWM đến từ Arduino và bóng bán dẫn hoạt động như một công tắc và nó làm ngắn mạch Bộ phát (E) và Bộ thu (C) khi tín hiệu PWM ở trạng thái Cao và thường mở khi tín hiệu PWM ở trạng thái THẤP. Quá trình này hoạt động liên tục và các động cơ chạy ở tốc độ mong muốn.
Các thành phần
Thành phần Đặc điểm kỹ thuật Số lượng
Arduino Nano 1
Động cơ DC Công suất thấp 1
Bóng bán dẫn 2N222 1
Bộ đổi nguồn 12 Volts 1
Kháng cự 1K 1
Diode 1N4004 1
Cáp USB cho Arduino Nano 1
Điều khiển động cơ DC Arduino - Mạch
Sơ đồ mạch được hiển thị trong hình dưới đây. Nếu bạn đang chế tạo mạch này trên PCB cho mục đích chung (ZERO PCB) hoặc breadboard, thì con số này rất hữu ích.
Điều khiển động cơ DC Arduino - Mạch
Sơ đồ mạch được hiển thị trong hình dưới đây. Nếu bạn đang chế tạo mạch này trên PCB cho mục đích chung (ZERO PCB) hoặc breadboard, thì con số này rất hữu ích.
Điều khiển tốc độ động cơ DC - Chương trình tải xuống
Tải xuống chương trình / mã
int out1 = 9; int val; void setup() { Serial.begin(9600); pinMode(out1,OUTPUT); pinMode(out1,OUTPUT); } void loop() { if (Serial.available()){ val = Serial.read(); } if (val == '0') { analogWrite(out1, 0) ; Serial.println("Speed is = 0"); val = 10;} if (val == '1') {analogWrite(out1, 255); delay(10); analogWrite(out1, 175) ; Serial.println("Speed is = 1"); val = 10;} if (val == '2') {analogWrite(out1, 255); delay(10); analogWrite(out1, 185) ; Serial.println("Speed is = 2"); val = 10;} if (val == '3') {analogWrite(out1, 255); delay(10); analogWrite(out1, 195); Serial.println("Speed is = 3"); val = 10;} if (val == '4') {analogWrite(out1, 255); delay(10); analogWrite(out1, 205); Serial.println("Speed is = 4"); val = 10;} if (val == '5') {analogWrite(out1, 255); delay(10); analogWrite(out1, 215); Serial.println("Speed is = 5"); val = 10;} if (val == '6') {analogWrite(out1, 255); delay(10); analogWrite(out1, 225); Serial.println("Speed is = 6"); val = 10;} if (val == '7') {analogWrite(out1, 255); delay(10); analogWrite(out1, 235); Serial.println("Speed is = 7"); val = 10;} if (val == '8') {analogWrite(out1, 255); delay(10); analogWrite(out1, 245); Serial.println("Speed is = 8"); val = 10;} if (val == '9') {analogWrite(out1, 255); delay(10); analogWrite(out1, 255); Serial.println("Speed is = 9"); val = 10;} }
Trong phần đầu của đoạn mã, hai số nguyên được khai báo bằng tên “out1” và “val”, trong đó out1 bằng 9 cho thấy rằng chân D9 của Arduino được sử dụng làm chân đầu ra (hoặc chân PWM). Hơn nữa, dữ liệu đến từ màn hình nối tiếp được lưu trong số nguyên thứ hai “val”.
Trong giao tiếp nối tiếp void setup () được bắt đầu bằng cách sử dụng chức năng “Serial.begin (9600)” trong đó 9600 là tốc độ truyền của màn hình nối tiếp. Sau khi nó “out1” được khai báo là đầu ra vì động cơ là thiết bị đầu ra.
Trong vòng lặp void “serial.available” được sử dụng bên trong điều kiện “if”, nó trở thành đúng khi bất kỳ dữ liệu nào được gửi qua màn hình nối tiếp. Dữ liệu này được lưu trong số nguyên “val” bằng cách sử dụng hàm “Serial.read”.
Sau đó, nhiều điều kiện “nếu” được sử dụng, trong “điều kiện nếu” đầu tiên, khi ‘0’ được gửi qua màn hình nối tiếp, điều đó trở thành đúng. Trong dấu ngoặc “analogWrite (out1, 0)” được sử dụng để chạy động cơ ở giá trị PWM bằng không. Trong hàm “analogWrite (out1, 0)”, “out1” được sử dụng để chỉ ra chân mà chúng ta muốn sử dụng và “0” là giá trị PWM tại chân này. Sau đó, “Tốc độ là = 0” được hiển thị trên màn hình nối tiếp sử dụng chức năng “Serial.println”. Sau đó, số nguyên “val” được cập nhật thành 10, trong đó 10 là giá trị ngẫu nhiên, khác 0 đến 9.
Trong dòng tiếp theo nếu điều kiện được sử dụng cho “val == 1”, tại thời điểm này động cơ chạy ở giá trị PWM là 175. Các điều kiện tương tự được sử dụng cho đến 9, ở động cơ 9 chạy ở giá trị 255 PWM, 255 là giá trị PWM lớn nhất .
Quy trình
Kết nối Arduino qua USB và tải mã lên
Mở màn hình nối tiếp và đặt tốc độ truyền ở 9600
Bây giờ gõ bất kỳ số nào từ 0 đến 9.
Sau khi nhập bất kỳ giá trị nào từ 0 đến 9, tốc độ của động cơ sẽ thay đổi, nhưng chúng tôi không thể thấy tốc độ thay đổi trong video một cách chính xác, nhưng bạn có thể xem trực tiếp.