Anycubic Kossel Linear Plus 升級 Marlin 1.1.8 固件 + Auto Calibration

Anycubic 的 Kossel 3D 打 印 機 ,是 市 面 上 其 中 一 部 最 平 的 Delta 結 構 的 3D Printer。Delta 結 構 的 3D Printer 的 平 台 是 固 定 的 ,打 印 頭 ( delta printer 中 間 那 一 組 野 叫 effector ) 靠 六 枝 碳 纖 維 桿 ( arms rod ) 連 接 到 三 條 柱 ( 叫 towers ) 上 面 ,因 應 柱 上 面 的 滑 塊 上 下 移 動 而 改 變 位 置 ,這 是 一 個 很 神 奇 的 設 計 。

試 想 想 最 常 見 的 cartesian 設 計 ,你 要 打 橫 行 5cm,那 只 要 X 軸 的 stepper motor 運 作 ,另 外 兩 軸 的 摩 打 是 完 全 閒 置 的 。但 Delta 設 計 就 很 不 一 樣 了 ,你 要 橫 行 5cm,三 條 柱 的 stepper motor 都 要 同 時 運 作 。直 到 現 在 看 著 Delta Printer 打 印 ,還 是 會 感 嘆 打 印 頭 怎 麼 能 運 行 得 那 麼 平 ?( FDM Printer 都 是 一 層 層 地 打 印 的 ,所 以 打 印 頭 是 必 須 要 運 行 得 很 平 的 )

為 什 麼 想 要 升 級 firmware 呢 ?原 廠 的 firmware 是 一 個 經 過 大 量 修 改 的 marlin,版 本 是 1.1.0-RC8 ( LCD Menu 和 Marlin 有 明 顯 分 別 )。砌 完 機 之 後 ,Anycubic 的 Manual 教 要 做 measure z-pos,然 後 auto bed leveling,再 自 己 人 手 調 較 Z offset。原 本 都 無 咩 問 題 ,打 印 效 果 亦 算 滿 意 。但 當 使 用 日 久 ,多 幾 次 開 關 機 之 後 ,原 來 293 左 右 的 Z height,有 時 會 在 開 機 時 無 拿 拿 自 己 變 左 做 270。

如 果 開 機 時 無 留 意 ( 唔 做 一 次 auto home 根 本 唔 會 見 到 Z height 係 幾 多 ),噴 頭 就 會 在 空 中 打 印 ,製 造 了 很 多 意 粉 。我 google 過 ,也 找 不 到 解 決 方 法 ( 有 Auto bed leveling 的 原 廠 firmware 是 hex 檔 ,是 沒 有 source code 的 )。每 次 出 現 這 個 問 題 之 後 ,我 都 要 重 新 再 做 一 次 measure z-pos、auto leveling 和 手 動 調 節 Z offset,都 幾 麻 煩 。於 是 就 決 心 把 Marlin 升 級 到 最 新 的 1.1.8,希 望 不 會 再 遇 到 這 個 奇 怪 的 問 題 。

不 過 因 為 Anycubic Kossel 已 經 推 出 了 一 段 時 間 ,隨 著 時 間 不 同 也 有 不 同 的 配 置 ,所 以 想 要 升 級 firmware 的 話 ,網 上 的 新 舊 訊 息 加 起 來 還 是 比 較 混 亂 的 。

爬 了 很 多 文 ,再 加 大 量 親 身 實 測 之 後 ,我 發 現 一 個 韓 國 人  namsugak 在 thingiverse 上 面 post 出 來 的 版 本 是 最 好 的 。namsugak 自 己 也 有 改 機 ,包 括 更 換 了 TMC2100 stepper motor drivers、加 了 NeoPixels LED 燈 帶 等 等 。

所 以 在 Thing Files 頁 ,裡 面 有 4 個 不 同 的 firmware,以 對 應 不 同 的 機 器 。我 沒 有 改 機 ,所 以 就 下 載 了  Marlin-1.1.8-kossel-plus-a4988-v2sensor.zip 版 本 。顧 名 思 義 ,這 個 版 本 是 給 linear plus,使 用 A4988 stepper motor drivers ( 即 是 原 廠 drivers ),和 使 用 原 廠 Auto bed leveling sensor Version 2 ( 新 機 配 的 全 部 是 V2 )。

