CONTACT | TEL : 02-728-3440, EMAIL : SALES@ASTRONLOGIC.COM
การออกแบบระบบควบคุมสเต็ปมอเตอร์ด้วย FPGA

» การออกแบบระบบควบคุมสเต็ปมอเตอร์ด้วย FPGA

โครงงานนี้นำเสนอการออกแบบระบบควบคุมสเต็ปมอเตอร์ด้วย FPGA (Field Programmable Gate Array: FPGA) เบื้องต้นเพื่อเพิ่มทักษะ ในการ ใช้ภาษา VHDL ให้เพิ่มมากขึ้น โดยใช้อุปกรณ์สวิทช์แบบเมตริกซ์ที่เคยศึกษาจากโครงงานที่ 2 มาใช้งานร่วมกันเพื่อนำไปประยุกต์ใช้งานในระดับที่สูงขึ้นต่อไปได้

สเต็ปมอเตอร์ชนิดต่างๆ
- สเต็ปมอเตอร์แบบแม่เหล็กถาวร (Permanent Stepping Motor)
สเต็ปมอเตอร์ชนิดนี้ใช้แม่เหล็กถาวรเป็นโรเตอร์และมีซี่ฟันของสเตเตอร์ล้อมรอบ ซี่ฟันของสเตเตอร์ถูกพันด้วยขดลวดสำหรับสร้างสนามแม่เหล็กเมื่อต้องการให้สเต็ปมอเตอร์แบบแม่เหล็กถาวรมีขนาดมุมสเต็ปเล็กลงจะ ต้อง เพิ่มจำนวนขั้วแม่เหล็กของโรเตอร์และจำนวนซี่ฟันของสเตเตอร์ แต่ก็มีขีดจำกัดในการเพิ่มจำนวนขั้วแม่เหล็กของโรเตอร์เนื่องจากการนำ มาสร้างให้มีขั้วแม่เหล็กหลายขั้วนั้นทำได้ยาก
- สเต็ปมอเตอร์แบบแปรค่ารีลัคแตนซ์ (Variable Reluctance Stepping Motor)
โครงสร้างของสเต็ปมอเตอร์แบบแปรค่ารีลัคแตนซ์โรเตอร์และสเตเตอร์จะทำจากโลหะซิลิคอนซึ่งเป็นสารแม่เหล็กที่มีสภาพซึมซับได้ทาง แม่เหล็กสูงและยอมให้สนามแม่เหล็กจำนวนมากไหลผ่านได้ สำหรับคุณสมบัติพื้นฐานของสเต็ปมอเตอร์ชนิดนี้จะต้องมีช่องว่างอากาศเล็กที่สุดเพื่อทำให้ค่าทอร์คมากและความถูกต้องของตำแหน่งสูงขึ้น
- สเต็ปมอเตอร์แบบไฮบริดจ์ (Hi-bridge Stepping Motor)
สเต็ปมอเตอร์ชนิดนี้จะเป็นการผสมผสานกันหรือการทำงานร่วมกันระหว่างมอเตอร์สองชนิดข้างต้น ทำให้ได้แรงบิดที่มากและความละเอียดสูงหรือมีจำนวนสเต็ปเพิ่มมากขึ้น

การกระตุ้นและควบคุมการหมุนของสเต็ปมอเตอร์
การกระตุ้นและควบคุมการหมุนของสเต็ปมอเตอร์ให้เคลื่อนที่ไปแต่ละสเต็ปทำได้โดยจ่ายกำลังไฟฟ้าไปยังลวดแต่ละขดบนสเตเตอร์ ซึ่งต้องป้อนแบบซีเควนเชียลสามารถแบ่งเป็น 3 แบบคือ
- แบบฟูลสเต็ป 1 เฟส (Full-step 1 phase)
การกระตุ้นแบบนี้จะเป็นแบบที่ง่ายที่สุดโดยทำการกระตุ้นขดลวดทีละขดในเวลาหนึ่งไล่เรียงถัดกันไปดังตารางที่ 1 คือ เริ่มต้นที่ขด 1, 2, 3 และ 4 แล้ววนกลับมาเริ่มขดที่ 1 ใหม่เป็นเช่นนี้ไปเรื่อยๆ

ตารางที่ 1 การกระตุ้นแบบฟลูสเต็ป 1 เฟส

