כיצד אוכל להשתמש ב-Raspberry Pi 4B כדי לשלוח אותות PWM ל-ESC כדי לשלוט בדחפים תת-מימיים?
פורסם על ידי Fengyukun בתאריך
השתמש ב-ESC: APISQUEEN 24V 100A ESC
מדריך הוראות 100A ESC: 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);
ייבוא pigpio
זמן ייבוא
PI = pigpio.PI() #Create pigpio אובייקט
LED_PIN = 18 #הגדר את יציאת ה-GPIO שאליה מחובר ה-LED
PWM_FREQUENCY = 50 #הגדר תדר PWM (Hz)
PWM_range = 1000
הגדר את מחזור העבודה של 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) #Set range 1000
π. set_pwm_duty cycle (LED_PIN, 75) #Set PWM Duty cycle 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 אלפיות השנייה -2 שניות קדימה
π. set_PWM_dutycycle (LED_PIN, 100)
#קדימה: 7.5% ~ 10% ככל שמחזור העבודה גבוה יותר, המהירות קדימה תהיה מהירה יותר.
time.sleep(15)
π. set_PWM_dutycycle (LED_PIN 60)
#היפוך: ככל שמחזור העבודה קרוב יותר ל-5%, כך מהירות ההיפוך מהירה יותר.
time.sleep(5)
π. set_PWM_dutycycle (LED_PIN, 75)
#מחזור עבודה
time.sleep(5)
3. איתור באגים
במהלך איתור באגים, אתה יכול להשתמש באוסילוסקופ כדי לראות אם צורת הגל נכונה:
לדוגמה, התמונה למטה היא אות הפסקת PWM שהתחלתי לשלוח.
משרעת המתח היא 3.3V, התקופה היא 20ms, ומחזור העבודה בפועל הוא 7.5%, הכל נכון.
אבל אני עדיין לא יכול לפתוח את ESC כי יש יותר מדי רעש ובלגן בצורת הגל.
![](https://cdn.shopify.com/s/files/1/0621/5493/2452/files/5_0147a315-bab3-433b-8dde-186472c0ee31_1024x1024.png?v=1700411310)
בהתחלה השתמשתי ב-RPi. ספריית GPIO, אז השתמשתי בספריית pigpio במקום זאת כדי לשלוח אות pwm של החומרה כדי לפתור את הבעיה.
4. קוד לדוגמה:
ייבוא pigpio
זמן ייבוא
PI = pigpio.PI() #Create pigpio אובייקט
LED_PIN = 18 #הגדר את יציאת ה-GPIO שאליה מחובר ה-LED.
PWM_FREQUENCY = 50 #הגדר תדר PWM (Hz)
PWM_range = 1000
הגדר את מחזור העבודה של 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) #Set range 1000
π. set_pwm_duty cycle (LED_PIN, 75) #Set PWM Duty cycle 75/1000= 7.5%
Time.sleep(3) #עיכוב 3 שניות לביטול הנעילה בהצלחה
π. set_PWM_dutycycle (LED_PIN, 100)
#סיבוב קדימה 7.5%-10% מחזור עבודה, ככל שמחזור העבודה גדול יותר, המהירות קדימה מהירה יותר
time.sleep(15)
π. set_PWM_dutycycle (LED_PIN 60)
ככל שמחזור העבודה קרוב יותר ל-5%, כך מהירות ההיפוך מהירה יותר
time.sleep(5)
π. set_PWM_dutycycle (LED_PIN, 75)
#מחזור עבודה
time.sleep(5)