สารบัญ:

Arduino: Precision Lib สำหรับสเต็ปเปอร์มอเตอร์: 19 ขั้นตอน
Arduino: Precision Lib สำหรับสเต็ปเปอร์มอเตอร์: 19 ขั้นตอน

วีดีโอ: Arduino: Precision Lib สำหรับสเต็ปเปอร์มอเตอร์: 19 ขั้นตอน

วีดีโอ: Arduino: Precision Lib สำหรับสเต็ปเปอร์มอเตอร์: 19 ขั้นตอน
วีดีโอ: EP42 เรียนรู้การทำงานของ Stepper Motor แบบเจาะลึก ไม่ง้อ library 2024, พฤศจิกายน
Anonim
Image
Image
ตัวแปรทั่วโลก
ตัวแปรทั่วโลก

วันนี้ผมจะนำเสนอไลบรารี่สำหรับไดรเวอร์มอเตอร์แบบฟูลสเต็ปที่มีลิมิตสวิตช์ และการเคลื่อนที่ของเครื่องยนต์พร้อมอัตราเร่งและไมโครสเต็ป Lib นี้ซึ่งทำงานได้ทั้งกับ Arduino Uno และ Arduino Mega ช่วยให้คุณย้ายเอ็นจิ้นไม่เพียงแค่ตามจำนวนก้าวเท่านั้น แต่ยังรวมถึงหน่วยมิลลิเมตรด้วย และมันก็ค่อนข้างแม่นยำเช่นกัน

คุณลักษณะที่สำคัญของไลบรารีนี้คือช่วยให้คุณสร้างเครื่อง CNC ของคุณเองซึ่งไม่จำเป็นต้องเป็นเพียง X, Y แต่ยังรวมถึงสวิตช์ส่วนด้วยเช่นเนื่องจากไม่ใช่ GRBL ที่พร้อมใช้งาน แต่เป็นการเขียนโปรแกรมที่ ช่วยให้คุณสร้างเครื่องจักรในอุดมคติสำหรับคุณ

อย่างไรก็ตาม ข้อความต่อไปนี้เป็นรายละเอียดที่สำคัญ! วิดีโอนี้สำหรับผู้ที่คุ้นเคยกับการเขียนโปรแกรมอยู่แล้วเท่านั้น หากคุณไม่คุ้นเคยกับการเขียนโปรแกรม Arduino คุณควรดูวิดีโอแนะนำอื่นๆ ในช่องของฉันก่อน เนื่องจากฉันกำลังพูดถึงหัวข้อขั้นสูงในวิดีโอนี้ และอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับ Lib ที่ใช้ในวิดีโอ: Step Motor with Acceleration และ End of Stroke

ขั้นตอนที่ 1: ไลบรารี StepDriver

ไลบรารีนี้ครอบคลุมไดร์เวอร์ทั่วไปสามประเภทในตลาด: A4988, DRV8825 และ TB6600 โดยกำหนดค่าพินของไดรเวอร์ ทำให้สามารถรีเซ็ตและจัดวางในโหมดสลีปได้ เช่นเดียวกับการเปิดใช้งานและปิดใช้งานเอาต์พุตของมอเตอร์ที่ทำงานบนพิน Enable นอกจากนี้ยังตั้งค่าอินพุตของพินไมโครสเต็ปของไดรเวอร์ และจำกัดสวิตช์และระดับการเปิดใช้งาน (สูงหรือต่ำ) นอกจากนี้ยังมีรหัสการเคลื่อนที่ของมอเตอร์ที่มีการเร่งความเร็วอย่างต่อเนื่องในหน่วย mm/s² ความเร็วสูงสุดเป็น mm/s และความเร็วต่ำสุดเป็น mm/s

สำหรับผู้ที่ดูส่วนที่ 1 และ 2 ของวิดีโอ Step Motor with Acceleration และ End of Stroke ให้ดาวน์โหลดไลบรารี่ใหม่ที่มีให้ในวันนี้ เพราะฉันได้ทำการเปลี่ยนแปลงบางอย่างในไฟล์แรกนั้นเพื่ออำนวยความสะดวกในการใช้งาน