สเต็ปที่
เฟสที่ 1
เฟสที่ 2
เฟสที่ 3
เฟสที่ 4
1
ON
-
-
-
2
-
ON
-
-
3
-
-
ON
-
4
-
-
-
ON

- แบบฟูลสเต็ป 2 เฟส (Full-step 2 phase)
แบบนี้จะคล้ายกับแบบแรกแต่การกระตุ้นจะต่างกันคือจะกระตุ้นทีละ 2 ขดในเวลาเดียวกันและเรียงถัดกันไปดังตารางที่ 2 การกระตุ้นแบบนี้สามารถเพิ่มแรงบิดได้ดีกว่าแบบแรก โรเตอร์จะเคลื่อนที่ด้วยแรงดึงอย่างเต็มแรงจากขดลวด 2 ขดที่ถูกกระตุ้นพร้อมกันและต่อไปด้วยแรงดึงอีก 2 ขดถัดไป ดังนั้นกำลังไฟฟ้าที่ใช้จ ะเพิ่มมากขึ้นเป็น 2 เท่า

ตารางที่ 2 การกระตุ้นแบบฟลูสเต็ป 2 เฟส

สเต็ปที่
เฟสที่ 1
เฟสที่ 2
เฟสที่ 3
เฟสที่ 4
1
ON
ON
-
-
2
-
ON
ON
-
3
-
-
ON
ON
4
ON
-
-
ON

- แบบฮาร์ฟสเต็ป (Half-step)
การกระตุ้นแบบนี้เป็นการผสมผสานระหว่างการกระตุ้นแบบฟูลสเต็ป 1 เฟสและ 2 เฟสทำให้จำนวนสเต็ปเพิ่มขั้นอีกเท่าตัว แรงบิดที่ได้จาก การกระตุ้นแบบนี้จะเพิ่มมากขึ้นอีก เพราะช่วงสเต็ปมีระยะสั้นลง แต่ละสเต็ปเกิดแรงดึงจากขดลวด 2 ขดที่ถูกกระตุ้นพร้อมกัน ความถูกต้องมีมากขึ้นแต่กำลังไฟฟ้าที่ใช้จะ เท่ากับแบบที่ 2 เป็นอย่างน้อย

ตารางที่ 3 การกระตุ้นแบบครึ่งสเต็ป

สเต็ปที่
เฟสที่ 1
เฟสที่ 2
เฟสที่ 3
เฟสที่ 4
1
ON
-
-
-
2
ON
ON
-
-
3
-
ON
-
-
4
-
ON
ON
-
5
-
-
ON
-
6
-
-
ON
ON
7
-
-
-
ON
8
ON
-
-
ON

 

การออกแบบระบบควบคุมการทำงานสเต็ปมอเตอร์ด้วย FPGA
จากข้างต้นเราได้เรียนรู้ถึงวิธีการทำงานของตัวสเต็ปมอเตอร์แล้วว่าควรจะควบคุมอย่างไรจึงจะทำให้ สเต็ปมอเตอร์นั้นเคลื่อนที่ไป ตามที่ต้องการ ตอนนี้เราจะเริ่มออกแบบระบบสำหรับควบคุมตัวสเต็ปมอเตอร์ด้วยอุปกรณ์ FPGA ก่อนที่จะออกแบบระบบนั้นเราจำเป็นต้องรู้ถึง อุปกรณ์ฮาร์ดแวร์ที่นำมาใช้ทั้งหมดเสียก่อนว่ามีอะไรบ้าง และแต่ละอย่างมีเส้นทางการไหลของข้อมูลอย่างไร เพื่อที่จะได้ออกแบบระบบการทำงานได้ถูกต้องและมีประสิทธิภาพ ซึ่งโครงงาน นี้อุปกรณ์ที่ใช้ประกอบไปด้วยชุดสวิทช์แบบเมตริกซ์ขนาด 4x4 ตัวกำเนิดความถี่ (ในที่นี้ใช้ 1 MHz) ชิป FPGA ตัวแสดงผลแบบ 7-Segment ขนาด 6 หลัก ตัว LED 8 ตัว วงจรขับสเต็ปมอเตอร ์และสุดท้ายคือตัวสเต็ปมอเตอร์ดังรูปที่ 1 โดยระบบการทำงานหรือแนวคิดการออกแบบจะเป็นไปดังบล๊อกไดอะแกรมรูปที่ 2

