TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-1.1 + UART

TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-1.1 + UART

Příspěvekod RadaRD » 28.04.2021 21:47

Zdravím. Rád bych se zeptal, jestli se tu někomu podařilo zprovoznit driver TMC2209 v3.1 od FYSETCu na desce RAMPS 1.4 s FW Marlin bugfix-1.1.x v UART módu? Nedaří se mi to. Driver stále chodí v klasickém DIR/STEP režimu.

Věnoval jsem tomu dost času, ale bohužel, všechny návody a rady na netu, se týkají verze driveru nejvýše v3.0. Tam je třeba pro zapnutí UARTu pájet propojky. Zde údajně žádné pájení není třeba. Zespodu na driveru sice jsou nějaké plošky, které by se daly propojit, ale na úplně jiném místě, než kdekoliv v jiných návodech a po pravdě si nechci takovým “hokus-pokus zkoušením” zničit driver, když se na internetu nikde nepíše o tom, že by pro v3.1 bylo nutno cokoliv pájet pro zapnutí UART režimu (https://wiki.fysetc.com/Silent2209/#v31 ... connection).

Obrázek
Obrázek

Další věc – jak vidno z fotek, tento driver má samostatné piny pro TX i RX komunikaci. Drtivá většina návodů je na drivery TMC2208, kde se propojení a komunikace s RAMPS deskou řeší Y propojkou přes 1K resistor s jedním pinem na driveru a dvěma na RAMPSu (např. tento pěkný návod zde: https://www.instructables.com/UART-This ... s-With-th/)

Já jsem tedy použil dva samostatné propojovací kabely. Mezi kabel pro TX jsem napájel 1K resistor, u RX jen drát a propojil jsem takhle piny RX a TX na driveru s odpovídajícími piny na RAMPSu. Jsem si téměř jistý, že úpravy v souborech configuration.h, configuration_adv.h a také pins_RAMPS.h jsem důkladně prošel a nastavil správně.

Testoval jsem zatím pouze osu X. Marlin s příkazem M122 však stále hlásí: Driver registers: X = 0x00:00:00:00 ať dělám co dělám.

Kód: Vybrat vše
            X
Enabled      false
Set current   650
RMS current   1160
MAX current   1636
Run current   20/31
Hold current   10/31
CS actual      0/31
PWM scale      0
vsense      0=.325
stealthChop   false
msteps      256
tstep      0
pwm
threshold      164
[mm/s]      964.18
OT prewarn   false
OT prewarn has
been triggered   false
off time      0
blank time   16
hysteresis
-end      -3
-start      1
Stallguard thrs   
DRVSTATUS   X
stst      
olb      
ola      
s2gb      
s2ga      
otpw      
ot      
157C      
150C      
143C      
120C      
s2vsa      
s2vsb      
Driver registers:   X = 0x00:00:00:00


Další věc, kde by mohl být problém – použitá knihovna driverů, když kompiluji Marlina pro TMC drivery v Arduino IDE, je “TMC2208Stepper”, zatímco na webu https://marlinfw.org/docs/hardware/tmc_drivers.html doporučují pro verzi 1.1.9 použít knihovnu “TMCStepper”. Ta je novější a podporuje přímo drivery TMC2209. Jenomže s touhle knihovnou to nejde zkompilovat, háže to chyby na neexistující knihovny atd. Obávám se, že zde soudruzi udělali chybu a prostě Marlin 1.x není pro drivery TMC2209 ani knihovnu "TMCStepper" připraven. A Marlina ve verzi 2.0.x na svůj RAMPS 1.4 s Arduino Mega2560 prostě nedostanu.

Budu rád za každou radu, ale myslím si, že problém je na více frontách a nemá to v téhle konfiguraci řešení. A na to, abych dokázal naroubovat novější "TMCStepper" knihovnu do Marlina bugfix-1.1.x, nemám skillsy... pokud je v tom vůbec ten hlavní problém.
  • 0

RadaRD
 
Příspěvky: 38
Registrován: 30.08.2017 13:40
Bydliště: Brno
Reputation: 0

Re: TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-1.1 +

Příspěvekod RadaRD » 29.04.2021 10:42

UPDATE: zjistil jsem svůj omyl - na RAMPS 1.4 s Arduino Mega2560 lze nahrát a používat i Marlina 2.0.x. Což dává nové možnosti k testování. Měl jsem z nějakýho důvodu za to, že na 8bit desku lze jedině Marlin 1.1.x. Pokud na něco přijdu a rozchodím to, hodím to sem.
  • 0

RadaRD
 
Příspěvky: 38
Registrován: 30.08.2017 13:40
Bydliště: Brno
Reputation: 0

Re: TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-1.1 +

Příspěvekod lachtan86 » 30.04.2021 07:32

Když se dívám na ten Hardware Connection diagram tak ten driver už v sobě ten 1k odpor má tzn. pro potvrzení si můžeš zkusit změřit multimetrem TX a RX a měl by jsi tam naměřit odpor 1k. Tzn že mezi RAMPS a driver už by se žádnej další odpor dávat neměl. Jen pro jistotu uvádím (snad máš dobře) že TX pin na driveru jde na RX pin na RAMPS a obráceně. Já kdysi úspěšně provozoval na RAMPS TMC2209 od bigtreetechu kde je tedy jen jeden UART pin přes ten Y Kablík. Každopádně jsem to provozoval jen s dvojkovým Marlinem
  • 0

lachtan86
 
Příspěvky: 51
Registrován: 27.03.2016 23:46
Bydliště: Hradec Králové
Reputation: 0

Re: TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-1.1 +

Příspěvekod RadaRD » 30.04.2021 13:38

Tak se mi to podařilo rozchodit :!:

Zásadní mylníky byly pro mne dvě věci:
1) použít Marlin 2.x, který zahrnuje novější knihovnu "TMCStepper" s přímou podporou TMC2209 driverů
2) namísto spartánského "Arduino IDE" použít ke kompilaci Microsoft Visual Studio Code s extejšnou PlatformIO.