ขั้นตอนที่ 2: ตัวแปรส่วนกลาง

ฉันแสดงให้เห็นอย่างชัดเจนว่าตัวแปรส่วนกลางแต่ละตัวมีไว้เพื่ออะไร

ขั้นตอนที่ 3: ฟังก์ชัน - การตั้งค่าพินไดรเวอร์

ฟังก์ชัน - การตั้งค่าพินไดรเวอร์
ฟังก์ชัน - การตั้งค่าพินไดรเวอร์

ที่นี่ ฉันอธิบายวิธีการบางอย่าง

ฉันตั้งค่า Pinout และพิน Arduino เป็นเอาต์พุต

ขั้นตอนที่ 4: ฟังก์ชัน - ฟังก์ชันพื้นฐานของไดรเวอร์

ฟังก์ชัน - ฟังก์ชันพื้นฐานของไดรเวอร์
ฟังก์ชัน - ฟังก์ชันพื้นฐานของไดรเวอร์

ในส่วนนี้ เราทำงานกับการกำหนดค่าไดรเวอร์และฟังก์ชันพื้นฐาน

ขั้นตอนที่ 5: ฟังก์ชัน - การตั้งค่าขั้นตอนของมอเตอร์

ฟังก์ชัน - การตั้งค่าขั้นของมอเตอร์
ฟังก์ชัน - การตั้งค่าขั้นของมอเตอร์
ฟังก์ชัน - การตั้งค่าขั้นของมอเตอร์
ฟังก์ชัน - การตั้งค่าขั้นของมอเตอร์

ในโค้ดขั้นตอนนี้ เรากำหนดค่าจำนวนขั้นตอนต่อมิลลิเมตรที่มอเตอร์ต้องดำเนินการ

ขั้นตอนที่ 6: ฟังก์ชัน - การตั้งค่าโหมดขั้นตอนของมอเตอร์

ฟังก์ชัน - การตั้งค่าโหมดสเต็ปมอเตอร์
ฟังก์ชัน - การตั้งค่าโหมดสเต็ปมอเตอร์
ฟังก์ชัน - การตั้งค่าโหมดสเต็ปมอเตอร์
ฟังก์ชัน - การตั้งค่าโหมดสเต็ปมอเตอร์
ฟังก์ชัน - การตั้งค่าโหมดสเต็ปมอเตอร์
ฟังก์ชัน - การตั้งค่าโหมดสเต็ปมอเตอร์

ตารางนี้แสดงการตั้งค่าสำหรับโหมดสเต็ปมอเตอร์ นี่คือตัวอย่างบางส่วน.

ขั้นตอนที่ 7: ฟังก์ชัน - การตั้งค่าลิมิตสวิตช์

ฟังก์ชัน - การตั้งค่าลิมิตสวิตช์
ฟังก์ชัน - การตั้งค่าลิมิตสวิตช์

ที่นี่ฉันต้องอ่านค่าทั้งหมดและบูลีน จำเป็นต้องตั้งค่าว่าปุ่มที่ใช้งานจะขึ้นหรือลง ในขณะที่ตั้งค่า endpin ขีดจำกัดสูงสุดและต่ำสุด

ขั้นตอนที่ 8: ฟังก์ชัน - การอ่านลิมิตสวิตช์

ฟังก์ชัน - การอ่านลิมิตสวิตช์
ฟังก์ชัน - การอ่านลิมิตสวิตช์
ฟังก์ชัน - การอ่านลิมิตสวิตช์
ฟังก์ชัน - การอ่านลิมิตสวิตช์
ฟังก์ชัน - การอ่านลิมิตสวิตช์
ฟังก์ชัน - การอ่านลิมิตสวิตช์

