Arduino Điều Khiển Động Cơ Bước

Trong bài viết này, tôi sẽ hướng dẫn các bạn điều khiển động cơ bước lưỡng cực bằng cách sử dụng Arduino UNO. Động cơ bước là một loại động cơ điện một chiều không chổi than dùng để biến đổi các tín hiệu điều khiển dưới dạng các xung điện rời rạc kế tiếp nhau thành các chuyển động góc quay, tức là trục của động cơ bước quay theo các bước rời rạc. Khi một máy tính được sử dụng để điều khiển các bước này, chúng ta có thể điều khiển chính xác vị trí và tốc độ của động cơ bước.

Bạn đang xem: Arduino điều khiển động cơ bước

Do tính chất rời rạc này của chuyển động quay theo bước của động cơ bước, chúng thường được sử dụng trong các hệ thống tự động hóa công nghiệp, CNC, v.v., nơi yêu cầu chuyển động chính xác.


Nội dung bài viết

Sơ đồ mạch điều khiển động cơ bước dùng Arduino

Giới thiệu về động cơ bước

Như đã đề cập trước đó, động cơ bước là một loại động cơ DC quay theo các bước rời rạc. Do thiết kế độc đáo của chúng mà động cơ bước có thể được điều khiển để định vị chính xác mà không cần bất kỳ phản hồi nào.

Một động cơ bước điển hình có nhiều cuộn dây được chia thành các pha. Khi các pha được cấp điện theo thứ tự, rotor của động cơ bước sẽ quay theo từng bước.

*

Hình 2: Các loại động cơ bước.

Chúng ta sẽ không đi vào chi tiết các loại động cơ bước nhưng điều quan trọng là phải xác định xem động cơ bước mà chúng ta sử dụng là động cơ lưỡng cực hay đơn cực. Điều này quan trọng là bởi vì phương pháp điều khiển cho mỗi động cơ bước này là khác nhau.

Ví dụ, mạch điều khiển của động cơ bước đơn cực có thể được thực hiện với mạch đơn giản dùng transistor hoặc IC transistor Darlington như ULN2003A. Nhưng trong trường hợp động cơ bước lưỡng cực, chúng ta cần sử dụng bộ điều khiển kiểu cầu H như IC điều khiển động cơ L293D.

Hình ảnh dưới đây cho thấy một động cơ bước lưỡng cực (Bipolar Stepper Motor), một động cơ bước đơn cực (Unipolar Stepper Motor) 5 dây, 6 dây và 8 dây.

*
Hình 4: Mạch điều khiển động cơ bước dùng Arduino.

Xem thêm: Ký Sinh Ngoài Hành Tinh - Xem Phim Ký Sinh Trùng Ngoài Hành Tinh Hd

Hoạt động của mạch

Động cơ bước được sử dụng trong bài hướng dẫn này là loại động cơ bước lai nam châm vĩnh cửu (Permanent Magnet Hybrid). Vì là động cơ lưỡng cực nên chỉ có 4 dây tương ứng với các đầu cuối của hai cuộn dây. 4 dây này được kết nối với các chân ngõ ra của IC điều khiển động cơ L293D.

Để điều khiển động cơ bước, chúng ta sẽ sử dụng một kỹ thuật được gọi là “điều khiển bước đủ – Full Step”. Động cơ được sử dụng trong bài hướng dẫn này có 200 bước đếm. Với động cơ bước kích thích một pha, tức là tại một thời điểm chỉ cấp điện cho một pha, chúng ta có thể đạt được vòng quay 200 bước bình thường với mức tiêu thụ điện năng ít nhất.

Động cơ bước được kích thích hai pha là một kỹ thuật khác trong đó hai pha được cấp điện tại cùng một thời điểm. Với kỹ thuật này, số bước không thay đổi so với kích thích một pha nhưng mô-men xoắn và tốc độ được tăng lên đáng kể. Nhược điểm của kỹ thuật này là nó đòi hỏi năng lượng gấp đôi.

Hình ảnh sau đây cho thấy hoạt động của động cơ bước với 4 bước/1 vòng quay, sử dụng phương pháp kích thích một pha và hai pha.

*

Hình 6: Điều khiển nửa bước.

Như đã đề cập trước đó, góc bước của động cơ được sử dụng trong bài hướng dẫn này là 1,80, tức là động cơ cần 200 bước để quay hết một vòng. Để tăng độ phân giải (gấp đôi độ phân giải), chúng ta sẽ sử dụng phương pháp điều khiển nửa bước và vì vậy cần 400 bước để quay được 1 vòng.

Chúng ta sẽ sử dụng serial monitor để kiểm soát hoạt động quay của động cơ. Trong chương trình, ký hiệu ‘+’ được sử dụng để cho biết động cơ bước quay theo chiều kim đồng hồ, và ngược lại, khi động cơ quay ngược chiều kim đồng hồ, dấu ‘-’ sẽ được sử dụng.