Nadpis topicu by tedy měl být TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-2.0.x + UART :)

Co se týče HW zapojení, tak jsem udělal následující:
1) zpoza driverů, které jsem chtěl řídit pomocí UART, jsem vytáhl všechny jumpery MS1, MS2 i MS3
2) propojení driverů s RAMPS deskou jde přes dva dráty, přičemž ten co jde na TX komunikaci, má 1K ohm resistor (v mém případě to je ten černý drát). Jak mám zapojeno, píšu dále.

Obrázek

Co se týče SW úprav, tak stačí upravit pouze notoricky známé soubory configuration.h a configuration_adv.h (doporučuju nějaký diff viewer pro vyhledání rozdílů mezi soubory z původní konfigurace Marlina).

Chtěl jsem pomocí UARTu řídit pouze osy X a Y, takže mám v configuration.h drivery nastaveny takto:
Kód: Vybrat vše
#define X_DRIVER_TYPE  TMC2209
#define Y_DRIVER_TYPE  TMC2209
#define Z_DRIVER_TYPE  TMC2209_STANDALONE
#define E0_DRIVER_TYPE A4988


V configuration_adv.h co se týče nastavení driverů X a Y:
Kód: Vybrat vše
#if HAS_TRINAMIC_CONFIG

  #define HOLD_MULTIPLIER    0.5  // Scales down the holding current from run current

  /**
   * Interpolate microsteps to 256
   * Override for each driver with <driver>_INTERPOLATE settings below
   */
  #define INTERPOLATE      true

  #if AXIS_IS_TMC(X)
    #define X_CURRENT       670        // (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     16        // 0..256
    #define X_RSENSE          0.11
    #define X_CHAIN_POS      -1        // -1..0: Not chained. 1: MCU MOSI connected. 2: Next in chain, ...
    //#define X_INTERPOLATE  true      // Enable to override 'INTERPOLATE' for the X axis
  #endif

  #if AXIS_IS_TMC(Y)
    #define Y_CURRENT       670
    #define Y_CURRENT_HOME  Y_CURRENT
    #define Y_MICROSTEPS     16
    #define Y_RSENSE          0.11
    #define Y_CHAIN_POS      -1
    //#define Y_INTERPOLATE  true
  #endif


Dále pak nastavení SLAVE_ADDRESS = 0 (proto jsou MS1 a MS2 jumpery vytaženy). Co se týče mapování pinů, tak není třeba nic měnit. Na RAMPsu na AUX2 pro osu X jsou piny TX = 40, RX = 63 a pro osu Y piny TX = 59 , RX = 64:
Kód: Vybrat vše
  /**
   * Four TMC2209 drivers can use the same HW/SW serial port with hardware configured addresses.
   * Set the address using jumpers on pins MS1 and MS2.
   * Address | MS1  | MS2
   *       0 | LOW  | LOW
   *       1 | HIGH | LOW
   *       2 | LOW  | HIGH
   *       3 | HIGH | HIGH
   *
   * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers
   * on the same serial port, either here or in your board's pins file.
   */
  #define  X_SLAVE_ADDRESS 0
  #define  Y_SLAVE_ADDRESS 0


SW řízení mám vypnuté:
Kód: Vybrat vše
  /**
   * Software enable
   *
   * Use for drivers that do not use a dedicated enable pin, but rather handle the same
   * function through a communication line such as SPI or UART.
   */
  //#define SOFTWARE_DRIVER_ENABLE


Zapnutý StealthChop pro X a Y:
Kód: Vybrat vše
#define STEALTHCHOP_XY


A hybrid treshold takto:
Kód: Vybrat vše
  #define HYBRID_THRESHOLD

  #define X_HYBRID_THRESHOLD      60  // [mm/s]
  #define Y_HYBRID_THRESHOLD      60


S nastavením proudů do driverů, dále pak StealthChop a Hybrid Treshold (toto vše pro každou osu samostatně) lze v menu tiskárny dodatečně poladit, není nutné znovu flashovat FW.

Vše chodí jak víno. Tak třeba to někomu ušetří plno času a rozhoupe, aby to také zkusil. Já jsem nad tím strávil doslova "dny".

Postřehy:
* Pokud se RAMPS napájí pouze z USB a drivery nejsou krmeny ze zdroje, Marlin hlásí TMC connection error. To je normální.
* Marlina 1.1.9.x IMO vůbec nemá smysl zkoušet a tudy cesta nevede. Podle mne zásadní problém je v tom, že přímo nepodporuje novější knihovnu "TMCStepper" ale starší verzi "TMC2208Stepper". A i když jsem se původně domníval, že tam přece musí být kompatibilita mezi 2208 a 2209 a nějak to půjde, opak se ukázal býti pravdou. Je možné, že časem autoři knihovnu aktualizují a includnou tam tu novější (a přidají možnost nastavit driver TMC2209), ale moc bych na to nespoléhal.
* Arduino IDE zklamalo na celé čáře (Marlina 2 se mi v něm vůbec nepodařilo zkompilovat, samé obskurní chyby a problémy při kompilaci, na které je po internetu plno nejednoznačných rad, kompilace trvá mnoho minut...) a naopak bombasticky překvapilo Microsoft Visual Studio.
Nainstalovat rozšíření PlatformIO bylo dílem okamžiku a stejně tak kompilace Marlina je přehledná a komfortní. Samo si to stáhne veškeré potřebné knihovny, není potřeba nic dál instalovat. (prvotní) Kompilace proběhne rychle, cca 30 sec.
Dokonce lze ve Visual Studiu provést přímo upload FW - samo si to detekovalo připojený Arduino Mega 2560 na COM4. Luxusní.
* Drivery TMC2209 IMO méně topí, než TMC2208. Zatím je aktivně nechladím, i když jsem to měl původně v plánu. Ale co mne kapku znepokojuje, jak se (obecně) s TMC driverama hřejí krokový motory... Jsou sice uchyceny na ABS tištěných dílech, ne PLA, ale stejně... Možná na ně dám nějaký hliníkový pasivy.
  • 0

RadaRD
 
Příspěvky: 38
Registrován: 30.08.2017 13:40
Bydliště: Brno
Reputation: 0

Re: TMC2209 v3.1 (FYSETC) + RAMPS 1.4 + Marlin bugfix-1.1 +

Příspěvekod RadaRD » 30.04.2021 15:43

lachtan86 píše:Když se dívám na ten Hardware Connection diagram tak ten driver už v sobě ten 1k odpor má tzn. pro potvrzení si můžeš zkusit změřit multimetrem TX a RX a měl by jsi tam naměřit odpor 1k. Tzn že mezi RAMPS a driver už by se žádnej další odpor dávat neměl. Jen pro jistotu uvádím (snad máš dobře) že TX pin na driveru jde na RX pin na RAMPS a obráceně. Já kdysi úspěšně provozoval na RAMPS TMC2209 od bigtreetechu kde je tedy jen jeden UART pin přes ten Y Kablík. Každopádně jsem to provozoval jen s dvojkovým Marlinem

Ne, nic takového. RX z driveru jde na RX pin na RAMPsu a stejně tak TX pin z driveru je připojen na TX pin na RAMPS. Na TX kablíku mám 1K ohm resistor. A takhle to chodí správně :)

Rozmístění pinů na RAMPSu je daný a X a Y to mají pod sebou opačně, to je jediný rozdíl. Viz pin layout pro Marlina 1.1.9 a vyšší...

Obrázek
  • 0

RadaRD
 
Příspěvky: 38
Registrován: 30.08.2017 13:40
Bydliště: Brno
Reputation: 0


Zpět na ELEKTRONIKA

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 6 návštevníků