פוטנציומטר דיגיטלי: מידע בסיסי והדגמה

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

פוטנציומטר ידני ושני פוטנציומטרים דיגיטליים
פוטנציומטר ידני ושני פוטנציומטרים דיגיטליים

מה זה פוטנציומטר דיגיטלי?

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

כמו בפוטנציומטרים ה"ידניים", הגרסאות הדיגיטליות (שנקראת Digital Potentiometer או בקיצור Digital POT ואפילו DigiPot) מגיעות בערכי התנגדות שונים, כגון 10K אוהם או 100K אוהם. עם זאת, כיוון שבדיגיטל עסקינן, ההתנגדות המשתנה אינה רציפה לגמרי אלא בקפיצות שנקראות Taps או Tap points. טווח ההתנגדות המוצהר מתחלק ל-8 עד 1024 יחידות "tap" כאלה (בהתאם לדגם הספציפי), כך שרכיב של 10K ו-256 taps ייתן לנו ערכי התנגדות במרווחים של כ-39 אוהם, כמובן עם אחוז שגיאה מסוים. חשוב לזכור גם שהנגדים הפנימיים ברכיב הם עדינים, ולא מיועדים לזרמים משמעותיים.

הרוב המכריע של הפוטנציומטרים הדיגיטליים מקבל פקודות בפרוטוקול I2C או SPI, ומבחר הפקודות נוטה להיות מצומצם מאוד – קביעת המיקום של ה-Wiper הווירטואלי (כלומר ה-Tap הרצוי), הגדלה או הקטנה של ה-Tap הנוכחי בצעד אחד, ועוד כמה פקודות שוליות. לחלק מהדגמים יש גם זיכרון בלתי נדיף, שמאפשר בין השאר לקבוע את מיקום ברירת המחדל של ה-Wiper (המיקום בו יהיה מיד אחרי אתחול הרכיב).

פרויקט לדוגמה

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

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

מחלק מתח מבוסס LDR, עם תושבת מודפסת בתלת ממד
מחלק מתח מבוסס LDR, עם תושבת מודפסת בתלת ממד (לחצו להגדלה)

מה מחפשים?

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

לכאורה, חיפוש בינארי לא יעזור לנו כאן: אנחנו לא מחפשים ערך על איזשהו רצף ממוין, אלא משהו מורכב יותר. סתם לדוגמה, אני מוציא מתח X, מחשב את ההפרש בין הבהירות של תו רווח (=רקע בלבד) לבהירות של תו מס' 255 (ריבוע מלא, כפי שראינו בטבלה כאן), ומקבל קריאה אנלוגית של 200 מתוך 1023. מה זה אומר? האם עליי לנסות מתח גבוה יותר או נמוך יותר כדי לשפר את הניגודיות?

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

מערך הבדיקה בשלב התחלתי, עם פוטנציומטר רגיל
מערך הבדיקה בשלב התחלתי, עם פוטנציומטר רגיל (לחצו להגדלה)

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

ועכשיו, לפוטנציומטר הדיגיטלי

הרכיב שהיה לי הוא MCP4161-103E/P – ג'וק בעל 8 פינים, בעל ממשק SPI, וכפי שה-"103" בשם מרמז טווח ההתנגדות שלו הוא 10K אוהם. לא ניכנס לפרטים של השליטה בו – כדי לשנות את ההתנגדות אפשר פשוט לשלוח שני בייטים דרך אובייקט SPI של ארדואינו, כשהביט האחרון (LSB) של הבייט הראשון, ואחריו הבייט השני במלואו, נותנים מספר בין 0 ל-256 כולל. כדי לוודא שזה עובד נכון כתבתי קוד קצר, ששולח כל עשירית שנייה ערך אקראי. כפי שאפשר לראות בתחילת הסרטון למטה, הקונטרסט של המסך קופץ בהתאם.

הכוונון האוטומטי דומה לחיפוש בינארי, אך הוא לא עוצר כשהוא מגיע לערך מסוים. מתחילים בהגדרת קונטרסט מינימלי וקריאת ערך "baseline" מה-LDR, ולאחר מכן קופצים הלוך ושוב – מגדילים את הקונטרסט אם המשוב לא השתנה לעומת ה-baseline, מקטינים אותו אם כן, ברווחים הולכים וקטנים עד שפשוט אין יותר לאן לקפוץ. גם כאן מומלץ לחכות קצת אחרי כל שינוי (המסך דווקא מגיב מהר כי זה לא עדכון של התווים; זמן התגובה של ה-LDR הוא האיטי!), אך מספר הצעדים קטן וקבוע – 8 צעדים בלבד – כך שהזמן הכולל קצר מאוד, והמסך מגיע לקונטרסט אופטימלי, או כמעט-אופטימלי, תוך פחות משנייה. את זה אפשר לראות בחלק השני של הסרטון.

ערבון מוגבל

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

להרשמה
הודע לי על
2 תגובות
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

הפתרון עם הפוטנציומטר נשמע לי קצת מסורבל – בפועל אתה משתמש בו בתור DAC. לא עדיף להשתמש באמת ב-DAC?
יותר מזה, במקרה הזה השליטה הכי פשוטה בדבר הזה היא עם PWM מהבקר ששולט במסך, שכן התגובה של ה-LCD גם ככה איטית ובפועל ה-PWM יתנהג כמו DAC גס.

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

בכל מקרה אהבתי את הדפסת תלת המימד סביב ה-LDR 🙂