Archive

Posts Tagged ‘אלקטרוניקה’

מי הזיז את אבקת החשמל שלי?! על מקורות מתח (אולי חלק א' ואולי לא)

מזמן לא עסקתי בשעון המעורר שלי, אז בואו ונחזור אליו אבל הפעם מהצד האחורי.

כדי שהשעון שלי יפעל הוא צריך 'חשמל'. ישנן שתי דרכים מקובלות לספק לשעונים מעוררים את המתח וזרם החשמלי שלו הם זקוקים כדי לתפקד. האחת היא לחבר אותם לרשת החשמל והשניה היא שימוש בסוללות.

התוצאה הרצויה להפעלת השעון, קרי: אספקת מתח וזרם מתאימים, זהה בשתי השיטות, אבל הדרך להגיע לשם שונה בתכלית.

ברשימה זאת אעסוק בספק מתח המחובר לרשת החשמל. אולי בהמשך אכתוב על סוללות (בלי נדר).

picture1
תמונה 1: שעון דיגיטלי.

***

מה בעצם מגיע אלינו דרך שקע החשמל בקיר?

הפרש בפוטנציאל החשמלי בין שתי נקודות מכונה בעגה 'מתח חשמלי'. אם שתי נקודות שביניהן שורר מתח, מחוברות זו לזו על ידי מוליך, יחל לזרום זרם חשמלי מפוטנציאל גבוה לנמוך, בדומה למים שזורמים מנקודה גבוהה לנמוכה.

חברת החשמל דואגת שבין שני החורים שבשקע החשמל בקיר תמיד יהיה מתח. כמו כן, היא דואגת שאם נסגור מעגל בין שני החורים יזרום זרם.

אם נכפיל את כמות הזרם בכמות המתח נקבל את ההספק החשמלי שנמדד ביחידות 'וואט' וערכו רשום על כל מכשיר חשמלי שאנחנו קונים. ההספק הוא כמות האנרגיה המתבזבזת בכל שניה (כלומר מומרת מאנרגיה פוטנציאלית חשמלית למשל לחום, כמו בטוסטר משולשים). אם נכפיל את ההספק של מכשיר חשמלי בזמן שהוא פעל נקבל את סך האנרגיה שהתבזבזה בזמן זה, וזה חשבון החשמל שאנחנו משלמים (נמדד בקילו-וואט כפול שעה, הספק כפול זמן).

כדי לייצר מתח חשמלי צריך לעבוד קשה, ואת זה עושות הטורבינות בתחנות הכוח של חברת החשמל. המתח המיוצר בתחנות הוא מתח חילופין (ערכו משתנה באופן מחזורי) בעוצמה גבוהה מאוד (כ-400 קילו-וולט). חשמל במתח גבוה ניתן להוביל בזרם נמוך ובכך להקטין באופן משמעותי את בזבוז האנרגיה על קווי המתח הגבוה שמובילים אותו לאורכה ולרוחבה של המדינה.

%d7%a2%d7%9e%d7%95%d7%93%d7%99-%d7%97%d7%a9%d7%9e%d7%9c
תמונה 2: עמודי חשמל ליד נחל הבשור. המקור לתמונה: ויקיפדיה, לשם הועלתה על ידי המשתמש אורן פלס.

בשקע החשמל בדירה אין צורך במתח גבוה כל כך, ובכל מקרה ההובלה הסתיימה ולכן המתח בשקע הוא רק 220 וולט חילופין. לפני הכניסה לדירה ערכו של המתח הורד על ידי חברת החשמל, אך תלאותיו של החשמל עדיין לא הסתיימו. השעון המעורר זקוק לתפעולו למתח חשמלי ישר (שאינו משתנה) שערכו וולטים בודדים, ויישרף אם יחובר ישירות למתח הרשת. כאן נכנס המכשיר שאנחנו נוטים לכנות 'שנאי' או 'טרנספורמטור', אבל הוא בעצם מתאם מזרם חילופין למתח נמוך וקבוע (AC to DC adapter). המתאם אכן מכיל בתוכו רכיב המכונה שנאי אך גם רכיבים נוספים.

***

מהו שנאי (אידיאלי)?

המקור של שדה מגנטי הוא תנועה של מטענים חשמליים.

עובדה 1: כאשר מזרימים זרם חשמלי דרך תיל מוליך, נוצר שדה מגנטי סביב התיל שכיוונו משיק למעגלים קונצנטריים סביב התיל במרכז. אם נלפף את התיל לצורת סליל (מכונה לפעמים סילונית) כיוון השדה המגנטי בתוך הסליל יהיה בקירוב ישר לאורכו. עוצמת השדה תלויה בצפיפות הליפופים.

עובדה2: אם נלפף את הסליל המדובר סביב ליבת ברזל בצורת טבעת ונזרים דרכו זרם, שטף השדה המגנטי ילכד ויובל לאורכה של הטבעת.

עובדה 3: אם עובר דרך סילונית שטף משתנה בזמן של שדה מגנטי הוא גורם להתעוררות של זרם משתנה בזמן דרך תיל המלופף סביבה. עוצמתו של הזרם תלויה בצפיפות הליפופים.

אם כך, נוכל ללפף על שני צידי טבעת ברזל (מכונה הליבה) שני סלילים שונים, עם צפיפות ליפופים שונה (ראו איור 3). על סליל אחד נשים מתח חשמלי משתנה בזמן שיגרום לזרם חשמלי משתנה בזמן שיגרום לשטף שדה מגנטי משתנה בזמן בתוך הסילונית (עובדה 1) וכן לאורך הטבעת (עובדה 2) שיעבור גם דרך הסילונית השניה ויעורר בה זרם חשמלי משתנה בזמן (עובדה 3). עוצמה הזרם בסליל השני תהיה תלויה ביחס כמות הליפופים בין שני הסלילים, ולכן יתקבל מתח חשמלי שונה בין שני צידי הטבעת. כלומר, טבעת הברזל ושני הסלילים המלופפים סביבה משמשים לשינוי עוצמת המתח החשמלי כתלות ביחס מספר הליפופים. גם חברת החשמל משתמשת בשנאים כדי להקטין את המתח לאורך הרשת.

%d7%a9%d7%a0%d7%90%d7%99-%d7%90%d7%99%d7%93%d7%99%d7%90%d7%9c%d7%99
איור 3: סכימה של שנאי אידיאלי. המקור לאיור: ויקיפדיה, לשם הועלה על ידי המשתמש BillC.

***

פתרנו את בעיית עוצמת המתח, אך אנחנו עדיין תקועים עם מתח חילופין במקום מתח ישר ולכן הרכיב הבא הוא מישר זרם.

זרם חילופין שיוצא מהשקע בקיר משנה את כיוונו כ-50 פעם בשניה. תפקידו של המיישר הוא לגרום לזרם לזרום רק בכיוון אחד. את זאת נשיג על ידי שימוש בגשר דיודות.

דיודה היא רכיב אלקטרוני מחומר מוליך למחצה בעל שתי נקודות חיבור. בשונה מנגד, דיודה אינה סימטרית ביחס לשתי נקודות החיבור שלה. בכיוון אחד זרם אינו יכול לזרום כלל. בכיוון השני זרם יכול לזרום חופשי מעל למתח מסוים. כלומר, הפעלת מתח שלילי על הדיודה תשאיר את הדיודה סגורה. לעומת זאת, הפעלה של מתח חיובי מעל ערך מסוים תגרום לזרימה חופשית. נניח שבקירוב דיודה פתוחה היא קצר (חוט מוליך) ודיודה סגורה היא נתק (חוט מנותק).

כעת נתבונן במעגל הגשר.

%d7%92%d7%a9%d7%a8-%d7%93%d7%99%d7%95%d7%93%d7%95%d7%aa
איור 4: גשר דיודות. חלק עליון – חצי מחזור ראשון, חלק תחתון – חצי מחזור שני. מתח חיובי בכניסה יוצא אותו דבר ומתח שלילי בכניסה מתהפך לחיובי ביציאה. המקורות לאיור: ויקיפדיה וויקיפדיה, לשם הועלה על ידי המשתמש Wykis וטופלה קצת על ידי.

הדיודות מחוברות כך שהמתח הגבוה תמיד יפתח דיודה אחת, המתח הנמוך יפתח דיודה שניה והשתיים האחרות ישארו סגורות.

במקרה הראשון (איור 4 למעלה) נקודת החיבור העליונה במתח גבוה וגורמת לדיודה המסומנת באדום להיפתח. נקודת החיבור התחתונה במתח נמוך וגורמת לדיודה המסומנת בכחול להיפתח. שתי הדיודות האחרות סגורות. דיודה פתוחה היא כמו חוט מוליך ולכן המתח ביציאה הוא בקוטביות זהה לכניסה, גבוה למעלה ונמוך למטה.

כאשר הכניסה בקוטביות הפוכה (איור 4 למטה), כלומר מתח נמוך בנקודה העליונה וגבוה בתחתונה הדיודות שהיו פתוחות נסגרות ואלה שהיו סגורות נפתחות. כפי שניתן לראות באיור, הדיודות הפתוחות כעת גורמות לכך שעדיין המתח הגבוה בנקודת היציאה העליונה והנמוך בתחתונה.

השורה התחתונה היא שמתח חיובי יוצא חיובי ומתח שלילי יוצא חיובי אך שומר על צורתו (ראו איור 5).

%d7%9e%d7%aa%d7%97-%d7%9e%d7%99%d7%95%d7%a9%d7%a8
איור 5: מתח חילופין בכניסה ומתח מיושר ביציאה. המקור לאיור: ויקיפדיה, לשם הועלה על ידי המשתמש Jjbeard וטופלה קצת על ידי.

***

כעת יש לנו מתח מיושר (כיוון הזרם קבוע) אך הוא עדיין לא מתח ישר (ערכו משתנה בזמן). כדי לקבל מתח קבוע בזמן משתמשים בקבל, מין דלי שאוגר בתוכו מטענים חשמליים ולכן אנרגיה חשמלית בצורת מתח חשמלי בין שני הדקיו. הקבל נבחר כך שזמן הפריקה שלו ארוך ביחס לזמן המחזור של תנודת המתח. כאשר המתח עליו גבוה הוא נטען, וכאשר הוא נמוך הוא נפרק. בגלל זמן הפריקה הארוך הוא לא מספיק להגיע למתח נמוך ולכן מבצע תנודות רק במתחים גבוהים. שלב זה משאיר אותנו עם מתח כמעט קבוע שעליו אדוות של שינוי.

הרכיב האחרון הוא מווסת מתח (voltage regulator) שתפקידו להחליק את האדוות. מכיוון שהמימוש הספציפי של רכיב זה תלוי בהספקים ובמתחים הדרושים אני לא ארחיב עליו. אחד הפתרונות הוא לשים דיודת זנר במתח הפוך. מעל למתח מסוים הדיודה נפרצת בכיוון אחורי ונפילת המתח עליה קבועה ויציבה. ניתן להשתמש בתופעה זאת כמייצב מתח, כאשר המתח הקבוע ביציאה הוא נפילת המתח על הדיודה הפרוצה בכיוון אחורי.

***

נסכם את כל השלבים באיור הבא:

%d7%93%d7%99%d7%90%d7%92%d7%a8%d7%9e%d7%aa-%d7%91%d7%9c%d7%95%d7%a7%d7%99%d7%9d-%d7%a9%d7%9c-%d7%a1%d7%a4%d7%a7-%d7%9e%d7%aa%d7%97
איור 6: דיאגרמת בלוקים שמתארת את מקור המתח מנקודת החיבור לרשת החשמל ועד לאספקת המתח הישר לעומס. בכל שלב מוצב אות המתח בגרף בצורה סכמטית.

הסיבה ששנאים, מטענים וספקי מתח הם בעלי משקל כבד היא כי הם מכילים ליפופים רבים סביב ליבה מאסיבית ברכיב השנאי. המטענים מהדור החדש שטוענים לכולנו את הטלפון הסלולרי עובדים בשיטה מעט שונה שבה יש שימוש בהמרה לתדרים גבוהים שמאפשרת שימוש במספר ליפופים קטן יותר על ליבות קטנות באופן משמעותי. אבל זה סיפור לרשימה נפרדת.

זהו.

הדילמה של יצחק, חלק ב' (מימוש) – כמה מילים על רכיבי זיכרון במערכות סדרתיות

ברשימה הקודמת הצגתי את יצחק, ע. רועה צאן, שגמר אומר לתכנן מעגל חשמלי שבוחן כבשים עוברות בסך ומתריע כאשר ארבע שחורות עוברות ברצף. יצחק הבין שלשם כך יש צורך בשימוש בזיכרון. הצגתי את רכיב הזיכרון הפשוט ביותר שנקרא SR-Latch שיכול לזכור סיבית בודדת ושיש לו שתי ידיות, set ו-reset שבאמצעותן אנחנו יכולים לקבוע את פעולתו. סיימתי את הרשימה באפיון הרכיב על ידי טבלת אפיון וטבלת ערור. הראשונה אומרת מה יזכור הרכיב בסיבוב הבא אם ידוע מה הוא זוכר כעת ומה מצב הידיות. הטבלה השניה מסכמת עבורנו מה צריך ללחוץ אם אנחנו יודעים מה הסיבית השמורה כעת ומה הסיבית שאנחנו רוצים שתהיה שמורה בסיבוב הבא.

המשימה הפעם היא להסביר כיצד ניתן להשתמש ברכיב ה- SR-Latch כדי לתכנן את המעגל הדרוש ליצחק.

דיסקליימר – הרשימה הפעם היא מתכון טכני מאוד לפתרון בעיות מסוג מסוים. ראו הוזהרתם!

זהירות רשימה טכנית זהירות: רשימה טכנית!

***

הדבר הראשון שיש לעשות הוא לשרטט דיאגרמת מצבים שמתארת את מה שהמכונה צריכה לעשות וכיצד היא מגיבה לקלט. למכונה שתפתור את הבעיה שלנו נדרשים ארבעה מצבים שקשורים לכמה 1-דים (כבשים שחורות) כבר נצפו ברצף:

A – הקלט הקודם היה 0

B – הקלט הקודם היה 1

C – השניים הקודמים היו 1

D – השלושה הקודמים היו 1

כל מצב נוסף הוא מיותר ונכלל כבר במצבים A-D.

בדיאגרמת המצבים נשרטט שני חצים היוצאים מכל מצב עבור שני סוגי הקלט האפשריים, 0 או 1. כל חץ יוביל למצב שבו תהיה המערכת לאחר כניסת הקלט החדש. על החץ נסמן קלט משמאל ופלט מימין. להלן הדיאגרמה המתאימה לבעיה שלנו:

דיאגרמת מצבים
איור 1: דיאגרמת מצבים. המספר השמאלי על כל חץ הוא הקלט והימני הוא הפלט.

נשים לב שכל קלט של 0 מחזיר אותנו למצב A ולמעשה מאפס את הספירה. כל כניסה של 1 מקדמת אותנו למצב הבא בטור. כניסה של 1 במצב D משאירה את המצב ב-D וגם משנה את הפלט ל-1. כל עוד הקלט ממשיך להיות 1, המצב נשאר D והפלט נשאר 1 כי המכונה עדיין מזהה רצף של ארבעה 1-דים. כניסה של 0, כאמור, תשלח את המכונה למצב A,  תאפס את הספירה ותשנה את הפלט ל-0.

השלב הבא הוא לתרגם את דיאגרמת המצבים לטבלת מצבים. הטור השמאלי בטבלה מציין את המצב הנוכחי. שני הטורים הימניים מציינים את המצב הבא, אחד עבור כל אפשרות של קלט. בטורים הימניים של המצב הבא יופיע שם המצב ולידו הפלט באותו סיבוב.

טבלת מצבים

כעת נקודד את שמות המצבים לצורה בינארית. מכיוון שאנחנו נדרשים לארבעה מצבים שתי סיביות יספיקו כדי לקודד את כולם. שתי סיביות אלה הן בעצם הזיכרון שלו אנחנו נדרשים. כלומר, מספר המצבים הדרושים לפתרון הבעיה הוא זה שקובע כמה זיכרון אנחנו צריכים להקצות. נסמן סיביות אלה באותיות y1y2.

להלן הטבלה לאחר קידוד:

טבלת מצבים לאחר קידוד

השלב הבא הוא להשתמש בטבלת העירור של SR-Latch כדי לדעת מה יש להזין לכל רכיב זיכרון על מנת לעבור מ- y1y2 של המצב הנוכחי לזה של המצב הבא. לדוגמה המצב הראשון y1y2 (בשורה הראשונה) הוא 00 ולפי טבלת המצבים המקודדת עבור כניסת קלט x=0 המצב הבא הוא 00. טבלת העירור של SR-Latch (ראו רשימה קודמת) מנחה אותנו שכדי לעבור מ-0 ל-0 יש ללחוץ S=0 ואז לא משנה מה לוחצים ב-R. אם כן, גם רכיב זיכרון 1 וגם 2 צריכים לקבל כניסות של S=0 , R=d כפי שניתן לראות בשורה הראשונה של טבלת המימוש. ה-d מסמל don't care.

טבלת מימוש זיכרון

השלב האחרון לפני מימוש הוא למצוא את הפונקציה הבוליאנית המתאימה עבור כל הכניסות והיציאות של המעגל, כלומר עבור: S1, R1, S2, R2 ו-Z הפלט. כל המידע הדרוש כבר קיים בטבלאות שבנינו. נותר רק למצוא את הפתרון המינימלי.

נשתמש בשיטה הנקראת מפת קרנו. נסביר את השיטה תוך פתרון עבור S1. נרכז את הידע שלנו על S1 בטבלה כך שהשורות מוגדרות לפי y1y2 והטורים לפי X הקלט. התוכן של תאי הטבלה הוא הערכים המתאימים של S1. למשל בשורה y1y2=01 עבור x=0 דרוש S1=0 ועבור x=1 דרוש S1=1. להלן הטבלה המלאה:

מפת קרנו 1

כדי לקבל פתרון מינימלי יש לסמן ברצף את כל ה-1-דים בטבלה, בודדים, זוגות, רביעיות, שמיניות וכו'. ה-1 היחיד בטבלה של S1 ממוקם בתא שמשמעותו הבוליאנית היא בעצם x·y1'·y2  כלומר נקבל 1 אם  x ו-y2 שווים 1 ו-y1 שווה 0 (הגרש מסמן מעבר במהפך). נשים לב שמתחת ל-1 יש d, כלומר לא אכפת לי. יש לנו חופש לבחור אותו כ-1 ואז לסמן גם אותו. כעת הטבלה מראה לנו ש-y1 יכול להיות 0 או 1 ולכן S1 בעצם לא תלוי בו. אם כן נוכל לרשום את הפונקציה הבוליאנית המינימלית הבאה: S1=x·y2.

נתבונן במפת קרנו עבור R1:

מפת קרנו 2

ניתן לסמן את שני ה-1-דים ולקבל פתרון דומה לקודם שמצריך שער 'וגם' אחד. נשים לב שאם נבחר את שני ה-d מעל ה-1-דים כ-1 ונסמן גם אותם נקבל שהפתרון המינימלי הוא פשוט 'x, ללא תלות ב- y1yולכן נבחר פתרון זה, 'R1=x.

לסיכום הפונקציות הבוליאניות עבור הכניסות והיציאות הן:

S1=x·y2

'R1=x

'S2=x·y1

R2=x'+ y1

'z=x· y1·y2

נשרטט את המעגל הנדרש באמצעות סימנים מוסכמים של שערים.

מעגל פתרון

השאר כבר על יצחק.

סוף.

הדילמה של יצחק, חלק א' – כמה מילים על רכיבי זיכרון במערכות סדרתיות

יצחק הוא ע. רועה צאן. בעדרו יש כבשים לבנות ושחורות. הוא קיבל משימה לספור כבשים עוברות בסך ולדווח בכל פעם שארבע כבשים שחורות עוברות ברצף. הבעיה היא שהוא נרדם כל הזמן ולכן נכשל במשימה.

כדי לא לאבד את עבודתו הוא מחליט לבנות מעגל חשמלי דיגיטלי שיקבל כרצף של קלט את צבע הכבשים העוברות וידווח על הרצפים השחורים במקומו.

יצחק גם טרח וקרא את הרשימות הקודמות שלי שבהן הצגתי את האלגברה הבוליאנית, את הקשר בינה ובין אלקטרוניקה דיגיטלית וגם איך מממשים שערים לוגיים באלקטרוניקה.

אם כך, יש בידו סט כלים בסיסי כדי לתכנן מעגלים דיגיטליים פשוטים שיכולים לקבל קלט מסוים ולהחליט לבד, למשל, האם להדליק נורה או לא בהתאם לתנאים שקבענו מראש.

האם יצליח יצחק במשימה?

Flock_of_sheep
תמונה 1: כבשים במכון מחקר בארה"ב. המקור לתמונה: אתר המשרד לחקלאות של ארה"ב, דרך ויקיפדיה. הצלם: Keith Weller. בעעעע!

***

ראשית נתרגם את הבעיה לשפה בוליאנית.

המעגל שלנו מקבל רצף של קלט, כלומר סדרה של סיביות, 0-ים (כבש לבן) או 1-דים (כבש שחור), וצריך לדווח בזמן אמת על כל ארבעה 1-דים רצופים, גם במקרה שהם חלק מסדרה ארוכה יותר. לדוגמה, עבור הקלט 01011111 הפלט יהיה 00000011, כאשר '1' בפלט מסמל שהמעגל זיהה רצף של ארבעה כבשים שחורות.

חישבו כיצד אתם הייתם פותרים את הבעיה ללא המעגל. בכל רגע אתם צריכים לזכור כמה כבשים שחורות עברו ברצף עד אותו הרגע ואז להחליט אם השחור שעובר כעת הוא הרביעי. מילת המפתח היא "לזכור". כדי לפתור בעיה כזאת יש צורך להשתמש בזיכרון, וזה אלמנט שלא הצגתי עד היום.

המסקנה היא שליצחק יש בעיה, ויאלץ להמשיך ולקרוא עוד שתי רשימות בבלוג.
הערת שוליים: הניחו שלא עומד לשימושנו מעבד שיכול להכניס ולהוציא נתונים ממערך זיכרון חיצוני. אנחנו רוצים מינימום מעגל שיבצע בדרך אופטימלית רק את המשימה הנדרשת, ללא סיבית אחת מיותרת.

***

ברשימות קודמות הצגתי את אחד הרכיבים הבסיסיים שהוא המהפך. כשמו כן הוא, הופך את הכניסה. 0 בכניסה הופך ל-1 ביציאה ולהפך, 1 בכניסה הופך לאפס ביציאה.

שני מהפכים בטור
איור 2: שני מהפכים מחוברים בטור. המתח החשמלי המסומן כ-x ו-y הוא יציב בזמן והפוך אחד לשני.

מה יקרה אם נחבר שני מהפכים במעגל סביב עצמם, כלומר היציאה של כל אחד מהם היא הכניסה של השני כפי שמוצג באיור 2. נשים לב שבכל נקודה במעגל שבה נדגום את האות נקבל תשובה יציבה בזמן, או 0 או 1. כלומר המעגל זוכר סיבית אחת וניתן להשתמש במבנה הזה כיחידת הזיכרון הבסיסית. הבעיה היא שבמבנה זה לא ברור מה קבע היכן ה-1 היציב והיכן ה-0 ולא ברור כיצד ניתן לשלוט ולשנות את המידע האגור בפנים.

נבחן את המבנה המשופר הבא:

Two inverters and SR-Latch
איור 3: משמאל שני מהפכים בטור מוצגים בצורה שונה. מימין במקום המהפכים יש שערי NOR. יש לנו שתי כניסות שליטה, S ו-R. היציאה מסומנת ב-Q. המקור לתמונה הימנית: ויקיפדיה, לשם הועלתה על ידי המשתמש Napalm Llama.

נשים לב שלמרות הסידור המבלבל, המעגל המוצג באיור 3 משמאל הוא עדיין שני מהפכים מחוברים בטור. כעת נחליף את המהפכים בשערי NOR, כלומר שערי 'או' עם מהפך ביציאה. בסידור זה נשארנו עם שני מהפכים בטור, אבל הרווחנו עוד שתי ידיות לשליטה שמסומנות באיור 3 משמאל באותיות S ו-R (משמעותן set ו-reset בהתאמה). היציאות של המעגל מסומנות באותיות Q ו-Q'. מכיוון שהן תמיד הפוכות אחת לשניה, נניח ש-Q היא היציאה ו-Q' היא ההיפוך של היציאה.

כעת בואו ונבחן מה האפשריות של החיבור הזה.

נניח שכעת הערך השמור ברכיב הוא Q, והזנו ערכים מסוימים עבור הידיות R ו-S. מה יהיה הערך השמור ברכיב בסיבוב הבא?

אם ערך שתי הידיות הוא 0 אז הרכיב שומר על ערכו הקודם.

אם S=0 ו-R=1 אז הערך השמור ברכיב הופך ל-0 ללא תלות במה היה בו קודם.

אם S=1 ו-R=0 אז הערך השמור ברכיב הופך ל-1 ללא תלות במה היה בו קודם.

אם S=1 ו-R=1 אז הערך השמור ברכיב למעשה לא מוגדר היטב כי מתקבלת סתירה.

לסיכום, 'לחיצה' על S כותבת ברכיב 1, לחיצה על R כותבת בו אפס, אם לא לוחצים הוא שומר את מה שהיה בו קודם ואם לוחצים על שניהם עושים בלגאן. בואו ונסכים שלא עושים את זה, בסדר? סיכום התוצאות בטבלה הבאה:

טבלה אופיינית

כעת נשאל שאלה אחרת. בהינתן שאנחנו יודעים את ערכו של Q, ואנחנו יודעים מה אנחנו רוצים שיהיה בו בסיבוב הבא, מה עלינו ללחוץ? נעזר בטבלה הקודמת.

אם יש ברכיב 0 ואנחנו רוצים שישאר 0, אנחנו בטוח צריכים ללחוץ על S, ואז לפי טבלה 4 זה כבר לא משנה אם לוחצים על R או לא.

אם יש ברכיב 0 ואנחנו רוצים שישתנה ל-1, אנחנו חייבים ללחוץ על S, ולא ללחוץ על R. אין עוד אופציה.

אם יש ברכיב 1 ואנחנו רוצים שישתנה ל-0, אנחנו חייבים לא ללחוץ על S, וכן ללחוץ על R. אין עוד אופציה.

אם יש ברכיב 1 ואנחנו רוצים שישאר 1, אנחנו בטוח לא צריכים ללחוץ על R, ואז לפי טבלה 4 זה כבר לא משנה אם לוחצים על S או לא.

התוצאות מסוכמות בטבלה הבאה:

טבלת עירור

***

כעת יש בידינו רכיב זיכרון מאופיין היטב שיש לו שתי ידיות שמאפשרות לנו לשלוט במה הוא זוכר ולשכתב את תוכנו אם צריך.

רכיב הזיכרון שתואר נקרא בעגה SR-Latch והוא דוגמה ל-Flip-flop או דלגלג בעברית. הדלגלגים הם סדרה של מעגלים דומים למה שתואר כאן, כל אחד עם טבלת איפיון אחרת, שיכולים לשמש כרכיבי זיכרון בסיסיים בסוג מעגלים שנקראים מערכות סדרתיות, אבל השם לא כל כך משנה.

השאלה כעת היא מה על יצחק לעשות כדי השתמש ברכיב ה- SR-Latch כדי לקבל את התוצאה הרצויה?

על כך בחלק ב' של הרשימה.

רק פוני אחד לטריק – על מימוש שערים לוגיים

בשתי רשימות קודמות סיפרתי על האלגברה הבוליאנית ועל איך ניתן לעשות בה שימוש באלקטרוניקה דיגיטלית. ערכי המשתנים באלגברה בוליאנית, 'שקר' או 'אמת', 'אפס' או 'אחד', מתורגמים באלקטרוניקה למתח גבוה או מתח נמוך. בעזרת הפעולות הבוליאניות 'וגם' ו-'או' ניתן לתכנן מעגל שיקבל החלטות נכונות לפי חוקים ידועים מראש, למשל ידליק נורה אך ורק אם התנאים הנכונים מתקיימים.

הפעם אני רוצה לספר על איך זה קורה באמת. כיצד ניתן לממש את השערים הלוגיים, כלומר את הפעולות 'וגם' ו-'או' ופעולות נוספות.

***

הרכיב הבסיסי שעומד מאחורי כל השערים הלוגיים 'בעולם האמיתי' הוא המתג.

חישבו על מתג כעל ברז במרכז צינור מים. בהנחה שאני דוחף בלחץ מים דרך הצינור, המים נשפכים החוצה אם הברז פתוח ולא נשפכים אם הברז סגור. המתג עובד באופן דומה. אם המתג פתוח, זרם חשמלי יעבור דרכו ללא הפרעה ואם הוא סגור הזרם אינו עובר. בעגה נאמר שבאופן אידיאלי כאשר המתג פתוח הרכיב הוא 'קצר' במעגל וכאשר הוא סגור הרכיב הוא 'נתק' במעגל.

ישנן מספר דרכים לבנות מתג עבור מעגלים חשמליים בזרם נמוך (למשל בשבבים למחשבים). בעבר היו משתמשים בשפופרות ואקום והיום אנחנו משתמשים בטרנזיסטורים שהם רכיבים שבנויים מחומרים שנקראים 'מוליכים למחצה' ועל המצאתם הוענק פרס נובל בפיזיקה בשנת 1956.

כדי לא להאריך היכן שיש לקצר ולא לקצר היכן שיש להאריך לא אעסוק ברשימה זאת בבפנוכו של הטרנזיסטור. אני רק אציין שלרכיב יש שלושה טרמינלים, כלומר שלוש נקודות חיבור למעגל. נקודה אחת נקראת 'gate' והיא הברז. שתי הנקודות האחרות נקראות 'source' ו-'drain' והן שני צדדי הצינור. מתח מתאים בחיבור ה-gate יפתח את הרכיב לזרם חשמלי.

מכאן ואילך אני פשוט אניח שיש ברשותי את הרכיב הדרוש.

FET איור 1: סימון במעגל חשמלי לטרנזיסטור. G מסמן את כניסת ה-Gate, S את כניסת ה-Source ו-D את כניסת ה-Drain. אם נחבר מתח חשמלי בין S ל-D ונדאג למתח ב-G שמספיק לפתיחתו של הטרנזיסטור אז זרם חשמלי יזרום מ-S ל-D.

***

כעת, כשיש לנו את אבן הבסיס, המתג, נשתמש בו כדי לממש את השער הפשוט ביותר: 'המהפך' (inverter). ברשימה הקודמת הראיתי שבתכנון המעגלים הדיגיטליים יש צורך ברכיב שהופך גבוה לנמוך ונמוך לגבוה. השער הלוגי הזה גורם להיפוך של האות החשמלי ומכאן שמו.

כיצד, אם כן, נשתמש במתג כדי לקבל מהפך? נבחן את החיבור הבא:

מהפך NMOS איור 2: מעגל מהפך. המקור לאיור: ויקיפדיה (עם תוספות שלי), לשם הועלה על יד המשתמש Fresheneesz.

כאשר המתח גבוה ב-gate של הטרנזיסטור הוא פתוח ולכן מהווה קצר, כלומר אפשר להחליף אותו בחוט מתכת. אם כן, המתח בנקודת היציאה מוכתב ישירות על ידי נקודת ההארקה שהיא בהגדרה אפס. כלומר, נכנס גבוה יוצא נמוך. לחלופין, אם מתח הכניסה נמוך אז הטרנזיסטור סגור ולכן אין זרם. כתוצאה מכך אין נפילת מתח על הנגד וניתן להחליף את הטרנזיסטור בחוט מנותק. המתח ביציאה מוכתב כעת על ידי מקור המתח העליון שערכו הלוגי הוא '1'. כלומר, נכנס נמוך יצא גבוה.

אז יש לנו מהפך.

לפני שאני עובר הלאה, אני אתעכב מעט כדי להצביע על בעיה פרקטית במהפך הזה ועל פתרון אפשרי. נניח שבאופן ממוצע בחצי מזמן פעולתו של המעגל נכנס למהפך אות גבוה ולכן הטרנזיסטור פתוח. כתוצאה, בחצי מהזמן זורם זרם במעגל דרך הנגד כך שנשלם לחברת החשמל על חימום. זאת תוצאת לוואי מאוד לא רצויה מכיוון שישנם מעגלים שבהם יש מיליוני טרנזיסטורים, ונהיה שם חם. מאוד.

בואו ונניח שיש טרנזיסטור מאוד דומה לזה שהוצג, אך הוא עובד הפוך. הוא נפתח רק אם מתח ה-gate שלו נמוך. נסמן אותו בסימון דומה אך עם נקודה ב-gate. נבחן את החיבור הבא:

מהפך CMOS איור 3: מעגל מהפך בטכנולוגית CMOS. המקור לאיור: ויקיפדיה (עם תוספות שלי), לשם הועלה על ידי המשתמש inductiveload.

מתח גבוה יגרום לפתיחת הטרנזיסטור התחתון וסגירת העליון, כך שהיציאה נמוכה. מתח נמוך יגרום לפתיחת הטרנזיסטור העליון וסגירת התחתון ולכן היציאה גבוהה. היתרון במעגל זה הוא שברוב זמן פעולתו לא זורם בו זרם, בזבוז ההספק עליו נמוך באופן משמעותי ולכן הוא מתחמם פחות. החיסרון הוא שיש בו צורך בעוד טרנזיסטור ובעוד שטח על גבי המעגל המודפס, וזה עולה כסף. צורת המהפך הזאת היא חלק מטכנולוגיה בסיסית של מעגלים שנקראת CMOS.

***

בואו וננסה שער יותר מורכב.

ה-'nand' הוא שער שמורכב מ-'וגם' שאחריו מהפך (not-and). טבלת האמת שלו היא:

טבלת אמת של שער nand

נבחן את המעגל הבא:

NMOS NAND איור 4: מעגל nand. המקור לאיור: ויקיפדיה (עם תוספות שלי), לשם הועלה על יד המשתמש Fresheneesz.

נבחין שזרם במעגל יזרום רק אם שני המתגים פתוחים ובמקרה הזה היציאה נקבעת על ידי ההארקה, כלומר יציאה נמוכה. כל מקרה אחר נקבל יציאה גבוהה וזה בדיוק מה שנדרש לפי הטבלה.

ניתן לממש את ה-nand, כמובן, גם בטכנולוגית CMOS. אני ממליץ לכם לנסות לשרטט את הפתרון בעצמכם.

אז יש לנו nand.

וזהו, סיימנו.

מה? למה?

***

להלן שלושה תרגילים קצרים באלגברה בוליאנית. מי שלא מכיר או לא זוכר יכול לעיין ברשימה קודמת בנושא.

Functional completeness

התרגיל הראשון מראה שניתן ליצר מהפך משער nand. התרגיל השני מראה שניתן לייצר שער 'וגם' באמצעות שערי nand ומהפך. התרגיל השלישי מראה שניתן לייצר שער 'או' באמצעות שער nand ושני מהפכים.

מסקנה: ניתן לממש את כל השערים הלוגיים באמצעות צירופים של שערי nand בלבד.

זה נקרא בעגה Functional completeness.

היתרון: צריך רק פוני אחד לטריק, רק חותמת אחת, רק ראש אחד במדפסת וכולי.

החיסרון: יש צורך בהרבה יותר טרנזיסטורים.

סוף.

הקשר בין השעון המעורר שלי לאלגברה בוליאנית

ברשימה קודמת הצגתי את האלגברה הבוליאנית, בה כל משתנה יכול לקבל שני ערכים בלבד: שקר או אמת, 0 או 1. הפעולות האפשריות היחידות בין משתנים הן פעולת 'או' ופעולת 'וגם'. בסיום הרשימה ציינתי ששני השימושים הידועים ביותר לאלגברה הזאת הם לוגיקה ואלקטרוניקה דיגיטלית.

"איך אלגברה בוליאנית קשורה לאלקטרוניקה?" אתם שואלים. קחו דוגמה.

Picture1 תמונה 1: תצוגה של שעון דיגיטלי.

***

זקני השבט מבינכם אולי זוכרים שלפני המסכים החכמים היה מקובל לקרוא לשעון 'דיגיטלי' אם במקום מחוגים (מה זה?) השעה היתה מוצגת בספרות. כל ספרה היתה מורכבת מ-7 נורות מלבניות שעל ידי הדלקה של חלק מהן היינו רואים ספרה בין 0 ל-9 כפי שניתן לראות באנימציה. (נקרא בעגה seven segment display).

7-segments_Indicator
אנימציה 2: תצוגה דיגיטלית של ספרות באמצעות 7 נורות. המקור לאנימציה: ויקיפדיה, לשם הועלתה על ידי המשתמש Artur perm.

מבחינתינו כמתכנני השעון אנחנו מעוניינים להזין מספר ושכל אחת מ-7 הנורות תדלק או תישאר כבויה כך שהמידע הנכון יוצג. כיצד 'יודעות' הנורות האם להידלק או לא?

המידע על הספרה מוזן בצורה בינארית. כדי לייצג את הספרות 0-9 יש צורך ב-4 סיביות מכיוון שכל אחת מייצגת חזקה של 2 (בדומה לייצוג עשרוני בו כל ספרה מייצגת חזקה של 10). נרצה לייצר מעגל שמקבל את 4 הסיביות הקלט ופולט 7 סיביות שקובעות ל-7 הנורות האם להידלק או להישאר כבויות.

נסמן את סיביות הקלט באותיות A,B,C ו-D. הערכים של החזקות של שתיים מסודרות כך ש-D זה 1, C זה 2, B זה 4 ו-A זה 8.

את הנורות נסמן  באותיות a עד f כאשר מקובל לשייך אותן לנורות כפי שמתואר באיור 3.

7 segment display edited
איור 3: תצוגה ב-7 נורות עם סימוני אותיות על כל נורה. המקור לחלק קטן מהאיור: ויקיפדיה, לשם הועלה על ידי המשתמש h2g2bob.

נתחיל בלתאר את כל המצבים האפשריים שאליהם נדרש המעגל. נרכז את כל האפשריות בטבלה הבאה:

טבלת אמת של כניסות ויציאות

כדי לוודא שהבנו את הטבלה נעבור על שתי אפשריות. עבור הספרה '0' הקלט הוא אפס בכל בחזקות של 2 וכדי להציגו כל הנורות נדלקות מלבד נורה g המרכזית..

עבור הספרה 7 הקלט הוא 1+2+4 ולכן אפס ושלושה אחדות. להצגת המספר נדרשות שלוש נורות דלוקות, העליונה והשתיים הימניות, כלומר נורות a,b ו-c.

כעת כשהבנו את מלאכת התרגום הנדרשת בין סיביות הכניסה ליציאה בואו ונתפלש בפרטים הקטנים כדי ליצור מעגל שעושה את זה.

לשם דוגמה ננתח את הדרישות עבור יציאה שתתן הוראות לנורה e. מהטבלה ניתן לראות שישנם 4 מקרים בהם הנורה דולקת (עבור הספרות: 0,2,6,8). המקרה הראשון הוא שכל סיביות הקלט באפס. נסמן זאת כך: 'A'·B'·C'·D, כאשר הגרש מסמנת משתנה שעבר היפוך ערכים, כלומר נדרשת כניסה של 0 כדי לקבל 1 מהמשתנה. במילים אחרות, אחת האפשריות עבור נורה e להידלק, כלומר ערך 1, היא שגם כניסה A נמוכה, גם B נמוכה, גם C וגם D נמוכות. ישנן עוד שלוש אפשריות. נסכם בכיתוב בוליאני:

'e= A'·B'·C'·D' +A'·B'·C·D'+ A'·B·C·D'+ A·B'·C'·D

ניתן לבנות את המעגל המתואר על ידי המשוואה הזאת. כל פעולת 'וגם' או פעולת 'או' תצריך מאיתנו מימוש של עוד שער לוגי (שמאחורי מימושו במציאות עומדים המון רכיבים אלקטרוניים) ולכן הפתרון הזה הוא בזבזני במיוחד ולא יעיל.

מבט חטוף על הביטוי מראה שיש בו המון חזרות של משתנים ולכן סביר או אפילו ודאי שניתן לקבל את אותה תוצאה בפחות שערים.

ישנן מספר שיטות למינימיזציה של ביטויים בוליאניים ומדובר בפעולות טכניות מאוד. מכיוון שאין בכוונתי להעביר כאן קורס במערכות ספרתיות אני פשוט אכתוב את התשובה שיוצאת מאלגוריתם מינימיזציה שנקרא 'מפת קרנו' ואתן לכם לבדוק ולהשתכנע שהתוצאה זהה.

'e=B'·D'+C·D

עבור פתרון זה אנחנו נדרשים לשלושה שערים בלבד (מלבד המהפכים). שימו לב שמסתבר שהכניסה A כלל אינה נחוצה עבור הפתרון!

נבדוק עבור הקלט של הספרה 0:

A=B=C=D=0

e=0'·0'+0·0'=1·1+0·1=1+0=1

כלומר, עבור הקלט של הספרה 0 הנורה e דלוקה כנדרש.

נבדוק עבור הקלט של הספרה 1:

A=0,B=0,C=0,D=1

e=0'·1'+0·1'=1·0+0·0=0+0=0

נורה e כבויה כנדרש. וכך הלאה.

ניתן להמשיך ולבדוק את כל הספרות. היו סמוכים ובטוחים שזה עובד.

האם ניתן עוד לשפר?

אם אתם זוכרים את הרשימה הקודמת, שם דנתי במשפט הדיסטריביוטיביות הראשון של האלגברה הבוליאנית. לפי משפט זה:

(A+B)·(A+C)= A+(B·C)

אם נהפוך כל סימן כפל לחיבור וכל סימן חיבור לכפל נקבל עדיין משפט נכון ולכן עבור המקרה שלנו:

(e=B'·D'+C·D'=D'·(B'+C

וכך חסכנו עוד שער באמצעות אלגברה בוליאנית.

***

מעגלים דיגיטליים נשענים על שימוש באלגברה בוליאנית ובאלגוריתמים הנסמכים עליה כדי למצוא את הדרך הטובה ביותר לממש את המעגל הדרוש. המעגל שמפענח וממיר את מתחי הכניסות למתחי היציאות הנכונים עבור הנורות נקרא בעגה מפענח בינארי (Binary decoder).

אז אני מקווה שקיבלתם איזשהו מושג איך אלגברה בוליאנית קשורה לאלקטרוניקה.

לסיום נשים לב שעד עכשיו עסקנו באבסטרקציה של עניין השערים הלוגיים למרות שדיברנו על מעגל חשמלי מוחשי. איך בעצם מממשים במציאות את כל השערים האלה?

על כך בפעם אחרת.

אפילו שימפנזה – על פתרון מעגלים חשמליים באמצעות מטריצות

ברשימה הקודמת נתקלנו במושג 'מטריצה'. ראינו שניתן להציג מערכת משוואות ליניאריות באמצעות מטריצות ולהשתמש בתכונות המטריצה כדי למצוא את הפתרונות עבור הנעלמים. מה שלא ראינו זה איך זה עוזר לנו לשלם במכולת.

***

איור 1 הוא ייצוג סכמטי של מעגל חשמלי. ישנו מקור מתח חשמלי V, וחוטים מוליכים דרכם עובר זרם חשמלי I מהמקור לצרכן ומהצרכן למקור. הצרכן מסומן כנגד, שעליו מתקיים 'חוק אוהם', כלומר שיש יחס ישר בין המתח עליו לבין הזרם דרכו, וקבוע הפרופורציה הוא ההתנגדות החשמלית שמסומנת ב-R. הבחירה בצרכן כנגד אוהמי היא רק לשם פשטות. הצרכן יכול להיות כל מכשיר חשמלי או מעגל שתחברו לספק המתח, למשל טוסטר משולשים. את הזרם על הנגד נוכל לחשב על ידי הצבת מתח הספק וההתנגדות של הנגד לתוך חוק אוהם (I=V/R).

מעגל 1 איור 1: צרכן\נגד מחובר למקור מתח חשמלי וזרם חשמלי זורם במעגל. אם נניח נגד אוהמי נוכל להשתמש בחוק אוהם לחישוב הזרם.

חישבו על המעגל כעל מפל מים. בהדק החיובי של הספק יש מים במאגר גבוה, כלומר בחלק העליון של המפל. כוח הכובד גורם למים ליפול לגובה נמוך יותר ותוך כדי כך אנחנו יכולים להפיק מכך עבודה, למשל לסובב גלגל של תחנת קמח או טורבינה בתחנת כוח. אותו דבר קורה על הנגד שיכול להיות למשל סלילי החימום בטוסטר משולשים. נושאי המטען הגיעו לנגד באנרגיה פוטנציאלית גבוהה, ויצאו באנרגיה פוטנציאלית נמוכה, תוך יצירת חום. את המים בתחתית המפל ניתן לשאוב חזרה אל חלקו העליון. זה בדיוק מה שעושה ספק המתח מההדק השלילי לחיובי.

חשוב לשים לב שאם עוקבים אחרי מסלול סגור, גם במקרה של המים וגם במקרה החשמלי, ומחברים עליות וירידות באנרגיה צריכים לקבל סה"כ אפס מכיוון שהאנרגיה נשמרת (בעגה: כוח הכבידה והכוח החשמלי הם כוחות משמרים).

עד כאן הכל פשוט.

***

איור 2 הוא גם ייצוג סכמטי של מעגל חשמלי, אבל מאיים מעט יותר. השאלה כאן היא מהו הזרם על נגד R3. הבעיה היא שהפעם לא נוכל להשתמש בחוק אוהם כמו במעגל הקודם מכיוון שהנגד לא מחובר ישירות לספק המתח ולכן אין אנו יודעים מה המתח עליו ומה הזרם עליו. חלק מהמתח 'נפל' על נגד R1, ולכן המתח על R2 ו-R3 לא ידוע.

מעגל 2 איור 2: מעגל חשמלי עם שני חוגים. המתח על נגד R3 אינו ידוע ללא חישוב. I1 ו-I2 אינם הזרמים האמיתיים במעגל אלא זרמי החוגים שהם משתני עזר בדרך לפתרון הבעיה.

מי שלמד מעט אלקטרוניקה יודע שיש מספר שיטות פשוטות כדי לחשב את התשובה (לדוגמה חישוב התנגדות שקולה או שימוש בחוקי קירכהוף). הבעיה היא ששיטות אלה מסתבכות מאוד ככל שנסבך את המעגל וגם אינן מותאמות באופן מיטבי לפתרון באמצעות מחשב.

בכוונתי להציג שיטה אחרת שתראה בתחילה מסובכת הרבה יותר אבל ברגע שנבין אותה היא תהיה כל כך פשוטה, כך שאפילו שימפנזה יוכל לפתור כל מעגל, מסובך ככל שיהיה. חשוב מכך, השיטה לפעמים לא תהיה הכי נוחה לפתרון עבור אדם, אך היא מותאמת בצורה מושלמת לפתרון על ידי מחשב.

נזכר שבמסלול סגור סה"כ עליות ונפילות המתח צריכות להסתכם לאפס. נבחר שני מסלולים סגורים כאלה (מתוך שלושה אפשריים) ונכתוב עבור כל אחד משוואה (ראו איור 2). ספק המתח מעלה את המתח (מעלה את המים) ונגד מוריד אותו (מפיל את המים).

1

כעת נשתמש בסוג של טריק ונגדיר משתני עזר לבעיה. נגדיר זרם בכל חוג (I1 ו-I2 באיור 2). הזרמים האלה אינם אמיתיים כי הרי ברור שהזרם שונה בענפים שונים עקב פיצול בנקודת הצומת. אבל אנחנו נגדיר אותם כך בכל זאת.

נשתמש בחוק אוהם כדי להמיר את המתחים במשוואה לזרמים והתנגדויות. נשים לב שדרך נגד R2 עוברים שני הזרמים I1 ו-I2, ובכיוונים שונים ולכן ההשפעה של I2 על R2 היא של עליית מתח ולא נפילה.

2

נלוש מעט את המשוואות ונסדר אותן בצורה יותר נוחה:

3

הגענו לסט של שתי משוואות בשני נעלמים (הזרמים). ברשימה הקודמת ראינו איך לפתור את הבעיה בעזרת מטריצות. ראשית נרשום את המשוואות בצורה מטריצית:

4
*[הערת שוליים: מי שלא מתעניין במתמטיקה או בפתרון יכול לדלג בנקודה זאת ישירות לחלק הבא. היו סמוכים ובטוחים שהשיטה תניב פתרון נכון].*

נשתמש במטריצה ההופכית כדי למצוא את הפתרון:

5

R-1 היא המטריצה ההופכית של המטריצה R. ברשימה הקודמת הגדרנו מטריצה הופכית וראינו איך לחשב אותה. התשובה היא:

6

נשתמש בחוקי הכפל של מטריצות כדי להגיע לפתרון עבור הזרם שמעניין אותנו:

7

תם ונשלם. זרם החוג I2 הוא אולי לא זרם אמיתי אבל על R3 הוא בדיוק הזרם שאנחנו מחפשים. אם היינו מחפשים את הזרם על הנגד R2 היינו פשוט מחשבים לפי I1-I2.

***

אז מדוע הטרחתי אתכם עם הדרך הארוכה והמסובכת הזאת? אדגיש שוב שישנן דרכים פשוטות הרבה יותר לפתרון המעגל שמופיע באיור 2.

ברשותכם נחפור מעט לתוך המשוואה הראשונית בצורתה המטריצית. התבוננו במשוואה, האם אתם מבחינים בחוקיות כלשהי?

8

איברי האלכסון הראשי של מטריצה R הם סך כל ההתנגדויות על כל חוג. האיברים מחוץ לאלכסון הם ההתנגדויות המשותפות לשני החוגים בסימן מינוס (כל עוד זרמי החוגים בכיוונים הפוכים). כל איבר במטריצת המתחים הוא סך כל מקורות המתח בחוג הרלוונטי.

למעשה יכולנו לכתוב את המטריצה לפי החוקיות הזאת באופן אוטומטי ללא צורך בכתיבת משוואות. החוקיות נשמרת גם אם נזדקק למספר גדול יותר של חוגים ולמטריצות מסדר גבוה יותר.

שיטה זאת נקראת 'זרמי חוגים' (Mesh current) ובאמצעותה ניתן לפתור כל מעגל מהצורה שהצגתי כאן בלי לבצע שום ניתוח ולמעשה ללא צורך להפעיל את המוח, גם במקרה של מעגלים סבוכים שבהם מספר רב של נגדים ומקורות מתח. ניסחנו אלגוריתם שמוביל למטריצה ולחישוב שאותו מבצע המחשב. אנחנו יכולים לנוח!

כעת, בזמן שהמחשב מחשב עבורנו, יש לנו זמן ללכת לעבוד (אולי בתכנון מעגלים חשמליים), להרוויח מלא כסף, וללכת לקנות איתו במכולת.

מסקנה: עם מטריצות אפשר לקנות במכולת.

מ.ש.ל

איך מחשבונים עושים חשבון? על אלגוריתם CORDIC

מכירים את זה שיושבים בעבודה ופתאום מישהו שואל "אז איך בעצם מחשבונים יודעים את כל התשובות לפונקציות המסובכות?", ואז מעלים כל מיני הצעות ואז מישהו מציע "לפי טור טיילור", ואז הרוב אומרים "אה, אולי, נשמע הגיוני", ואז שוכחים מזה מחוסר עניין וממשיכים בחיים, ואז רק טמבל אחד לא שוכח והולך לבדוק את זה ואז הוא מגלה משהו מעניין שהוא לא ידע קודם?

לא מכירים?

אז יצאתי* לבדוק איך מחשבונים עושים חשבון ולא תאמינו מה מצאתי.

*[יצאתי = חיפשתי מידע ברשת]

Casio-fx115ES
תמונה 1: מחשבון מדעי. המקור לתמונה: ויקיפדיה, לשם הועלתה על ידי המשתמש Loadmaster David R. Tribble.

***

'טור טיילור' הוא תמיד הניחוש הראשון עבור מחשבונים, והוא לא רע, אך אינו נכון. בקיצור נמרץ, מדובר בדרך להציג פונקציה כטור אינסופי של חזקות של המשתנה x (ראו קופסא 2). כל איבר בטור מוכפל במקדם שערכו תלוי בערכה של הנגזרת בנקודה מסוימת, סביבה מפתחים את הטור. כדי לחשב את ערכה של פונקציה נוכל בדרך כלל להסתפק בחישוב מספר איברים ראשונים בטור שיספקו תוצאה בדיוק מספיק.

טור טיילור
קופסא 2: טור טיילור.

החיסרון העיקרי בשימוש בטור טיילור במחשבון כיס הוא הצורך לבצע פעולות כפל וחילוק, שהן פעולות שנחשבות מסובכות יותר ומצריכות חומרה מתוחכמת יותר. שם המשחק במחשבון כיס הוא מינימום חומרה, כלומר השבב שמפעיל אותו יכיל מספר מינימלי של מעגלים חשמליים פשוטים שמבצעים אך ורק פעולות פשוטות במהירות גבוהה.

אם כפל וחילוק נחשבות לפעולות 'מסובכות' על השבב, מהן הפעולות שנחשבות פשוטות ומהירות? מבלי להיכנס לסיבות לכך, אלה הן הפעולות הפשוטות: 1) חיבור וחיסור, 2) השוואת מספרים כדי לבדוק מי יותר גדול, 3) הכנסה והוצאה של מספרים לזיכרון, 4) הזזה של הנקודה הבינארית. לגבי האחרון, היזכרו כמה קל לחשב תוצאת כפל כאשר אחד הכופלים הוא חזקה של עשר. כל שעלינו לעשות הוא להזיז את הנקודה העשרונית מכיוון שאנחנו משתמשים בייצוג עשרוני. באופן דומה, בייצוג בינארי כפל בחזקות של 2 מצריך אך ורק הזזה של הנקודה הבינארית.

את הדרך לחשב את ערכן של הפונקציות הטריגונומטריות באמצעות ארבע הפעולות הפשוטות בלבד הגה ג'ק וולדר (Volder) בשנים 1956-1959 כשעבד בחברת Convair באחד מצוותי הפיתוח של מערכת המטוס B-58, שהיה מפציץ עם יכולת לעבור את מהירות הקול. מכיוון שהיה צורך לשדרג חלקים במערכת הניווט של המטוס ממעגלים אנלוגיים לדיגיטליים, עלתה דרישה לאלגוריתם מהיר לחישוב פונקציות טריגונומטריות בזמן אמת ובכמות מינימלית של חומרה. השם שנתן וולדר לשיטה שהמציא לפתרון הבעיה הוא COordinate Rotation DIgital Computer או בקיצור: CORDIC.

אז איך זה עובד?

Convair_B-58A_Hustler_in_flight
תמונה 3: מטוס מפציץ B-58 כפי שצולם בזמן תעופה ב-1967. המקור לתמונה: ויקיפדיה.

***

הרעיון שעומד מאחורי האלגוריתם הוא להתחיל מזווית שעבורה ערכי הפונקציה ידועים, למשל אפס, ומשם להגיע אל הזווית הרצויה באמצעות סדרה של סיבובים. דמיינו חוגה שמצויה בזווית אפס ביחס למישור ושאותה נסובב מספר פעמים, לפעמים 'עם' ולפעמים 'נגד' כיוון השעון. גודל הסיבוב בכל שלב נתון על ידי סדרה של זוויות הולכות וקטנות שאותן בחרנו מראש וצרבנו את ערכן אל תוך השבבים. אם נבחר את סדרת הזוויות בחוכמה נזכה גם בהתכנסות הסדרה לערך המבוקש וגם בכך שכל פעולות הכפל הנדרשות לחישוב יהיו אך ורק עם חזקות של 2, כפי שנראה בהמשך.

סדרת הזוויות לסיבובים נבחרה כך שהטנגנס שלהן (סינוס חלקי קוסינוס) הוא אחד חלקי חזקות הולכות וגדלות של 2 (ראו קופסא 4 מימין). הסיבוב הראשון הוא בזווית הגדולה (טנגנס הזווית שווה 1). אם זווית החוגה החדשה קטנה מזאת הרצויה, בצעד הבא נסובב שוב באותו כיוון בשיעור ששווה לזווית השניה בסדרה. לחלופין, אם הזווית החדשה גדולה יותר מהרצויה נסובב חזרה לפי הזווית השניה. נמשיך לסובב את החוגה בזוויות הולכות וקטנות בסדרה עם או נגד כיוון השעון, לפי מיקום החוגה ביחס לזווית הרצויה (ראו קופסא 4 משמאל למעלה). ניתן להוכיח שסדרת הסיבובים הזאת מתכנסת תמיד לזווית הרצויה. ניתן גם להראות ש-40 סיבובים יתכנסו לזווית המבוקשת בדיוק של לפחות עשרה מקומות אחרי הנקודה העשרונית, שזה מה שמאפשרת תצוגת המסך במחשבון מדעי.

זוויות וסיבובים
קופסא 4: אלגוריתם ה-CORDIC. נבחר זוויות הולכות וקטנות שהטנגנס שלהם הוא חזקה של 2. מיקומי החוגה לאחר כל סיבוב מסומנים באות V. סיבוב ראשון נגד כיוון השעון בזווית הראשונה בסדרה, סיבוב שני נגד כיוון השעון בזווית השניה, סיבוב שלישי עם כיוון השעון בזווית השלישית. הקווים הכחולים מסמנים את ערכי הסינוס והקוסינוס של הזווית לאחר הסיבוב השלישי, לפי ההיטלים על הצירים x ו-y. נוסחאות הסיבוב הדרושות לחישוב ערכי הסינוס והקוסינוס כוללות בתוכן, למרבה הצער, סינוס וקוסינוס.

