user4343
2014-12-29 15:36:56 UTC
אני יכול לשלוט במנוע סרוו פשוט כגון SG90 באמצעות אפנון רוחב הדופק. אולם כשמדובר בשליטה על מנוע סרוו לגו 88004 זה פשוט סיוט.
באמצעות PWM כל מה שהצלחתי היה להביא אותו למצב הרגיל שלו. נראה שאורך הדופק בכלל לא משחק תפקיד - ניסיתי כמה וכמה ...
הבדל נוסף בין SG90 ל- 88004 הוא שלראשון יש רק שלושה חוטים (PWR, GND ושליטה) ואילו בסרוו לגו יש 4 (PWR, C1, C2 ו- GND).
- איזה מאותם חוטים (C1 ו- C2) צריך לשמש עם ה- PWM?
- כמה זמן צריכים להיות הפולסים כדי להזיז את המנוע דרך 15 מצביו?
- האם יש דרך אחרת לשלוט על 88004 ישירות מה- Raspberry Pi כמו I2C?
זה עובד!
# ייבוא הספרייה הנחוצה יבוא RPi.GPIO כ- GPIO מיבוא זמן שינה # הפניה ע"י GPIOs IDsGPIO.setmode (GPIO.BCM) # הקצאת ה- GPIO לחוטי הפקודה של לגו C1 = 21C2 = 26moveFactor = 14.285714286 # הגדרת GPIOsGPIO.setup (C1, GPIO.OUT) GPIO.setup (C2, GPIO.OUT) # הגדרת PWMs - (GPIO ID, תדירות) pwm1 = GPIO.PWM (C1 , 1200) pwm2 = GPIO.PWM (C2, 1200) def set מיקום (מיקום): pwm1.stop () pwm2.stop () i = עגול (מיקום * m oveFactor, 2) אם מיקום > = 0: הדפס 'מיקום:' + str (מיקום) + 'במחזור חובה של' + str (i) pwm1. התחל (i) אחר: הדפס 'מיקום:' + str (מיקום ) + 'במחזור חובה של' + str (i * -1) pwm2.start (i * -1) # בדיקת הפקודות עם LEDtry: setPosition (-7) # 180 מעלות שינה (2) setPosition (7) # 0 תואר שינה (1) למעט: passpwm1.stop () # חזרה למצב הרגיל (90 מעלות) pwm2.stop () GPIO.cleanup ()
האם היית צריך להעלות את רמות המתח ל -5 וולט או 9 וולט, או שהצלחת לשלוט בו דרך 3v3 ישירות מהפי?