#define EN 8
#define X_DIR 5
#define X_STP 2
void step (boolean dir, byte dirPin, byte stepperPin, int steps)
{
digitalWrite (dirPin, dir);
delay (50);
for (int i = 0; i <steps; i++)
{
digitalWrite (stepperPin, HIGH);
delayMicroseconds (1000);
digitalWrite (stepperPin, LOW);
delayMicroseconds (1000);
}
}
void setup ()
{
pinMode (X_DIR, OUTPUT);
pinMode (X_STP, OUTPUT);
pinMode (EN, OUTPUT);
digitalWrite (EN, LOW);
}
void loop ()
{
step (false, X_DIR, X_STP, 200);
delay (1000);
}
จะเห็นว่ามีการใช้ delayMicroseconds (1000);
มี 2 delay ในการหมุนหนึ่งสเต็บ ถ้าต้องการให้หมุนหนึ่งรองเราต้องใช้ 200 สเต็ปจึงจะได้หนึ่งรอบถ้าต้งการใจะคำนวณหาความเร็วรอบของสเต็ปมมอเตอร์
เราต้องนำค่า delay มาจะได้ 0.002 s/stp ,200 สเต็ป,เวลา 1 นาธี = 60 s
จะได้ 0.002*200 = 0.4 s/rev
ดังนั้น 60/0.4 = 150 rev/s
ผมจึงทำงานซุ่มหาค่าที่เร็วที่สุด คือ 300 rev/s และความเร็วต่ำสุดคือ 100 rev/s
ฉนั้น เราจึงนำค่าความเร็ว สูงสุด มาคูณกับค่า delay จะได้ 300*500 = 150000
แล้วนำค่า 150000 มาหารด้วยค่า RPM จะได้ delay เป็น delayMicroseconds (150000/RPM);
โปรแกรมที่เส็ดแล้วคือ
#define EN 8
#define X_DIR 5
#define X_STP 2
void step (boolean dir, byte dirPin, byte stepperPin, int steps, int RPM)
{
digitalWrite (dirPin, dir);
for (int i = 0; i <steps; i++)
{
digitalWrite (stepperPin, HIGH);
delayMicroseconds (150000/RPM);
digitalWrite (stepperPin, LOW);
delayMicroseconds (150000/RPM);
}
}
void setup ()
{
pinMode (X_DIR, OUTPUT);
pinMode (X_STP, OUTPUT);
pinMode (EN, OUTPUT);
digitalWrite (EN, LOW);
}
void loop ()
{
for (int RPM = 100; RPM <=300; RPM++) //หมุนากค่าต่ำสุดคือ 100 รอบ/นาที
{
step (false, X_DIR, X_STP, 10, RPM);
}
for (int RPM = 300; RPM >=100; RPM--) //หมุนากค่าต่ำสุดคือ 300 รอบ/นาที
{
step (false, X_DIR, X_STP, 10, RPM);
}
}
จะเห็นว่ามีการใช้ delayMicroseconds (1000);
มี 2 delay ในการหมุนหนึ่งสเต็บ ถ้าต้องการให้หมุนหนึ่งรองเราต้องใช้ 200 สเต็ปจึงจะได้หนึ่งรอบถ้าต้งการใจะคำนวณหาความเร็วรอบของสเต็ปมมอเตอร์
เราต้องนำค่า delay มาจะได้ 0.002 s/stp ,200 สเต็ป,เวลา 1 นาธี = 60 s
จะได้ 0.002*200 = 0.4 s/rev
ดังนั้น 60/0.4 = 150 rev/s
ผมจึงทำงานซุ่มหาค่าที่เร็วที่สุด คือ 300 rev/s และความเร็วต่ำสุดคือ 100 rev/s
ฉนั้น เราจึงนำค่าความเร็ว สูงสุด มาคูณกับค่า delay จะได้ 300*500 = 150000
แล้วนำค่า 150000 มาหารด้วยค่า RPM จะได้ delay เป็น delayMicroseconds (150000/RPM);
โปรแกรมที่เส็ดแล้วคือ
#define EN 8
#define X_DIR 5
#define X_STP 2
void step (boolean dir, byte dirPin, byte stepperPin, int steps, int RPM)
{
digitalWrite (dirPin, dir);
for (int i = 0; i <steps; i++)
{
digitalWrite (stepperPin, HIGH);
delayMicroseconds (150000/RPM);
digitalWrite (stepperPin, LOW);
delayMicroseconds (150000/RPM);
}
}
void setup ()
{
pinMode (X_DIR, OUTPUT);
pinMode (X_STP, OUTPUT);
pinMode (EN, OUTPUT);
digitalWrite (EN, LOW);
}
void loop ()
{
for (int RPM = 100; RPM <=300; RPM++) //หมุนากค่าต่ำสุดคือ 100 รอบ/นาที
{
step (false, X_DIR, X_STP, 10, RPM);
}
for (int RPM = 300; RPM >=100; RPM--) //หมุนากค่าต่ำสุดคือ 300 รอบ/นาที
{
step (false, X_DIR, X_STP, 10, RPM);
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น