สารบัญ:

เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino: 6 ขั้นตอน
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino: 6 ขั้นตอน

วีดีโอ: เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino: 6 ขั้นตอน

วีดีโอ: เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino: 6 ขั้นตอน
วีดีโอ: l298n ตอนที่ 1 การขับมอเตอร์ 12v ภาคทฤษฏี pwm 2024, พฤศจิกายน
Anonim
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino
เมนูควบคุมความเร็ว Stepper ขับเคลื่อนสำหรับ Arduino

ไลบรารี 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 โดยไม่ต้องใช้มอเตอร์

การรันตัวอย่าง SpeedStepperPlot โดยไม่ต้องใช้มอเตอร์
การรันตัวอย่าง 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 โดยไม่ต้องใช้มอเตอร์

การรันตัวอย่าง SpeedStepperProfile โดยไม่ต้องใช้มอเตอร์
การรันตัวอย่าง 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
เรียกใช้ SpeedStepperSetup ด้วยสเต็ปเปอร์มอเตอร์และ SparkFun Redboard Turbo
เรียกใช้ SpeedStepperSetup ด้วยสเต็ปเปอร์มอเตอร์และ SparkFun Redboard Turbo
เรียกใช้ SpeedStepperSetup ด้วยสเต็ปเปอร์มอเตอร์และ 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

แนะนำ: