ฉันจะใช้ Raspberry Pi 4B เพื่อส่งสัญญาณ PWM ไปยัง ESC เพื่อควบคุมเครื่องขับดันใต้น้ำได้อย่างไร

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

ใช้ ESC: APISQUEEN 24V 100A ESC

คู่มือการใช้งาน ESC 100A: https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535

1: ปลดล็อค ESC

สัญญาณหยุดที่เป็นกลางคือสัญญาณปลดล็อค
เมื่อใช้สัญญาณ 50Hz ระยะเวลาสัญญาณคือ 20ms
เปอร์เซ็นต์ในคำสั่งหมายถึงเปอร์เซ็นต์ของความกว้างพัลส์ควบคุม PWM ไม่ใช่รอบการทำงานที่แท้จริงของสัญญาณ PWM (ที่นี่จะเข้าใจผิดได้ง่าย)
จากนั้นสัญญาณหยุดที่เป็นกลางคือ:
รอบการทำงาน 75%, รอบการทำงานจริง 7.5%: 1.5ms (1.475ms ~ 1.525ms);

นำเข้าpipio
เวลานำเข้า

PI = pigpio.PI() #สร้างวัตถุ pigpio
LED_PIN = 18 #กำหนดพอร์ต GPIO ที่ LED เชื่อมต่ออยู่
PWM_FREQUENCY = 50 #กำหนดความถี่ PWM (Hz)
PWM_ช่วง = 1,000
กำหนดรอบหน้าที่ของ PWM ช่วงค่าคือ 0 (2) 55
พาย. set_mode(LED_PIN, pigpio.OUTPUT) #ตั้งค่าพอร์ต GPIO เป็นโหมดเอาท์พุต
พาย. set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #ตั้งค่าความถี่PWM
พาย. set_PWM_range(LED_PIN, PWM_range) #กำหนดช่วง 1000

พาย. set_pwm_duty cycle (LED_PIN, 75) #ตั้งค่ารอบการทำงาน PWM 75/1000= 7.5%
Time.sleep(3) #ดีเลย์ 3 วินาทีเพื่อปลดล็อคสำเร็จ

2. การควบคุม ESC

รอบการทำงาน 75%: หยุดเมื่อรอบการทำงานจริงอยู่ที่ 7.5% ~ 1.5ms (ระหว่าง 1.475ms ~ 1.525ms)
รอบการทำงาน 50%-75%: รอบการทำงานจริง 5%-7.5%, ย้อนกลับ 1ms-1.5ms;
รอบการทำงาน 100%: รอบการทำงานจริง 7.5%-10% ไปข้างหน้า 1.5 ms -2ms

พาย. set_PWM_รอบการทำงาน (LED_PIN, 100)
#เดินหน้า: 7.5% ~ 10% ยิ่งรอบการทำงานสูง ความเร็วเดินหน้าก็จะยิ่งเร็วขึ้น
เวลานอน (15)

พาย. set_PWM_รอบการทำงาน (LED_PIN 60)
#ถอยหลัง: ยิ่งรอบการทำงานใกล้ถึง 5% ความเร็วถอยหลังก็จะยิ่งเร็วขึ้นเท่านั้น
เวลา.การนอนหลับ(5)

พาย. set_PWM_รอบการทำงาน (LED_PIN, 75)
#รอบการทำงาน
เวลา.การนอนหลับ(5)

3. การดีบัก


ในระหว่างการดีบัก คุณสามารถใช้ออสซิลโลสโคปเพื่อดูว่ารูปคลื่นถูกต้องหรือไม่:
เช่น ภาพด้านล่างคือสัญญาณหยุด PWM ที่ผมเริ่มส่งไป
แอมพลิจูดของแรงดันไฟฟ้าคือ 3.3V ระยะเวลาคือ 20ms และรอบการทำงานจริงคือ 7.5% ถูกต้องทั้งหมด
แต่ฉันยังคงไม่สามารถปลดล็อค ESC ได้เนื่องจากมีสัญญาณรบกวนและความยุ่งเหยิงมากเกินไปในรูปคลื่น
ในตอนแรกฉันใช้ RPi ไลบรารี GPIO จากนั้นฉันใช้ไลบรารี pigpio แทนเพื่อส่งสัญญาณ pwm ของฮาร์ดแวร์เพื่อแก้ไขปัญหา

4. รหัสตัวอย่าง:


นำเข้าpipio
เวลานำเข้า

PI = pigpio.PI() #สร้างวัตถุ pigpio
LED_PIN = 18 #กำหนดพอร์ต GPIO ที่ LED เชื่อมต่ออยู่
PWM_FREQUENCY = 50 #กำหนดความถี่ PWM (Hz)
PWM_ช่วง = 1,000
กำหนดรอบหน้าที่ของ PWM ช่วงค่าคือ 0 (2) 55
พาย. set_mode(LED_PIN, pigpio.OUTPUT) #ตั้งค่าพอร์ต GPIO เป็นโหมดเอาท์พุต
พาย. set_PWM_frequency(LED_PIN, PWM_FREQUENCY) #ตั้งค่าความถี่PWM
พาย. set_PWM_range(LED_PIN, PWM_range) #กำหนดช่วง 1000

พาย. set_pwm_duty cycle (LED_PIN, 75) #ตั้งค่ารอบการทำงาน PWM 75/1000= 7.5%
Time.sleep(3) #ดีเลย์ 3 วินาทีเพื่อปลดล็อคสำเร็จ

พาย. set_PWM_รอบการทำงาน (LED_PIN, 100)
#การหมุนไปข้างหน้า 7.5%-10% รอบการทำงาน ยิ่งรอบการทำงานมากเท่าไร ความเร็วเดินหน้าก็จะเร็วขึ้นเท่านั้น
เวลา.นอน(15)

พาย. set_PWM_รอบการทำงาน (LED_PIN 60)
ยิ่งรอบการทำงานเข้าใกล้ 5% มากเท่าใด ความเร็วการกลับตัวก็จะเร็วขึ้นเท่านั้น
เวลา.การนอนหลับ(5)

พาย. set_PWM_รอบการทำงาน (LED_PIN, 75)
#รอบการทำงาน
เวลา.การนอนหลับ(5)


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



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


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

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