3d打印打印時最重要的是第一層的效果,如果第一層能夠很好的粘在打印平臺上,后面的如果不出意外,都可以順利完成。但是第一層的打印并沒有那么容易,其中一個原因就是打印平臺是否水平的問題。如果平臺不水平,可能導致模型的第一層在一個位置非常牢固,在另一個位置卻根本沒有粘上。甚至會損壞打印頭(平臺不平,由低的位置運動到高的位置可能會撞壞打印頭)。 本教程將通過圖文及視頻的方式演示為你的3d打印機添加自動調平功能。以后再也不用手動調平了。這里介紹的是用官方Marlin固件的方式,不是rostock或kossel等Delta版本的Marlin,Delta版本的配置有可能會在以后推出。
自動調平的局限性
雖說是自動調平,但是現(xiàn)在的調平功能時有局限性的,即你的打印平臺是平的(沒有彎曲或凹凸情況),但你的平臺并沒有放置到水平的位置(或與打印頭垂直)。如果你的打印平臺是彎曲的或凹凸不平,理論上來說是不起作用或作用很小的。所以建議大家的打印平臺是玻璃之類的平整度非常高的平面。
基本原理
電子世界里,任何的測量都需要傳感器來實現(xiàn)。而調平用的傳感器其實就是Z軸的零位置限位開關(Z-min)。為了實現(xiàn)Z-min對不同XY坐標的探測,Z-min的安裝位置需要跟著打印頭一起移動,但Z-min如果在打印頭旁邊,如果在打印時可能會碰到打印的物體從而損壞模型。所以在標準XYZ三軸打印機中,常常通過添加一個小舵機來控制Z-min的收起和放下,即需要觸發(fā)Z-min時(回零或調平),通過舵機放下Z-min;不用的時候就會收起Z-min。具體舵機安裝將在下一個環(huán)境說明。
由于Z-min不在只用于回零來使用,所以在打開自動調平功能后,回零也就有所區(qū)別。請看下面視頻的前面一段,發(fā)送G28(XYZ全部回零)命令后,XY分別回零,然后XY分別運動到打印平臺中心位置,放下Z-min,來完成Z軸的回零。并且如果XY軸沒有回零,并不能單獨為Z軸回零。Z軸的回零位置是一個基準點,即在(x,y)坐標位置的Z零點。后面的調平都是根據(jù)這個點的偏移來確定的。
請看視頻的后半段,發(fā)送G29(自動調平命令)后的反映,打印機的Z-min會移動到四個不同XY坐標(固件中可以配置)進行探測。并且得到四個位置相對于G28確定的基準點的Z位置進行對比和計算,得到打印平臺的傾斜程度,從而在以后的運動中,將各個位置的Z偏移補償進去(同一層打印時,Z軸可能會動),從而完成自動調平功能。
如果你明白了基本的原理,再進行后面的工作就很順利了。
硬件準備及配置
硬件安裝
所需硬件
1、一個小舵機,大家可以看到我用的舵機是9G型號。理論來說用什么型號都可以,但是小了不會占用太多空間;
2、一個小限位(機械式),小限位開關即可(鼠標按鍵),帶柄不帶柄都可以,我用的不帶柄的;
3、固定舵機在加熱頭運動部件上的小零件,我是自己打印的,不太合適,最后用502粘上的;
4、固定限位開關的觸碰柄,我也是打印的,這個基本上是標準的可以在這里下載:
Auto_Bed-Leveling_Z-probe_for_Makerfarm_Prusa_i3_with_E3Dv5_hotend.zip
2016-8-25 16:35 上傳
可點擊下載文件
;
5、支持舵機接口的打印機控制板,這里以MakerLab的Mega controller為例;
安裝
由于每個人的打印機都不同,就不說了??傊褪潜WC盡可能少的影響其它部件的情況下,固定舵機,并且限位開關的柄可以收放自如,并且收起后,打印頭的高度要低于限位的高度,即打印時限位開關舵機等零件不能妨礙打印的進程。
注意:安裝限位開關觸碰柄的時候,注意舵機的極限角度的位置(0度和180度),因為咱們用舵機主要兩個位置最關鍵,一個是收起限位時,一個是放下限位時,這兩個位置都不要太靠近舵機的0和180度位置(即舵機的極限位置),極限位置的舵機不穩(wěn)定,并且可能容易燒舵機。 大家注意。
下圖是舵機即固定舵機的部分:
下圖是限位開關收起后的位置,不會妨礙打印及其它部分的運動:
下圖是限位開關放下后的效果,放下后,限位開關當然要比打印頭的位置更低才可以,否則打印頭都撞車了,限位開關還沒觸發(fā):
接線
Mega Controller已經(jīng)引出了四路舵機接口,都是標準的接口,所以將舵機線連接到圖片所示位置,標記為30的位置即可,主要舵機線中黃色的為信號線,對應控制板子上的S標記。如果:
舵機角度確定
由于舵機是用于做調平,調平的準確性直接影響了打印的效果。所以舵機的角度控制就至關重要,而這個角度參數(shù)(兩個角度,收起和放下時舵機分別所處角度)非常重要,需要用于固件的配置。
修改固件
默認的Marlin固件并沒有添加對舵機的支持(可以剩下RAM和ROM空間)。所以首先打開你的Marlin固件,找到Configuration.h文件,搜索“NUM_SERVOS”關鍵詞(670行左右),來到
c
//#define NUM_SERVOS 1 // Servo index starts with 0 for M280 command
然后將最前面的//刪除,并將后面的數(shù)字改為1,默認該數(shù)字可能是3.
修改完成后,其它參數(shù)不變,上傳新固件到控制板。完成后,打開你用的最順手的上位機軟件,我以printrun為例,選擇串口和波特率,連接。連接成功后,就可以測試舵機是否可以控制了。在發(fā)送命令區(qū)域,輸入命令M280 P0 S100,其中M280是用于控制舵機的G代碼,P0標識第一個舵機,如果你有其它舵機,可以用P1、P2等來分別控制,S后面的數(shù)字表示舵機運動的角度,輸入命令后,點擊Send(發(fā)送)或回車。
此時,如果一切都配置得當,你應該看到了舵機會動,如果不動再試一下其它的角度即更換S后面的數(shù)字,如果其它角度依然不動,請檢查接線即固件是否正確。(注意,Ramps用戶直接接在舵機接口位置是不能用的,因為舵機接口默認是不供電的,需要將Ramps復位按鍵旁邊的兩個電源接在一起才可以,標記為VCC和5V,將這兩個端子連接,就可以為舵機供電了。)
測試角度
由于舵機角度不能通過其它方式獲得,只能需要你自己進行實際的測試,所以通過發(fā)送上面的命令,不斷修改S后面的角度值,來得到兩個比較完美的角度分別對應收起和放下時的位置。記在旁邊備用。
我通過測試,找到的角度為:
放下角度為:125度;
收起角度為:42度;
你的配置不太可能跟我的一樣,所以一定要自己測試一下。
處于放下狀態(tài)時,輸入M280 P0 S42命令后的效果是這樣的:
處于收起狀態(tài)時,輸入M280 P0 S125命令后的效果是這樣的:
如果得到的角度你很滿意,即不影響其它部分運動,也可以在放下時進行正常調平,那么就可以進入下一環(huán)節(jié)了。
RAMPS1.4的板子舵機是接在哪里,麻煩能說下嘛?
注意,Ramps用戶直接接在舵機接口位置是不能用的,因為舵機接口默認是不供電的,需要將Ramps復位按鍵旁邊的兩個電源接在一起才可以,標記為VCC和5V,將這兩個端子連接,就可以為舵機供電了。
參考圖片,其中紫色框內的兩個針需要接在一起,否則舵機沒有供電;紅色框就是第一個舵機應該接的位置:
好的,再請教一下,這個在瑪林里面是不是要把引腳改為11
不需要改,配置好舵機數(shù)量,發(fā)送命令時M280 P0 S42中的P0就是指的這個管腳對應的舵機
按本頁修改后在打開上位機,舵機轉到一個角度
但是在上位機輸入M280 P0 SX沒有反應,這里X表示一個數(shù),我用的是RAMPS1.4的板子,上位機是PRONTERFACE,
各個參數(shù)都配置正確了嗎?
#define NUM_SERVOS 1 按你的教程改了這里
然后5V供電也跳線了,我輸入M280 P0 SX沒有反應
我輸入G28 XYZ可以回零,z回零的時候,舵機會轉下來,舵機上的限位開關碰到底板后舵機就轉上去,
看上去舵機和限位開關是能正常工作的,
但是M280 P0 S。。這個代碼沒有起到作用
我在網(wǎng)上搜了下國外的貼子,好像在在PINS。H這個文件里面設置P11接口?是不是這個原因?
能調平說明正常。是不是你輸入命令時有問題
M280 P0 S34
這就是我發(fā)送的指令,字母都是大寫三個一起發(fā)的,中間空格空開,是這樣嗎?
沒錯,舵機不動?試試其它角度
不動,我這兩天試了很多個值,呵呵
可以了,我把M280 P0 S34
中的M換成小寫的m可以了,為什么不能識別大寫的,我開始一直以為是要大寫
是很寄怪,我一直記得G代碼這些都是要大寫的,我輸入的是小寫但是他信框里的又是大寫
固件配置
這里只說明與自動調平有關的參數(shù)。
舵機相關
如果你需要舵機來收起、放下調平探針(Z-min限位開關),那么舵機相關的參數(shù)是必須要配置的。如果你的板子是Mega Controller(我們的合體板子),將舵機連接在Servos接口,標記30的位置。
還記得上一部分講到的通過發(fā)送命令來獲得放下和收起調平探針的角度嗎?我的角度分別是:
放下:125度;
收起:42度;
每個人的數(shù)據(jù)都不太可能一樣,一定要用自己的數(shù)據(jù),得到這兩個數(shù)據(jù)后,修改固件配置文件的:
// Servo Endstops
//
// This allows for servo actuated endstops, primary usage is for the Z Axis to eliminate calibration or bed height changes.
// Use M206 command to correct for switch height offset to actual nozzle height. Store that setting with M500.
//自動調平探針安裝的哪個軸,-1表示關閉,0標識在此軸上,分別上XYZ,將下面兩行代碼原有的“//”刪除,如下
#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 125,42} // X,Y,Z Axis Extend and Retract angles
//定義xyz三個軸上舵機放下和收起后的角度。將之前獲得的角度數(shù)據(jù)填在Z軸對應的位置,即第5(放下角度)和第6(收起角度)個數(shù)據(jù)。
改完上面的參數(shù)后,舵機相關的參數(shù)就配置完成了。
自動調平功能開啟及相關參數(shù)
上面已經(jīng)配置好了舵機的相關參數(shù),但是要想實現(xiàn)自動調平,還需要配置下面這段區(qū)域的參數(shù):
//============================= Bed Auto Leveling ===========================
//是否開啟自動調平功能,如果開啟,刪除前面的//
//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
//下面開始是針對自動調平功能的具體設置
#ifdef ENABLE_AUTO_BED_LEVELING
// these are the positions on the bed to do the probing
//自動調平時的4個位置,為了防止測試時擠出機超出XY軸的范圍,可以適當調整下面參數(shù),讓這幾個參數(shù)都靠近打印平臺中心位置的坐標
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 135
#define BACK_PROBE_BED_POSITION 160
#define FRONT_PROBE_BED_POSITION 20
// these are the offsets to the prob relative to the extruder tip (Hotend - Probe)
//調平傳感器與擠出頭的坐標偏移,加熱頭坐標-調平探針坐標,這里的參數(shù)可以不調整,因為手動測量這幾個數(shù)據(jù)精確性實在太差,暫時保留之前的默認值即可。下面的參數(shù)是我調出來的,大家不要用我的參數(shù)。
#define X_PROBE_OFFSET_FROM_EXTRUDER -34
#define Y_PROBE_OFFSET_FROM_EXTRUDER 8
#define Z_PROBE_OFFSET_FROM_EXTRUDER -14.3
#define Z_RAISE_BEFORE_HOMING 4 // (in mm) Raise Z before homing (G28) for Probe Clearance.
// Be sure you have this distance over your Z_MAX_POS in case
//回原點前,z軸升起的距離,放置太低,調平探針無法放下
#define XY_TRAVEL_SPEED 8000 // X and Y axis travel speed between probes, in mm/min
//調平時,XY軸的運行速度
#define Z_RAISE_BEFORE_PROBING 15 //How much the extruder will be raised before traveling to the first probing point.
//運行到第一個調平點前,Z軸升起的距離
#define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when traveling from between next probing points
//運行到下一個調平點前,Z軸升起的距離
//If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
//The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
// You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
//舵機關閉延時,為了防止抖動,建議開啟這個功能。否則舵機會抖動。后面的參數(shù)保持默認只即可。
#define PROBE_SERVO_DEACTIVATION_DELAY 300
//If you have enabled the Bed Auto Levelling and are using the same Z Probe for Z Homing,
//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
//Z軸安全回零配置。開啟后,Z軸回零前,XY必須先回零才可以
#define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area.
// When defined, it will:
// - Allow Z homing only after X and Y homing AND stepper drivers still enabled
// - If stepper drivers timeout, it will need X and Y homing again before Z homing
// - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
// - Block Z homing only when the probe is outside bed area.
#ifdef Z_SAFE_HOMING
#define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2) // X point for Z homing when homing all axis (G28)
#define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2) // Y point for Z homing when homing all axis (G28)
#endif
// with accurate bed leveling, the bed is sampled in a ACCURATE_BED_LEVELING_POINTSxACCURATE_BED_LEVELING_POINTS grid and least squares solution is calculated
// Note: this feature occupies 10'206 byte
#define ACCURATE_BED_LEVELING
#ifdef ACCURATE_BED_LEVELING
// I wouldn't see a reason to go above 3 (=9 probing points on the bed)
#define ACCURATE_BED_LEVELING_POINTS 2
#endif
#endif
調平相關的固件配置也已經(jīng)完成,但里面有幾個關鍵參數(shù)還需要再次確定,否則得到的數(shù)據(jù)將不正確,暫時還不需要上傳,下面的參數(shù)配置后再上傳。請參考下一部分。
確定具體參數(shù)
上一部分已經(jīng)配置了自動調平相關的所有參數(shù),并且也已經(jīng)把舵機收起放下的角度測量了出來。
要想正常使用自動調平,我們還需要精確測量下面三個參數(shù):
#define X_PROBE_OFFSET_FROM_EXTRUDER -34
#define Y_PROBE_OFFSET_FROM_EXTRUDER 8
#define Z_PROBE_OFFSET_FROM_EXTRUDER -14.3
之前配置參數(shù)時,我們建議大家把上面的參數(shù)保持默認值即可?,F(xiàn)在我們需要把這幾個參數(shù)測試出來。
為了保證順利測試,還需要配置下面這個參數(shù):#define min_software_endstops true,此參數(shù)默認值是true,需要改為false,否則移動軸時,不能運行到小于0坐標的位置。改完這個參數(shù)就可以上傳固件了。
確定上面幾個參數(shù)的方法
為了能夠更加精確的確認上面的三個參數(shù),即擠出頭與調平探針的精確偏移量,我們需要用3d打印機自帶的這個三維坐標系統(tǒng)來確定,而不是用尺子量。
注意:如果用此方法,操作之前各軸的steps_per_mm參數(shù)必須計算正確,否則得到的數(shù)據(jù)是不準確的。
第一步、在打印平臺的中間位置用筆標記一個參考點
為了能夠保證精度,我們需要確定一個參考點,參考點可以選擇打印平臺上的任意位置,但是為了能夠保證打印頭和調平探針都能方便抵達,所以選擇平臺中心位置比較好。標記一個小點,就像下圖:
第二部、放下探針移動調平探針剛好來到標記點位置并手動置零
放下探針(命令:M280 P0 S125[125改為你的放下角度]),并通過上位機上的手動操作按鈕,移動XY兩個軸讓探針剛好來到標記點上方,然后再移動Z軸(最后階段盡量用0.1mm的按鈕),讓探針剛好碰到打印平臺。此時在上位機中輸入命令:G92 X0 Y0 Z0。
第三步、移動打印頭來到標記點位置并得到偏移量
收起探針,移動XY及Z軸,讓打印頭與平臺之間的距離恰好能夠通過一張A4紙。然后輸入命令:M114來獲取現(xiàn)在的坐標,你會得到類似與下面的信息:
ok C: X:-34.00 Y:8.00 Z:-14.3 E:0.00
而這些數(shù)據(jù)就是你的固件中所需要的三個偏移量,將這三個數(shù)據(jù)添加到你的固件中的位置即可。
修改完這個參數(shù)后,你可以將之前改的#define min_software_endstops false中的false重新改為true,保障打印機的安全。然后重新上傳固件。自動調平功能的配置已經(jīng)在你的打印機上配置完成了。開始真機測試吧。。
問答:
我不用舵機固件怎么改啊
請問,探針和擠出頭之間的Z向距離 Z_PROBE_OFFSET_FROM_EXTRUDER,可以通過M指令進行調整嗎,每次改0.1都要刷一次固件,好麻煩,能聯(lián)機調試就方便了。
真機測試
固件上傳完成后,你可以測試一下是否能夠進行調平功能,為了能夠保證調平探針順利放下,最好將Z軸升至合適的位置,防止探針無法放下到位,而造成撞車現(xiàn)象。在上位機中點擊上面的左下角小房子,注意是沒有標記任何字母的那個,來進行XYZ三個軸的回零,
你會發(fā)現(xiàn),回零跟沒有添加自動調平功能前是有區(qū)別的,現(xiàn)在的回零是XY回零完成后,來到(Xmax/2,Ymax/2)坐標位置,放下Z探針,進行Z軸回零,并且,不能單獨對Z軸進行回零,回零完成后輸入G29自動調平命令,你會看到開始對固件中配置的4個點進行調平,此時你應當仔細觀察,發(fā)現(xiàn)是否有超界的地方,如果有應該修改固件中的調平點的坐標?;亓愫驼{平的操作視頻如下:
http://v.youku.com/v_show/id_XNzAyMjkzOTY0.html
如果你的打印機也可以完成上面的動作,說明你的自動調平功能配置成功了,Oh,yeah。
如果你想測試一下自動調平功能是否有作用,可以故意把平臺弄斜,比如我把玻璃的右邊抬高了一個螺絲帽的高度。
然后經(jīng)過回零、調平操作后,讓Z軸坐標確定后,調整XY坐標,你會發(fā)現(xiàn)雖然你只是在改變XY坐標,但是Z軸為了能夠適應平臺不平的原因,Z軸也會動,并且各個位置Z軸與平臺直接的距離是不會變的。
問答:
怎么樣把G28這個調平功能增加到一個真正的打印文件里面啊
切片軟件里的啟動代碼G28下面加上G29,比如像這樣:
|
|
全部評論3
你可能喜歡
最新《Nature》:動態(tài)界面3D打印
石墨烯增強混凝土能否推動可持續(xù)建筑? UVA
杜克大學:新型無溶劑3D打印材料,可用于醫(yī)
超強金屬3D打印合金問世:為太空探索打造極
推薦課程
神奇的3D打印
SLA3D打印工藝全套培訓課程 - 軟件篇
3D打印月球燈視頻教程 包括完整貼圖建模流
【原創(chuàng)發(fā)布】Cura軟件修改二次開發(fā)定制視頻