stering motor bipola avr


บทนำ

พอดีว่าอยากทำ cnc จะใช้ AC servo motor ที่เป็นเพ้าเทรน แต่ว่างบไม่ถึง เลยทำเป็น step motor ไปก่อน โดยใช้ step motor แบบ ไบโพล่า(มี2ขดลวด จ่ายไฟสลับไปมาถึงจะหมุน) แล้วใช้ได้ L297+L298 ในการขับสเต๊บ แบบเพาส์ ไดเรกชั้น

หลักการ

ในที่นี้จะใช้ ATMEGA 8 ในการจ่ายเพ้าส โดยเลือกไปที่โหมด Phase and Frequency Correct PWM และเปิดใช้ อินเตอร์รับ PWM ช่วยในการนับลูกครื่นที่จ่ายออกไป แล้วสั่งหยุดทามเมอร์ รับค่าโดยซีเรี่ยวโปรโตคอลเดียวกับที่ใช้มอเตออร์ Robotis เอาของเก่ามา อิอิอิ

อุปกรณ์

  1.step motor bipola
  2.บอดได้ l297+l298
  3.บอด ATMEGA8
  4.อื่นๆ ถ่าน6โวลต์ สายซีเนี่ยว บอดอัด AVR คอมพิ้วเตอร์

วิธีต่ออุปกรณ์

ซอฟท์แวร์

ใชั AVR Studio + winavr เขียนด้วยภาษาีซี ซอด
ใช้ visuio สร้างโปรแรกมเทส ซอด

ปัญหาแนวทางแก้ไข

1.ค่ากระโดดออกจากหรูปวายที่ 256
unsigned long x1;
unsigned long number_goble;
แล้วใน main ให้
x1 = 0;number_goble=259;
while(x1 > number_goble);
printf("%d",x1);
และในอินเตอร์หรับ PWM ให้ x1++;
ผล
ค่า x1 ที่ออกมาทางฮายเปอร์จะแกว่งอยู่ที่ 259 และ 256 แล้วแต่ ยังหาสาเหตุไม่เจอ
แต่ถ้า เอา x1++; ไปใส่ไว้ในหรูปว่ายเลย
while(x1 > number){
x1++;
}
ค่าที่ออกมาจะได้ 259 เสมิอ
วิธีแก้
ใส่หรูปวาย 2 หรูป หรือมากกว่านั้น
while(x1 < number);
while(x1 < number);
หรือ
ไปเช๊กค่า x++ในอินเตอร์รับแล้วส่งค่าตัวแปลอื่นออกมา
if(x1 < number_goble){
test00 = 1;
}else{
test00 = 0;
}
ในหรูปวาย
x1 = 0 ;
test00 = 1;
while(test00);
2.ค่ามอเตอร์เป็นเลขคี่ จะไม่กลับมาที่เดิม สั่งเป็นเลขคู่เอา
3.ค่าที่เข้าไป อยู่ระหว่าง 0 กับ 255 จะกระโดดบางจังหวะ
while(1)
{
posi((unsigned long)control_t[31]*256+(unsigned long)control_t[30],(unsigned long)control_t[32]+control_t[33]*256);
}
หรูป while ต้องมี delay กำำำกับ
delay_ms(2);

ยังกระโดดอยู่ บางจังหวะ

การนำไปใช้

สั่งงานทางซีเรี่ยวบอดเรต 119200 โปรโตคอลโรโบตีส เปลี่ยนค่าตัวแปล 4 ตัวคือ
control_t[30] = 0x00 ; //Goal Position(L)
control_t[31] = 0x00 ; //Goal Position(H)
control_t[32] = 0xE8 ; //Moving Speed(L)
control_t[33] = 0x03 ; //Moving Speed(H)
สั่งครั้งละประมาน 11 ตัวอักษร หมายความว่า 119200/(10x11)= 1083 ลูก/วินาที
เราสร้างความถี่ละเอียดสุดได้เท่านี้ แต่ถ้ามีมอเตอร์หลายตัว ก็ลดลงไปตามผลหาร