Marlin 1.1.8 firmware for Anycubic Kossel(mini & plus), delta calibration circle

大 家 要 按 照 自 己 的 3D Printer 的 版 本 來 下 載 ,這 樣 會 減 少 很 多 麻 煩 。我 的 Kossel Linear Plus 即 是 「線 軌 版 」,打 印 範 圍 是 230mm 直 徑 ( 大 平 台 ),有 熱 床 ,是 2018 年 買 的 。

Zip 檔 解 壓 之 後 ,裡 面 的 整 個 Marlin 資 料 夾 就 是 我 們 所 需 要 的 firmware。Marlin firmware 其 實 是 一 個 Arduino 程 式 ,我 們 要 用 Arduino IDE 才 能 打 開 它 和 把 它 上 傳 到 3D Printer 控 制 板 ( controller )。

下 載 Arduion IDE

打 開 Arduino IDE 之 後 ,如 果 你 是 第 一 次 使 用 ,你 要 設 定 好 使 用 的 主 板 類 型 ,Tools >> Board >> Arduino/ Genuino Mega or Mega 2560。然 後 Tools >>  Port >> 就 要 選 擇 你 的 3D Printer 所 使 用 的 com port 號 碼 。例 如 我 使 用 的 就 是 com5。

在 Marlin firmware 的 資 料 夾 裡 面 ,會 有 一 個 marlin.ino 的 檔 案 ( Arduino 程 式 的 檔 尾 就 是 ino )。打 開 它 之 後 ,你 會 見 到 很 多 很 多 頁 ,一 般 我 們 要 修 改 firmware,就 只 需 要 去 到 configuration.h 的 那 一 頁 。

其 實  namsugak 已 經 幫 我 們 做 好 大 部 分 的 設 定 ,我 們 基 本 上 是 不 需 要 再 修 改 什 麼 的 了 。不 過 ,因 為  namsugak 自 己 改 機 增 加 了 LED 燈 帶 ( neopixel led strip ),而 那 個 燈 帶 需 要 額 外 的 Library 來 控 制 ,所 以 如 果 我 們 的 Arduino IDE 沒 有 預 先 安 裝 這 個 Library,那 上 傳 的 時 候 就 會 發 生 錯 誤 。

namsugak 原 本 是 要 求 我 們 自 己 去 安 裝 好 那 個 Library 的 。雖 說 它 也 是 免 費 ,但 我 明 明 就 沒 有 用 那 個 燈 帶 ,為 什 麼 要 控 制 板 浪 費 運 算 能 力 去 控 制 它 呢 ?所 以 正 確 的 做 法 應 該 是 去 configuration.h 裡 面 ,把 LED 燈 帶 的 選 項 關 掉 。

1
#define NEOPIXEL_LED

先 在 configration.h 頁 ,找 到 上 面 那 一 行 ( 在 檔 案 接 近 最 尾 ,第 1848 行 左 右 ),然 後 在 這 一 行 的 最 前 面 加 上 2 個 slash。

1
//#define NEOPIXEL_LED

然 後 就 可 以 上 傳 到 3D 打 印 機 的 控 制 板 了 。上 傳 按 鈕 就 是 「右 箭 號 」( upload ),完 成 之 後 ,3D 打 印 機 應 該 會 reboot,然 後 上 面 的 LCD 會 顯 示 Marlin 1.1.8 的 開 機 畫 面 。

如 果 Arduino IDE 在 上 傳 中 途 顯 示 有 錯 誤 ,就 即 是 上 傳 失 敗 。這 個 要 按 照 那 個 error message 來 解 決 問 題 。這 裡 的 錯 誤 有 很 多 很 多 可 能 性 ,由 你 選 錯 USB Port,到 程 式 有 錯 誤 而 不 能 compile 都 有 可 能 。

開 機 畫 面 變 更 了

