ארכיון
♪דיגי דיגי דיגי דיגיטציה♫ – על המרת אות אנלוגי לדיגיטלי
נניח שברגע של שיקול דעת בעייתי החלטתם לחבר מיקרופון למחשב ולהקליט את עצמכם שרים, למשל, את שיר הנברשת של סיה. המחשב, כידוע הוא יצור דיגיטלי, ולכן שמורים בו רק שורות של אפסים ואחדים.
איך הופכות הצעקות שלכם למידע שיכול להישמר בזיכרון המחשב? במילים אחרות, כיצד מומר אות אנלוגי למידע דיגיטלי?
תמונה 1: נברשת, למקרה שלא ידעתם. המקור לתמונה: ויקיפדיה, לשם הועלתה על ידי המשתמש Steelbeard1.
הצעד הראשון הוא להמיר את המידע הרצוי למתח חשמלי.
המיקרופון הוא מכשיר חשמלי שממיר גלי קול לאותות חשמליים. גלי הקול גורמים לממברנה לרטוט. רטט זה גורם לתנועה יחסית בין מגנט לסליל וכתוצאה מכך נוצרים זרמים חשמליים משתנים בסליל (למתעניינים, חפשו 'חוק פרדיי' או 'השראה אלקטרומגנטית'). המתח המשתנה שנמדד בקצות הסליל הוא עדיין אנלוגי, כלומר הוא רציף וודאי שאינו מיוצג על ידי ביטים '0' או '1'.
כיצד, אם כן, מומר האות החשמלי האנלוגי לאות דיגיטלי?
התשובה היא רכיב שנקרא Analog-to-digital converter או בקיצור ADC, וזה נושא הרשימה.
תמונה 2: מיקרופון, למקרה שלא ידעתם. המקור לתמונה: ויקיפדיה, לשם הועלתה על ידי המשתמש ChrisEngelsma.
***
ראשית, חשוב לדעתי להבין שהכוונה באותות אנלוגיים היא לכל התופעות המוחשיות בעולם החומרי ולכן ניתן למדוד אותם. אות דיגיטלי, לעומת זאת, הוא רעיון מופשט ומשום כך יש צורך במכשיר שייצור אותו באופן מלאכותי.
אות דיגיטלי מורכב רק משני ערכים אפשריים שאותם אנחנו מסמנים לשם נוחות ב-'0', ומתבטא בד"כ בערך נמוך, וב-'1' שמתבטא בד"כ בערך גבוה. כל המוסכמות האלה הן שרירותיות, כל עוד שומרים על שני ערכים ועל חוקי לוגיקה ברורים ביניהם. עסקתי בכך בהרחבה בסדרה של רשימות על אלגברה בוליאנית ועל איך להשתמש בה באלקטרוניקה דיגיטלית.
למעבר לאות דיגיטלי יש יתרונות רבים, ביניהם היכולת לבצע עיבוד באמצעות מיקרופרוססורים רבי עוצמה וטיפול ברעשים. ה-ADC הוא החוליה המקשרת בין העולם האנלוגי בקצות הממירים לבין המיקרופרוססורים הדיגיטליים בתוך המחשב המאפשרים עיבוד אותות וטיפול מתקדם במידע.
הדיגיטציה ב-ADC מורכבת משני שלבים: 1) דגימת האות הרציף והחזקה של הערך, 2) קוונטיזציה וקידוד.
בשלב הראשון המעגל דוגם את הערכים של המתח רק בזמנים בודדים שנקבעו מראש, למשל בתדירות קבועה. רק הערכים שנדגמו מוחזקים ומוזנים הלאה.
בשלב השני הערך של המתח מקוטלג לפי שלבים בסולם שנקבעו מראש. לדוגמה, נניח שערכי המתח נעים ברציפות בין 0 ל-10 וולט. אני יכול לקבוע, למשל, עשרה שלבים בסולם: 0-1, 1-2, 2-3 וכולי או 2 שלבים בסולם: 0-5, 6-10 .
מטרת שלב הקידוד הוא לתת שמות בינריים לשלבים של הסולם שאותם המחשב יכול להזין לזיכרון ולעשות זאת באופן חסכוני. אם למשל ישנם רק 4 שלבים בסולם נוכל לכנות אותם 00,01,10,11, כלומר נוכל להסתפק בשני ביטים או סיביות של מידע. את הזוג הבינארי הזה ניתן לשמור בזיכרון ממוחשב, לשלוף בקלות ולבצע בקלות על המידע מניפולציות כאלה ואחרות. כאן טמון כוחו החישובי של מחשב.
כיצד ממשים את כל הרעיונות האלה במציאות?
***
ישנן צורות רבות ומגוונות לממש ADC כאשר לכל צורה יתרונות וחסרונות הנדסיים. בחרתי להציג כאן רק את המימוש הפשוט ביותר להסבר לדעתי. אתמקד בשלבים המעניינים יותר של הקוונטיזציה והקידוד.
נניח שלפני הכניסה ל-ADC ישנו מעגל שמבצע את פעולת הדגימה וההחזקה של האות (בעגה sample and hold או בקיצור S/H). מדובר בד"כ בקבל שכניסת האות המומר אליו נסגרת ונפתחת באופן מחזורי. כאשר הכניסה פתוחה, הקבל נטען לערך של המתח המומר ואז מנותק ממנו ושומר את הערך הישן עד למחזור הבא. המתח בקבל מוחזק ומוזן הלאה באמצעות רכיבים נוספים (למתעניינים: הקבל ממוקם בין buffer כניסה ויציאה ומוזן דרך FET שמשמש כמתג ונפתח ונסגר לפי קצב שמוזן חיצונית).
אסביר את עקרון הפעולה לפי דוגמה פשוטה של ארבעה שלבים בסולם המתחים שמקודדים לשתי סיביות (2bit).
איור 3: קוונטיזציה וסולם המתחים. התעצלתי לאייר במחשב…
ליצירת סולם המתחים נשתמש בשורה של נגדים זהים המחוברים בטור כשבקצה אחד מחובר מתח גבוה ובשני הארקה (מתח אפס). לפי חוק אוהם על כל נגד נופל חלק שווה מהמתח ולכן כל נקודה בין הנגדים מהווה שלב בסולם המתחים (ראו צד שמאל של איור 3).
כדי לבדוק לאיזה שלב בסולם מתאים מתח הכניסה המוחזק ב-S/H באותו הרגע נעשה שימוש ברכיב שנקרא comparator, כלומר משווה (המשולשים באיור 3).
המתח ביציאה מרכיב המשווה יכול להיות רק אחד משני ערכים: גבוה או נמוך, '1' או '0' דיגיטלי. הוא בעצם עונה על השאלה האם המתח בכניסה שמסומנת בפלוס גבו מהמתח בכניסה שמסומנת במינוס. אם התשובה חיובית, המשווה מוציא '1' ואם שלילית מוציא '0'.
שלושת המשווים במעגל המוצג באיור בודקים את מתח הכניסה אל מול ערכי הסולם. אם המתח נמוך מהשלב התחתון ביותר נקבל '0' בכל היציאות של המשווים. אם הוא גבוה מהשלב הראשון אך נמוך מכל השאר נקבל '1' ביציאה מהמשווה הראשון ו-'0' בכל האחרים, וכך הלאה. זאת בעצם הקוונטיזציה של האות האנלוגיה הנכנס.
שימו לב שככל שמספר המשווים שחיברנו גבוה יותר, כך הרזולוציה של הקוונטיזציה תהיה גבוהה יותר.
השלב האחרון הוא לקודד את הפלט של המשווים למספר דיגיטלי חסכוני יותר באמצעות לוגיקה דיגיטלית. בדוגמה באיור יש 4 שלבים אפשריים בסולם הקוונטיזציה ולכן האפשריות ביציאה מהמשווים הן 000 מתח הכי נמוך שלב '0' בסולם, 100 שלב '1' בסולם, 110 שלב '2' ו-111 שלב '3' הכי גבוה.
000 מקודד ל-0 בינארי ב-2 ביטים לכן ל-00
100 מקודד ל-1 בינארי ב-2 ביטים לכן ל-01
110 מקודד ל-2 בינארי ב-2 ביטים לכן ל-10
111 מקודד ל-3 בינארי ב-2 ביטים לכן ל-11
נסכם בטבלה:
הפתרון המצומצם הוא:
נזכר שסימן '+' הוא פעולת 'או', סימן '•' הוא פעולת 'וגם' וסימן גרש הוא פעולת היפוך. תוכלו לבדוק שהלוגיקה עובדת נכון. הראתי ברשימה קודמת איך להשתמש בשיטת מפות קרנו כדי להגיע למימוש מצומצם. המעגל המלא מוצג באיור 4.
איור 4: ADC מסוג flash 2bit ממיר מתח אנלוגי לדיגיטלי המיוצג בשתי סיביות. התעצלתי לאייר במחשב.
לסיום, אציין שה-ADC הזה נקרא flash type ADC והוא המהיר מכל המימושים האפשריים אך גם היקר והבזבזני מכולם ולכן מתאים רק לאפליקציות מסוימות.