הרכבה של רכיבים על PCB במפעל חייבת לכלול, פרט להשמה של רכיבים על הלוח והלחמתם, גם תהליך של בדיקת הלוחות המוכנים, מתוך הבנה שתמיד יכולות להיות תקלות. הנה דוגמה למה שעלול לקרות כאשר המפעל לא מקצועי ולא מבצע בקרת איכות.
לקוח הגיע אליי עם עשרות רבות של לוחות מוכנים, שהיו אמורים להיכנס כמו שהם למוצר חדש. התכנון שלהם היה מושקע: מיקרו-בקר חזק ויקר (יותר ממה שצריך, לדעתי, אבל זה סיפור אחר…), רכיב זיכרון חיצוני, מייצבי מתח, רכיבי הגנה ובאפרים למיניהם, לדים רבים לתאורה ואינדיקציה, ועוד. אבל הלוחות לא עבדו. כשהלקוח התחיל לחבר אותם, חלקם העלו עשן, ואחרים סירבו להתעורר או להאיר. הוא ומתכנן המעגל ישבו ומיפו את הבעיות שמצאו במדגם אקראי, ואת הגורמים הסבירים להן ("אם לד X לא מאיר, צריך לבדוק את נגד Y ואת דרייבר Z"). איך ממשיכים מכאן? כך הגיעו הלוחות אליי, בתוספת כמה רכיבים חלופיים מהדגמים שנשרפו.
תקלה גורפת
אחד הדברים שהלקוח זיהה כבר אצלו היה דרייבר מסוים ללדים שהולחם הפוך (רכיב בעל 6 רגליים שהסתובב איכשהו ב-180 מעלות). אני גיליתי שהיה עוד דרייבר הפוך, ושהשניים הספציפיים האלה הולחמו הפוכים על כל הלוחות. היו עוד דרייברים מאותו סוג על הלוח, אך הם היו בכיוון הנכון.
הסימון על הלוח ("silkscreen") וחיבורי הפדים לשאר המעגל היו נכונים בכל המקרים, כך שהתקלה היא לא בתכנון. העקביות של התקלה מפחיתה גם את הסיכוי שהמכונה ששמה את הרכיבים על הלוח פישלה – כי למה שהיא תפשל דווקא ותמיד בדרייברים האלה ולא באחרים? מה שנראה סביר זה שאיפשהו בהנחיות להנחת הרכיבים – שהופקו מתוכנת עריכת ה-PCB או הותאמו במפעל עצמו – נפלה טעות, ובגלל זה אף לוח שיצא מקו הייצור לא היה תקין. מה שעוד יותר גרוע, כשלוח חובר לחשמל, הדרייברים ההפוכים פגעו ככל הנראה ברכיבים נוספים והרעו את המצב עוד יותר.
מכונות מפשלות
מה זאת אומרת שמכונה "מפשלת"? בגדול, מכונה להשמת רכיבים בסך הכול תופסת אותם בעזרת ואקום, מסובבת לפי הצורך ומניחה על הלוח. אם איזו תזוזה לא רצויה במערכת "הקפיצה" את הרכיבים בדרך, או שהוואקום לא היה מספיק טוב בגלל גרגר אבק תועה, יכולים לקרות כל מיני דברים מוזרים, כמו בתמונה שבראש הפוסט או כאן:
ראיתי דברים כאלה בערך בעשרה אחוזים מהלוחות, אם כי למען ההגינות, על כל לוח יש הרבה רכיבים כך שאחוז הכשל האמתי נמוך משמעותית. אף על פי כן, זו תקלה שבדיקה בעין (או במצלמה ממוחשבת, כפי שמכונות מתקדמות עושות לבדן) הייתה מאתרת בקלות, כמו גם בדיקה חשמלית רצינית.
הלחמה ידנית נוסח סין
בעבר הרחוק מאוד, כשהייתי ילד, הלכתי עם ילד אחר לחלק עלוני פרסומת גדולים בתיבות הדואר. הוא, שהיה ותיק בתחום, לימד אותי את שיטת הייעול האולטימטיבית הסודית: בתיבות של בתים משותפים צריך לשים עלונים רק בחלק מהתיבות. לנו זה פחות לסחוב ולעבוד, ואם במקרה המעסיק יעבור ברחוב לבדוק מה עשינו, זה פשוט ייראה לו כאילו חלק מהדיירים כבר לקחו מהתיבה.
הסינים שהלחימו את רכיבי ה-THT ללוח כנראה חשבו באותה צורה. אחרת, איך אפשר להסביר שורת פינים שמולחמת רק בקצוות? לפי צורת ההלחמה והשאריות שלא נוקו (ושלפעמים גם גרמו לקצר), היה ברור שזו הלחמה ידנית לגמרי, על ידי מישהו שלא אכפת לו. הזלזול הזה יצר עוד כמה בעיות שהלקוח לא ראה, או ייחס בטעות למשהו אחר.
אימת ה-Reflow
הבעיות שתיארתי עד כה מרגיזות, אך לפחות קלות לאיתור ולתיקון. רק אחרי שעשיתי את זה התחילו לצוץ הדברים המטרידים באמת: בלוח אחד ממשק הצריבה (JTAG) לא עבד, בלוח אחר הלחצנים לא הגיבו, בשלישי המיקרו-בקר התחמם עד לרמת כוויה (נחשו איך גיליתי את זה) ועוד כהנה וכהנה.
אחרי עבודת בילוש רצינית על הלוח ובשרטוטים הסכמתיים, גיליתי שכל הבעיות החדשות האלה נבעו בסופו של דבר מאותה סיבה: הלחמה לא טובה של רכיבים. הסימפטומים היו תלויים ברכיב הספציפי. למשל, נגד אחד קטן, ששימש חלק ממחלק מתח עבור מעגלי הייצוב, לא יצר מגע טוב עם אחד הפדים, וזה הוביל למתח שגוי במוצא ולפגיעה במיקרו-בקר. כמה פינים של המיקרו-בקר עצמו, שנראו מולחמים אך למעשה "ריחפו" כחוט השערה מעל לבדיל שעל הפדים, הפריעו לתקשורת שלו עם שאר חלקי המעגל.
ישנם הרבה גורמים שיכולים להפריע להלחמה בתהליך כזה (reflow). לדוגמה, פרופיל הטמפרטורות והתזמון עשוי להיות שגוי, הבדיל עלול להיות מאיכות נמוכה וכו'. אגב, הלוח מאוכלס ברכיבים משני צדדיו, ואני חושד שצד אחד נפגע, סטטיסטית, יותר מהשני – אולי כי הוא זה שפנה למטה בזמן ה-reflow. אולם המספרים לא מספיק מובהקים כדי להוכיח את ההשערה.
הפסד לאורך כל הדרך
בכל ייצור חייבים להיות מוכנים לספוג אחוז מסוים של ריג'קטים, של תוצרים שלא יצאו טוב מכל סיבה שהיא. השאלה היא באיזה שלב תופסים אותם ומה ההשלכות. במקרה זה, התקלות התגלו מאוחר והנזק גדול. למעשה, היחיד שהרוויח מהסיפור הוא אני, כי קיבלתי את עבודת התיקון…
מה זה באפרים? ואיזה הגנות יש/צריך לשים?
במובן שהזכרתי כאן, באפר (buffer) זה רכיב ש"מחקה" את האות שאתה שולח, אבל במתח אחר, או מסוגל לתת זרם חזק יותר, וכדומה. יש גם באפרים שהופכים את האות כמו שער לוגי NOT. שים לב שבעולם התוכנה באפר זה משהו אחר לגמרי.
הגנות זו תורה שלמה שבקושי התחלתי לגרד בעצמי: בגדול, רכיבים ששומרים על רכיבים אחרים מפני מתח או זרם גבוהים מדי, קפיצות מתח וכאלה. זה יכול להיות ברמה של דיודה פשוטה שמגנה מפני חיבור הפוך של סוללה, ועד לרכיבים שמסננים פריקות של חשמל סטטי, קרינה אלקטרומגנטית והשד יודע מה עוד…
לוח לא אפוי, בכל המובנים :X
אפוי למחצה 🙂 לא בדיוק "בכל המובנים" – העורך בסך הכול עשה עבודה טובה, אלמלא הזלזול הסיני המחפיר זה היה עובד…
רק שהסינים לא יבקשו אחוזים…