上 傳 成 功 之 後 ,就 要 再 重 新 calibrate 整 台 3D Printer。這 裡 的 所 謂 Calibrate,就 是 重 新 設 定 firmware 裡 面 的 很 多 參 數 。舉 個 簡 單 的 例 子 ,官 網 寫 的 可 打 印 高 度 是 300mm,但 這 只 是 一 個 大 概 ,因 為 每 個 人 在 組 裝 時 都 會 有 點 不 一 樣 ,所 以 每 部 Printer 的 最 後 的 實 際 可 打 印 高 度 都 會 有 一 點 點 不 同 。

在 firmware 裡 面 ,會 有 不 同 的 參 數 的 預 設 值 ( 包 括 打 印 高 度 ),但 那 些 數 值 大 多 是 不 太 準 確 的 ,只 是 近 似 值 。多 得 現 在 有 很 多 sensor,包 括 endstop sensor 和 Z probe senosr,它 們 可 以 幫 助 我 們 很 準 確 地 測 量 這 些 數 值 。

於 是 ,就 有 了 所 謂 的 Auto Calibration 的 功 能 。以 前 做 Calibration 是 要 連 著 電 腦 自 己 輸 入 G code 來 做 的 ( G33 ),在 Marlin 1.1.8 上 面 ,就 可 以 在 LCD 上 面 直 接 做 Auto Calibration,比 以 前 方 便 得 多 。( 這 亦 是 我 選 擇  namsugak 的 firmware 的 原 因 ,因 為 他 預 設 就 啟 用 了 這 個 選 項 ,不 用 我 們 自 己 去 修 改 )

進 行 Auto Calibration 的 第 一 步 ,就 是 要 搞 清 楚 auto bed leveling sensor 是 否 正 常 運 作 。這 個 部 分 要 在 電 腦 上 操 作 。我 們 要 先 下 載 Printrun ( Pronterface ),解 壓 之 後 就 執 行 pronterface.exe。Pronterface 其 實 是 一 個 3D printing host 軟 體 ,可 以 用 它 來 控 制 3D Printer。( 就 和 Cura、Repetier Host 等 軟 體 一 樣 )

下 載 Printrun ( Pronterface )

特 別 值 得 一 提 ,做 auto calibration 的 sensor,是 一 定 要 放 在 3D Printer 的 正 中 央 的 ,亦 即 是 說 ,X_Probe_offset 和 Y_Probe_offset 係 會 直 接 被 ignore 的 ( 這 兩 個 參 數 只 在 auto bed leveling 時 才 有 用 )。簡 單 講 ,就 是 Anycubic Kossel Linear Plus 原 廠 的 sensor 可 以 用 ,但 其 他 要 偏 離 中 心 的 sensor,例 如 BLTouch 等 等 ,就 通 通 都 不 能 用 。這 也 是 為 什 麼 我 沒 打 算 在 Kossel Linear Plus 安 裝 BLTouch。有 興 趣 的 朋 友 可 以 參 考 以 下 帖 子 。

Delta Auto Calibration With BLTouch Not Working

Pronterface 可 以 直 接 輸 入 G code 來 控 制 3D 打 印 機 ,很 方 便 我 們 做 calibration 又 或 者 檢 查 3D 打 印 機 的 問 題 。我 們 輸 入 M119 這 個 命 令 ,3D Printer 就 會 傳 回 所 有 endstop 的 狀 態 。如 果 沒 有 按 下 ,就 會 顯 示 Open。如 果 被 按 下 ,就 會 顯 示 Triggered。

沒 有 按 住 sensor 也 顯 示 TRIGGERED

奇 怪 的 事 情 就 在 此 時 發 生 了 ,因 為 我 的 原 廠 Auto bed leveling sensor,那 個 訊 號 真 的 相 反 了 。沒 有 按 住 的 時 候 就 顯 示 Triggered,按 下 就 反 而 顯 示 open。我 個 人 覺 得 ,這 是 和  namsugak 改 機 用 了 另 外 的 方 法 來 接 駁 sensor 有 關 。

但 這 也 不 是 什 麼 大 問 題 ,namsugak 也 有 教 我 們 如 何 應 對 。先 斷 開 Pronterface 的 connection,回 到 Arduino IDE,把   Z_MIN_ENDSTOP_INVERTING 和  Z_MIN_PROBE_ENDSTOP_INVERTING 都 由 true 改 做 false。( 經 過 查 證 後 ,marlin 的 預 設 值 是 false )

