[การควบคุม Thruster ใต้น้ำ] จะใช้ STM32 ควบคุม ESC ผ่าน PWM ได้อย่างไร?

โพสต์โดย Fengyukun เมื่อ

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

สัญญาณพีเอ็มดับเบิลยู:
(1) การควบคุมคลื่น PWM (โดยทั่วไป esc ใช้การควบคุมคลื่น PWM 50Hz หรือ 20ms);
(2) การหยุดชั่วคราวระดับกลาง (โดยทั่วไปในที่นี้หมายถึงรอบการทำงานระดับสูง) 1.5 มิลลิวินาที อันที่จริงเป็นการหยุดชั่วคราวระหว่าง 1.475 มิลลิวินาทีถึง 1.525 มิลลิวินาที
(3) ช่วงการควบคุมคือ 1ms ~ 2ms;
(4) ไปข้างหน้า 1.5ms ถึง 2ms และย้อนกลับ 1.5ms ถึง 1ms


นี่เป็นข้อมูลอ้างอิงง่ายๆ ตาม Arduino:


หมายเหตุ: จำเป็นต้องปลดล็อค ESC เพื่อใช้งาน เมื่อคุณเชื่อมต่อ ESC เข้ากับแหล่งจ่ายไฟ มันจะส่งเสียงบี๊บ 3 ครั้ง จากนั้นเมื่อปลดล็อคสำเร็จจะส่งเสียงบี๊บ 2 ครั้ง รวมเป็น 5 ครั้ง หากคุณปลดล็อค ESC ไม่สำเร็จ คุณจะไม่สามารถใช้มันเพื่อควบคุมได้ ดังนั้นจากโค้ดข้างต้น เราสามารถสรุปได้ว่าวิธีการปลดล็อค ESC คือการตั้งค่าให้เป็นสัญญาณที่เป็นกลางหลังจากการกำหนดค่าเริ่มต้น และรอให้ได้รับสัญญาณ (เสียงบี๊บสองครั้ง) ก่อนเริ่มการควบคุมความเร็ว


วิธีการควบคุมและแก้ไขจุดบกพร่อง


เรากำลังใช้บอร์ดพัฒนา STM32F7 และใช้ไลบรารี HAL สำหรับการเขียนโปรแกรมและการดีบัก อันที่จริง ตัวจับเวลาจะส่งสัญญาณคลื่น PWM แต่มีหลายสิ่งที่ต้องใส่ใจและรายละเอียดที่ไม่ชัดเจนทำให้เสียเวลาและพลังงานจริง ๆ ต่อไปนี้เป็นคำสองสามคำเกี่ยวกับประสบการณ์การดีบัก

ก่อนอื่น เมื่อกำหนดค่าคลื่น PWM ในตัวจับเวลา โปรดระวังอย่ากำหนดค่าเริ่มต้นให้เป็นสัญญาณปลดล็อค ให้ค่าสุ่ม หรืออย่ากำหนดค่า เนื่องจาก ESC ถูกปลดล็อคหลังจากตัวจับเวลาและเริ่มต้น PWM เท่านั้น ตามตัวอย่างของฉัน สัญญาณหยุดเฉลี่ยที่ 1.5ms คือสัญญาณปลดล็อค ดังนั้นคุณจะไม่สามารถกำหนดค่า PWM เป็น 1.5ms ได้ตั้งแต่เริ่มต้น มิฉะนั้น ESC จะส่งเสียงบี๊บเพียงครั้งเดียวหลังจากนั้น เสียงบี๊บดังสามครั้ง จากนั้นไม้พายของคุณยังคงไม่หมุน


ประการที่สอง ใส่ใจกับการใช้ความล่าช้า. ตอนแรกฉันไม่ได้ใช้การหน่วงเวลา และผลลัพธ์คือ ESC จะส่งเสียงบี๊บเท่านั้น แล้วไม่ตอบสนอง จากนั้นเมื่อฉันสังเกตคลื่น PWM ด้วยออสซิลโลสโคป ฉันพบว่า PWM ที่ฉันกำหนดค่าเริ่มต้นนั้นกะพริบโดยตรง และฉันต้อง ให้เวลา ESC เพื่อรับสัญญาณปลดล็อค แต่คุณควรให้ความสนใจในเวลานี้ด้วย ตอนแรกฉันใช้ Delay_us() เพื่อกำหนดค่า แต่ปัญหาไม่สามารถแก้ไขได้ ต่อมาฉันเปลี่ยนเป็น Delay_ms(1000) ซึ่งหมายความว่าเวลาที่กำหนดค่าคือ 1 วินาที นั่น ยังคงเป็นปัญหาอยู่ เลยปรับเวลา หลังจากเสียงบี๊บสุดท้าย 2 ครั้ง มอเตอร์ก็เริ่มหมุน ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องเข้าใจเวลารับสัญญาณของสัญญาณปลดล็อคนี้


ให้ความสนใจกับการเรียนรู้การใช้ออสซิลโลสโคปเพื่อตรวจสอบว่ามีปัญหาใดๆ กับสัญญาณที่คุณกำหนดค่าระหว่างการใช้งานหรือไม่ ด้านล่างนี้คือคลื่น PWM ที่มีรอบการทำงาน 1.5ms, ระยะเวลา 20ms และแอมพลิจูด 3.3V ที่ฉันเริ่มต้นไว้ตอนเริ่มต้น


โดยสรุป กระบวนการทั้งหมดควรคำนึงถึง:

(1) โดยทั่วไป ESC จะถูกควบคุมที่ความถี่ 50Hz และช่วงการควบคุมอยู่ที่ประมาณระหว่าง 1ms ถึง 2ms แน่นอนว่าขึ้นอยู่กับสถานการณ์
(2) หลังจากเปิดเครื่องแล้ว ESC จะส่งเสียงบี๊บ 3 ครั้ง หลังจากการปลดล็อคสำเร็จ ESC จะส่งเสียงบี๊บ 2 ครั้ง อย่างไรก็ตาม หาก ESC ส่งเสียงบี๊บเพียงครั้งเดียว อาจหมายความว่า ESC ได้รับสัญญาณที่คุณกำหนดค่าไว้แต่ปลดล็อคอุปกรณ์ไม่สำเร็จ ดังนั้นคุณจึงต้องตรวจสอบรหัสปลดล็อคอีกครั้งเพื่อดูว่ามีข้อผิดพลาดใดๆ หรือไม่ หาก ESC ไม่มีเสียง แสดงว่าไม่ได้รับสัญญาณด้วยซ้ำ ให้ตรวจสอบสายไฟและรหัสของคุณอีกครั้ง
(3) ให้ความสนใจกับการใช้ฟังก์ชันหน่วงเวลาเพื่อให้ ESC เป็นระยะเวลาหนึ่งในการรับสัญญาณปลดล็อค ESC แต่ละตัวแตกต่างกันดังนั้นคุณสามารถปรับเปลี่ยนได้ด้วยตัวเอง
(4) ให้ความสนใจกับการต่อสายดิน เชื่อมต่อสายสัญญาณ ESC เข้ากับพอร์ตเอาต์พุตสัญญาณของบอร์ดควบคุม จากนั้นต่อสายดินสายสัญญาณเข้ากับกราวด์ GND ของบอร์ดควบคุม
(5) เรียนรู้การใช้ออสซิลโลสโคปเพื่อตรวจสอบสัญญาณที่กำหนดค่าไว้
อย่าต่อสายผิด!


แชร์โพสต์นี้



← โพสต์ที่เก่ากว่า โพสต์ที่ใหม่กว่า →


0 ความคิดเห็น

แสดงความคิดเห็น