รูปที่ 1 โครงสร้างของระบบควบคุมการทำงานของสเต็ปมอเตอร์ด้วย FPGA

รูปที่ 2 ลักษณะการทำงาน

จากรูปที่ 2 เริ่มต้นจะทำการตรวจสอบการกดสวิตช์เมตริกช์ และทำการตรวจสอบตำแหน่งที่สวิทช์ถูกกด แล้วตีความหมายของสวิทช์นั้น เพื่อสั่งงานในส่วนอื่นๆ ต่อไป เช่น
1. เปิด/ปิดมอเตอร์
2. กำหนดทิศทางการหมุนของสเต็ปมอเตอร์ (หมุนซ้าย / หมุนขวา)
3. กำหนดความเร็วการหมุนของสเต็ปมอเตอร์ (ในที่นี้มี 2 ระดับ) และ
4. กำหนดลักษณะการกระตุ้นสเต็ปมอเตอร์
หน้าที่การทำงานของสวิตช์เมตริกช์แต่ละตัวจะเป็นดังรูปที่ 3

รูปที่ 3 หน้าที่การทำงานของสวิตช์ต่างๆ ในชุดสวิตช์เมตริกช์ 4 * 4

การออกแบบวงจรควบคุมโดยใช้โปรแกรม MAX+plus II
ในการทดลองนี้จะใช้โปรแกรม MAX+plus II และภาษา VHDL ออกแบบระบบควบคุมการทำงานทั้งหมดบนบอร์ดทดลอง FPGA รุ่น WIZARD FLEX - A01 ของบริษัท แอสทรอนลอจิกรีเสิร์ธแอนด์ดิวิลอปเมนต์ จำกัด ภายในบอร์ดทดลองใช้ FPGA เบอร์ EPF10K10LC84-4 ซึ่งเป็น FPGA ของบริษัท ALTERA มี Logic element 576 Les และ RAM ภายใน 6,144 Bits ลักษณะของบอร์ดดังรูปที่ 4 และแผนผังวงจรสำหรับควบคุมการทำงานของสเต็ปมอเตอร์ที่ เขียนขึ้นจากโปรแกรม MAX+ plus II แสดงดังรูปที่ 5

รูปที่ 4 บอร์ดทดลอง FPGA รุ่น WIZARD FLEX-A01


รูปที่ 5 วงจรควบคุมการทำงานของสเต็ปมอเตอร์

จากวงจรในรูปที่ 5 จะเห็นว่าประกอบด้วยสัญลักษณ์ของวงจรต่างๆ อีกหลายวงจรซึ่งแต่ละวงจรจะมีหน้าที่การทำงานที่แตกต่างกันดังนี้

- โปรแกรม SCANKEY4X4
โปรแกรมส่วนนี้ใช้ในการสแกนโค้ดของสวิทช์เมตริกซ์ ซึ่งโปรแกรม SCANKEY4X4 นี้ใช้ IP Core จากหมวด Free IP Core ทำให้ไม่ต้องเสียเวลาเขียนโค้ดใหม่

รูปที่ 6 สัญลักษณ์ของวงจร SCANKEY4X4