לאחר כל סיבוב של החוגה יש לחשב את הסינוס והקוסינוס החדשים. דמיינו שאורכו של המחוג שאותו אנחנו מסובבים הוא 1, ולכן קצהו של המחוג נע על מעגל היחידה שרדיוסו 1. מיקום הנקודה בקצה המחוג, כלומר ההיטלים של המחוג על ציר x ו-y, אלו הם ערכי הסינוס והקוסינוס של הזווית החדשה. הבעיה היא שכדי לחשב את מיקום קצה המחוג לאחר כל סיבוב אנחנו צריכים להכפיל בסינוס וקוסינוס (ראו קופסא 4 משמאל למטה). נראה שנכנסנו לבעיה מעגלית!

כאן מגיע 'השוס' שבבחירה של הזוויות. נוכל להוציא קוסינוס כגורם משותף בנוסחת הסיבוב ואז מלבד הגורם המשותף נשארנו רק עם מכפלות בטנגנס. היזכרו שבחרנו את הזוויות כך שהטנגנס שלהן נתון על ידי חזקות של 2. לכן כל סיבוב אמנם מצריך מאיתנו מספר פעולות כפל, אך כולן הן עם חזקות של 2 ולכן מצריכות רק הזזה של הנקודה הבינארית (ראו קופסא  5 למעלה).

