在淘寶買了一堆淘汰的 cr touch,使用 bltouch 的設定,不一定能成功控制。透過 AI 確認,可以像伺服舵機 mg90s 那樣控制它。改變 pwm 的 pulse width,cr touch 會解讀成對應的指令。可能是 cr touch 內部的頻率基準偏移,使用標準的 pulse width 會運作失敗。
參考資料
- klipper 源碼 klippy/extras/bltouch.py
- Klipper 的文件 BL-Touch
基本原理
接線如圖。(網路借來的圖)。
透過 Servo Signal 控制桿子伸出與收回。延用伺服舵機的 PWM 控制信號。PWM 信號的頻率為 50 HZ,即週期為 20ms。改變脈波寬度可以改變舵的角度。
BLtouch 將 0° ~ 180° 分割成不同指令的區段。下面是 klipper 的原始碼的資料。
---------
# klipper/klippy/extras/bltouch.py
# V0.8.0 以前 (含)
Commands = {
None: 0.0, 'pin_down': 0.000650, 'touch_mode': 0.001165,
'pin_up': 0.001475, 'self_test': 0.001780, 'reset': 0.002190,
}
# V0.8.0 以後
Commands = {
'pin_down': 0.000650, 'touch_mode': 0.001165,
'pin_up': 0.001475, 'self_test': 0.001780, 'reset': 0.002190,
'set_5V_output_mode' : 0.001988, 'set_OD_output_mode' : 0.002091,
'output_mode_store' : 0.001884,
}
klipper 的設定
使用 [bltouch] 的設定,無法順利動作,不知問題出在那裡。klipper 的文件,也提到使用 clone bltouch 時,一堆可能會碰到的問題。後來使用 [servo] 和 [probe] 設定,更能彈性的設定,讓它正常運作。
--------------
[servo my_probe]
pin: can: PB9 # 桿子伸出/縮回的控制引腳 (即原本 BLTouch 的 PWM pin)
initial_angle: 90
maximum_servo_angle: 180
minimum_pulse_width: 0.0001 # 確保下限夠低 (100µs)
maximum_pulse_width: 0.0025 # 確保上限夠高 (2500µs)
[probe]
pin: ^can:PB8 # 原本 BLTouch 的輸出引腳
# 注意加上 ^ (上拉電阻),因為 CR Touch 觸發時通常是將信號拉低 (Open Collector)
z_offset: 0
activate_gcode:
PROBE_DEPLOY
deactivate_gcode:
# PROBE_STOW
# 當探針完成一次探測後,CR Touch 可能已經自動縮回並閃紅燈了
# 所以我們需要在這裡發送 RESET 脈衝,讓它恢復正常
SET_SERVO SERVO=my_probe_servo WIDTH=0.00220
G4 P200
{action_respond_info("cr touch reset")}
SET_SERVO SERVO=my_probe_servo WIDTH=0.001475 # 回到標準收回狀態
[gcode_macro PROBE_DEPLOY]
gcode:
G4 P500
# SET_SERVO SERVO=my_probe ANGLE=10
SET_SERVO SERVO=my_probe WIDTH=0.00060
G4 P500 # 確保探針在重力作用下已經完全穩定伸出
[gcode_macro PROBE_STOW]
gcode:
# SET_SERVO SERVO=my_probe ANGLE=90
SET_SERVO SERVO=my_probe WIDTH=0.0014750
G4 P500 # 確保探針在重力作用下已經完全穩定縮回
[gcode_macro PROBE_RESET]
gcode:
SET_SERVO SERVO=my_probe WIDTH=0.002200
G4 P300 # 等待 300ms
# SET_SERVO SERVO=my_probe ANGLE=90 # 回到縮回狀態
SET_SERVO SERVO=my_probe WIDTH=0.0014750
G4 P500 # 確保探針在重力作用下已經完全穩定縮回
[gcode_macro PROBE_TEST]
gcode:
# SET_SERVO SERVO=my_probe ANGLE=160
# SET_SERVO SERVO=my_probe WIDTH=0.001800
SET_SERVO SERVO=my_probe WIDTH=0.000600
G4 P1000 # 等待 3秒
# SET_SERVO SERVO=my_probe ANGLE=90 # 回到縮回狀態
SET_SERVO SERVO=my_probe WIDTH=0.0014750
G4 P500 # 確保探針在重力作用下已經完全穩定縮回
[delayed_gcode boot_probe_test]
initial_duration: 2.0 # Klipper 啟動 2 秒後執行
gcode:
# 1. 先執行 Reset (清除可能存在的紅燈)
SET_SERVO SERVO=my_probe WIDTH=0.00220
G4 P500
# 2. 測試:伸出
SET_SERVO SERVO=my_probe WIDTH=0.00060
G4 P800
# 3. 測試:縮回 (回到待命狀態)
SET_SERVO SERVO=my_probe WIDTH=0.001475
G4 P200
# 在終端機顯示訊息提醒你
M118 CR Touch Boot Test Completed.


沒有留言:
張貼留言