本文感謝富源盛 (Fysetc) 贊助的 Spider King 主板。最初接觸8軸主板就是當時買的 mks monster8 v1 和三叉戟自帶的 spider v1.1。后來關注 fys 的 mix 二合一主板,期望很高,實際情況有很大落差,這次交流之后也解開了一些既往的困惑。每家 3D 打印機主板制造商都有其設計思路,可以從產品上反映出來,"閱讀一本書,就像是和作者對話",在仔細了解一個硬件的同時,也會有這種感覺。
【KlipperBoxConfigs 配置文件數據庫】已加入 fys-spiderking-407
主板支持,提供引腳定義文件和一鍵編譯、升級固件功能。
原創文章,轉載引用請務必注明鏈接,水平有限,如有疏漏,歡迎指正交流。
文章如有更新請訪問 DFRobot 社區 或者 cnblogs 博客園。
歡迎對 Klipper 固件,以及對改版 CNC 加工的 Voron 三叉戟、v0、v2.4 感興趣的朋友加群交流(QQ Group:490111638)
為了方便,我們約定:Spider King 使用 SKing 縮寫,四軸BIG5160插槽簡稱大4槽,四軸普通插槽簡稱小4槽。
開箱視頻可以移步 《富盛源FYSETC 蜘蛛王主板開箱視頻》by 惡化 和 《開箱FYSETC-SPIDER-King 3D打印機10軸主板 支持4路6A 6路3A 可更換核心》。還有餅子的 《給蜘蛛king上十個電機搖一搖》。我就寫點別的吧。
尺寸:177*108mm,整體要比 mks monster8 和 btt octopus 略大一圈,屬于富源盛家的旗艦級產品。各主板對比圖前文有,主要是 mcu核心板、板子中間的隔離模塊以及 BIG5160 驅動插槽比較占地方。
將 mcu 做成模塊,可以 獨立使用,包括 boot0、reset,下載引腳等。
這種設計官方介紹是可以方便更換、升級核心,也就是核心板 + 底板的模式,比較靈活。比如升級到 STM32H7 核心以獲得更高的性能。
問題來了:
目前只有 F407 核心板,萬里長征第一步,這種設計還是挺新穎的。
出廠自帶 RepRapFirmware (RRF) 固件。短接跳帽從USB啟動,顯示設備為
Bus 001 Device 005: ID 16c0:27dd Van Ooijen Technische Informatica CDC-ACM class devices (modems)
板載一個 reset 按鈕和 FLASH 指示燈,短接 boot0
和 3.3v
進入 dfu 模式可以燒錄固件(此時 FLASH 燈亮起)。
注意,使用usb供電時,SKing 主板上的 5V 燈不亮,應該是采用了隔離的緣故。正式安裝使用時,拔掉 5V USB 供電跳帽。
【5000V全IO隔離】采用工業級標準設計,板載大功率隔離電源,控制核心板 與 所有高壓外設 隔離,就像開啟多重影分身的鳴人多方位無死角呵護著雛田。
你就說這樣穩不穩吧。
驅動供電分為兩部分,是獨立分開供電的,與 Octopus 設計不同:
前文介紹了 Octopus 的方案,全部 10 軸都支持高壓供電,且可以使用跳帽來選擇電壓,當都使用主板供電時,可以不接獨立驅動供電。
而 SKing 則采用 4+6 分開獨立供電 的方式,想要使用 4 軸需要額外供電,此 4 軸支持 12-55V 供電。6 軸支持 12-28V 供電。6路傳統模式沒太多說的,講講 4 路強力驅動。
由于沒有電壓選擇功能,此 4 路供電相同:
目前 TMC2209 v4.0 和 BIG5160 都是搭配主板售賣,尚未零售。
我們規劃 3D 打印機運動部分時,常規可能會選擇 X/Y 電機使用 TMC5160 高壓驅動,那么剩下兩個驅動插座就不能接 TMC2209 使用,浪費了兩個插座。除非各軸都使用 TMC5160 高壓或者像 K3/VzBot 那樣 X/Y 使用四個電機的情況,總的來說,可能帶來浪費插座的情況,當然,10軸本身大多數情況下是冗余備份設計,使用上并無大礙。
此外注意4軸使用端子座而不是 XH2.54 連接電機,適配更大電流。
觀察主板時我們發現4小槽無限位歸零那里有4個引腳,而不是傳統的2個引腳,對照引腳圖和TMC5160驅動可知,此為連接 ABN 編碼器使用,期待未來更多相關信息和模塊。
ABN編碼器接口:TMC5160可以外接增量式編碼器,編碼器不僅用于失步的判斷,還可實現運動控制器的歸零功能(替代參考開關)??删幊填A分頻器設置編碼器分辨率以適應電機分辨率。TMC5160內部包含一個32位編碼器計數器。
進一步閱讀資料:
TMC5160控制/驅動IC 讓步進電機性能更強大
TMC5160和TMC2160的使用
基于TMC5160StallGuard2實戰案例分享 | 關于無限位歸位參考
數據手冊 第13頁
此功能通過 STC 單片機(宏晶 STC8G1K08A | SOP8 STC8G1K08 系列1T8051)實現。目前僅支持三款驅動:
插入上述驅動,在配置文件中設置即可可以自動識別 SPI/UART/Standalone 三種模式。
想要使用其他驅動需要短接如下焊盤來手動指定 SPI 或是 UART 模式,對于非 Fysetc 的驅動,注意檢查驅動通訊引腳,不同廠家的 TMC 驅動 UART 引腳順序可能有所不同。
我希望能有獨立的跳帽來選擇更方便,但是得到反饋是板子上空間不夠了。
眾所周知啊,除了初版樹莓派,現在都是 40-Pin 了,所以官方配套一根 26-Pin 的排線,我這恰巧沒有。查看原理圖可知引出了三部分功能:
這里的 SPI 用于 RRF固件,不過既然是總線通訊,也可以引出一路用于連接加速度計(連接到上位機、下位機都可以),當然,現在更推薦使用 USB-ADXL345 模塊了。相信此 SPIBus 未來還有更多其他用途。
當然了,不止能插樹莓派,只要是 40Pin 兼容的開發板都可以使用,比如香橙派等。甚至單獨使用這些引腳也是可以的,比如使用 USB-TTL 模塊連接 UART 引腳。
文檔錯誤,板載沒有測試 LED 燈與 WS2812 控制引腳 PD3
相連
BIG5160 驅動絲印印刷有瑕疵,且沒有標明方向,與 2209 驅動和主板絲印相反,安裝時務必注意 不要裝反 了,這么高電壓,相信場面一定很刺激。
EXT-5V 用于輸出,給高功率燈帶等設備用的
PT1000 上拉電阻是 4k7 與 Octopus 不同
核心板上有 24LC32(4K EEPROM) 存儲,估計是 Marlin 固件使用
發熱部分集中散熱的設計,不知道在哪,有條件的朋友可以用熱成像儀測試下,懷疑在中間
隨機附送一個 ESP32 模塊,且有一個燒錄 USB 接口很不錯,其實可以采用零售的方式降低成本,畢竟越來越多的人不選擇 RRF 固件了
接近開關可選 5v/24v 電壓
支持12cm風扇直接固定散熱,買個可調速的 12v PC 風扇,有靜音又涼快
拓展接口豐富,支持 EXP1 和 EXP2 Ramps 接口,及 EXP3-Duet 串口屏接口,當然也可以轉為他用
限位開關電壓選擇
編譯參數:STM32F407,8M,32KB。
下載 klipper.bin 并重命名為 firmware.bin
拷貝到格式化為 FAT32 文件系統的 SD卡中插入主板,斷電或者按下RESET按鈕,稍等片刻20s左右即可完成燒錄,之后文件名稱會變成 FIRMWARE.CUR
。
按住boot0按鈕,再按下reset按鈕,稍等片刻設備進入DFU燒錄模式
cd ~/klippersudo dfu-util -p 1-1 -R -a 0 -s 0x08008000:leave -D out/klipper.bin
(推薦)如果系統已經燒錄了新版 Klipper 系統,則無需使用boot0按鈕即可自動進入dfu模式,編譯后直接燒錄
cd ~/klippermake flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32f407xx_fys-sking-407-if00
注意dfu燒錄固件并不會破壞sd卡升級功能
雖然 Sking 的高性能 STM32H7 核心模塊還沒發布,但是我很想知道 F407 和 H723 性能對比如何。傳統的有 coremark 等測試程序,這里我們想看看 klipper 相關的性能對比。查閱 Klipper 文檔,可知 Klipper 目前有上位機性能測試、下位機性能測試、命令傳輸性能測試。本次我們關注下位機性能測試,剩下的下次再說。
官方提供的方法,與 mcu 直接通訊,基礎知識見前文:跟著思兼學習Klipper(21)新一代全能選手: Octopus Max EZ 簡要使用記錄
Klipper 默認將 Gcode 命令轉換為機器語言,當然我們也可以直接與下位機主板通訊。這與 /tmp/printer 不同。參考文檔包括:
這里的 Step rate benchmark test 用于mcu 同時控制一個或多個步進電機,發出運動指令,逐漸降低每個指令之間的間隔,找到 mcu 能負擔的最小間隔,通過換算得到單位時間內步進電機控制性能,反映 mcu 的性能。直觀就是 STM32 32位處理器要比 mega2560 能支持的打印速度更快。
【不同 mcu 性能對比】Source:klipper3d.org
注意:
# 使用 console.py 連接 mcu,注意設備號# 支持canbus連接:~/klippy-env/bin/python ~/klipper/klippy/console.py -c can0 1b93bb79de21sudo systemctl stop klipper~/klippy-env/bin/python ~/klipper/klippy/console.py /dev/serial/by-id/usb-Klipper_stm32f407xx_fys-sking-407-if00# 屏蔽干擾信息, [stats] 可以改成其他關鍵字SUPPRESS stats# 初始化H723/F407,定義指定數量對象,選擇合適的步進電機引腳(step/dir_pin).以下內容直接復制黏貼,使用 shift+insert 黏貼,ctrl+c 在 Linux 下是退出# 文檔中有不同 mcu 的參考引腳配置,多數情況下可以直接使用allocate_oids count=3config_stepper oid=0 step_pin=PE9 dir_pin=PD3 invert_step=-1 step_pulse_ticks=0config_stepper oid=1 step_pin=PA15 dir_pin=PA8 invert_step=-1 step_pulse_ticks=0config_stepper oid=2 step_pin=PE2 dir_pin=PE3 invert_step=-1 step_pulse_ticks=0finalize_config crc=0# 設置變量,開始時間start_clock 和 次數ticks# 定義三個電機,0 1 2。也可以只定義單個電機# 下面代碼段同樣整段直接復制黏貼SET start_clock {clock+freq}SET ticks 10reset_step_clock oid=0 clock={start_clock}set_next_step_dir oid=0 dir=0queue_step oid=0 interval={ticks} count=60000 add=0set_next_step_dir oid=0 dir=1queue_step oid=0 interval=3000 count=1 add=0reset_step_clock oid=1 clock={start_clock}set_next_step_dir oid=1 dir=0queue_step oid=1 interval={ticks} count=60000 add=0set_next_step_dir oid=1 dir=1queue_step oid=1 interval=3000 count=1 add=0reset_step_clock oid=2 clock={start_clock}set_next_step_dir oid=2 dir=0queue_step oid=2 interval={ticks} count=60000 add=0set_next_step_dir oid=2 dir=1queue_step oid=2 interval=3000 count=1 add=0# 如果沒有報錯則稍等片刻,修改上方ticks的值,再次復制黏貼,直到報錯:"Rescheduled timer in the past" 或者 "Stepper too far in past" ,代表 ticks 值太小了(導致 stepping rate 太快)# 一般 ticks 每次減半,報錯則使用下方命令清除 shutdown 狀態,重新選擇合適的值。clear_shutdown# 找到合適的 ticks 值,使用如下公式計算 stepper performance## 由于文檔沒有更新,部分命令使用方法可以使用 LIST 和查閱源碼,例如# https://github.com/Klipper3d/klipper/blob/master/src/stepper.c | config_stepper
小結:
stepper performance
K = 3 × freq ÷ ticks ÷ 1000,其中 3
是步進電機數量
此值僅針對 TMC 驅動有參考意義
獲得的數值僅是理論值,當控制其他變量后,可以對比不同 mcu 的性能
mcu支持 STEPPER_BOTH_EDGE=1
的(使用console.py連接時最后面)可以設置如下參數進行優化
invert_step=-1 step_pulse_ticks=0
否則設置
step_pulse_ticks為100ns
查看源碼,搜索 STEPPER_BOTH_EDGE
可知目前支持此特性的主控芯片包括 :
The benchmarks are run with parameters suitable for TMC Drivers. For micro-controllers that support
STEPPER_BOTH_EDGE=1
(as reported in theMCU config
line when console.py first starts) usestep_pulse_duration=0
andinvert_step=-1
to enable optimized stepping on both edges of the step pulse. For other micro-controllers use astep_pulse_duration
corresponding to 100ns.step_pulse_duration: The minimum time between the step pulse signal edge and the following "unstep" signal edge. This is also used to set the minimum time between a step pulse and a direction change signal. The default is 0.000 000 100 (100ns) for TMC steppers that are configured in UART or SPI mode, and the default is 0.000 002 (which is 2us) for all other steppers.
【上述內容涉及 step_pulse_duration 】和丟步有關,有待進一步研究。最后測試結果和官方表格類似。
基于以下來源:https://pastebin.com/yPfSMBGF 修改,這也就是大家常見的測速宏:
如上圖,真實測試,涉及因素包括電機響應速度,MCU同一時間能處理的脈沖數,步進電機驅動能處理的脈沖數,電機不丟步下能達到的速度。通過調參,找到最優設置。對步進電機驅動各項寄存器參數進行優化。
上述實機測試好是好,但是:
所以這里我們要排除電機因素,僅觀察上位機能達到的理論數據,為此我們創建一個測速用參考文件,不需要熱床、風扇、擠出機,僅需要xyz,不定義TMC驅動(避免通訊失敗報錯以及24V供電),僅讓上位機輸出step/dir/en 驅動信號。
[include misc/board.cfg][include misc/fake_speed_test.cfg][include misc/fluidd.cfg][printer]# cartesiankinematics: corexymax_velocity: 1000max_accel: 100000square_corner_velocity: 5.0max_z_velocity: 5max_z_accel: 100###################################################################### X/Y/Z 步進電機設置 | X/Y/Z Stepper Settings#####################################################################[stepper_x]step_pin: MOT0_STEPdir_pin: !MOT0_DIR # X軸電機方向引腳設置,可以通過添或刪除引腳前面的!來改變電機方向enable_pin: !MOT0_ENmicrosteps: 64 # 推薦16細分以達到較好的精度和靜音效果position_max: 1000# step_pulse_duration: 0.000004rotation_distance: 40 # 同步輪周長mm(2GT-20T帶輪40,2GT-16T帶輪32)endstop_pin: ^!ESTOP0 # X_MINposition_endstop: 0 # X Offset,用于設置打印平臺偏移[stepper_y]step_pin: MOT1_STEPdir_pin: !MOT1_DIRenable_pin: !MOT0_ENmicrosteps: 64position_max: 1000# step_pulse_duration: 0.000004rotation_distance: 40endstop_pin: ^!ESTOP2 # Y_MINposition_endstop: 0 # Y Offset[stepper_z]step_pin: MOT2_STEPdir_pin: !MOT2_DIRenable_pin: !MOT0_ENmicrosteps: 16step_pulse_duration: 0.000004rotation_distance: 4 # 根據情況修改position_endstop: 0.5 # disable to use BLTouchendstop_pin: ^!ESTOP4 # disable to use BLTouch, Z_MINposition_min: 0position_max: 300
# original_url: https://pastebin.com/yPfSMBGF# 參數:# ACCEL_STEPS (文字,逗號隔開整數):測試的加速度值,調用方式:ACCEL_STEPS="5000, 10000, 20000"# TEST_STEPS (文字,逗號隔開文本):測試目標,如:TEST_STEPS="x_test,y_test,rect_test,diag_test"#- 選項:# - x_test = 移動x軸# - y_test = 移動y軸# - rect_test = 矩形移動# - diag_test = xy對角移動# - circle_test = 圓形移動Moves in a circle twice# DISTANCE_STEPS (文字,逗號隔開浮點數):測試移動距離, DISTANCE_STEPS="30, 22, 45.221"# SPEED_STEPS (文字,逗號隔開浮點數): 測試移動速度, SPEED_STEPS="100, 120, 120.22"# feed_rate_test TEST_STEPS="x_test,y_test,rect_test,diag_test" SPEED_STEPS="200, 400" DISTANCE_STEPS="400" ACCEL_STEPS="10000, 50000"# 清空當前日志并生成負載圖; python3 ~/klipper/scripts/graphstats.py ~/printer_data/logs/klippy.log -o ~/loadgraph.png; systemctl stop klipper; echo > ~/printer_data/logs/klippy.log; systemctl start klipper[gcode_macro FEED_RATE_TEST]description: 打印機速度測試,僅涉及XY空跑或者虛擬跑。original_url: https://pastebin.com/yPfSMBGF# TODO: 判斷是否開啟 respondgcode: {% if printer.configfile.config.respond is not defined %} {action_raise_error("This gcode_macro requires the [respond] section in your printer.cfg")} {% endif %} # Ugly code to convert a string into an array in jinja # TEST_STEPS conversion # TODO: 讀取參數設置 {% set ns_test_steps = namespace(collector="", arr=[]) %} {% for char in params.TEST_STEPS|default("x_test,y_test,rect_test,diag_test")|string %} {% if char == "," or loop.last %} {% if loop.last %} {% set ns_test_steps.collector = ns_test_steps.collector ~ char %} {% endif %} {% set ns_test_steps.arr = ns_test_steps.arr + [ns_test_steps.collector|string] %} {% set ns_test_steps.collector = "" %} {% else %} {% set ns_test_steps.collector = ns_test_steps.collector ~ char %} {% endif %} {% endfor %} # SPEED_STEPS conversion {% set ns_speed_steps = namespace(collector="", arr=[]) %} {% for char in params.SPEED_STEPS|default("80.0")|string %} {% if char == "," or loop.last %} {% if loop.last %} {% set ns_speed_steps.collector = ns_speed_steps.collector ~ char %} {% endif %} {% set ns_speed_steps.arr = ns_speed_steps.arr + [ns_speed_steps.collector|float] %} {% set ns_speed_steps.collector = "" %} {% else %} {% set ns_speed_steps.collector = ns_speed_steps.collector ~ char %} {% endif %} {% endfor %} # DISTANCE_STEPS conversion {% set ns_distance_steps = namespace(collector="", arr=[]) %} {% for char in params.DISTANCE_STEPS|default("40.0")|string %} {% if char == "," or loop.last %} {% if loop.last %} {% set ns_distance_steps.collector = ns_distance_steps.collector ~ char %} {% endif %} {% set ns_distance_steps.arr = ns_distance_steps.arr + [ns_distance_steps.collector|float] %} {% set ns_distance_steps.collector = "" %} {% else %} {% set ns_distance_steps.collector = ns_distance_steps.collector ~ char %} {% endif %} {% endfor %} # ACCEL_STEPS conversion {% set ns_accel_steps = namespace(collector="", arr=[]) %} {% for char in params.ACCEL_STEPS|default(printer.toolhead.max_accel|string)|string %} {% if char == "," or loop.last %} {% if loop.last %} {% set ns_accel_steps.collector = ns_accel_steps.collector ~ char %} {% endif %} {% set ns_accel_steps.arr = ns_accel_steps.arr + [ns_accel_steps.collector|int] %} {% set ns_accel_steps.collector = "" %} {% else %} {% set ns_accel_steps.collector = ns_accel_steps.collector ~ char %} {% endif %} {% endfor %}# TODO: 讀取機器變量 # Variable assignment {% set center_x_position = printer.toolhead.axis_maximum.x / 2 %} {% set center_y_position = printer.toolhead.axis_maximum.y / 2 %} # Conversion steps variable assignment {% set accel_steps = ns_accel_steps.arr %} {% set test_steps = ns_test_steps.arr %} {% set distance_steps = ns_distance_steps.arr %} {% set speed_steps = ns_speed_steps.arr %} SAVE_GCODE_STATE NAME=speed_testing_macro {% set testRunCounter = namespace(value=0) %} RESPOND PREFIX="Speed-Test - " MSG="使用以下參數進行測試:" RESPOND PREFIX="- " MSG="distance_steps={distance_steps}" RESPOND PREFIX="- " MSG="speed_steps={speed_steps}" RESPOND PREFIX="- " MSG="accel_steps={accel_steps}" RESPOND PREFIX="- " MSG="test_steps={test_steps}" RESPOND PREFIX="" MSG="--------------------"# TODO: 歸位,虛假和實際 # Homing {% if printer.toolhead.homed_axes != "xyz" %} # G28 SET_KINEMATIC_POSITION X=0 Y=0 Z=0 {% endif %} G90 G1 X{center_x_position} Y{center_y_position} Z25 F4000 {% for distance_step in distance_steps %} {% for speed_step in speed_steps %} {% set speed_feedrate_step = speed_step * 60 %} {% for accel_step in accel_steps %} {% set testRunCounter.value = testRunCounter.value + 1 %} M204 S{accel_step} RESPOND PREFIX="Speed-Test - " MSG="Test-Run {testRunCounter.value} => distance: {distance_step} speed: {speed_step} acceleration: {accel_step}" {% for test_step in test_steps %} _{test_step|upper} FEEDRATE={speed_feedrate_step} DISTANCE={distance_step} {% endfor %} {% endfor %} {% endfor %} {% endfor %} RESTORE_GCODE_STATE NAME=speed_testing_macro[gcode_macro _X_TEST]description: Moves the head left/rightgcode: {% set speed_feedrate = params.FEEDRATE|default(4800)|float %} {% set distance = params.DISTANCE|default(100)|float %} G91 G1 x{distance} F{speed_feedrate} G1 x-{distance * 2} F{speed_feedrate} G1 x{distance} F{speed_feedrate} G90 M118 Done_X_TEST[gcode_macro _Y_TEST]description: Moves the head forward/backwardgcode: {% set speed_feedrate = params.FEEDRATE|default(4800)|float %} {% set distance = params.DISTANCE|default(100)|float %} G91 G1 y{distance} F{speed_feedrate} G1 y-{distance * 2} F{speed_feedrate} G1 y{distance} F{speed_feedrate} G90 M118 Done_Y_TEST[gcode_macro _RECT_TEST]description: Moves the head in a rectanglegcode: {% set speed_feedrate = params.FEEDRATE|default(4800)|float %} {% set distance = params.DISTANCE|default(100)|float %} G91 G1 x-{distance} F{speed_feedrate} G1 y-{distance} F{speed_feedrate} G1 x{distance * 2} F{speed_feedrate} G1 y{distance * 2} F{speed_feedrate} G1 x-{distance * 2} F{speed_feedrate} G1 y-{distance} F{speed_feedrate} G1 x{distance} F{speed_feedrate} G90 M118 Done_RECT_TEST[gcode_macro _DIAG_TEST]description: Moves the head diagonally. First spinning the stepper_x, then the stepper_y. (CoreXY)gcode: {% set speed_feedrate = params.FEEDRATE|default(4800)|float %} {% set distance = params.DISTANCE|default(100)|float %} G91 G1 x{distance} y{distance} F{speed_feedrate} G1 x-{distance * 2} y-{distance * 2} F{speed_feedrate} G1 x{distance} y{distance} F{speed_feedrate} G1 x{distance} y-{distance} F{speed_feedrate} G1 x-{distance * 2} y{distance * 2} F{speed_feedrate} G1 x{distance} y-{distance} F{speed_feedrate} G90 M118 Done_DIAG_TEST[gcode_macro _CIRCLE_TEST]description: Moves the head in a circle twice.gcode: {% set speed_feedrate = params.FEEDRATE|default(4800)|float %} {% set distance = params.DISTANCE|default(100)|float %} {% if printer.configfile.config.gcode_arcs is not defined %} {action_raise_error("The circle test requires the [gcode_arcs] section in your printer.cfg")} {% endif %} {% for count in range(2) %} G2 I{distance} J{distance} F{speed_feedrate} {% endfor %} M118 Done_CIRCLE_TEST
SET_KINEMATIC_POSITION X=0 Y=0 Z=0
Done_XXXX_TEST
避免干等feed_rate_test TEST_STEPS="x_test,y_test,rect_test,diag_test" SPEED_STEPS="200, 400" DISTANCE_STEPS="400" ACCEL_STEPS="10000, 50000"
我們使用 Klipper 自帶的系統負載生成工具。
# 清空日志systemctl stop klipperecho > ~/printer_data/logs/klippy.logsystemctl start klipper# ——>開始比賽<——# 生成負載圖python3 ~/klipper/scripts/graphstats.py ~/printer_data/logs/klippy.log -o ~/loadgraph.png
大概結果如下:
這個圖后面再做分析,寫累了。
參考 Prusa 計算器,太高的速度和加速度對于一般用戶來說意義也不大,瓶頸在擠出頭。
Fysetc Spider King 這塊主板,讀下來的感覺就是一個字:穩。工業標準的理念貫穿其中,就是太貴了,普通用戶買不起,聽說以后隨著物料成本的降低也會降價,先做期待。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
巴黎野玫瑰劇情?劇情:《巴黎野玫瑰》是一部由高蒙電影公司出品的劇情片,由讓-雅克貝內克斯執導,讓于格安格雷德、比阿特麗斯卡瓦羅和文森特林頓聯合主演。影片講述了法國巴黎的一對年輕夫婦,過著坎坷的愛情和悲慘的生活。這部電影于1986年4月9日在法國上映。巴黎野玫瑰劇情?巴黎的一對年輕夫婦過著坎坷的愛情故事和悲慘的人生故事。巴黎野玫瑰好看嗎?雖然畫面不適合兒童,但是有很多的場景。但確實是部好電影。關于極...
“老兵不死,只是凋零”這句話什么意思,或者說怎么理解?“老兵不死,只會凋零?!庇⑿劢K將老去,但人們會永遠記住英雄們在他們那個時代的偉大事跡,但當他們老去的時候,人們會逐漸忘記他們“老兵永遠不會死,他們只會悄然消失”是麥克阿瑟的名言,也是全世界老兵的共同心聲。無論是哪個國家的老兵,聽到這句極具感染力的話,都會有無比的感觸“老兵不死,只是漸凋零?!钡木唧w意思是什么?老戰士永遠不會死,他們只是逐漸消失。...
買一個電腦電源大約多少錢?買個電腦電源,價格基本在200~600左右。200元基本是劣質電源。輸出功率可以達到200瓦左右。這種動力基本支持,現在主流硬件有點勉強。不建議購買。400元左右的電源支持,目前市面主流硬件還可以。如果你買的是基本用的電腦,做文字處理,上網。你可以開始了。但是如果用電腦做大量的數據運算,玩大型游戲。那么就需要買一個600元左右的大功率電源。電腦主機換一個電源多少錢?電腦的...