3d打印驱动开启uart有什么用TMC2208如何在Ramps1.4开启uart
使用UART(串行通信)對基于TMC2208的SilentStepStick進行主動/動態(tài)控制。
這個方法的好處:
1、可以通過固件任意設置電動機電流
2、可以通過固件任意設置微步(最多256個實際微步)
3、實步和內(nèi)插微步可以組合以實現(xiàn)最大扭矩
4、固件可以通過UART快速在StealthChop2和spreadCycle模式之間切換步進電機
5、當電機不移動時,可以動態(tài)降低電機待機電流(通過UART)
還有一些其他的優(yōu)點就不介紹了
首先處理的是TMC2208芯片上的UART引腳。默認情況下,TMC2208的UART引腳是不連接到Watterott SilentStepStick的標頭引腳的,需要我們手動把焊接跳線。
我買到的2208:
我們要處理的則是圖里畫圈的部分:
中間的焊盤直接連接芯片通道,左邊的和UART引腳相通,右邊的與PND引腳相通。所以連接左邊或右邊焊盤都是可以的。效果如下:
第二個要處理的是排針,原先EN,DIAG,INDEX,MS1,MS2 和模擬電流設置VREF,都被UART線代替,所以只需要留下EN,DIR,STEP,PDN四個引腳即可。其中PDN引腳最好單獨引出一根線,就像上圖中那樣,因為從后續(xù)設置里可以看到,UART信號是從其他引腳過來的。
關于散熱,現(xiàn)在買來的TMC2208基本都是帶一個大的散熱塊的(如下圖)。但是根據(jù)我的經(jīng)驗,僅使用這個散熱塊是不太夠的,最好再額外增加一個風扇。
第三步,為了使SilentStepStick通過UART與Ramps板通信,需要從SilentStepStick的UART引腳進行單線連接。然后,將那條線分成兩根線(Rx和Tx)以連接到Ramps板,并通過1K Ohm電阻器進行Tx(發(fā)送)連接。
在這里插入圖片描述
所以,需要制作一個Y型跳線,一端連接PDN引腳(也就是剛才從引出的線),另一端連接Arduino的RX和TX引腳上。建議是用壓線端子制作一條可以隨時拔插的跳線。
以上,硬件部分的處理基本完成。
打印機固件設置
首先找到打印機所使用驅動板,我的是RAMPS1.4的。
// Choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
? #define MOTHERBOARD BOARD_RAMPS_14_EFB
#endif
再去Pins文件夾找到相應的引腳定義文件,其中HAS_TMC_UART這一段就是TMC2208的UART通信引腳定義
#if HAS_TMC_UART
? /**
?? * TMC2208/TMC2209 stepper drivers
?? *
?? * Hardware serial communication ports.
?? * If undefined software serial is used according to the pins below
?? */
? //#define X_HARDWARE_SERIAL Serial1
? //#define X2_HARDWARE_SERIAL Serial1
? //#define Y_HARDWARE_SERIAL Serial1
? //#define Y2_HARDWARE_SERIAL Serial1
? //#define Z_HARDWARE_SERIAL Serial1
? //#define Z2_HARDWARE_SERIAL Serial1
? //#define E0_HARDWARE_SERIAL Serial1
? //#define E1_HARDWARE_SERIAL Serial1
? //#define E2_HARDWARE_SERIAL Serial1
? //#define E3_HARDWARE_SERIAL Serial1
? //#define E4_HARDWARE_SERIAL Serial1
? //
? // Software serial
? //
? #ifndef X_SERIAL_TX_PIN
??? #define X_SERIAL_TX_PIN?????????????????? 40
? #endif
? #ifndef X_SERIAL_RX_PIN
??? #define X_SERIAL_RX_PIN?????????????????? 63
? #endif
? #ifndef X2_SERIAL_TX_PIN
??? #define X2_SERIAL_TX_PIN????????????????? -1
? #endif
? #ifndef X2_SERIAL_RX_PIN
??? #define X2_SERIAL_RX_PIN????????????????? -1
? #endif
? #ifndef Y_SERIAL_TX_PIN
??? #define Y_SERIAL_TX_PIN?????????????????? 59
? #endif
? #ifndef Y_SERIAL_RX_PIN
??? #define Y_SERIAL_RX_PIN?????????????????? 64
? #endif
? #ifndef Y2_SERIAL_TX_PIN
??? #define Y2_SERIAL_TX_PIN????????????????? -1
? #endif
? #ifndef Y2_SERIAL_RX_PIN
??? #define Y2_SERIAL_RX_PIN????????????????? -1
? #endif
? #ifndef Z_SERIAL_TX_PIN
??? #define Z_SERIAL_TX_PIN?????????????????? 42
? #endif
? #ifndef Z_SERIAL_RX_PIN
??? #define Z_SERIAL_RX_PIN?????????????????? 65
? #endif
? #ifndef Z2_SERIAL_TX_PIN
??? #define Z2_SERIAL_TX_PIN????????????????? -1
? #endif
? #ifndef Z2_SERIAL_RX_PIN
??? #define Z2_SERIAL_RX_PIN????????????????? -1
? #endif
? #ifndef E0_SERIAL_TX_PIN
??? #define E0_SERIAL_TX_PIN????????????????? 44
? #endif
? #ifndef E0_SERIAL_RX_PIN
??? #define E0_SERIAL_RX_PIN????????????????? 66
? #endif
#endif
根據(jù)以上內(nèi)容,在查找相應驅動板上連接的引腳,就是跳線該連接的引腳。
ps:下圖是RAMPS1.4的引腳定義,可以看到基本上所用的引腳都集中在AUX2一片。
ps2:圖里D48我實測是D40。
在這里插入圖片描述
其次,激活TMC2208功能。marlin固件默認是啟動A4988的,配置代碼在Configuration.h中
/**
?* Stepper Drivers
?*
?* These settings allow Marlin to tune stepper driver timing and enable advanced options for
?* stepper drivers that support them. You may also override timing options in Configuration_adv.h.
?*
?* A4988 is assumed for unspecified drivers.
?*
?* Options: A4988, A5984, DRV8825, LV8729, L6470, L6474, POWERSTEP01,
?*????????? TB6560, TB6600, TMC2100,
?*????????? TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
?*????????? TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
?*????????? TMC26X,? TMC26X_STANDALONE,? TMC2660, TMC2660_STANDALONE,
?*????????? TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
?* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
?*/
#define X_DRIVER_TYPE? TMC2208
#define Y_DRIVER_TYPE? TMC2208
#define Z_DRIVER_TYPE? TMC2208
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE DRV8825
//#define E1_DRIVER_TYPE A4988
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988
取消注釋,并將使用的驅動修改到 XX_DRIVER_TYPE 后面即可。TMC2208_STANDALONE這個模式是適用于不使用SPI或UART通信直連。
另外需要修改的代碼在Configuration_adv.h文件里,主要修改驅動電流,驅動細分數(shù),保持電流等。
驅動電流0.8A一般足夠,分辨率我個人建議不要設置為256,因為實測256細分的時候,回零點會撞。保持電流是個百分比數(shù)值,默認的是50%。
// @section tmc_smart
/**
?* To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode
?* connect your SPI pins to the hardware SPI interface on your board and define
?* the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3
?* pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
?* You may also use software SPI if you wish to use general purpose IO pins.
?*
?* To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN
?* to the driver side PDN_UART pin with a 1K resistor.
?* To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without
?* a resistor.
?* The drivers can also be used with hardware serial.
?*
?* TMCStepper library is required to use TMC stepper drivers.
?* https://github.com/teemuatlut/TMCStepper
?*/
#if HAS_TRINAMIC_CONFIG
? #define HOLD_MULTIPLIER??? 0.5? // Scales down the holding current from run current
? #define INTERPOLATE?????? true? // Interpolate X/Y/Z_MICROSTEPS to 256
? #if AXIS_IS_TMC(X)
??? #define X_CURRENT?????? 800??????? // (mA) RMS current. Multiply by 1.414 for peak current.
??? #define X_CURRENT_HOME? X_CURRENT? // (mA) RMS current for sensorless homing
??? #define X_MICROSTEPS???? 128??? // 0..256
??? #define X_RSENSE????????? 0.11
??? #define X_CHAIN_POS????? -1??? // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
? #endif
? #if AXIS_IS_TMC(X2)
??? #define X2_CURRENT????? 800
??? #define X2_CURRENT_HOME X2_CURRENT
??? #define X2_MICROSTEPS??? 16
??? #define X2_RSENSE???????? 0.11
??? #define X2_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(Y)
??? #define Y_CURRENT?????? 800
??? #define Y_CURRENT_HOME? Y_CURRENT
??? #define Y_MICROSTEPS???? 128
??? #define Y_RSENSE????????? 0.11
??? #define Y_CHAIN_POS????? -1
? #endif
? #if AXIS_IS_TMC(Y2)
??? #define Y2_CURRENT????? 800
??? #define Y2_CURRENT_HOME Y2_CURRENT
??? #define Y2_MICROSTEPS??? 16
??? #define Y2_RSENSE???????? 0.11
??? #define Y2_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(Z)
??? #define Z_CURRENT?????? 800
??? #define Z_CURRENT_HOME? Z_CURRENT
??? #define Z_MICROSTEPS???? 128
??? #define Z_RSENSE????????? 0.11
??? #define Z_CHAIN_POS????? -1
? #endif
? #if AXIS_IS_TMC(Z2)
??? #define Z2_CURRENT????? 800
??? #define Z2_CURRENT_HOME Z2_CURRENT
??? #define Z2_MICROSTEPS??? 16
??? #define Z2_RSENSE???????? 0.11
??? #define Z2_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(Z3)
??? #define Z3_CURRENT????? 800
??? #define Z3_CURRENT_HOME Z3_CURRENT
??? #define Z3_MICROSTEPS??? 16
??? #define Z3_RSENSE???????? 0.11
??? #define Z3_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(Z4)
??? #define Z4_CURRENT????? 800
??? #define Z4_CURRENT_HOME Z4_CURRENT
??? #define Z4_MICROSTEPS??? 16
??? #define Z4_RSENSE???????? 0.11
??? #define Z4_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E0)
??? #define E0_CURRENT????? 800
??? #define E0_MICROSTEPS??? 16
??? #define E0_RSENSE???????? 0.11
??? #define E0_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E1)
??? #define E1_CURRENT????? 800
??? #define E1_MICROSTEPS??? 16
??? #define E1_RSENSE???????? 0.11
??? #define E1_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E2)
??? #define E2_CURRENT????? 800
??? #define E2_MICROSTEPS??? 16
??? #define E2_RSENSE???????? 0.11
??? #define E2_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E3)
??? #define E3_CURRENT????? 800
??? #define E3_MICROSTEPS??? 16
??? #define E3_RSENSE???????? 0.11
??? #define E3_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E4)
??? #define E4_CURRENT????? 800
??? #define E4_MICROSTEPS??? 16
??? #define E4_RSENSE???????? 0.11
??? #define E4_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E5)
??? #define E5_CURRENT????? 800
??? #define E5_MICROSTEPS??? 16
??? #define E5_RSENSE???????? 0.11
??? #define E5_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E6)
??? #define E6_CURRENT????? 800
??? #define E6_MICROSTEPS??? 16
??? #define E6_RSENSE???????? 0.11
??? #define E6_CHAIN_POS???? -1
? #endif
? #if AXIS_IS_TMC(E7)
??? #define E7_CURRENT????? 800
??? #define E7_MICROSTEPS??? 16
??? #define E7_RSENSE???????? 0.11
??? #define E7_CHAIN_POS???? -1
? #endif
將這些配置好后,就可以編譯程序并燒入固件開機測試了。
開機后先回下原點看下,軸向運動是否相反,如果之前使用的是drv8825或者a4988很可能需要去Configuration.h中修改下軸向運動方向。之后還需要在機器上修改每毫米步進數(shù)等參數(shù),然后就可以進行自動數(shù)據(jù)修正和平臺調(diào)平了。全部完成后,打印機打印時噪音基本聽不到了。
// @section machine
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR true
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false
參考資料
??? https://www.instructables.com/id/UART-This-Serial-Control-of-Stepper-Motors-With-th/、
??? https://marlinfw.org/docs/configuration/configuration.html#firmware-info
??? http://www.3dxmy.com/?p=126
??? TMC220x_TMC222x_Datasheet
?
總結
以上是生活随笔為你收集整理的3d打印驱动开启uart有什么用TMC2208如何在Ramps1.4开启uart的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: net start mysql报错:发生
- 下一篇: SQL create file遇到操作系