สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ฟังก์ชั่นห้องสมุด
- ขั้นตอนที่ 2: เรียกใช้ตัวอย่าง SpeedStepperPlot โดยไม่ต้องใช้มอเตอร์
- ขั้นตอนที่ 3: เรียกใช้ตัวอย่าง SpeedStepperProfile โดยไม่ต้องใช้มอเตอร์
- ขั้นตอนที่ 4: เรียกใช้ตัวอย่าง SpeedStepperSetup โดยไม่ต้องใช้มอเตอร์
- ขั้นตอนที่ 5: เวลาในการตอบสนอง
- ขั้นตอนที่ 6: เรียกใช้ SpeedStepperSetup ด้วย Stepper Motor และ SparkFun Redboard Turbo
วีดีโอ: เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ไลบรารี SpeedStepper นี้เป็นการเขียนใหม่ของไลบรารี AccelStepper เพื่อให้สามารถควบคุมความเร็วของสเต็ปเปอร์มอเตอร์ได้ ไลบรารี SpeedStepper ให้คุณเปลี่ยนความเร็วของมอเตอร์ที่ตั้งไว้ จากนั้นเร่ง/ลดความเร็วเป็นความเร็วที่ตั้งไว้ใหม่โดยใช้อัลกอริทึมเดียวกันกับไลบรารี AccelStepper ไลบรารี SpeedStepper ยังช่วยให้คุณสามารถตั้งค่าขีด จำกัด บวกและลบและตำแหน่ง 'บ้าน' มีคำสั่ง goHome เพื่อกลับไปยังตำแหน่งบ้าน
ข้อจำกัด: ไลบรารี SpeedStepper ขับเคลื่อนเฉพาะเอาต์พุตทิศทางและสเต็ป ดังนั้นจำเป็นต้องเชื่อมต่อกับไดรเวอร์มอเตอร์ เช่น Easy Driver เพื่อขับเคลื่อนสเต็ปเปอร์มอเตอร์จริงๆ ไลบรารี AccelStepper มีตัวเลือกการขับขี่เพิ่มเติมซึ่งสามารถคัดลอกไปยังไลบรารีนี้หากจำเป็น
มีตัวอย่างภาพสเก็ตช์สามแบบ ซึ่งแต่ละแบบสามารถเรียกใช้ได้โดยไม่ต้องใช้มอเตอร์หรือตัวขับมอเตอร์ speedStepperPlot ร่างปัญหาตัวอย่างคำสั่งความเร็วและคำสั่ง goHome และสร้างพล็อตของความเร็วและตำแหน่งที่ได้ สเก็ตช์ speedStepperSetup ให้การตั้งค่าที่ขับเคลื่อนด้วยเมนูเพื่อตั้งค่าบ้านและขีดจำกัดของมอเตอร์ จากนั้นเรียกใช้มอเตอร์และปรับความเร็วขึ้นและลงและ goHome จนจบ สเก็ตช์ speedStepperProfile แสดงตัวอย่างการตั้งค่าและดำเนินการโปรไฟล์ความเร็ว
ในขณะที่ไลบรารี AccelStepper ให้การควบคุมตำแหน่งที่ดี จำเป็นต้องมีการควบคุมความเร็วสำหรับ Prototype Ice-Melting Probe สำหรับการรวบรวมตัวอย่างชีวภาพบน Europa นี่คือวิดีโอของต้นแบบรุ่นก่อนหน้าซึ่งใช้น้ำหนักแทนมอเตอร์ การแก้ไข 1.1 เพิ่มโปรไฟล์ความเร็วหลังจากที่ผู้ใช้ร้องขอวิธีการควบคุมโปรไฟล์ความเร็วของปั๊ม
ไลบรารีนี้ทำงานบน Arduino Uno และ Mega2560 แต่สำหรับต้นแบบนั้น ใช้หน่วยความจำที่ใหญ่กว่า/โปรเซสเซอร์ที่เร็วกว่า SparkFun Redboard Turbo
คำแนะนำนี้มีให้ทางออนไลน์ที่ Stepper Speed Control Library สำหรับ Arduino
เสบียง
ในการรันตัวอย่างสเก็ตช์ Arduino UNO หรือ Mega2560 เท่านั้นและจำเป็นต้องมีไลบรารีซอฟต์แวร์
สำหรับการทดสอบม้านั่งของห้องสมุด SparkFun Redboard Turbo ถูกใช้กับ Easy Driver, 200 สเต็ป/รอบ, สเต็ปเปอร์มอเตอร์ 12V 350mA และการจ่ายไฟ 12 DC 2A หรือใหญ่กว่า เช่น https://www.sparkfun.com/products/14934. สายเคเบิล USB A ถึง MicroUSB to TTL Serial CableArduino IDE V1.8.9 และคอมพิวเตอร์ที่เปิดใช้งานไลบรารี SpeedStepperpfodParser สำหรับ nonBlockingInput และ pfodBufferedStream คลาส millisDelay library สำหรับความล่าช้าที่ไม่บล็อก
ขั้นตอนที่ 1: ฟังก์ชั่นห้องสมุด
ไลบรารี SpeedStepper เรียกใช้สเต็ปเปอร์มอเตอร์ที่จำกัดโดยขอบเขตที่กำหนดโดยไลบรารี ดูไฟล์ SpeedStepper.h สำหรับวิธีการต่างๆ ของไลบรารีที่มีอยู่ นี่คือโครงร่างของตรรกะเบื้องหลังพวกเขา
ติดตามตำแหน่งของสเต็ปโดยการนับจำนวนก้าว (พัลส์) ไลบรารีจำกัดตำแหน่งที่จะอยู่ระหว่างตำแหน่ง setPlusLimit(int32_t) และ setMinusLimit(int32_t) ขีดจำกัดบวกเสมอ >= 0 และขีดจำกัดลบเสมอ <= 0 เมื่อเริ่มต้น ตำแหน่งมอเตอร์คือ 0 (บ้าน) และขีดจำกัดถูกกำหนดเป็นตัวเลข +/- ที่มีขนาดใหญ่มาก (ประมาณ +/-1e9) setAcceleration(float) กำหนดความเร็วของมอเตอร์ที่จะเปลี่ยนความเร็วขึ้นหรือลง เมื่อมอเตอร์เข้าใกล้ขีดจำกัดบวกหรือลบ มอเตอร์จะชะลอตัวในอัตรานี้จนกว่าจะหยุดที่ขีดจำกัด เมื่อเริ่มต้นการเร่งความเร็วถูกตั้งไว้ที่ 1.0 ขั้นตอน/วินาที/วินาที การตั้งค่าความเร่งจะเป็นตัวเลข +ve เสมอ เครื่องหมายของการตั้งค่า setSpeed(float) จะกำหนดทิศทางที่มอเตอร์จะเคลื่อนที่
setSpeed(float) ตั้งค่าความเร็วในการเร่ง / ลดความเร็วของมอเตอร์เป็นจากความเร็วปัจจุบัน ความเร็วที่สามารถตั้งค่าผ่าน setSpeed(float) ถูกจำกัด ในค่าสัมบูรณ์ โดยการตั้งค่า setMaxSpeed(float) ค่าเริ่มต้น 1,000 ขั้นตอน/วินาที และ setMinSpeed(float) ค่าเริ่มต้น 0.003 ขั้นตอน/วินาที ค่าเริ่มต้นเหล่านี้ยังเป็นขีดจำกัดความเร็วของฮาร์ดโค้ดแบบสัมบูรณ์ที่ไลบรารีจะยอมรับสำหรับ setMaxSpeed() และ setMinSpeed() หากคุณต้องการตั้งค่าความเร็วสูงสุด > 1,000 ขั้นตอน/วินาที คุณจะต้องแก้ไขบรรทัดแรกในไฟล์ SpeedStepper.cpp เพื่อเปลี่ยน maxMaxSpeed(1000) เป็นความเร็วสูงสุดที่คุณต้องการ ในทางปฏิบัติ ความเร็วสูงสุดจะถูกจำกัดด้วยเวลาระหว่างการเรียกใช้เมธอด run() ของไลบรารี สำหรับ 1,000 ขั้นตอน / วินาทีจะต้องเรียกใช้เมธอด run() อย่างน้อยทุก ๆ 1mS ดูส่วนเวลาในการตอบสนองด้านล่าง
การพยายามตั้งความเร็วให้น้อยกว่าความเร็วต่ำสุดจะทำให้มอเตอร์หยุดทำงาน ตัวตั้งค่าเหล่านี้แต่ละตัวมี getter ที่สอดคล้องกัน โปรดดูไฟล์ SpeedStepper.h สำหรับความเร็ว getSetSpeed() จะคืนค่าความเร็วที่คุณกำหนดผ่าน setSpeed() ในขณะที่ getSpeed() จะคืนค่าความเร็วมอเตอร์ปัจจุบันซึ่งแตกต่างกันไปตามการเร่ง/ลดความเร็วตามที่คุณกำหนดความเร็ว หากมอเตอร์ไม่ไปในทิศทางที่คุณนึกถึง +ve คุณสามารถเรียก invertDirectionLogic() เพื่อสลับทิศทางที่มอเตอร์เคลื่อนที่เป็นความเร็ว +ve
getCurrentPosition() คืนค่าตำแหน่งมอเตอร์ปัจจุบันเมื่อเทียบกับ 'home' (0) คุณสามารถแทนที่ตำแหน่งมอเตอร์ปัจจุบัน setCurrentPosition(int32_t) ตำแหน่งใหม่ถูกจำกัดให้อยู่ภายในขีดจำกัดบวก/ลบที่ตั้งไว้
เริ่มแรกมอเตอร์จะหยุดที่ตำแหน่ง 0 การเรียก setSpeed(50.0) จะทำให้มอเตอร์เริ่มเร่งความเร็วในทิศทาง +ve ที่ความเร็วสูงสุด 50 ขั้น/นาที การเรียก hardStop() จะทำให้มอเตอร์หยุดทำงานทันที ในทางกลับกัน การเรียกเมธอด stop() จะทำให้ความเร็วเป็นศูนย์และทำให้มอเตอร์หยุดช้าลง การเรียก stopAndSetHome() จะหยุดมอเตอร์ทันทีและตั้งค่าตำแหน่งเป็น 0 ค่าขีดจำกัดบวก/ลบจะไม่เปลี่ยนแปลง แต่ตอนนี้จะอ้างอิงถึงตำแหน่ง 0 (หลัก) ใหม่นี้ การเรียก goHome() จะทำให้ stepper กลับมาที่ตำแหน่ง 0 (home) และหยุด การเรียก setSpeed() จะยกเลิกการกลับบ้าน
ไลบรารี SpeedStepper ยังให้การควบคุมโปรไฟล์ความเร็วผ่านเมธอด setProfile(SpeedProfileStruct* profileArray, size_t arrayLen), startProfile(), stopProfile() เพื่อขัดจังหวะโปรไฟล์ที่ทำงานอยู่ และ isProfileRunning() ดูตัวอย่างร่าง speedStepperProfile
ขั้นตอนที่ 2: เรียกใช้ตัวอย่าง SpeedStepperPlot โดยไม่ต้องใช้มอเตอร์
ติดตั้ง Arduino IDE V1.8.9 ดาวน์โหลดและติดตั้งไลบรารี SpeedStepper บันทึก SpeedStepper.zip จากนั้นใช้รายการเมนู Arduino IDE Sketch → รวมไลบรารี → เพิ่มไลบรารี. ZIP เพื่อนำเข้าไลบรารี ดาวน์โหลดและติดตั้งไลบรารี millisDelay ด้วย
เปิดตัวอย่าง → SpeedStepper → ร่างตัวอย่าง speedStepperPlot (รีสตาร์ท IDE หากจำเป็น) ร่างนี้ได้รับการกำหนดค่าให้ทำงานกับ Serial เช่น UNO และ Mega เป็นต้น สำหรับการวิ่งบน SparkFun Redboard Turbo ดูด้านล่าง
ตัวอย่างนี้ไม่จำเป็นต้องใช้บอร์ดไดรเวอร์หรือสเต็ปเปอร์มอเตอร์ ตัวอย่างเหล่านี้ใช้ D6 และ D7 เป็นเอาต์พุต คุณสามารถเปลี่ยนพินเอาต์พุตเป็นเอาต์พุตดิจิทัลได้โดยเปลี่ยนการตั้งค่า STEP_PIN และ DIR_PIN ใกล้กับด้านบนของแบบร่าง
อัพโหลดภาพสเก็ตช์ไปที่บอร์ดแล้วเปิด Tools → Serial Plotter ที่ 115200 baud เพื่อแสดงกราฟของความเร็ว (RED) และตำแหน่ง (BLUE) ขีด จำกัด บวกถูกตั้งค่าเป็น 360 ซึ่งทำให้ความเร็วเป็นศูนย์จากประมาณ 100 จุด บนแกน x ขีด จำกัด ลบคือ -510 ตำแหน่งหยุดที่ ~ -390 เนื่องจากต้องการความเร็วเป็น 0.0 ที่จุด 380 บนแกน x จะมีการออก goHome cmd ซึ่งส่งคืน stepper ไปที่ตำแหน่งศูนย์
ภาพร่าง speedStepperPlot นี้ใช้มิลลิวินาทีล่าช้าในการสลับเวลาระหว่างความเร็วและความเร่งที่หลากหลาย ในหลายกรณี การใช้ SpeedStepperProfile นั้นง่ายกว่าในตัวอย่างถัดไป
ขั้นตอนที่ 3: เรียกใช้ตัวอย่าง SpeedStepperProfile โดยไม่ต้องใช้มอเตอร์
เปิด Examples → SpeedStepper → speedStepperPlot ตัวอย่างภาพสเก็ตช์ ภาพร่างนี้สร้างพล็อตด้านบนโดยใช้ Arduino Serial Plotter และเป็นตัวอย่างของการเรียกใช้โปรไฟล์ความเร็วที่กำหนด เช่น หากใช้ปั๊ม
โปรไฟล์ความเร็วของ Stepper ประกอบด้วยอาร์เรย์ของ SpeedProfileStruct ซึ่งกำหนดไว้ในไฟล์ SpeedStepper.h
โครงสร้าง SpeedProfileStruct {
ความเร็วลอย; // ความเร็วเป้าหมายเมื่อสิ้นสุดขั้นตอนนี้ ไม่ได้ลงนาม deltaTms แบบยาว // เวลาเร่งความเร็วจากความเร็วปัจจุบัน (เมื่อเริ่มขั้นตอนนี้) เป็นความเร็วเป้าหมาย };
กำหนดอาร์เรย์ของ SpeedProfileStruct ที่มีความเร็วเป้าหมายสำหรับแต่ละขั้นตอนและเวลา deltaTms ในหน่วย mS เพื่อให้ไปถึงความเร็วเป้าหมายนั้นจากความเร็วเป้าหมายก่อนหน้า หาก deltaTms เป็นศูนย์หรือเล็กมาก ความเร็วก็จะกระโดดไปที่ความเร็วเป้าหมายใหม่ทันที มิฉะนั้น ความเร่งที่ต้องการจะถูกคำนวณ setAcceleration() จะถูกเรียกตามด้วยการเรียก setSpeed() สำหรับความเร็วเป้าหมายใหม่ ในทุกกรณี โปรไฟล์จะถูกจำกัดโดยขีดจำกัดตำแหน่งบวกและลบที่มีอยู่และการตั้งค่าความเร็วสูงสุด/นาทีที่มีอยู่ หากคุณต้องการรักษาความเร็ว ให้ทำซ้ำความเร็วก่อนหน้ากับเวลาที่คุณต้องการให้คงที่ เนื่องจากความเร็วเป้าหมายใหม่จะเหมือนกับความเร็วปัจจุบัน ความเร่งที่คำนวณได้จะเป็นศูนย์ และไม่มีการเปลี่ยนแปลงใดๆ เกิดขึ้นกับความเร็ว
อาร์เรย์ SpeedProfileStruct นี้สร้างพล็อตด้านบน
โปรไฟล์ const SpeedProfileStruct = { { 0, 0}, // หยุดทันทีหากยังไม่หยุด { 0, 1000}, // ถือศูนย์เป็นเวลา 1 วินาที { -50, 0}, // ข้ามไปที่ -50 { -200, 2000}, // ทางลาดไปที่ -200 { -200, 6000}, // กดที่ -200 เป็นเวลา 6 วินาที { -50, 2000}, // ลาดลงไปที่ -50 { 0, 0}, // // หยุดทันที { 0, 1500}, // ถือศูนย์เป็นเวลา 1.5 วินาที { 50, 0}, // ข้ามไปที่ 50 {200, 2000}, // เลื่อนไปที่ 200 {200, 6000}, // กด 200 เป็นเวลา 6 วินาที { 50, 2000}, // ลาดไปที่ 50 { 0, 0}, // // หยุดทันที { 0, 1000} // ถือศูนย์ // สำหรับการวางแผนเอาต์พุต }; const size_t PROFILE_LEN = sizeof (โปรไฟล์) / sizeof (SpeedProfileStruct); // คำนวณขนาดของอาร์เรย์โปรไฟล์
โปรไฟล์ถูกกำหนดโดยการเรียก setProfile(SpeedProfileStruct* profileArray, size_t arrayLen) เช่น stepper.setProfile(โปรไฟล์, PROFILE_LEN);
เมื่อตั้งค่าโปรไฟล์แล้ว ให้เรียก startProfile() เพื่อเริ่มทำงานจากความเร็วมอเตอร์ปัจจุบัน (โดยปกติ คุณจะเริ่มจากการหยุด) ในตอนท้ายของโปรไฟล์ มอเตอร์จะทำงานต่อไปที่ความเร็วเป้าหมายสุดท้าย สามารถเรียกเมธอด isProfileRunning() เพื่อดูว่าโปรไฟล์ยังทำงานอยู่หรือไม่ หากคุณต้องการหยุดโปรไฟล์ก่อนกำหนด คุณสามารถเรียก stopProfile() ซึ่งจะละทิ้งโปรไฟล์และหยุดมอเตอร์
ขั้นตอนที่ 4: เรียกใช้ตัวอย่าง SpeedStepperSetup โดยไม่ต้องใช้มอเตอร์
ตัวอย่างสเก็ตช์ได้รับการออกแบบให้เป็นพื้นฐานสำหรับการใช้งานสเต็ปเปอร์มอเตอร์ของคุณเอง มันมีอินเทอร์เฟซที่ขับเคลื่อนด้วยเมนูซึ่งช่วยให้คุณย้ายไปยังมอเตอร์ไปยังตำแหน่งเริ่มต้น หากยังไม่มี จากนั้นให้เลือกรีเซ็ตขีดจำกัดบวกและลบ จากนั้นจึงเรียกใช้มอเตอร์ภายในช่วงนั้น เมนู 'วิ่ง' ให้คุณเพิ่มและลดความเร็ว หยุดความเร็วปัจจุบัน หยุด และกลับบ้านได้
ภาพร่างนี้แสดงคุณลักษณะของซอฟต์แวร์จำนวนหนึ่งที่ช่วยให้ลูป () ตอบสนองได้ เพื่อให้คุณสามารถเพิ่มอินพุตเซ็นเซอร์ของคุณเองเพื่อควบคุมสเต็ปเปอร์ ต้องใช้ความพยายามอย่างมากในการหลีกเลี่ยงความล่าช้าที่อาจขัดขวางการควบคุมความเร็ว (ดูความล่าช้าเป็นสิ่งชั่วร้าย)
ติดตั้งไลบรารีที่ใช้สำหรับการเรียกใช้ SpeedStepperPlot ด้านบน แล้วติดตั้งไลบรารี pfodParser ด้วย ไลบรารี pfodParser จัดเตรียมคลาส NonBlockingInput และ pfodBufferedStream ที่ใช้ในการจัดการกับอินพุตของผู้ใช้และเอาต์พุตเมนูด้วยการบล็อกลูป () ไม่ให้ทำงาน
เปิด ตัวอย่าง → SpeedStepper → ตัวอย่าง speedSpeedSetup ร่างนี้ได้รับการกำหนดค่าให้ทำงานกับ Serial เช่น UNO และ Mega เป็นต้น สำหรับการวิ่งบน SparkFun Redboard Turbo ดูด้านล่าง
ตัวอย่างนี้ไม่จำเป็นต้องใช้บอร์ดไดรเวอร์หรือสเต็ปเปอร์มอเตอร์ ตัวอย่างเหล่านี้ใช้ D6 และ D7 เป็นเอาต์พุต คุณสามารถเปลี่ยนพินเอาต์พุตเป็นเอาต์พุตดิจิทัลได้โดยเปลี่ยนการตั้งค่า STEP_PIN และ DIR_PIN ใกล้กับด้านบนของแบบร่าง อัพโหลดภาพสเก็ตช์ไปที่บอร์ด จากนั้นเปิด Tools → Serial Monitor ที่ 115200 เพื่อดูเมนู SETUP
SETUP pos:0 sp:0.00 +Lim:500000 -Lim:-500 LATENCY: stepper:492uS loop:0uS p -- ตั้งค่าหน้าแรก l -- ตั้งค่าขีดจำกัด h -- goHome r -- รัน >
เมื่อสเก็ตช์รัน ตำแหน่งปัจจุบันของสเต็ปเปอร์จะถูกนำไปที่ตำแหน่ง 'บ้าน' (0) หากคุณต้องการจัดตำแหน่ง stepper ใหม่ให้อยู่ในตำแหน่ง 'home' ที่แท้จริง ให้ป้อนคำสั่ง p เพื่อแสดงเมนู SET HOME
SET HOME pos:0 sp:0.00 +Lim:1073741808 -Lim:-1073741808 LATENCY: stepper:752uS loop:3852uS x -- setHome here and exit + -- Forward - -- Reverse s -- swap Forward/Reverse -- hardStop >
อย่างที่คุณเห็นขีด จำกัด ที่เขียนไว้ในภาพร่างถูกลบออก ดังนั้นคุณจึงสามารถจัดตำแหน่ง stepper ใหม่ได้ทุกที่ คุณต้องดูแลไม่ให้มันขับเกินขีดจำกัดทางกายภาพ มิฉะนั้น คุณอาจทำบางสิ่งพัง
ใช้ + cmd เพื่อเริ่มเคลื่อน stepper ไปข้างหน้า หากคุณพบว่ามันเคลื่อนที่ไปในทิศทางที่ไม่ถูกต้อง ให้ป้อนคำสั่งที่ไม่ใช่คำสั่งหรือเพียงแค่บรรทัดว่างเพื่อหยุดมัน จากนั้นใช้คำสั่ง scommand เพื่อเปลี่ยนทิศทางของ Forward คุณควรอัปเดตภาพร่างเพื่อรวมการเรียก invertDirectionLogic() ในการตั้งค่าเพื่อแก้ไขปัญหานี้สำหรับการเรียกใช้ครั้งต่อไป
ใช้ + / - cmds เพื่อจัดตำแหน่ง stepper ให้อยู่ในตำแหน่งศูนย์ที่ถูกต้อง มอเตอร์สตาร์ทช้าแล้วเพิ่มความเร็วขณะวิ่ง เพียงใช้และเว้นบรรทัดเพื่อหยุด ความเร็วสูงสุดสำหรับสิ่งนี้และเมนูจำกัดถูกกำหนดโดย MAX_SETUP_SPEED ที่ด้านบนของ setupMenus.cpp
เมื่อวางมอเตอร์ไว้ที่ตำแหน่ง 'หลัก' แล้ว ให้ใช้ x cmd เพื่อตั้งค่าตำแหน่งปัจจุบันใหม่เป็น 0 และกลับไปที่เมนู SETUP
หากคุณต้องการตั้งค่าขีดจำกัด ปกติเฉพาะในการตั้งค่าเริ่มต้น ให้ใช้ l cmd เพื่อเข้าสู่เมนู SET LIMITS
SET LIMITS pos:0 sp:0.00 +Lim:1073741808 -Lim:-1073741808 LATENCY: stepper:944uS loop:5796uS l -- setLimit here + -- Forward - -- Reverse h -- goHome x -- exit -- hardStop >
ใช้ + cmd เพื่อส่งต่อไปยังขีด จำกัด บวกมากขึ้นจากนั้นใช้ l cmd เพื่อตั้งค่าเป็นขีด จำกัด บวก คำสั่ง h สามารถใช้เพื่อกลับไปเป็น 0 และ – cmd ใช้เพื่อเคลื่อนที่หากย้อนกลับไปยังตำแหน่งมอเตอร์ที่ขีด จำกัด ลบ ใช้ l cmd อีกครั้งเพื่อตั้งค่าขีด จำกัด ลบ สังเกตตำแหน่งของขีด จำกัด บวกและลบและอัปเดตคำสั่ง setPlusLimit และ setMinusLimit ของเมธอด setup() ด้วยค่าเหล่านี้
เมื่อตั้งค่าขีดจำกัดแล้ว ให้ใช้ x cmd เพื่อกลับไปที่เมนู SETUP จากนั้นคุณสามารถใช้ r cmd เพื่อเปิดเมนู RUN
RUN MENU pos:0 sp:3.31 +Lim:500000 -Lim:-500 LATENCY: stepper:944uS loop:5796uS + -- Speed up - -- Speed down h -- goHome -- hardStop -- หยุดความเร็ว >+ pos:4 sp:9.49 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop:5664uS pos:42 sp:29.15 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop:5664uS pos:120 sp:49.09 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop:5664uS pos:238 sp:69.06 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop: 5664uS
+ cmd เริ่มเร่งความเร็วในทิศทางไปข้างหน้าและพิมพ์ตำแหน่งและความเร็วทุก 2 วินาที เมื่อมอเตอร์ถึงความเร็วที่คุณต้องการ คุณสามารถหยุดการเร่งความเร็วด้วยปุ่มอื่นๆ (หรืออินพุตที่ว่างเปล่า) คุณสามารถลดความเร็วโดยใช้ – cmd down เพื่อหยุด หากหยุด – cmd จะเร่งถอยหลัง
เมนู RUN นี้ให้การควบคุมด้วยตนเองสำหรับโปรเจ็กต์ของคุณ สำหรับการควบคุมอัตโนมัติ คุณจะต้องเพิ่มเซ็นเซอร์อื่นๆ
ขั้นตอนที่ 5: เวลาในการตอบสนอง
การควบคุมสเต็ปเปอร์มอเตอร์ขึ้นอยู่กับซอฟต์แวร์ที่สั่งการทุกขั้นตอน เพื่อรักษาความเร็วที่ตั้งไว้ สเก็ตช์ของคุณต้องเรียกใช้เมธอด stepper.run() บ่อยพอที่จะทำขั้นตอนต่อไปในเวลาที่เหมาะสมสำหรับความเร็วปัจจุบัน สำหรับการควบคุมผ่านเซ็นเซอร์ คุณจะต้องสามารถประมวลผลการวัดใหม่ได้ทันที การพิมพ์ตำแหน่ง/ความเร็วประกอบด้วยการวัด LATENCY สองครั้งเพื่อให้คุณตรวจสอบว่าร่างของคุณเร็วพอ
เวลาแฝงของ Stepper (pfobufferedStream)
เวลาแฝงของ stepper วัดความล่าช้าสูงสุดระหว่างการเรียกต่อเนื่องไปยังเมธอด stepper.run() ในการรันสเต็ปเปอร์มอเตอร์ที่ 1,000 ขั้นตอนต่อวินาที เวลาแฝงของสเต็ปต้องน้อยกว่า 1,000uS (1mS) เวอร์ชันแรกของภาพร่างนี้มีเวลาแฝงหลายมิลลิวินาที เพื่อเอาชนะการเรียกพิเศษนี้ไปยังเมธอด runStepper() (ซึ่งเรียก stepper.run()) ซึ่งเพิ่มผ่านโค้ด สิ่งนี้ไม่สามารถแก้ปัญหาได้อย่างสมบูรณ์เนื่องจากเมนูและคำสั่งการพิมพ์ผลลัพธ์บล็อกร่างเมื่อบัฟเฟอร์ Serial Tx ขนาดเล็กเต็ม เพื่อหลีกเลี่ยงการบล็อกนี้ pfodBufferedStream จากไลบรารี pfodParser ถูกใช้เพื่อเพิ่มบัฟเฟอร์การพิมพ์เอาต์พุต 360 ไบต์ที่คำสั่งการพิมพ์สามารถเขียนได้อย่างรวดเร็ว จากนั้น pfodBufferedStream จะปล่อยไบต์ที่อัตรา baud ที่ระบุ 115200 ในกรณีนี้ pfodBufferedStream ต้องมีตัวเลือกในการบล็อกเมื่อบัฟเฟอร์เต็มหรือเพียงแค่ปล่อยอักขระล้น ที่นี่มันถูกตั้งค่าให้ปล่อยตัวอักษรพิเศษใด ๆ เมื่อบัฟเฟอร์เต็มเพื่อไม่ให้ร่างภาพถูกบล็อกรอให้ Serial ส่งตัวอักษร
เวลาในการตอบสนองของลูป (NonBlockingInput)
เวลาแฝงของลูปจะวัดความล่าช้าสูงสุดระหว่างการเรียกใช้เมธอด loop() ที่ต่อเนื่องกัน การตั้งค่านี้จะกำหนดความเร็วในการประมวลผลการวัดเซ็นเซอร์ใหม่และปรับความเร็วของชุดมอเตอร์ ความรวดเร็วจะต้องขึ้นอยู่กับสิ่งที่คุณพยายามจะควบคุม
ความล่าช้าเนื่องจากคำสั่งการพิมพ์ถูกลบออกโดยใช้ pfodBufferedStream ด้านบน แต่ในการประมวลผลอินพุตของผู้ใช้ คุณต้องใช้อักขระตัวแรกของอินพุตและละเว้นส่วนที่เหลือของบรรทัด คลาส NonBlockingInput ในไลบรารี pfodParer ใช้เพื่อส่งคืนถ่านที่ไม่ใช่ศูนย์เมื่อมีอินพุตโดยใช้ readInput () และเพื่อล้างและทิ้งอักขระต่อไปนี้โดยใช้ clearInput () จนกว่าจะไม่ได้รับอักขระใด ๆ สำหรับ 10mS โดยไม่บล็อกการวนซ้ำ ()
แน่นอนว่าเวลาแฝงของลูปจะเพิ่มขึ้นตามโค้ดพิเศษที่คุณเพิ่มเพื่ออ่านเซ็นเซอร์และคำนวณความเร็วที่ตั้งไว้ใหม่ ไลบรารีเซ็นเซอร์จำนวนมากใช้การหน่วงเวลา (..) ระหว่างการเริ่มการวัดและการดึงผลลัพธ์ คุณจะต้องเขียนไลบรารีเหล่านี้ใหม่เพื่อใช้ millisDelay แทน เพื่อรับการวัดหลังจากดีเลย์ที่ไม่บล็อกที่เหมาะสม
ขั้นตอนที่ 6: เรียกใช้ SpeedStepperSetup ด้วย Stepper Motor และ SparkFun Redboard Turbo
ในการรันร่าง SpeedStepperSetup อย่างแท้จริง คุณจะต้องมีสเต็ปเปอร์มอเตอร์ ไดรเวอร์ และพาวเวอร์ซัพพลาย และในตัวอย่างนี้ SparkFun Redboard Turbo
แผนภาพการเดินสายไฟด้านบน (เวอร์ชัน pdf) แสดงการเชื่อมต่อ ในภาพร่าง SpeedStepperSetup ให้เปลี่ยนการกำหนด SERIAL เป็น #define SERIAL Serial1
สเต็ปเปอร์มอเตอร์ พาวเวอร์ซัพพลาย ไดรเวอร์ และการป้องกัน
สเต็ปเปอร์มอเตอร์มีหลายประเภทและหลายขนาด ที่นี่ใช้สเต็ปเปอร์มอเตอร์ 12V 350mA สองคอยล์สำหรับการทดสอบ ในการจ่ายไฟให้กับสเต็ปเปอร์นี้ คุณต้องใช้แหล่งจ่ายไฟ 12V หรือมากกว่าและมากกว่า 350mA
ไลบรารีนี้ให้เฉพาะทิศทางและเอาต์พุตของขั้นตอน ดังนั้นคุณจึงจำเป็นต้องมีไดรเวอร์เพื่อเชื่อมต่อกับสเต็ปเปอร์มอเตอร์ Easy Driver และ Big Easy Driver ควบคุมกระแสไฟไปยังคอยล์ของมอเตอร์ คุณจึงสามารถใช้แหล่งจ่ายไฟที่มีแรงดันไฟฟ้าสูงกว่าได้อย่างปลอดภัย เช่น การใช้แหล่งจ่ายไฟ 6V สำหรับมอเตอร์ 3.3V Easy Driver สามารถจ่ายกระแสไฟได้ระหว่าง 150mA/ขดลวด และ 700mA/ม้วน สำหรับกระแสที่สูงขึ้น Big Easy Driver สามารถจ่ายได้ถึง 2A ต่อม้วน อ่านคำถามที่พบบ่อยที่ด้านล่างของหน้า Easy Drive
ตัวอย่างเหล่านี้ใช้ D6 และ D7 เป็นเอาต์พุตขั้นตอนและทิศทาง คุณสามารถเปลี่ยนพินเอาต์พุตเป็นเอาต์พุตดิจิทัลได้โดยเปลี่ยนการตั้งค่า STEP_PIN และ DIR_PIN ใกล้กับด้านบนของแบบร่าง
การเขียนโปรแกรม Sparkfun Redboard Turbo
การเขียนโปรแกรม Redboard Turbo มีปัญหาหากไม่สามารถตั้งโปรแกรมได้ ก่อนอื่นให้กดปุ่มรีเซ็ตหนึ่งครั้งแล้วเลือกพอร์ต COM ใหม่ในเมนูเครื่องมือ Arduino แล้วลองอีกครั้ง หากไม่ได้ผล ให้กดปุ่มรีเซ็ตสองครั้งแล้วลองอีกครั้ง
การเดินสาย Easy Driver
สเต็ปเปอร์มอเตอร์ 2 ตัวมี 4 สาย ใช้มัลติมิเตอร์เพื่อค้นหาคู่ที่เชื่อมต่อกับคอยล์แต่ละตัว จากนั้นต่อคอยล์ตัวหนึ่งเข้ากับขั้วต่อ Easy Driver A และอีกขั้วหนึ่งเข้ากับขั้ว B ไม่สำคัญว่าคุณจะต่อสายไปทางใดเพราะคุณสามารถใช้ s cmd ในเมนูตั้งค่าเพื่อสลับทิศทางของการเคลื่อนไหว
แหล่งจ่ายไฟของมอเตอร์เชื่อมต่อกับ M+ และ GND ตั้งค่าระดับลอจิกของบอร์ดด้วยลิงก์ 3/5V ย่อลิงค์เข้าด้วยกันสำหรับเอาต์พุตไมโครโปรเซสเซอร์ 3.3V เช่น SparkFun Redboard Turbo (หากคุณเปิดทิ้งไว้ มันเหมาะสำหรับสัญญาณดิจิตอล 5V เช่น UNO, Mega)เชื่อมต่อพิน GND, STEP, DIR เข้ากับไมโครโปรเซสเซอร์ GND และขั้นตอนและ dir output pins ไม่จำเป็นต้องมีการเชื่อมต่ออื่น ๆ ในการขับเคลื่อนมอเตอร์
สายเคเบิลอนุกรม USB เป็น TTL
เมื่อย้ายร่าง SpeedStepperSetup จาก Uno/Mega ไปยัง Redboard Turbo คุณอาจเพียงแค่แทนที่ #define SERIAL Serial ด้วย #define SERIAL SerialUSB เพื่อให้เหมาะกับการเชื่อมต่อ USB แบบอนุกรม Redboard Turbo อย่างไรก็ตาม คุณจะพบว่าเวลาแฝงของ stepper ที่ได้นั้นอยู่ที่ประมาณ 10mS ซึ่งช้ากว่า UNO ถึง 10 เท่า เนื่องจากซีพียู Redboard จัดการกับการเชื่อมต่อ USB เมื่อต้องการทำเช่นนี้ ให้เชื่อมต่อสายเคเบิลอนุกรม USB เข้ากับ TTL กับ D0/D1 และตั้งค่า#define SERIAL Serial1 เพื่อใช้การเชื่อมต่อแบบอนุกรมของฮาร์ดแวร์เพื่อควบคุมสเต็ปเปอร์มอเตอร์ การใช้ Serial1 ให้ LATENCY: stepper:345uS loop:2016uS ซึ่งเร็วกว่า 3 เท่าจาก UNO สำหรับ stepper และ loop latency
โปรแกรมเทอร์มินัล
Arduino Serial Monitor นั้นยากกว่าเล็กน้อยในการควบคุมสเต็ปเปอร์มอเตอร์ เนื่องจากคุณต้องป้อนอักขระในบรรทัด cmd แล้วกด Enter เพื่อส่ง วิธีตอบสนองที่รวดเร็วกว่าคือการเปิดหน้าต่างเทอร์มินัล TeraTerm สำหรับพีซี (หรือ CoolTerm Mac) ที่เชื่อมต่อกับพอร์ต COM ของสาย USB เป็น TTL จากนั้นในหน้าต่างนั้นการกดปุ่ม cmd จะส่งทันที กด Enter เพียงส่งบรรทัดว่าง
การตั้งค่าช่วงความเร็วมอเตอร์
ตามการเชื่อมต่อด้านบน Easy Drive ได้รับการกำหนดค่าสำหรับขั้นตอนที่ 1/8 ดังนั้น 1000 ขั้นตอน/วินาทีจะทำให้มอเตอร์หมุนที่ 1000/8 / 200 ขั้น/รอบ = 0.625 รอบต่อวินาทีหรือสูงสุด 37.5 รอบต่อนาที โดยการเปลี่ยนอินพุตเป็น MS1/MS2 คุณสามารถสลับระหว่าง 1/8, ¼, ½ และขั้นตอนทั้งหมดได้ สำหรับขั้นตอนทั้งหมด ให้เชื่อมต่อทั้ง MS1 และ MS2 กับ GND ซึ่งจะทำให้ความเร็วได้ถึง 300 รอบต่อนาที การเลือกการตั้งค่า MS1/MS2 ที่เหมาะสมจะช่วยให้คุณสามารถปรับอัตราทดเกียร์ที่ติดตั้งไว้ระหว่างมอเตอร์และชิ้นส่วนที่ขับเคลื่อนได้
การป้องกันฮาร์ดแวร์
ในขณะที่ไลบรารี SpeedStepper ช่วยให้คุณสามารถกำหนดขีดจำกัดตำแหน่งในการเคลื่อนที่ของมอเตอร์ การตรึงตำแหน่งทำได้โดยการนับขั้นตอนที่ส่งออกโดยซอฟต์แวร์ หากมอเตอร์ชะงัก กล่าวคือ แรงบิดไม่เพียงพอที่จะขับเคลื่อนมอเตอร์ในขั้นตอนต่อไป ตำแหน่งซอฟต์แวร์จะไม่ซิงค์กับตำแหน่งมอเตอร์ จากนั้นเมื่อคุณใช้คำสั่ง 'goHome' มอเตอร์จะแซงตำแหน่งโฮม เพื่อป้องกันความเสียหายต่อฮาร์ดแวร์ คุณควรติดตั้งลิมิตสวิตช์ที่ขีดจำกัดฮาร์ดเพื่อตัดการเชื่อมต่อแหล่งจ่ายไฟของมอเตอร์
การตั้งค่าขีดจำกัดกระแสมอเตอร์
ขั้นแรก ให้ตั้งค่าเป็นโพเทนชิออมิเตอร์ต่ำสุด เช่น แรงดันไฟที่ TP1 เป็นค่าต่ำสุด โพเทนชิออมิเตอร์มีความละเอียดอ่อน ดังนั้นอย่าบังคับให้โพเทนชิออมิเตอร์ผ่านจุดหยุดทางกล ตั้งมอเตอร์ให้ขับด้วยความเร็วคงที่ช้าๆ แล้วหมุนโพเทนชิออมิเตอร์อย่างช้าๆ จนกว่ามอเตอร์จะไม่ข้ามหรือกระตุกระหว่างขั้นตอน
บทสรุป
โครงงานนี้แสดงวิธีใช้ไลบรารี SpeedStepper ในแอปพลิเคชันที่ใช้งานได้จริง ในขณะที่ไลบรารี AccelStepper ให้การควบคุมตำแหน่งที่ดี จำเป็นต้องมีการควบคุมความเร็วสำหรับ Prototype Ice-Melting Probe สำหรับการรวบรวมตัวอย่างชีวภาพบน Europa ดังนั้นไลบรารี AccelStepper จึงถูกเขียนขึ้นใหม่เพื่อให้การควบคุมความเร็วมีขีดจำกัดสิ้นสุดและฟังก์ชัน goHome
แนะนำ:
Stepper Motor ควบคุม Stepper Motor โดยไม่ต้องใช้ไมโครคอนโทรลเลอร์!: 6 ขั้นตอน
สเต็ปเปอร์มอเตอร์ที่ควบคุมโดยสเต็ปเปอร์มอเตอร์ที่ไม่มีไมโครคอนโทรลเลอร์!: ในคำแนะนำอย่างรวดเร็วนี้ เราจะสร้างตัวควบคุมสเต็ปเปอร์มอเตอร์อย่างง่ายโดยใช้สเต็ปเปอร์มอเตอร์ โครงการนี้ไม่ต้องการวงจรที่ซับซ้อนหรือไมโครคอนโทรลเลอร์ เพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มกันเลย
Arduino Mega Stepper Shield สำหรับ Rubiks Cube Solver: 4 ขั้นตอน
Arduino Mega Stepper Shield สำหรับ Rubiks Cube Solver: เมื่อไม่นานมานี้ ฉันกำลังทำงานกับเครื่องที่จะแก้ปัญหา Rubiks Cube 3x3 ที่มีสัญญาณรบกวนโดยอัตโนมัติ คุณสามารถดูคำแนะนำของฉันได้ที่นี่ ในโครงการใช้ไดรเวอร์ stepper จาก polulu เพื่อขับเคลื่อนมอเตอร์หกตัว เพื่อสองให้เชื่อมต่อ d เหล่านี้
หุ่นยนต์ Mecanum Omni Wheels พร้อม GRBL Stepper Motors Arduino Shield: 4 ขั้นตอน
หุ่นยนต์ Mecanum Omni Wheels พร้อม GRBL Stepper Motors Arduino Shield: Mecanum Robot - โปรเจ็กต์ที่ฉันอยากจะสร้างตั้งแต่เห็นมันในบล็อก gread mechatronics ของ Dejan: howtomechatronics.com Dejan ทำได้ดีจริงๆ ครอบคลุมทุกด้านตั้งแต่ฮาร์ดแวร์ การพิมพ์ 3 มิติ , อุปกรณ์อิเล็กทรอนิกส์, รหัส และแอพ Android (MIT
บทช่วยสอน Arduino - Stepper Motor พร้อม Bluetooth: 6 ขั้นตอน
บทช่วยสอน Arduino - Stepper Motor พร้อม Bluetooth: คำแนะนำนี้เป็นเวอร์ชันเขียนของ "Arduino: วิธีควบคุม Stepper Motor ผ่าน Bluetooth (พร้อมสมาร์ทโฟน)" ในโครงการนี้ เราจะควบคุม Stepper motor ด้วยสมาร์ทโฟนผ่าน Bluetooth ช่อง YouTube ของฉัน ก่อนอื่นคุณควรดู
หุ่นยนต์ FPV Rover ที่ควบคุมด้วย Wi-Fi (พร้อม Arduino, ESP8266 และ Stepper Motors): 11 ขั้นตอน (พร้อมรูปภาพ)
หุ่นยนต์ FPV Rover ที่ควบคุมด้วย Wi-Fi (พร้อม Arduino, ESP8266 และ Stepper Motors): คำแนะนำนี้แสดงวิธีออกแบบหุ่นยนต์โรเวอร์สองล้อที่ควบคุมจากระยะไกลผ่านเครือข่าย wi-fi โดยใช้ Arduino Uno ที่เชื่อมต่อกับโมดูล Wi-Fi ของ ESP8266 และสเต็ปเปอร์มอเตอร์สองตัว หุ่นยนต์สามารถควบคุมได้จากการท่องอินเทอร์เน็ตทั่วไป