Sau khi chọn hướng, chúng ta có thể nhập trực tiếp số bước bất kỳ từ 1 đến 400.

Chương trình

const int out1 = 4;

const int out2 = 3;

const int out3 = 5;

const int out4 = 2;

int i=0;

int negative=0;

int positive=0;

char temp_print=0;

char temp_print1=0;

int led=13;

void setup()

{

pinMode(out1, OUTPUT);

pinMode(out2, OUTPUT);

pinMode(out3, OUTPUT);

pinMode(out4, OUTPUT);

pinMode(led,OUTPUT);

digitalWrite(out1,LOW);

digitalWrite(out2,LOW);

digitalWrite(out3,LOW);

digitalWrite(out4,LOW);

digitalWrite(led,LOW);

Serial.begin(9600);

 }

void loop()

{

if(temp_print1==1)

{

Serial.println(“.”);

delay(1000);

Serial.println(“.”);

delay(1000);

Serial.println(“.”);

delay(1000);

Serial.println(“.”);

delay(1000);

Serial.println(“.”);

delay(1000);

Serial.println(“.”);

delay(1000);

Serial.println(“.”);

Serial.println(“Hoan tat hieu chinh……”);

Serial.println(“Dong co buoc san sang”);

temp_print1=temp_print1+1;

}

if(temp_print==0)

{

Serial.println(“Nhap HUONG va BUOC de hieu chinh”);

temp_print=temp_print+1;

temp_print1=temp_print1+1;

}

abc:

Serial.print(“Chieu quay = “);

while(Serial.available()==false);

char temp = Serial.read();

if(temp==’+’)

{

Serial.println(temp);

Serial.print(“So buoc = “);

while(Serial.available()==false)

{

digitalWrite(led,HIGH);

delay(50);

digitalWrite(led,LOW);

delay(50);

}

int val = Serial.parseInt();

Serial.println(val);

if(val>=0 && val0;a–)

{

if(negative==1)

{

if(i==7)

i=0;

else

a=a+1;

i=i+1;

negative=0;

}

positive=1;

if(i==0) { digitalWrite(out1,HIGH);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(60); }

else if(i==1) { digitalWrite(out1,HIGH);digitalWrite(out2,HIGH);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(60); }

else if(i==2) { digitalWrite(out1,LOW);digitalWrite(out2,HIGH);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(60); }

else if(i==3) { digitalWrite(out1,LOW);digitalWrite(out2,HIGH);digitalWrite(out3,HIGH);digitalWrite(out4,LOW);delay(60); }

else if(i==4) { digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,HIGH);digitalWrite(out4,LOW);delay(60); }

else if(i==5) { digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,HIGH);digitalWrite(out4,HIGH);delay(60); }

else if(i==6) { digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,HIGH);delay(60); }

else if(i==7) { digitalWrite(out1,HIGH);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,HIGH);delay(60); }

if(i==7)

{i=0;continue;}

i++;

}

}

else

{

goto abc;

}

digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(50); 

val=0;

}

else if(temp==’-‘)

{

Serial.println(temp);

Serial.print(“So buoc = “);

while(Serial.available()==false)

{

digitalWrite(led,HIGH);

delay(50);

digitalWrite(led,LOW);

delay(50);

}

int val = Serial.parseInt();

Serial.println(val);

if(val>=0 && val0;a–)

{

 

if(positive==1)

{

i=i-1;

positive=0;

a=a+1;

}

negative=1;

if(i==0) { digitalWrite(out1,HIGH);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(60); }

else if(i==1) { digitalWrite(out1,HIGH);digitalWrite(out2,HIGH);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(60); }

else if(i==2) { digitalWrite(out1,LOW);digitalWrite(out2,HIGH);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(60); }

else if(i==3) { digitalWrite(out1,LOW);digitalWrite(out2,HIGH);digitalWrite(out3,HIGH);digitalWrite(out4,LOW);delay(60); }

else if(i==4) { digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,HIGH);digitalWrite(out4,LOW);delay(60); }

else if(i==5) { digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,HIGH);digitalWrite(out4,HIGH);delay(60); }

else if(i==6) { digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,HIGH);delay(60); }

else if(i==7) { digitalWrite(out1,HIGH);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,HIGH);delay(60); }

if(i==0)

{i=7;continue;}

i–;

}

}

else

{

goto abc;

}

digitalWrite(out1,LOW);digitalWrite(out2,LOW);digitalWrite(out3,LOW);digitalWrite(out4,LOW);delay(50); 

val=0;

}

else

goto abc;

}

Ứng dụng

Bài viết cho thấy hoạt động của động cơ bước và điều khiển động cơ bước bằng Arduino. Động cơ bước thường được sử dụng trong robot, máy CNC, tự động hóa công nghiệp, các thiết bị nhỏ như máy in, v.v.Do độ chính xác cao và mô-men xoắn lớn, động cơ bước được sử dụng ở những nơi cần điều khiển chính xác.