רובוטים.אורג

רובוטים אינפורמצ בע"מ
11  02 2020

כיול מדפסת 3ד

העבודה השוטפת והמבאסת בתחזוקת המדפסת היא כיול. זה מתחיל בהתלהבות (“😃 הדפסתי קוביה!”) וממשיך פחות טוב (“😩 אני בקוביית הכיול ה-20”). לא משנה כמה זה מבאס בהתחלה, אי אפשר לוותר אבל אפשר להתפשר קצת פה ושם.

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

יישור

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

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

  • ציר ה-x מקביל למשטח ההדפסה
  • ציר ה-y נע במאונך לציר ה-x, ואין עיוותים בתנועה
  • ראש ההדפסה נמצא באותו מרחק ממשטח ההדפסה בכל אזור ההדפסה. זה מה שנקרא bed leveling, ואחד הדברים המעצבנים אך החשובים לעשות

האם להשתמש בפלס? זה לא נחוץ. המדפסת יכולה להיות ישרה ביחס לעצמה ועקומה ביחס לכדה”א ובמקרה הזה פלס רק יזיק. אם יש אפשרות למעמד מדפסת ישר-פלס – זה נחמד כי היתרון ביישור בעזרת פלס הוא שאפשר לעשות כל ציר בנפרד ולא ביחס אחד לשני, ועם פלס מגנטי זה מאוד פשוט. באנגלית, המונח הנכון הוא tramming ולא leveling.

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

השלב הבא הוא יישור של ציר x למיטה ולעצמו

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

ועכשיו לחלק הכיפי של כיול משטח ההדפסה! 😭😭
מה שרוצים להשיג הוא פשוט אבל הדרך לשם רצופת חתחתים. ראש ההדפסה צריך להיות באותו מרחק ממשטח ההדפסה בכל נקודה על המשטח. אני מתחילה מ-y0 ו-x0, בודקת את הגובה ומזיזה את ראש ההדפסה על המסילה של ציר x, אם הכל טוב ממשיכה: מזיזה את המיטה (y) קדימה 4 ס”מ, ומעבירה את הראש על המסילה של x, וכך הלאה. חוץ מזה שזה לא כיף גדול, הבעיה האמיתית היא שברוב המדפסות, כולל בשלי, במיטה אין גמישות (שזה טוב) והוא מחוברת ב-4 פינות, ז”א כל שינוי בפינה אחת משפיע על הפינות האחרות, ולכן “אני רק צריכה להרים את הפינה הימנית הקרובה” לרוב ידרוש לשחק עם כל ארבעת הברגים! זו הרכבת מיטה שנראית פשוטה אבל היא לא מאוד הגיונית ובגלל זה זה השלב השנוא עלי.

מידות וכיוונים

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

החלק הזה מורכב מ:

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

סידור כיווניות אומר שהמדפסת נעה נכון ימינה ושמאלה ולמעלה ולמטה. את הבדיקה הזו עושים באופן פשוט: מדליקים את המדפסת עם ראש ההדפסה באמצע ציר x, והמיטה בערך באמצע המסילה, וציר z מורם מהמשטח, ואז דרך Printrun עושים צעד קטן לכיוון הבית ב-x וב-y וצעד למעלה ב-z. אם אחד מהצירים זז לכיוון הפוך מהמצופה משנים ב-Configuration.h של הפירמוור:

// Invert motor direction
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false

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

M119

התוצאה נראית כך:

Reporting endstop status
x_min: open
y_min: TRIGGERED
z_min: open

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

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
...

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

#define X_BED_SIZE 200
#define Y_BED_SIZE 20080, 4000, 500 }
// ...
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 200

אחרי שכל זה מוגדר כדאי להעלות את זה למדפסת עם Arduino IDE (או דרך SD אם לא מתחברים למדפסת ב-USB).
ועכשיו אנחנו סוף סוף במצב בטוח כי הפירמוור ישמור שהמדפסת לא תצא מגבולות הגיזרה.

מרחקים ואורכים

הדבר האחרון לפני שמדפיסים הוא לוודא שכשמבקשים מהמדפסת לזוז 1 ס”מ היא באמת תזוז 1 ס”מ, לא יותר ולא פחות. המנועים במדפסת הם מנועי צעד, שלי עושים 1.8° (ז”א יש 200 צעדים בסיבוב שלם), וצריך לחשב כמה צעדים המנוע צריך לעשות בשביל תנועה של מ”מ אחד. יש מחשבון בשביל זה באתר של פרוסה. לרוב האנשים יש את אותם המנועים ואותן החגורות עבור x ו-y, אז המספרים יהיו זהים. בציר z יש ברגים, והמספר לרוב יהיה הרבה יותר גבוה.

// X, Y, Z, E0, E1, ... steps per unit
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }

החל מהמספר הרביעי והלאה בשורת ההגדרות זה בשביל קצב דחיפת החומר באקסטרודר. את זה בודקים באופן פשוט עם טוש
Extruder pull calibration
אני מחממת את ראש ההדפסה, מסמנת על הפלסטיק מעל הראש 2 סימונים עם טוש: ב 5 וב-10 ס”מ. אז שולחת פקודה להוציא 5 ס”מ של חומר – משתמשת בסימונים כדי למדוד כמה יצא באמת, ועושה את זה פעם נוספת. משתמשת בסימונים כדי לחשב מה היחס בין מה שביקשתי (סה”כ 10 ס”מ) למה שקיבלתי, ומעדכנת את כמות הצעדים למ”מ של הראש לפי היחס הזה.
אני עושה את הבדיקה הזו לכל חומר חדש שאני מנסה, כי אם הוא חלק יותר/חלק פחות, נתפס יותר או פחות ישפיע על איך האקסטרודר יצליח לדחוף אותו וגם כי קל מאוד לבדוק ולעדכן במקרה הצורך.

ועכשיו אפשר להדפיס!

XYZ Calibration Cube
3D Benchy

ועם מגדל קוביות הקליברציה שיש לי, אפשר לעבור לפוסט הבא: עוד קצת קליברציה ושידרוגים


תגובתך




« »