מתמטיקה של החשבון
קופסא 5: המתמטיקה של החשבון. מוציאים גורם משותף ועקב הבחירה המיוחדת של הזוויות, נשארים בחשבון רק חזקות של 2. נוכל גם לחשב מראש את מכפלת הגורמים המשותפים.

כעת נותר רק להתמודד עם מכפלה של 40 קוסינוסים שהוצאנו כגורמים משותפים. נוכל להמיר את הקוסינוס באמצעות זהויות טריגונומטריות לביטוי שמכיל טנגנס, ושאותו נמיר לחזקה של 2. מכיוון שהגורמים תמיד מכילים את אותן זוויות ואינם משתנים בין אם בחרנו לסובב עם או נגד כיוון השעון, אז ערכו של הכפל של כל הארבעים אינו משתנה והוא בקירוב 0.61 (ראו קופסא 5 למטה). נוכל לחשב אותו מראש ולצרוב את הערך לשבב.

זהו, עכשיו נותר רק לעשות את החשבון של 40 סיבובים ולהגיע לתוצאה מהירה.

***

ב-1971 פרסם ג'ון וואלתר (Walther) מחברת Hewlett-Packard הרחבה והכללה לשיטה שאפשרו להשתמש בה לחשב פונקציות היפרבוליות, אקספוננטים, לוגריתמים, כפל, חילוק ושורשים. זמן קצר אחר-כך הופיעו מחשבוני הכיס המדעיים הראשונים. והנה אנחנו היום.

——————————————————–

לקריאה נוספת:

CORDIC: how hand calculators calculate, by Alan Sultan