- สเต็ปเปอร์มอเตอร์
- การหมุน Stepper Motor ด้วย ARM7-LPC2148
- ส่วนประกอบที่จำเป็น
- สเต็ปเปอร์มอเตอร์ (28BYJ-48)
- ไดรเวอร์ ULN2003 Stepper Motor
- แผนภูมิวงจรรวม
- การเขียนโปรแกรม ARM7-LPC2148 สำหรับ Stepper Motor
ในโลกแห่งระบบอัตโนมัติปัจจุบันมอเตอร์สเต็ปเปอร์และเซอร์โวมอเตอร์เป็นมอเตอร์ที่ใช้กันมากที่สุดสองตัวในระบบฝังตัว ทั้งสองใช้ในเครื่องจักรอัตโนมัติต่างๆเช่นแขนหุ่นยนต์เครื่อง CNC กล้อง ฯลฯ ในบทช่วยสอนนี้เราจะดูวิธีการเชื่อมต่อ Stepper Motor กับ ARM7-LPC2148และวิธีควบคุมความเร็วของมัน หากคุณยังใหม่กับ ARM7 ให้เริ่มต้นด้วยการเรียนรู้เกี่ยวกับ ARM7-LPC2148 และเครื่องมือการเขียนโปรแกรม
สเต็ปเปอร์มอเตอร์
มอเตอร์เป็น brushless มอเตอร์ DC ซึ่งสามารถหมุนได้ในมุมเล็ก ๆ มุมเหล่านี้เรียกว่าขั้นตอนเราสามารถหมุนสเต็ปเปอร์มอเตอร์ทีละขั้นตอนโดยให้ดิจิตอลพัลส์กับพิน สเต็ปเปอร์มอเตอร์มีราคาไม่แพงและมีการออกแบบที่ทนทาน ความเร็วของมอเตอร์สามารถควบคุมได้โดยการเปลี่ยนความถี่ของพัลส์ดิจิตอล
: มีสองประเภทของมอเตอร์ stepper ใช้ได้ตามประเภทของสเตเตอร์คดเคี้ยวเป็น unipolar และ BIPOLARที่นี่เราจะใช้unipolar stepper มอเตอร์ซึ่งเป็นที่นิยมใช้มากที่สุดมอเตอร์ ในการหมุนมอเตอร์สเต็ปเปอร์เราจำเป็นต้องเพิ่มพลังให้กับขดลวดของสเต็ปเปอร์มอเตอร์ตามลำดับ ขึ้นอยู่กับการทำงานแบบหมุนพวกเขาแบ่งออกเป็นสองโหมด:
- โหมดเต็มขั้นตอน: (ลำดับ 4 ขั้นตอน)
- หนึ่งเฟสในการก้าว (WAVE STEPPING)
- สองเฟสในการก้าว
- โหมด Half Step (ลำดับ 8 ขั้นตอน)
หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสเต็ปเปอร์มอเตอร์และการทำงานตามลิงค์
การหมุน Stepper Motor ด้วย ARM7-LPC2148
ที่นี่เราจะใช้โหมดFULL STEP: ONE PHASE ON หรือ WAVE STEPPINGเพื่อหมุน Stepper Motor ด้วย ARM7-LPC2148
ในวิธีนี้เราจะรวมพลังของขดลวดเพียงตัวเดียว (หนึ่งพินของ LPC2148) ต่อครั้ง นั่นคือถ้าขดลวดตัวแรกA ได้รับพลังงานเป็นเวลาเล็กน้อยเพลาจะเปลี่ยนตำแหน่งและจากนั้นขดลวด Bจะได้รับพลังงานในเวลาเดียวกันและเพลาจะเปลี่ยนตำแหน่งอีกครั้ง เช่นนี้ขดลวด C แล้วขดลวด D จะถูกกระตุ้นให้เพลาเคลื่อนที่ต่อไป สิ่งนี้ทำให้เพลาของสเต็ปเปอร์มอเตอร์หมุนทีละขั้นตอนโดยกระตุ้นทีละขดลวด
โดยวิธีนี้เราหมุนเพลาทีละขั้นตอนโดยการกระตุ้นขดลวดตามลำดับ สิ่งนี้เรียกว่าลำดับสี่ขั้นตอนเนื่องจากใช้สี่ขั้นตอน
คุณสามารถหมุน Stepper Motor โดยใช้วิธี HALF STEP (วิธี 8-Sequence) ตามค่าที่ระบุด้านล่าง
ขั้นตอน |
ขดลวดก |
คอยล์ B |
ขดลวดค |
ขดลวด D |
1 |
1 |
0 |
0 |
0 |
2 |
1 |
1 |
0 |
0 |
3 |
0 |
1 |
0 |
0 |
4 |
0 |
1 |
1 |
0 |
5 |
0 |
0 |
1 |
1 |
6 |
0 |
0 |
0 |
1 |
7 |
1 |
0 |
0 |
1 |
8 |
1 |
0 |
0 |
0 |
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์:
- ARM7-LPC2148
- IC ไดรเวอร์มอเตอร์ ULN2003
- LED - 4
- สเต็ปเปอร์มอเตอร์ (28BYJ-48)
- เบดบอร์ด
- การเชื่อมต่อสายไฟ
ซอฟต์แวร์:
- Keil uVision 5
- เครื่องมือ Flasic Magic
สเต็ปเปอร์มอเตอร์ (28BYJ-48)
มอเตอร์สเต็ป 28BYJ-48 แสดงอยู่แล้วในภาพด้านบน เป็น มอเตอร์ Unipolar Stepper ซึ่งต้องใช้แหล่งจ่ายไฟ 5V มอเตอร์มีการจัดเรียงแบบ unipolar 4 ขดและแต่ละขดลวดได้รับการจัดอันดับเป็น + 5V ดังนั้นจึงค่อนข้างง่ายในการควบคุมด้วยไมโครคอนโทรลเลอร์เช่น Arduino, Raspberry Pi, STM32, ARM เป็นต้น
แต่เราต้องใช้ IC Motor Drive เช่น ULN2003 เพื่อขับเคลื่อนเนื่องจากมอเตอร์สเต็ปเปอร์ใช้กระแสไฟฟ้าสูงและอาจทำให้ไมโครคอนโทรลเลอร์เสียหายได้
ข้อมูลจำเพาะของ 28BYJ-48 มีอยู่ในเอกสารข้อมูลด้านล่าง:
ตรวจสอบการเชื่อมต่อกับ Stepper Motor กับไมโครคอนโทรลเลอร์อื่น ๆ ด้วย:
- การเชื่อมต่อ Stepper Motor กับ Arduino Uno
- Stepper Motor Control พร้อม Raspberry Pi
- Stepper Motor เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051
- การเชื่อมต่อ Stepper Motor กับไมโครคอนโทรลเลอร์ PIC
- การเชื่อมต่อ Stepper Motor กับ MSP430G2
Stepper Motor สามารถควบคุมได้โดยไม่ต้องใช้ไมโครคอนโทรลเลอร์ดูวงจร Stepper Motor Driver นี้
ไดรเวอร์ ULN2003 Stepper Motor
สเต็ปเปอร์มอเตอร์ส่วนใหญ่ จะทำงานด้วยความช่วยเหลือของโมดูลไดรเวอร์เท่านั้น เนื่องจากโมดูลคอนโทรลเลอร์ (ในกรณีของเราคือ LPC2148) จะไม่สามารถจ่ายกระแสไฟฟ้าได้เพียงพอจากพิน I / O เพื่อให้มอเตอร์ทำงาน ดังนั้นเราจะใช้โมดูลภายนอกเช่น ULN2003 โมดูลเป็น คนขับมอเตอร์
ในโครงการนี้เราจะใช้ ULN2003 คนขับมอเตอร์ IC แผนภาพพินของ IC แสดงไว้ด้านล่าง:
หมุด (IN1 ถึง IN7) เป็นพินอินพุตสำหรับเชื่อมต่อเอาท์พุทไมโครคอนโทรลเลอร์และ OUT1 ถึง OUT7 เป็นพินเอาท์พุตที่สอดคล้องกันสำหรับการเชื่อมต่ออินพุตของสเต็ปเปอร์มอเตอร์ COM ได้รับแรงดันไฟฟ้าจากแหล่งบวกที่จำเป็นสำหรับอุปกรณ์เอาต์พุตและสำหรับแหล่งจ่ายไฟภายนอก
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับเชื่อมต่อ Stepper Motor กับ ARM-7 LPC2148 แสดงไว้ด้านล่าง
ARM7-LPC2148 พร้อม IC ไดรเวอร์มอเตอร์ ULN2003
GPIO Pins ของ LPC2148 (P0.7 ถึง P0.10) ถือเป็นพินเอาต์พุตที่เชื่อมต่อกับพินอินพุต (IN1-IN4) ของ ULN2003 IC
LPC2148 พิน |
PINS ของ ULN2003 IC |
P0.7 |
IN1 |
P0.8 |
IN2 |
P0.9 |
IN3 |
หน้า 10 |
IN4 |
5V |
COM |
GND |
GND |
การเชื่อมต่อของ ULN2003 IC กับ Stepper Motor (28BYJ-48)
พินเอาต์พุต (OUT1-OUT4) ของ ULN2003 IC เชื่อมต่อกับพินสเต็ปเปอร์มอเตอร์ (น้ำเงินชมพูเหลืองและส้ม)
ULN2003 IC PINS |
PINS ของมอเตอร์สเต็ปเปอร์ |
ออก 1 |
สีน้ำเงิน |
ออก 2 |
สีชมพู |
ออก 3 |
สีเหลือง |
ออก 4 |
ส้ม |
COM |
สีแดง (+ 5V) |
LED ที่มี IN1 ถึง IN4 ของ ULN2003
พินขั้วบวกของ LED สี่ดวง (LED1, LED2, LED4, LED 4) เชื่อมต่อกับพิน IN1, IN2, IN3 และ IN4 ของ ULN2003 ตามลำดับและแคโทดของ LED เชื่อมต่อกับ GND ซึ่งใช้เพื่อระบุพัลส์จาก LPC2148 เราสามารถสังเกตรูปแบบของพัลส์ที่ให้มา รูปแบบจะแสดงในวิดีโอสาธิตที่แนบมาในตอนท้าย
การเขียนโปรแกรม ARM7-LPC2148 สำหรับ Stepper Motor
ในการเขียนโปรแกรม ARM7-LPC2148 เราต้องใช้เครื่องมือ keil uVision & Flash Magic เราใช้สาย USB เพื่อตั้งโปรแกรม ARM7 Stick ผ่านพอร์ต micro USB เราเขียนโค้ดโดยใช้ Keil และสร้างไฟล์ hex จากนั้นไฟล์ HEX จะถูกแฟลชไปที่แท่ง ARM7 โดยใช้ Flash Magic หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้ง keil uVision และ Flash Magic และวิธีการใช้งานให้ไปที่ลิงค์เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ ARM7 LPC2148 และตั้งโปรแกรมโดยใช้ Keil uVision
รหัสที่สมบูรณ์สำหรับการควบคุม Stepper Motor ด้วย ARM 7 มีให้ในตอนท้ายของบทช่วยสอนนี้เราจะอธิบายบางส่วนของมันที่นี่
1.สำหรับการใช้วิธีFULL STEP-ONE PHASE ONเราจำเป็นต้องรวมคำสั่งด้านล่าง ดังนั้นเราจึงใช้บรรทัดต่อไปนี้ในโปรแกรม
ถ่านที่ไม่ได้ลงชื่อตามเข็มนาฬิกา = {0x1,0x2,0x4,0x8}; // คำสั่งสำหรับการหมุนตามเข็มนาฬิกาที่ ไม่ได้ลงชื่อถ่านทวนเข็มนาฬิกา = {0x8,0x4,0x2,0x1}; // คำสั่งสำหรับการหมุนทวนเข็มนาฬิกา
2.บรรทัดต่อไปนี้ใช้เพื่อเริ่มต้นพิน PORT0 เป็นเอาต์พุตและตั้งค่าเป็น LOW
PINSEL0 = 0x00000000; // การตั้งค่า PORT0 พิน IO0DIR - = 0x00000780; // ตั้งหมุด P0.7, P0.8, P0.9, P0.10 เป็น OUTPUT IO0CLR = 0x00000780; // การตั้งค่า P0.7, P0.8, P0.9, P0.10 พิน OUTPUT เป็น LOW
3.ตั้งค่าพิน PORT (P0.7 ถึง P0.10) HIGH ตามคำสั่งตามเข็มนาฬิกาโดยใช้สิ่งนี้ สำหรับ ลูปที่มีการหน่วงเวลา
สำหรับ (int j = 0; j
เช่นเดียวกับAnti-clock Wise
สำหรับ (int z = 0; z
4.เปลี่ยนเวลาหน่วงเพื่อเปลี่ยนความเร็วในการหมุนของมอเตอร์สเต็ปเปอร์
ล่าช้า (0x10000); // เปลี่ยนค่านี้เพื่อเปลี่ยนความเร็วในการหมุน (0x10000) - ความเร็วเต็ม (0x50000) - รับช้า (0x90000) - รับช้ากว่าก่อนหน้านี้ ดังนั้นการเพิ่มความล่าช้าทำให้ความเร็วในการหมุนต่ำลง
5.จำนวนขั้นตอนสำหรับการหมุนหนึ่งครั้งสามารถเปลี่ยนแปลงได้ด้วยรหัสด้านล่าง
int no_of_steps = 550; // เปลี่ยนค่านี้สำหรับจำนวนการหมุนขั้นตอนที่ต้องการ (550 ให้การหมุนครบหนึ่งครั้ง)
สำหรับสเต็ปเปอร์มอเตอร์ของฉันฉันมี 550 ขั้นตอนสำหรับการหมุนที่สมบูรณ์และ 225 สำหรับการหมุนครึ่งหนึ่ง ดังนั้นเปลี่ยนตามความต้องการของคุณ
6.ฟังก์ชั่นนี้จะใช้เพื่อสร้างการหน่วงเวลา
ความล่าช้าเป็นโมฆะ (ค่า int ที่ไม่ได้ลงชื่อ) // ฟังก์ชันเพื่อสร้างความล่าช้า { ไม่ได้ลงนาม int z; สำหรับ (z = 0; z
รหัสที่สมบูรณ์พร้อมวิดีโอสาธิต ได้รับด้านล่าง