- โปรแกรม DECODE_CTL_CMD
เมื่อเราเช็คหาตำแหน่งการกดสวิทช์ได้แล้วต่อไปก็ต้องแปลความหมายของสวิทช์ที่ถูกกดว่าทำหน้าที่อะไร ซึ่งความหมายต่างๆ นั้นดูได้จาก รูปที่ 3 การทำงานหลักของ DECODE_CTL_CMD ใช้คำสั่ง CASE ในการตรวจสอบของมูลอินพุทที่ได้ จาก DATA_IN ถ้ามีค่าเท่ากับ 0, 1, 4, 5, 8, 9, 12, 13 และ 14 โปรแกรมก็จะส่งข้อมูลออกทางพอร์ต์เอาท์พุตซึ่งมีหน้าที่การทำงานตามรูปที่ 3 สำหรับหน้าที่ของสัญญาณ อินพุท/เอาท์พุทต่างๆ ของ DECODE_CTL_CMD มีหน้าที่ต่างๆดังต่อไปนี้ DATA_IN เป็นอินพุทขนาด 4 บิต สำหรับรับข้อมูลจากวงจร SCANKEY4X4 เพื่อนำมาตรวจสอบคำสั่งการทำงาน SPEED_SEL เป็นสัญญาณเอาท์พุทใช้ เลือกอัตราความถี่ในการสร้าง สัญญาณพัลซ์ เพื่อควบคุมความเร็ว, ON_OFF เป็นเอาท์พุทขนาด 1 บิตใช้ควบคุมให้มอเตอร์หมุนและหยุดหมุน, DIRECTION เป็นสัญญาณเอาท์พุท ขนาด 1 บิตใช้ สำหรับเลือกทิศทางการหมุนของสเต็ปมอเตอร์ และ MODE เป็นสัญญาณเอาท์พุทขนาด 3 บิตใช้เลือก ลักษณะการกระตุ้นให้กับ สเต็ปมอเตอร์ แต่ถ้ามีการกดสวิทช์ที่นอกเหนือจากที่กล่าวมา ก็ไม่ให้ส่งข้อมูลใดๆ ออกไป

รูปที่ 7 สัญลักษณ์ของวงจร DECODE_CTL_CMD

- โปรแกรม DIV1000_CLK, DIV5_CLK, CLK_SEL
โปรแกรมทั้ง 3 นั้นแท้จริงแล้วเป็นโปรแกรมหารความถี่ใช้วิธีการนับจำนวนสัญญาญนาฬิกาจากตัวกำเนิดสัญญาณ Oscillator ความถี่ 1 MHz โดยโปรแกรม CLK_SEL รูปที่ 8 และ DIV5_CLK รูปที่ 9 จะหารความถี่เพื่อนำไปสร้างสัญญาณพัลซ์ควบคุมความเร็วของสเต็ปมอเตอร์ โปรแกรม DIV1000_CLK รูปที่ 10 สร้างสัญญาณพัลซ์ใช้ในการสแกนหลักของ 7-Segment

รูปที่ 8 สัญลักษณ์ของวงจร CLK_SEL

รูปที่ 9 สัญลักษณ์ของวงจร DIV5_CLK

รูปที่ 10 สัญลักษณ์ของวงจร DIV1000_CLK

- โปรแกรม SCAN_7SEGMENT
เป็นโปรแกรมใช้แสดงผลคำสั่งเมื่อมีการกดสวิทช์เกิดขึ้น จากรูปที่ 11 เมื่อสวิทช์เมตริกต์ 4 X 4 ถูกกดจะมีข้อมูลตำแหน่งของสวิทช์ ที่กดส่งมายังอินพุท DATA _IN ข้อมูลที่ส่งมาจะมีขนาด 4 บิต มีช่วงของตัวเลขระหว่าง 0 – 15 จากนั้นจะตรวจสอบข้อมูลดังกล่าวทุกครั้งของขอบขาขึ้นของสัญญาณนาฬิกา DCLK แล้วแสดงคำสั่งออกทาง 7 Segment 6 หลัก แบบ Multiplex ต่อไป

รูปที่ 11 สัญลักษณ์ของวงจร SCAN_7SEGMENT

- โปรแกรม FULLSTEP, FULLSTEP2P, HALFSTEP, BUS_SEL
วงจรทั้งสามนี้ใช้สำหรับส่งสัญญาณไปกระตุ้นให้กับสเต็ปมอเตอร์ดังที่ได้กล่าวไปแล้วในการกระตุ้นและการควบคุมการหมุนของ สเต็ปมอเตอร์ จากรูปที่ 13 เป็นโปรแกรม FULLSTEP อัตราความถี่ของสัญญาณนาฬิกาจะได้จากโปรแกรมหารความถี่ CLK_SEL จากนั้นกำหนดตัวแปรภายในชื่อ Counter ที่มีช่วงตัวเลข ระหว่าง 0 – 3 เป็นแบบจำนวนเต็ม (INTEGER) แล้วตรวจสอบค่าตัวแปรดังกล่าวเพื่อเลือกส่งสัญญาณออกไปที่พอร์ต OUTPUT ขนาด 4 บิตกระตุ้นแบบ ฟูลสเต็ป 1 เฟส (Full-step 1 phase) ส่วนโปรแกรม FULLSTEP2P รูปที่ 14 และ HALFSTEP รูปที่ 15 ก็มีลักษณะการทำงาน เหมือนกันแต่ต่างกันที่ ลักษณะของรูปแบบสัญญาณเอาท์พุท สุดท้ายเป็นโปรแกรม BUS_SEL ดังรูปที่ 16 ไว้ใช้ตัดสินใจเลือกข้อมูลที่ใช้กระตุ้นสเต็ปมอเตอร์ทั้ง 3 พอร์ตคือ STEP1, STEP2 และ STEP3 (พอร์ตละ 4 บิต) ส่งออกไปยังพอร์ตเอาท์พุต PHASE_OUT ขนาด 4 บิต โดยมีพอร์ต PHASE_MON สำหรับต่อกับ LED เพื่อดูทิศทางการวิ่งของเฟส

