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 ลูก/วินาที
เราสร้างความถี่ละเอียดสุดได้เท่านี้ แต่ถ้ามีมอเตอร์หลายตัว ก็ลดลงไปตามผลหาร