ส่วนนี้แตกต่างจากส่วนใน Lib ที่ฉันเผยแพร่เมื่อสัปดาห์ที่แล้ว ทำไมฉันถึงเปลี่ยนมัน? ฉันสร้าง eRead เพื่อแทนที่คนอื่น ที่นี่ eRead จะอ่าน LVL, digitalRead (พิน) และจะคืนค่า TRUE ทั้งหมดนี้จะต้องดำเนินการในระดับสูง การทำงานต่อไปนี้กับคีย์ที่ใช้งานอยู่จะอยู่ที่ระดับต่ำ ฉันจะใช้ที่นี่เพื่อแสดงตาราง "ความจริง" ให้คุณเห็น

ในภาพโค้ด ฉันวางไดอะแกรมที่จะช่วยในการทำความเข้าใจว่า ในส่วนนี้ของซอร์สโค้ด ฉันกำลังมุ่งสู่ Ascending และยังไม่ได้กดปุ่มสิ้นสุดหลักสูตร

ในภาพนี้ โค้ดระบบปฏิบัติการ bool DRV8825 ฉันแสดงให้เห็นว่าเครื่องยนต์ยังคงเคลื่อนที่ไปในทิศทางที่เพิ่มขึ้น อย่างไรก็ตาม สวิตช์จำกัดสูงสุดเปิดใช้งาน กลไกจึงต้องหยุดการเคลื่อนไหว

สุดท้าย ผมแสดงการเคลื่อนไหวเหมือนกัน แต่ในทิศทางตรงกันข้าม

ที่นี่คุณได้เปิดใช้งานสวิตช์สิ้นสุดหลักสูตรแล้ว

ขั้นตอนที่ 9: ฟังก์ชัน - ตั้งค่าการเคลื่อนไหว

ฟังก์ชัน - ตั้งค่าการเคลื่อนไหว
ฟังก์ชัน - ตั้งค่าการเคลื่อนไหว

ยูทิลิตี้หลักของวิธี motionConfig คือการแปลงมิลลิเมตรต่อวินาที (การวัดที่ใช้ในเครื่อง CNC) เป็นขั้นตอน เพื่อให้ตรงตามตัวควบคุมของสเต็ปเปอร์มอเตอร์ ดังนั้น ในส่วนนี้ ฉันจึงยกตัวอย่างตัวแปรเพื่อให้เข้าใจขั้นตอน ไม่ใช่มิลลิเมตร

ขั้นตอนที่ 10: ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว

ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว

ในขั้นตอนนี้ เราปฏิบัติต่อคำสั่งที่ย้ายขั้นตอนในทิศทางที่ต้องการในช่วงเวลาเป็นไมโครวินาที เรายังตั้งค่าพินทิศทางของคนขับ เวลาหน่วง และทิศทางของลิมิตสวิตช์

ขั้นตอนที่ 11: ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ตัวแปร

ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ตัวแปร
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ตัวแปร

ในส่วนนี้ เรากำหนดค่าตัวแปรทั้งหมดที่เกี่ยวข้องกับช่วงเวลาของความเร็วสูงสุดและต่ำสุด ระยะทางของวิถี และขั้นตอนที่จำเป็นในการขัดจังหวะวิถี และอื่นๆ

ขั้นตอนที่ 12: ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - การเร่งความเร็ว

ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การเร่งความเร็ว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การเร่งความเร็ว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การเร่งความเร็ว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การเร่งความเร็ว

ในที่นี้ ฉันขอนำเสนอรายละเอียดบางอย่างเกี่ยวกับวิธีที่เรามาถึงข้อมูลอัตราเร่ง ซึ่งคำนวณจากสมการของ Torricelli เนื่องจากจะคำนึงถึงช่องว่างในการเร่งความเร็ว ไม่ใช่เวลา แต่สิ่งสำคัญคือต้องเข้าใจว่าสมการทั้งหมดนี้เป็นเพียงโค้ดบรรทัดเดียวเท่านั้น

เราระบุรูปราวสำหรับออกกำลังกายในภาพด้านบน เนื่องจาก RPM เริ่มต้นไม่ดีสำหรับสเต็ปเปอร์มอเตอร์ส่วนใหญ่ สิ่งเดียวกันนี้เกิดขึ้นกับการชะลอตัว ด้วยเหตุนี้ เราจึงเห็นภาพสี่เหลี่ยมคางหมูในช่วงเวลาระหว่างการเร่งความเร็วและการชะลอตัว

