Bài viết này cũng nói về driver A4988 nhưng mình muốn nói về A4988 điều khiển các động cơ bước của máy CNC và máy in 3D.
Khi ta làm máy in 3D và CNC thường chúng ta sẽ đưa A4988 vào board trung gian RAMPS, Melzi, Generation,,.. để liên kết tín hiệu với Arduino nhưng chúng ta sẽ tìm hiểu điều khiển thô sơ hơn một chút.
Ta thấy máy in 3D, CNC có 3 trục X,Y,Z gắn với ít nhất 3 động cơ bước cần điều khiển vì thế chúng ta sẽ cần đến 3 module driver A4988 trong trường hợp này (có thể nhiều trường hợp sẽ nhiều hơn 3, thì chỉ cần thay dổi một chút nhé)
Nếu chúng ta tiếp tục làm máy in 3D thì cần thêm bộ gá động cơ, vòng bi, vít me, trục, công tắc hành trình, bàn in,… nhưng hôm nay mình chỉ nói về điều khiển động cơ bước với A4988 thôi
Nhưng có cái này anh em đừng quên nhé đó là đế tản nhiệt. còn nếu chúng ta sử dụng cảm biến nhiệt thì vẫn cần đó nhé.
Phần lắp đặt cũng đơn giản
– Chân DIR của A4988 trục X vào chân 5 Arduino
– Chân STEP của A4988 trục X vào chân 2 Arduino
– Chân DIR của A4988 trục Y vào chân 6 Arduino
– Chân STEP của A4988 trục Y vào chân 3 Arduino
– Chân DIR của A4988 trục Z vào chân 7 Arduino
– Chân STEP của A4988 trục Z vào chân 4 Arduino
Còn phần nguồn thì vẫn đấu như bình thường.
Sang phần code
Phần code vẫn đầy đủ quay theo chiều kim đồng hồ, và ngược chiều kim đồng hồ nữa.
const int dirx = 5;
const int steprx = 2;
const int diry = 6;
const int stepry = 3;
const int dirz = 7;
const int steprz = 4;
long steprvula = 1000; //200*16
int delaystep = 1000;
void setup() {
// cài đặt đầu ra cho các chân Arduino
pinMode(dirx, OUTPUT);
pinMode(steprx, OUTPUT);
pinMode(diry, OUTPUT);
pinMode(stepry, OUTPUT);
pinMode(dirz, OUTPUT);
pinMode(steprz, OUTPUT);
pinMode(8, OUTPUT);
digitalWrite(8,LOW);
}
void loop()
{
//Quay theo chiều kim đồng hồ
/*digitalWrite(dirx, HIGH);
// Động cơ quay
for(long x = 0; x < steprvula; x++)
{
digitalWrite(steprx, HIGH);
delayMicroseconds(delaystep);
digitalWrite(steprx, LOW);
delayMicroseconds(delaystep);
}
delay(1000); // Wait a second
//quay ngược chiều kim đồng hồ
digitalWrite(dirx, LOW);
// Động cơ quay chậm
for(long x = 0; x < steprvula; x++)
{
digitalWrite(steprx, HIGH);
delayMicroseconds(delaystep);
digitalWrite(steprx, LOW);
delayMicroseconds(delaystep);
}
delay(1000); // Wait a second
digitalWrite(diry, HIGH);
// Động cơ bắt đầu quay
for(long x = 0; x < steprvula; x++)
{
digitalWrite(stepry, HIGH);
delayMicroseconds(delaystep);
digitalWrite(stepry, LOW);
delayMicroseconds(delaystep);
}
delay(1000); // Wait a second
*/
//quay ngược chiều kim đồng hồ
digitalWrite(dirz, LOW);
// Động cơ quay
for(long x = 0; x < steprvula; x++)
{
digitalWrite(steprz, HIGH);
delayMicroseconds(delaystep);
digitalWrite(steprz, LOW);
delayMicroseconds(delaystep);
}
delay(1000); // Wait a second
digitalWrite(dirz, HIGH);
// Spin motor
for(long x = 0; x < steprvula; x++)
{
digitalWrite(steprz, HIGH);
delayMicroseconds(delaystep);
digitalWrite(steprz, LOW);
delayMicroseconds(delaystep);
}
delay(1000); // Wait a second
}