然 後 再 次 把 修 改 好 的 firmware 上 傳 到 controller board。之 前 要 斷 開 Pronterface 的 連 接 ,是 因 為 那 個 com port connection 一 次 只 可 以 給 一 個 程 式 獨 佔 使 用 ,如 果 Pronterface 沒 有 先 斷 開 連 線 ,那 Arduino IDE 上 傳 firmware 時 就 會 發 生 錯 誤 。

這 時 Auto bed leveling sensor 應 該 正 常 運 作 ,我 們 亦 可 以 拔 除 USB 線 ,使 用 3D Printer 的 LCD 來 實 作 Auto Calibration。

第 一 步 就 是 「回 復 原 廠 設 定 」( Control > Restore failsafe,完 成 會 發 出 嗶 聲 ),然 後 再 Store settings 一 次 ( 完 成 會 發 出 嗶 聲 )。這 裡 的 restore failsafe 的 意 思 ,是 指 將 controller 的 所 有 設 定 都 回 復 到 firmware 裡 面 的 預 設 值 。

Kossel 的 控 制 板 ,裡 面 包 含 了 3 種 memory。Flash memory 就 是 用 來 儲 存 程 式 碼 的 ,你 上 傳 的 firmware 就 是 儲 存 在 Flash memory 裡 面 ,flash memory 面 的 程 式 碼 是 不 會 自 動 改 變 的 。SRAM 就 像 一 般 電 腦 上 面 的 RAM,這 是 程 式 執 行 運 算 和 儲 存 變 數 的 地 方 ,每 次 斷 電 RAM 裡 面 儲 存 的 數 據 都 會 自 動 消 失 。EEPROM 就 是 一 個 儲 存 長 期 數 據 的 地 方 ,EEPROM 可 以 被 程 式 碼 讀 寫 ,儲 存 在 它 裡 面 的 數 據 在 斷 電 下 也 不 會 消 失 。

一 般 控 制 板 開 機 的 時 候 ,都 會 自 動 去 讀 取 EEPROM 裡 面 的 設 定 值 ( 例 如 打 印 高 度 等 等 )。但 在 我 們 升 級 firmware 並 且 第 一 次 開 機 的 時 候 ,EEPROM 裡 面 的 還 是 舊 版 本 firmware 的 設 定 值 ,它 們 並 不 適 合 在 新 的 firmware 下 使 用 ,所 以 我 們 要 restore failsafe 一 次 ,用 回 firmware 裡 面 的 設 定 值 ,然 後 再 store settings 一 次 ,用 firmware 的 設 定 值 覆 蓋 EEPROM 的 舊 數 據 。

然 後 我 們 去 檢 查 一 下 delta calibration 的 數 值 ,看 看 是 否 已 經 回 復 到 預 設 值 ( Prepare > Delta Calibration > Delta Settings )。例 如 Height 應 該 是 295.2,Diag Rod 應 該 是 271.5,Radius 應 該 是 134.4,其 他 數 值 應 該 是 0。( 這 些 數 值 都 在 configuration.h 裡 面 ,如 果 你 下 載 的 firmware 和 我 的 不 一 樣 ,那 這 些 數 值 也 不 會 和 我 相 同 )

沒 問 題 我 們 就 可 以 開 始 Auto Calibration ( Prepare > Delta Calibration > Auto Calibration ),然 後 等 幾 分 鐘 讓 它 自 己 跑 完 。它 會 自 動 循 環 幾 次 ,LCD 上 面 會 顯 iteration 1、2、3、…..。

完 成 Auto Calibration,然 後 就 是 自 動 度 高 ( Prepare > Delta Calibration > Set Delta Height )。3D Printer 會 自 動 量 度 高 度 一 次 。

完 成 以 上 的 步 驟 之 後 ,你 的 Printer 應 該 設 定 好 ,可 以 正 常 使 用 。不 過 ,namsugak 就 建 議 我 們 再 手 動 調 較 一 次 ,確 保 一 切 正 常 。