ขั้นตอนที่ 13: ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง

ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง

ในที่นี้ เราเก็บจำนวนขั้นที่ใช้ในการเร่งความเร็ว ดำเนินการต่อด้วยความเร็วต่อเนื่อง และคงความเร็วสูงสุดไว้ดังภาพด้านล่าง

ขั้นตอนที่ 14: ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - การชะลอตัว

ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การชะลอตัว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การชะลอตัว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การชะลอตัว
ฟังก์ชั่น - ฟังก์ชั่นการเคลื่อนไหว - การชะลอตัว

เรามีสมการอื่น คราวนี้มีค่าความเร่งติดลบ นอกจากนี้ยังแสดงเป็นบรรทัดโค้ด ซึ่งแสดงในรูปสี่เหลี่ยมผืนผ้าที่ชื่อ Deceleration ในภาพด้านล่าง

ขั้นตอนที่ 15: ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง

ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง
ฟังก์ชัน - ฟังก์ชันการเคลื่อนไหว - ความเร็วต่อเนื่อง

เรากลับไปที่ความเร็วต่อเนื่องเพื่อทำงานในครึ่งหลังของวิถีดังที่แสดงด้านล่าง

ขั้นตอนที่ 16: ฟังก์ชัน - ฟังก์ชันย้าย - ย้าย Turns

ฟังก์ชัน - ฟังก์ชันย้าย - ย้ายเทิร์น
ฟังก์ชัน - ฟังก์ชันย้าย - ย้ายเทิร์น

ในส่วนนี้ เราเคลื่อนเครื่องยนต์ตามจำนวนรอบที่กำหนดในทิศทางที่ต้องการ โดยแปลงจำนวนรอบเป็นมิลลิเมตร สุดท้าย เราย้ายมอเตอร์ไปในทิศทางที่ร้องขอ

ขั้นตอนที่ 17: แผนภูมิแบบเคลื่อนไหว - ตำแหน่ง Velocity

แผนภูมิแบบเคลื่อนไหว - ตำแหน่ง Velocity
แผนภูมิแบบเคลื่อนไหว - ตำแหน่ง Velocity

ในกราฟนี้ ผมมีข้อมูลที่ดึงมาจากสมการที่เราใช้ในส่วนของ Acceleration ฉันเอาค่าและเล่นบนอนุกรม Arduino และฉันไปจากสิ่งนี้เป็น Excel ซึ่งส่งผลให้ตารางนี้ ตารางนี้แสดงความคืบหน้าของขั้นตอน

ขั้นตอนที่ 18: แผนภูมิแบบเคลื่อนไหว - ตำแหน่งเทียบกับ ตำแหน่ง

แผนภูมิแบบเคลื่อนไหว - ตำแหน่งเทียบกับ ตำแหน่ง
แผนภูมิแบบเคลื่อนไหว - ตำแหน่งเทียบกับ ตำแหน่ง

ในที่นี้ เราใช้ตำแหน่งเป็นขั้นและความเร็วแล้วแปลงเป็นคาบเป็นไมโครวินาที เราสังเกตในขั้นตอนนี้ว่าคาบเป็นสัดส่วนผกผันกับความเร็ว

ขั้นตอนที่ 19: แผนภูมิแบบเคลื่อนไหว - ความเร็วเทียบกับ ช่วงเวลา

แผนภูมิแบบเคลื่อนไหว - ความเร็วเทียบกับ ช่วงเวลา
แผนภูมิแบบเคลื่อนไหว - ความเร็วเทียบกับ ช่วงเวลา

สุดท้าย เรามีความเร็วเป็นฟังก์ชันของทันที และด้วยเหตุนี้ เรามีเส้นตรง เนื่องจากเป็นความเร็วเป็นฟังก์ชันของเวลา

แนะนำ: