לאון מינץ
כולנו כותבים תוכניות במחשב. זה מתחיל בסמסטר הראשון בקורס שפת C ולא מסתיים כמעט אף פעם. במאמר זה נלמד איך לחבר בין שורות הקוד הצבעוניות לבין ה"ברזלים" אותם הן אמורות להפעיל...במסגרת הקורס "בעיות נבחרות במכניקה הנדסית" של הפקולטה להוראת המדעים, הייתי צריך לגרום למנוע סרבו להסתובב על ידי פקודה מהמחשב. פונקציונליות שכזו היא די טריויאלית בעולם שלנו, ולראיה: הגאי הטיסנים מופעלים באמצעות שלט רחוק. אז כן, אפשר לקנות בקר שיעשה את זה, אבל המגבלה היחידה שהיתה לי היא, מן הסתם, העלות.
לדוגמה, אם אנו מעוניינים להטות את הגה הכיוון של הטיסן שלנו ב-°5, נשלח פקודה מתאימה למנוע. כעת התפקיד של המנוע לשמור על הטיה של 5 מעלות, על אף שמופעלת התנגדות של הרוח. לצורך זה המנוע מודד את הסטייה של ההגה מ-5 מעלות ומתקן בהתאם, על ידי משוב.
תחום התזוזה הטיפוסי הינו °120, ואכן, רוב השימושים של הסרבו הם של בקרת מיקום. לעומת זאת, במעבדה מדעית רוב הניסויים יצריכו שימוש במנועים עם תנועה רציפה. על מנת לאפשר תנועה רציפה, ניתן לבצע שינוי במנגנון הבקרה (קצר במערכת המשוב).
בשיטת PWM, לעצמת הזרם יש רק שני מצבים: I=Imax ו-I=0.
כפי שניתן לראות באיור, הגל הריבועי מתאפיין במשך זמן בו הוא מקבל את ערכו המקסימלי, ובמשך זמן שבו הוא מקבל את ערכו המינימלי, וסכומם הוא זמן המחזור של הגל.
טווח הזמנים של Imax עבור מנוע סטנדרטי הוא 920μs – 2120μs, כאשר 1250μs מציין את מצב האמצע, והזמן המומלץ עבור I=0 הוא 14ms-20ms[2].
בקרה בשיטת PWM באמצעות מחשב מבוססת על לולאות השהייה לפרקי זמן קצובים, המתאימים לצורת הגל הרצויה.
אם כן, הקלט של מנוע הסרבו הוא גל ריבועי אשר צורתו מציינת את המיקום הזוויתי שבו ציר המנוע צריך להיות.
לכל סרבו יש אורכי גל אופיניים משלו, אשר משתנים מיצרן ליצרן.
אזהרה: אספקת מתח הגבוה ממתח העבודה של הסרבו או החלפה רגעית של הקוטביות עלולה לשרוף את המנוע מיידית.
מדובר ביישום שלא דורש השקעה כספית מעבר לרכישת המנועים.
היישום הוא פשוט ולא דורש שום אלקטורניקה נוספת.
האמיצים במיוחד יכולים לנסות להפעיל את הסרבו דרך כרטיס הקול של המחשב...
חיווט רשלני עלול לשרוף את לוח-האם של המחשב.
ביצועי המחשב משפיעים על פעולת המנוע.
כללית, עקרון הפעולה הוא[3]:
דוגמה: נניח כי לכל פין של היציאה המקבילית מחוברת נורת LED. על מנת להאיר את ה-LEDs ה-3,5,9, עלינו לשלוח את המספר הבא ליציאה המקבילית:
היות שבערוץ הפלט של יציאת LPT יש 8 סיביות, מחשב אחד יכול לבקר בו-זמנית את פעולתם של 8 צרכנים, שכל אחד מהם פועל בבקרה דו-מצבית. בדוגמה זו נפעיל צרכן אחד בלבד, דרך המחבר הראשון (D0).
אולם רק מערכות הפעלה של 16 ביט מאפשרות גישה ישירה ליציאות המחשב. מערכות לינוקס וחלונות NT ומעלה לא יאפשרו גישה ישירה ליציאה המקבילית. לכן יש לאפשר גישה זו עם דרייבר מתאים (giveio בחלונות והרשאת root בלינוקס).
חבילת pyParallel[5] מאפשרת גישה נוחה מאוד ליציאה המקבילית והינה למעשה החבילה הבלעדית, ככל הידוע לי, עם פונקציונליות כזו.
2. התקינו את pyParallel.
3. התקינו את giveio[7].
4. רוב משתמשי לינוקס יצטרכו להקליד את הפקודה הבאה על מנת לאפשר גישה ליציאה: rmmod lp
הפעולה הראשונה היא import, בדומה ל-include המוכר משפת C. לאחר מכן נתחיל לשלוח ביטים ליציאה:
[2] Fred G. Martin, Robotic Exploration - A Hands-On Introduction to Engineering, Prantice-Hall, 2001
[3] http://www.societyofrobots.com/actuators_servos.shtml
[4] http://www.epanorama.net/circuits/parallel_output.html
[5] http://pyserial.sourceforge.net/pyparallel.html
[6] http://www.python.org/
[7] http://sourceforge.net/project/showfiles.php?group_id=46487&package_id=77441&release_id=150767
מהו מנוע סרבו?
מנוע סרבו הוא מנוע מיוחד אשר קובע את האוריינטציה שלו לפי אות הכניסה, בשיטת אפנון רוחב דופק (מוסבר בסעיף הבא). המנוע מורכב ממנוע DC, מפחת, חיישן מיקום ומעגל אלקטרוני המבקר את פעולת המנוע.לדוגמה, אם אנו מעוניינים להטות את הגה הכיוון של הטיסן שלנו ב-°5, נשלח פקודה מתאימה למנוע. כעת התפקיד של המנוע לשמור על הטיה של 5 מעלות, על אף שמופעלת התנגדות של הרוח. לצורך זה המנוע מודד את הסטייה של ההגה מ-5 מעלות ומתקן בהתאם, על ידי משוב.
תחום התזוזה הטיפוסי הינו °120, ואכן, רוב השימושים של הסרבו הם של בקרת מיקום. לעומת זאת, במעבדה מדעית רוב הניסויים יצריכו שימוש במנועים עם תנועה רציפה. על מנת לאפשר תנועה רציפה, ניתן לבצע שינוי במנגנון הבקרה (קצר במערכת המשוב).
אפנון רוחב דופק (Pulse Width Modulation)
בשיטת אפנון רוחב דופק (PWM), אספקת הזרם לצרכן אינה רציפה אלא בצורה של דפקים קצרים. הערך הממוצע של ההספק תלוי ביחס הזמנים של הפעלה/הפסקה באספקת האנרגיה לצרכן[1]. פעולה זו מתוארת באיור הבא.בשיטת PWM, לעצמת הזרם יש רק שני מצבים: I=Imax ו-I=0.
כפי שניתן לראות באיור, הגל הריבועי מתאפיין במשך זמן בו הוא מקבל את ערכו המקסימלי, ובמשך זמן שבו הוא מקבל את ערכו המינימלי, וסכומם הוא זמן המחזור של הגל.
טווח הזמנים של Imax עבור מנוע סטנדרטי הוא 920μs – 2120μs, כאשר 1250μs מציין את מצב האמצע, והזמן המומלץ עבור I=0 הוא 14ms-20ms[2].
בקרה בשיטת PWM באמצעות מחשב מבוססת על לולאות השהייה לפרקי זמן קצובים, המתאימים לצורת הגל הרצויה.
אם כן, הקלט של מנוע הסרבו הוא גל ריבועי אשר צורתו מציינת את המיקום הזוויתי שבו ציר המנוע צריך להיות.
חיווט
למנוע הסרבו הטיפוסי שלושה מגעים – שניים למקור מתח (5-6V) ועוד אחד לבקרה, אשר "נסגר" בהדק השלילי של מקור המתח (או באדמה – ויחובר להארקה).לכל סרבו יש אורכי גל אופיניים משלו, אשר משתנים מיצרן ליצרן.
אזהרה: אספקת מתח הגבוה ממתח העבודה של הסרבו או החלפה רגעית של הקוטביות עלולה לשרוף את המנוע מיידית.
חיבור LPT – מוטיבציה
מדובר ביישום שלא דורש השקעה כספית מעבר לרכישת המנועים.
היישום הוא פשוט ולא דורש שום אלקטורניקה נוספת.
האמיצים במיוחד יכולים לנסות להפעיל את הסרבו דרך כרטיס הקול של המחשב...
חסרונות
היציאה המקבילית הינה מיושנת ואינה מופיעה יותר במחשבים חדישים.חיווט רשלני עלול לשרוף את לוח-האם של המחשב.
ביצועי המחשב משפיעים על פעולת המנוע.
כללית, עקרון הפעולה הוא[3]:
- שליחה של 1-לוגי ליציאה דיגילית.
- המתנה של מספר מילישניות.
- שליחה של 0-לוגי ליציאה דיגיטלית.
- המתנה של מספר מילישניות.
- חזרה על כך כמה עשרות פעמים בשניה.
מבוא לתכן לוגי...
כל אחד מ-8 הפינים של היציאה המקבילית יכולים להיות בשני מצבים לוגיים – 1,0 – ולכן 8 הפינים מסוגלים לייצג מספר בן 8 סיביות. כמות המספרים שניתן לייצג היא אפוא 28=256 ולכן טווח המספרים המתאים להפעלת 8 מנועי סרבו שונים במקביל הינו0-255.# | ביט | דצימלי | בינארי |
2 | D0 | 1 | 00000001 |
3 | D1 | 2 | 00000010 |
4 | D2 | 4 | 00000100 |
5 | D3 | 8 | 00001000 |
6 | D4 | 16 | 00010000 |
7 | D5 | 32 | 00100000 |
8 | D6 | 64 | 01000000 |
9 | D7 | 128 | 10000000 |
דוגמה: נניח כי לכל פין של היציאה המקבילית מחוברת נורת LED. על מנת להאיר את ה-LEDs ה-3,5,9, עלינו לשלוח את המספר הבא ליציאה המקבילית:
(2+8+128)d=(138)d=(10001010)b
היות שבערוץ הפלט של יציאת LPT יש 8 סיביות, מחשב אחד יכול לבקר בו-זמנית את פעולתם של 8 צרכנים, שכל אחד מהם פועל בבקרה דו-מצבית. בדוגמה זו נפעיל צרכן אחד בלבד, דרך המחבר הראשון (D0).
התממשקות אל היציאה המקבילית
במערכות הפעלה מיושנות (non-multitasking, 16bit) כגון MS-DOS, Win3x, ניתן להריץ קוד פשוט אשר ניגש ישירות אל היציאה המקבילית[4].אולם רק מערכות הפעלה של 16 ביט מאפשרות גישה ישירה ליציאות המחשב. מערכות לינוקס וחלונות NT ומעלה לא יאפשרו גישה ישירה ליציאה המקבילית. לכן יש לאפשר גישה זו עם דרייבר מתאים (giveio בחלונות והרשאת root בלינוקס).
פייתון וחבילת pyParallel
פייתון הינה שפת תכנות עילית מודולרית המריצה פקודות בשיטת interpreter וזמינה עבור מערכות ההפעלה הנפוצות (חלונות, לינוקס, מק).חבילת pyParallel[5] מאפשרת גישה נוחה מאוד ליציאה המקבילית והינה למעשה החבילה הבלעדית, ככל הידוע לי, עם פונקציונליות כזו.
התקנה
1. התקינו את פייתון[6].2. התקינו את pyParallel.
3. התקינו את giveio[7].
4. רוב משתמשי לינוקס יצטרכו להקליד את הפקודה הבאה על מנת לאפשר גישה ליציאה: rmmod lp
הפעלה
הכנסו לפייתון על ידי הקלדת python בשורת הפקודה.הפעולה הראשונה היא import, בדומה ל-include המוכר משפת C. לאחר מכן נתחיל לשלוח ביטים ליציאה:
>>> import parallel
>>> p = parallel.Parallel()
>>> p.setData(1)
הדוגמה הבאה מזיזה סיבית 1 ב-4 סיביות ימינה:>>> p = parallel.Parallel()
>>> p.setData(1)
>>> p.setData(1 << 4)
קוד לדוגמה
בדוגמה הבאה נגדיר פונקציה המקבלת כפרמטרים שני זמנים: אחד עבור I=0 ואחד עבור I=Imax.#!/bin/env python
import time
import parallel
p=parallel.Parallel()
p.setData(0)
def my_sleep(sec):
c = time.clock()
while time.clock() - c <>
pass
def startInfLoop(Time1,Time0):
time1=float(Time1)
time0=float(Time0)
while(1):
p.setData(0)
my_sleep(Time0)
p.setData(1)
my_sleep(Time0)
import time
import parallel
p=parallel.Parallel()
p.setData(0)
def my_sleep(sec):
c = time.clock()
while time.clock() - c <>
pass
def startInfLoop(Time1,Time0):
time1=float(Time1)
time0=float(Time0)
while(1):
p.setData(0)
my_sleep(Time0)
p.setData(1)
my_sleep(Time0)
מקביליות
על מנת לשלוט על יותר מסרבו אחד, יהיה צורך בתכנות מקבילי ובקרת תהליכים עם סמפורים וכדומה. לפייתון יש את האפשרויות האלו, אך נושא זה מורכב למדי.לקריאה נוספת
- פרויקטים קהילתיים בקוד פתוח: http://www.openservo.com
סימוכין
[1] וקס, שלמה, בקרת תהליכים באמצעות מחשב, מהדורה ניסויית, הטכניון, 1988.[2] Fred G. Martin, Robotic Exploration - A Hands-On Introduction to Engineering, Prantice-Hall, 2001
[3] http://www.societyofrobots.com/actuators_servos.shtml
[4] http://www.epanorama.net/circuits/parallel_output.html
[5] http://pyserial.sourceforge.net/pyparallel.html
[6] http://www.python.org/
[7] http://sourceforge.net/project/showfiles.php?group_id=46487&package_id=77441&release_id=150767
אין תגובות:
הוסף רשומת תגובה