RAMPS控制板上的限位開關腳位
先來解釋RAMPS控制板上,關於限位開關的腳位。總共有六組限位開關腳位,分別定義給XYZ三軸的MAX/MIN位置。每組腳位各自有 "S"腳位、"-"腳位、"+"腳位。"+"腳位連結到RAMPS系統裡的5V電源供應系統;"-"腳位連結到接地線路;"S"腳位連結到Arduino的數位輸出/入腳位(IO),在Arduino+Marlin系統內,是設定成以一根電阻拉到高電位的"數位輸入"腳位。
電路I/O腳位的秘密
Pull high 電路示意圖
上圖中,PIN12是CPU偵測電位高低的IO腳位。透過一支10K毆母的電阻,接到系統的電源供應線路(5V)。所以當S1按鈕放開的時候,PIN12腳位偵測的的電壓會非常接近5V,軟體系統偵測這支腳位的狀態時,會讀取到"1"的結果。這個狀態下,軟體系統會定義為"Triggered"。當S1按鈕被按下,這時PIN12會直接接地,軟體系統偵測這支腳位的狀態時,會讀取到"0"的結果,判定為"Open"。這時5V的電源,會透過10K的電阻再接到接地點,所以並不會發生電源直接短路到接地線而燒毀電源供應系統(5V穩壓IC)。註1
微動開關腳位的定義
微動開關一般有三支接腳,分別為 "C"共同接腳、"NO" Normal Open 通常開路接腳、"NC" Normal Close 通常短路接腳。顧名思義,"通常開路接腳",在微動開關被放開的時候,跟"C"接腳是斷開的,被按壓後,跟"C"接腳才短路接在一起;"通常短路接腳"則是在放開時,跟"C"接腳短路接在一起,被按壓後才跟"C"接腳斷開不通電。所以透過不同的接線方法,可以選擇被按壓時,是要讓線路通電、或是要斷電。
Marlin內與限位器相關的設定
另外還有 "DISABLE_MAX_ENDSTOPS" 跟 "DISABLE_MIN_ENDSTOPS" 兩個設定值,是用來告訴Marlin,是否有接 "MAX_ENDSTOPS" 跟 "MIN_ENDSTOPS"。例如沒有接MAX End-Stop的話,可以把 "//#define DISABLE_MAX_ENDSTOPS" 最前面的 "//" 刪掉,這樣Marlin就不會去讀取MAX End-Stop的狀態了。
融會貫通
綜合上述的所有設計細節,就可以融會貫通的解答END STOP相關的問題了。如果單純使用微動開關當作限位器,那一定要接RAMPS上的 "S" 跟 "-" 腳位。因為"S"腳位在控制板CPU內部已經被Pull-up到高電位了,所以想要讓"S"腳位的狀態改變,只有把他拉去接地一途。"S"接到"+"是沒有作用的。
"S"腳位在CPU內部已經內見Pull-up電阻了,所以直接連接到"-"接地腳位,是不會燒毀的。
"ENDSTOP_INVERTING"設定值要看End-stop硬體線路的接法而定,如果希望"S"腳位為高電位或浮接時,定義為"Triggered",則"ENDSTOP_INVERTING"要設定成"false";反之如果希望"S"腳位為低電位或接地時,定義為"Triggered",則"ENDSTOP_INVERTING"要設定成"true"。
整個系統上有好幾個會改變狀態的變數,要全部融會貫通,才能設計出讓限位器正常工作的設定。如果不太確定自己能設計出對的設定,建議還是先依照i3組裝筆記內的說明進行安裝。而且務必檢查有沒有接錯,再開始做馬達的測試。
最後,祝大家列印愉快~
----
註1:ATmega-2560 的IO pin 有內建 Pull-Up 電阻在IC內部,不需要在外部電路另外安排 Pull-Up 電阻。ATmega-2560規格書第七頁。
這個月初剛組好第1台3d印表機prusa i3是用機械限位開關,開始時我先測試電機部分,都很順利,一切OK,太高興了,結果樂極生悲,後來在整理電線重新插拔安裝時,不小心把Zmin EndStop的3個腳位都接了,結果導致在歸零時發生火花,把5V穩壓 IC燒毀了,而最近又嘗試換光學限位開關,也花了一些時間才搞好設定,從中學了一些不值一顧的笨經驗,在此留言,只因希望能對未來新近者有所助益,可少繞一些彎路,不用同樣再浪費許多時間在如何設定Marlin的EndStop上。
回覆刪除1. 機械微動開關接法
機械微動開關只需接2個腳位,就是陳先生上面所提的:單純使用微動開關當作限位器,那一定要接RAMPS上的 "S" 跟 "-" 腳位。絕對不要把3個腳位都接了,如果不小心接了3個腳位,那在觸發時會發生火花,會把5V穩壓 IC燒毀(就是Mega 2560上的AMS1117 5.0V穩壓 IC,位在電源插座旁)。
2. 光學限位開關接法
光學限位開關則是需要用到3條線,接到RAMPS上的"S"、"-"及"+" 3個腳位。
3.使用 M119 指令,顯示各軸EndStop狀況,有助於Marlin的設定。
Marlin的configuration.h中有關EndStop的設定,比較難直接明白的就是 "const bool 各軸_ENDSTOP_INVERTING" 的值,倒底是正相或反相,應該設定成true或false?
這個設定是否正確,可以在測試時,下指令 M119 來觀察,它會顯示目前各軸min及max的EndStop狀況,是open或triggered。
而在使用光學限位開關時,這個指令特別有用,因為對光學限位開關來說,"const bool 各軸_ENDSTOP_INVERTING" 的值,會同時影響min及max,導致不管你如何設定,都會出現 EndStop Hit的錯誤,因此無法正常動作。此時如果下M119指令,就可以看出問題所在,發覺必須搭配"DISABLE_MAX_ENDSTOPS" 或 "DISABLE_MIN_ENDSTOPS" 設定才可以解決問題。
重新下載Marlin,可以發現到現在"ENDSTOP_INVERTING"已經有把Max、Min分開設定了,所以用起來不會那麼麻煩。
刪除不過我認為弄懂"DISABLE_MAX_ENDSTOPS" 與 "DISABLE_MIN_ENDSTOPS",會是比較正規的做法。
謝謝你的補充~
請教您...
回覆刪除z軸下降後, 觸動光學限位開關會再往上升一點點, 這是正常的動作嗎??
還是當光學限位開關在被觸動的當下, 即應立即停止??
有些版本的Marlin 會重複做兩次的Z軸歸零,第一次速度比較快,觸動開關後會再上升一小段距離,然後用更慢的速度下降,做第二次歸零。理論上速度越慢,歸零的精確度會越準。
回覆刪除版大您好, 感謝你的回覆!
回覆刪除將z軸改成光學限位開關後, 我遇到的是在觸發開關後, 它會往上升一小段距離, 然後即停止, 也沒做第2次的歸零, 所以我有點不明白這樣的動作是否是正常的.
而後, 我將configuration_adv.h內的 #define Z_HOME_RETRACT_MM 2改成0, 當光學限位開關觸發後, 已可立即停止動作, 不知這樣改是好是壞, 還需要些實驗跟時間來確認.
請問微動開關接B接點(N.C) 接S跟- , 要設定true或false ??
回覆刪除"B接點(N.C) 接S跟-",那到底是接在S還是 - ?
刪除什麼東西要設True或false?
微動開關做動到,導通送GND給RAMPS1.4,屬於給負電訊號,那麼接Normal Close做動到,斷開,
刪除那麼configuration_adv.h裡面要設定true或false
如果你的接法如下:
刪除1.微動開關 C 接到 RAMPS X end stop -
2.微動開關NC接到 RAMPS X end stop S
那你需要將configuration.h內的 X_MIN_ENDSTOP_INVERTING 該成 false
謝謝你
刪除被大你好,請問PIN12---10K歐姆---5V這部份,可以把5V disable嗎?
回覆刪除不行,10K電阻接到5V的用意,是要確保微動開關放開時,pin12的電位會是5V而不是0~5V之間的不確定值。
刪除