รูปที่ 13 สัญลักษณ์ของวงจร FULLSTEP

รูปที่ 14 สัญลักษณ์ของวงจร FULLSTEP2P

รูปที่ 15 สัญลักษณ์ของวงจร HALFSTEP

รูปที่ 16 สัญลักษณ์ของวงจร BUS_SEL

การเชื่อมต่อวงจรต่างๆเข้าด้วยกันใน Graphic Editor File
หลังจากที่เราสร้างวงจรรต่างๆ ที่จะนำมาใช้งานร่วมกันเสร็จแล้ว ก็ให้ทำการคอมไพล์ให้เรียบร้อยทีละวงจรโดยก่อนคอมไพล์ทุกครั้งต้องเซ็ตไฟล์ที่จะคอมไพล์ให้ตัวโปรแกรมรู้จักเสียก่อนมิฉะนั้น ไฟล์ที่ถูกคอมไพล์อาจจะไม่ใช้ไฟล์ที่เราต้องการให้คอมไพล์ก็ได้ ให้ไปที่ File -> Projection -> Set to Current File และเมื่อต้องการสั่งคอมไพล์ไฟล์ที่เลือกให้ไปที่ File -> Projection -> Save & Compile และเมื่อคอมไพล์แล้วหากมีแจ้งความผิดพลาดก็ให้ทำการแก้ไขให้เรียบร้อย สำหรับการนำวงจรต่างๆ มาประกอบเข้าด้วยกันต้องทำในส่วนของ Graphic Editor โดยเลือกที่เมนู File -> New แล้วเลือกเป็น Graphic Editor File โปรแกรม Maxplus2 ก็จะสร้างไฟล์เปล่าๆให้ จากนั้นให้ทำการเรียกสัญลักษณ์ของวงจรต่างๆ ขึ้นมา โดย Double Click ไปที่พื้นที่ว่างๆของไฟล์ก็จะปรากฏหน้าต่าง Enter Symbol ดังรูปที่ 17 นำสัญลักษณ์ของวงจรต่างๆ มาประกอบกันให้เหมือนวงจรในรูปที่ 5

รูปที่ 17 หน้าต่าง Enter Symbol

การโปรแกรมข้อมูลลง FPGA
ในการทดสอบวงจรในการทดลองนี้จะใช้พอร์ต Expansion B บนบอร์ด Wizard FLEX-A01 สำหรับควบคุมวงจร ร่วมกับไอซี ULN2003A สำหรับไดร์ฟขดลวดของ Step Motor

เมื่อทำการต่อวงจรต่างๆ เข้ากันเรียบร้อยแล้ว ให้ทำการกำหนดเบอร์ FPGA ที่จะใช้งาน โดยเลือกที่เมนู Assign -> Device แล้วเลือก FLEX10K ในช่อง Device Family และ EPF10K10LC84-4 ในช่อง Device แล้วคอมไพล์ใหม่อีกครั้ง ทำการคอมไพล์และจัดตำแหน่งขาของ FPGA ให้ตรงกับตำแหน่งของสัญญาณต่างๆ ในวงจรที่ได้ออกแบบขึ้น ดังรูปที่ 18 หลังจากนั้นทำการโปรแกรมลงบอร์ด FPGA เพื่อทดสอบการทำงานต่อไป

รูปที่ 18 การต่อ Expansion B ของ Wizard FLEX-A01 สำหรับทดสอบการทำงานของวงจรขับสเต็ปมอเตอร์

 

ดาวน์โหลดซอร์สโค้ด