วันอาทิตย์ที่ 21 มิถุนายน พ.ศ. 2558

วันที่ 24 ของการฝึกงานที่ FIBO

1.ทำสเต็ปมอเตอร์ให้หมุนเร็วหมุนช้าใด้ตามใจชอบครับจากโปรแกรมเดิม
 #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);
  }  
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น