首 先 ,亦 是 最 重 要 的 ,移 除 Auto bed leveling sensor。然 後 找 一 張 A4 紙 ,幫 助 我 們 量 度 噴 嘴 到 平 台 之 間 的 距 離 ,一 般 的 A4 紙 的 厚 度 大 概 是 0.1 mm。

這 個 高 度 對 打 印 成 功 與 否 有 著 舉 足 輕 重 的 作 用 ,所 以 一 定 要 花 點 時 間 調 較 好 。我 們 向 著 打 印 平 台 移 動 噴 嘴  ( Prepare > Move axis > Move Z ),去 到 接 近 打 印 平 台 時 ,就 要 減 慢 速 度 ( 0.1 )。

當 我 們 把 噴 嘴 徐 徐 降 下 ,同 時 不 停 移 動 A4 紙 。當 噴 嘴 太 高 時 ,紙 張 可 以 自 由 移 動 。當 噴 嘴 太 低 時 ,就 會 和 平 台 一 起 夾 實 A4 紙 。最 適 合 是 距 離 是 A4 紙 可 以 勉 強 移 動 ,你 會 感 到 一 定 的 磨 擦 力 。

然 後 就 拿 紙 筆 出 來 ,記 錄 一 下 現 在 的 高 度 ( Z value )。這 個 數 值 可 以 是 正 數 ,也 可 以 是 負 數 。但 正 負 數 也 不 是 問 題 ,真 正 的 問 題 是 ,剛 才 3D Printer 辛 辛 苦 苦 的 calibrate 了 好 多 次 ,又 自 動 量 度 了 高 度 ,搞 了 那 麼 多 野 ,為 什 麼 噴 嘴 的 高 度 都 沒 有 自 己 調 節 好 呢 ?

這 其 實 是 因 為 firmware 裡 面 的 Z Probe Offset 搞 錯 了 。之 前 也 說 過 ,firmware 的 很 多 預 設 值 ,其 實 就 是 近 似 值 。Firmware 裡 面 的 Z Probe Offset 是 14.9。但 工 廠 生 產 出 來 那 個 Auto Leveling Sensor,每 個 的 高 度 總 有 一 點 差 異 吧 ?而 安 裝 sensor 的 支 架 的 時 候 ,上 螺 絲 的 時 候 ,總 會 有 人 裝 得 高 一 點 點 ,有 人 裝 得 低 一 點 點 。( 再 加 上 我 也 三 翻 四 次 的 忘 記 了 移 除 sensor 就 直 接 打 印 ,sensor 也 不 知 道 多 少 次 撞 入 了 print bed,哈 哈 哈 ,每 撞 一 次 也 會 令 sensor off 了 一 點 吧 )

Sensor 的 實 際 Offset,和 firmware 裡 面 的 預 設 值 的 差 異 ,就 是 做 成 這 個 問 題 的 原 因 。所 以 ,namsugak 第 一 樣 要 我 們 做 的 ,就 是 去 修 改 Z Offset value ( Control > Motion > Z Offset )。

New Z Offset = Old Z Offset ( -14.9 )  + Z Value

例 如 我 的 情 況 ,Z value 是 -1.1 ( 是 的 ,噴 嘴 比 平 台 高 了 1mm 有 多 ,真 是 離 晒 大 譜 ),所 以 ,我 的 新 的 Z Offset 就 是 -16 ( 這 是 負 數 ,負 數 的 意 思 是 sensor 比 噴 嘴 低 )。

請 記 住 ,這 個 Z offset 是 Z Probe Offset,是 Auto Bed Leveling Sensor 和 噴 嘴 之 間 的 距 離 。這 個 設 定 值 和 打 印 是 完 全 無 關 的 ,這 個 數 值 只 會 影 響 使 用 Auto Bed Leveling Sensor ( 即 是 Probe ) 相 關 的 功 能 ,例 如 Auto Calibration 和 Auto Bed Leveling。

直 正 影 響 打 印 的 ,其 實 是 打 印 高 度 。所 以 namsugak 第 二 樣 要 我 們 修 改 的 ,就 是 Printer Height ( Prepare > Delta Calibration > Delta Settings > Height )。

New Height = Old Height ( 292.38 )  – Z Value

