- วัสดุที่จำเป็น
- สเต็ปเปอร์มอเตอร์ (28BYJ-48)
- IC ไดรเวอร์มอเตอร์ ULN2003
- แผนภาพวงจรและการเชื่อมต่อ
- หมุน Stepper Motor ด้วย STM32F103C8
- การเขียนโปรแกรม STM32 สำหรับ Stepper Motor
Stepper motor เป็นมอเตอร์กระแสตรงไร้แปรงถ่านซึ่งสามารถหมุนได้ในมุมเล็ก ๆ มุมเหล่านี้เรียกว่าขั้นตอน โดยทั่วไปแล้วสเต็ปเปอร์มอเตอร์จะใช้ 200 ขั้นตอนเพื่อหมุน 360 องศาหมายถึงหมุน 1.8 องศาต่อขั้นตอน มอเตอร์สเต็ปเปอร์ถูกใช้ในอุปกรณ์หลายชนิดที่ต้องการการเคลื่อนที่แบบหมุนที่แม่นยำเช่นหุ่นยนต์เสาอากาศฮาร์ดไดรฟ์เป็นต้นเราสามารถหมุนสเต็ปเปอร์มอเตอร์ไปยังมุมใดก็ได้โดยให้คำแนะนำที่เหมาะสม ส่วนใหญ่มีสองประเภทมอเตอร์ stepper มีอยู่ Unipolar และ ไบโพลาร์Unipolar ใช้งานง่ายควบคุมและรับได้ง่ายกว่า ในบทช่วยสอนนี้เรากำลัง เชื่อมต่อ Stepper Motor กับบอร์ด STM32F103C8 (เม็ดสีฟ้า)
วัสดุที่จำเป็น
- STM32F103C8 (เม็ดสีฟ้า)
- สเต็ปเปอร์มอเตอร์ (28BYJ-48)
- ULN2003 IC
- โพเทนชิออมิเตอร์ 10k
- เขียงหั่นขนม
- สายจัมเปอร์
สเต็ปเปอร์มอเตอร์ (28BYJ-48)
28BYJ-48 เป็นมอเตอร์ Unipolar Stepperซึ่งต้องใช้แหล่งจ่ายไฟ 5V มอเตอร์มีการจัดเรียงแบบ unipolar 4 ขดและแต่ละขดลวดได้รับการจัดอันดับสำหรับ + 5V ดังนั้นจึงค่อนข้างง่ายในการควบคุมด้วยไมโครคอนโทรลเลอร์เช่น Arduino Raspberry Pi และ STM32 แต่เราต้องการ IC Motor Drive เช่น ULN2003 เพื่อขับเคลื่อนเนื่องจากมอเตอร์แบบสเต็ปเปอร์ กินกระแสไฟสูงและอาจทำให้ไมโครคอนโทรลเลอร์เสียหายได้
ข้อมูลสำคัญอีกอย่างที่ต้องสังเกตคือ Stride Angle: 5.625 ° / 64 ซึ่งหมายความว่ามอเตอร์เมื่อทำงานในลำดับ 8 ขั้นตอนจะเคลื่อนที่ไป 5.625 องศาสำหรับแต่ละขั้นตอนและจะใช้เวลา 64 ขั้นตอน (5.625 * 64 = 360) เพื่อทำการหมุนเต็มหนึ่งครั้ง ข้อกำหนดอื่น ๆ มีอยู่ในเอกสารข้อมูลด้านล่าง:
ตรวจสอบการเชื่อมต่อกับ Stepper Motor กับไมโครคอนโทรลเลอร์อื่น ๆ ด้วย:
- การเชื่อมต่อ Stepper Motor กับ Arduino Uno
- Stepper Motor Control พร้อม Raspberry Pi
- Stepper Motor เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051
- การเชื่อมต่อ Stepper Motor กับไมโครคอนโทรลเลอร์ PIC
Stepper Motor สามารถควบคุมได้โดยไม่ต้องใช้ไมโครคอนโทรลเลอร์ดูวงจร Stepper Motor Driver นี้
IC ไดรเวอร์มอเตอร์ ULN2003
ใช้ในการขับเคลื่อนมอเตอร์ตามพัลส์ที่ได้รับจากไมโครคอนโทรลเลอร์ ด้านล่างนี้คือแผนภาพรูปภาพของ ULN2003:
หมุด (IN1 ถึง IN7) เป็นพินอินพุตและ (OUT 1 ถึง OUT 7) เป็นพินเอาต์พุตที่สอดคล้องกัน COM ได้รับแรงดันไฟฟ้าที่เป็นบวกสำหรับอุปกรณ์เอาต์พุต การเชื่อมต่อเพิ่มเติมสำหรับสเต็ปเปอร์มอเตอร์แสดงไว้ด้านล่างในส่วนแผนภาพวงจร
แผนภาพวงจรและการเชื่อมต่อ
ด้านล่างนี้คือคำอธิบายการเชื่อมต่อสำหรับแผนภาพวงจรด้านบน
STM32F103C8 (ยาสีฟ้า)
ดังที่เราเห็นในแผนภาพด้านล่างหมุด PWM ถูกระบุในรูปแบบคลื่น (~) มี 15 พินดังกล่าวซึ่งสามารถใช้สำหรับเอาต์พุตพัลส์ไปยังสเต็ปเปอร์มอเตอร์ เราต้องการเพียงสี่พินเราใช้ (PA0 toPA3)
STM32F103C8 พร้อม IC ไดรเวอร์มอเตอร์ ULN2003
พิน (PA0 ถึง PA3) ถือเป็นพินเอาต์พุตที่เชื่อมต่อกับพินอินพุต (IN1-IN4) ของ ULN2003 IC
PINS ของ STM32F103C8 |
PINS ของ ULN2003 IC |
PA0 |
IN1 |
PA1 |
IN2 |
PA2 |
IN3 |
PA3 |
IN4 |
5V |
COM |
GND |
GND |
ULN2003 IC พร้อม Stepper Motor (28BYJ-48)
พินเอาต์พุต (OUT1-OUT4) ของ ULN2003 IC เชื่อมต่อกับหมุดสเต็ปเปอร์มอเตอร์ (สีส้มสีเหลืองสีชมพูและสีน้ำเงิน)
PINS ของ ULN2003 IC |
PINS ของมอเตอร์สเต็ปเปอร์ |
ออก 1 |
ส้ม |
ออก 2 |
สีเหลือง |
ออก 3 |
สีชมพู |
ออก 4 |
สีน้ำเงิน |
COM |
สีแดง |
STM32F103C8 พร้อมโพเทนชิออมิเตอร์
โพเทนชิออมิเตอร์ใช้เพื่อกำหนดความเร็วของมอเตอร์สเต็ปเปอร์
POTENTIOMETER |
STM32F103C8 |
ซ้าย (อินพุต) |
3.3 |
ศูนย์ (เอาท์พุท) |
PA4 |
ขวา (GND) |
GND |
หมุน Stepper Motor ด้วย STM32F103C8
ด้านล่างนี้เป็นขั้นตอนไม่กี่ขั้นตอนในการใช้งาน Stepper Motor:
- ตั้งค่าความเร็วของสเต็ปเปอร์มอเตอร์ด้วยโพเทนชิออมิเตอร์ที่แตกต่างกัน
- จากนั้นป้อนขั้นตอนสำหรับการหมุนตามเข็มนาฬิกา (ค่า +) หรือทิศทางทวนเข็มนาฬิกาด้วยตนเอง (- ค่า) ผ่าน SERIAL MONITER ที่มีอยู่ใน ARDUINO IDE (Tools-> Serial monitor) หรือ CTRL + SHIFT + M
- ตามค่าอินพุตที่ระบุในมอนิเตอร์แบบอนุกรมขั้นตอนการหมุนบางขั้นตอนจะเกิดขึ้นในสเต็ปเปอร์มอเตอร์
ตัวอย่างเช่น
ได้รับคุณค่าในการตรวจสอบซีเรียล |
การหมุน |
2591 |
(360) CLK ฉลาด |
1024 |
(180) CLK ฉลาด |
512 |
(90) CLK ฉลาด |
พ.ศ. -2048 |
(-360) ANTI CLK ฉลาด |
-1024 |
(-180) ANTI CLK ฉลาด |
-512 |
(-90) ANTI CLK ฉลาด |
การเขียนโปรแกรม STM32 สำหรับ Stepper Motor
เช่นเดียวกับบทช่วยสอนก่อนหน้านี้เราตั้งโปรแกรม STM32F103C8 ด้วย Arduino IDE ผ่านพอร์ต USB โดยไม่ต้องใช้โปรแกรมเมอร์ FTDI เรียนรู้เกี่ยวกับการเขียนโปรแกรม STM32 ด้วย Arduino IDE ตามลิงค์ เราสามารถดำเนินการเขียนโปรแกรมได้เหมือน Arduino รหัสที่สมบูรณ์ จะได้รับเมื่อสิ้นสุดโครงการ
ก่อนอื่นเราต้องรวมไฟล์ไลบรารี stepper #include
# รวม
จากนั้นเรากำหนดไม่ ของขั้นตอนในการหมุนให้เสร็จสมบูรณ์ที่นี่เราใช้ 32 เพราะเราใช้Full-Step (4 Step-Sequence)ดังนั้น (360/32 = 11.25 องศา) ดังนั้นในขั้นตอนเดียวเพลาจะเคลื่อน 11.25 องศาซึ่งเป็นมุมก้าวย่าง ในลำดับ 4 ขั้นตอนจำเป็นต้องใช้ 4 ขั้นตอนสำหรับการหมุนหนึ่งครั้ง
# กำหนดขั้นตอนที่ 32
นอกจากนี้เรายังสามารถใช้โหมด Half step ซึ่งมีมุมก้าว 8 ลำดับ (360/64 = 5.625)
ขั้นตอนต่อการปฏิวัติ = 360 / STEP ANGLE
ในขณะที่เรากำลังตั้งค่าความเร็วเราต้องใช้ค่าอนาล็อกจาก PA4 ที่เชื่อมต่อกับโพเทนชิออมิเตอร์ ดังนั้นเราต้องประกาศพินสำหรับสิ่งนั้น
const int speedm = PA4
จากนั้นเราได้แปลงค่าอนาล็อกเป็นดิจิทัลโดยการจัดเก็บค่าเหล่านั้นในตัวแปรประเภทจำนวนเต็มหลังจากนั้นเราต้องแมปค่า ADC เพื่อกำหนดความเร็วดังนั้นเราจึงใช้คำสั่งด้านล่าง เรียนรู้เพิ่มเติมเกี่ยวกับการใช้ ADC กับ STM32 ที่นี่
int adc = analogRead (speedm); ผลลัพธ์ int = แผนที่ (adc , 0, 4096, 1, 1023);
ในการตั้งค่าความเร็วเราใช้ stepper.setSpeed (ผลลัพธ์); เรามีช่วงความเร็ว (1-1023)
เราต้องสร้างอินสแตนซ์ดังต่อไปนี้เพื่อกำหนดพินที่เชื่อมต่อกับมอเตอร์ โปรดใช้ความระมัดระวังในขั้นตอนเหล่านี้เนื่องจากส่วนใหญ่ทำผิดพลาดในรูปแบบนี้ พวกเขาให้รูปแบบที่ไม่ถูกต้องและเนื่องจากขดลวดนั้นไม่สามารถให้พลังงานได้
สเต็ปเปอร์สเต็ป (STEPS, PA0, PA2, PA1, PA3);
ข้อความด้านล่างนี้ใช้เพื่อรับค่าของขั้นตอนจากมอนิเตอร์แบบอนุกรม ตัวอย่างเช่นเราต้องการค่า 2048 สำหรับการหมุนเต็มหนึ่งครั้ง (32 * 64 = 2048) นั่นคือ 64 จะเป็นอัตราทดเกียร์และ 32 จะเป็นลำดับครึ่งขั้นสำหรับการหมุนหนึ่งครั้ง
หมุน = Serial.parseInt ();
รหัสด้านล่างใช้เพื่อเรียกอินสแตนซ์และเรียกใช้มอเตอร์หากค่าการ หมุน เป็น 1 จะเรียกฟังก์ชัน stepper หนึ่งครั้งและทำการย้ายครั้งเดียว
stepper.step (หมุน);
รหัสที่สมบูรณ์พร้อมวิดีโอสาธิตได้รับด้านล่าง ตรวจสอบโครงการที่เกี่ยวข้องกับมอเตอร์สเต็ปเปอร์ทั้งหมดได้ที่นี่ด้วยการเชื่อมต่อกับไมโครคอนโทรลเลอร์อื่น ๆ