292.38 這 個 值 是 之 前 set delta height 自 動 量 度 出 來 的 ,所 以 我 的 new height 是 293.48。

上 面 這 些 運 算 大 家 一 定 要 搞 清 楚 正 負 數 啊 ,計 錯 數 是 有 機 會 令 噴 頭 在 打 印 時 直 到 撞 入 熱 床 的 。

至 此 ,你 的 3D Printer 應 該 真 正 調 較 好 ,千 萬 要 記 得 Store settings ( Prepare > Delta Calibration > Store settings ) 一 次 。現 時 的 設 定 只 是 在 SRAM 裡 面 ,還 沒 有 儲 存 到 EEPROM。不 然 的 話 ,你 下 次 開 機 ,這 些 設 定 都 會 自 動 消 失 的 啊 。

下 面 是  namsugak 非 常 詳 盡 的 Youtube Video,雖 然 說 的 是 韓 文 ,但 有 非 常 之 好 的 英 文 字 幕 。我 就 是 跟 著 他 一 步 一 步 設 定 好 我 的 Anycubic Kossel Printer 的 。

Delta Auto Calibration using LCD controller(without gcode)

有 了 LCD 上 面 使 用 的 Auto Calibration,真 的 是 比 以 前 要 打 G code 方 便 了 不 知 多 少 倍 。更 別 說 古 代 沒 有 sensor 時 要 人 工 慢 慢 的 測 量 。

不 知 道 是 我 好 彩 ,還 是 我 手 工 好 ( 咳 咳 咳 ),在 做 完 auto calibration 之 後 ,first layer 已 經 好 靚 仔 ,加 上 我 打 印 90mm/s 亦 完 全 沒 問 題 ,所 以 我 就 唔 打 算 做 auto bed leveling 了 。請 記 得 3D 打 印 機 只 是 工 具 ,理 論 上 要 做 乜 做 物 ,都 唔 夠 你 實 際 打 印 出 來 的 結 果 重 要 。

那 一 堆 堆 的 理 論 呢 ,其 實 只 是 在 做  diagnosis 的 時 候 才 重 要 ( 就 是 出 問 題 時 才 重 要 )。不 過 萬 一 你 真 的 需 要 auto bed leveling,也 很 簡 單 ,只 要 在 configuration.h 頁 面 修 改 以 下 的 一 行 就 可 以 了 。

namsugak 的 Marlin 沒 有 enable Auto Bed Leveling,其 實 也 有 點 奇 怪 呢 。修 改 完 就 再 上 傳 一 次 到 controller board,在 Prepare 之 下 就 應 該 有 回 Bed Leveling 的 選 項 的 了 。

升 級 到 Marlin 1.1.8 之 後 ,心 理 上 覺 得 打 印 穩 定 了 許 多 ,也 再 沒 有 遇 到 之 前 stock firmware 的 bug 了 ,真 好 。

*** 好 的 ,根 據 友 人 的 建 議 ,總 結 一 下 需 要 修 改 的 3 個 地 方 ,算 是 一 個 雞 精 check list 吧 。香 港 人 就 是 沒 有 耐 性 ,哼 哼 。

1. NEOPIXEL_LED
// #define NEOPIXEL_LED
這 個 要 加 上 comment 符 號

2. endstop inverting
#define Z_MIN_ENDSTOP_INVERTING false
#define Z_MIN_PROBE_ENDSTOP_INVERTING false
兩 者 都 由 true 改 回 false

3. Auto bed leveling ( 如 果 想 用 auto bed leveling 的 話 )
#define AUTO_BED_LEVELING_BILINEAR
要 uncomment BILINEAR auto bed leveling

輕 輕 鬆 鬆 閃 電 光 速 就 改 完 ,正 。

ctleung張 先 生 ,男 性 ,肖 龍 。
職 業 :I.T. Consultant
簡 介 :不 好 好 讀 書 ;七 尺 差 五 寸 ,手 長 過 膝 ,雙 耳 垂 肩 ;性 寬 和 ,寡 言 語 ,喜 怒 不 形 於 色 。據 說 少 時 曾 斬 白 蛇 於 鳳 凰 山 下 ……
This entry was posted in GRBL + 3D 打印 and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *