tmc2130.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #ifndef TMC2130_H
  2. #define TMC2130_H
  3. //mode
  4. extern uint8_t tmc2130_mode;
  5. //holding and running currents
  6. extern uint8_t tmc2130_current_h[4];
  7. extern uint8_t tmc2130_current_r[4];
  8. //microstep resolution (0 means 256usteps, 8 means 1ustep
  9. extern uint8_t tmc2130_mres[4];
  10. //flags for axis stall detection
  11. extern uint8_t tmc2130_sg_thr[4];
  12. extern bool tmc2130_sg_stop_on_crash;
  13. extern uint8_t tmc2130_sg_crash; //crash mask
  14. extern uint8_t tmc2130_sg_meassure;
  15. extern uint32_t tmc2130_sg_meassure_cnt;
  16. extern uint32_t tmc2130_sg_meassure_val;
  17. extern uint8_t tmc2130_sg_homing_axes_mask;
  18. #define TMC2130_MODE_NORMAL 0
  19. #define TMC2130_MODE_SILENT 1
  20. #define TMC2130_WAVE_FAC1000_MIN 30
  21. #define TMC2130_WAVE_FAC1000_MAX 200
  22. #define TMC2130_WAVE_FAC1000_STP 1
  23. #define TMC2130_MINIMUM_PULSE 0 // minimum pulse width in uS
  24. #define TMC2130_SET_DIR_DELAY 20 // minimum delay after setting direction in uS
  25. #define TMC2130_SET_PWR_DELAY 0 // minimum delay after changing pwr mode in uS
  26. #ifdef TMC2130_DEDGE_STEPPING
  27. #define TMC2130_MINIMUM_DELAY //NOP
  28. #elif TMC2130_MINIMUM_PULSE == 0
  29. #define TMC2130_MINIMUM_DELAY asm("nop")
  30. #else
  31. #define TMC2130_MINIMUM_DELAY delayMicroseconds(TMC2130_MINIMUM_PULSE)
  32. #endif
  33. extern uint8_t tmc2130_home_enabled;
  34. extern uint8_t tmc2130_home_origin[2];
  35. extern uint8_t tmc2130_home_bsteps[2];
  36. extern uint8_t tmc2130_home_fsteps[2];
  37. extern uint8_t tmc2130_wave_fac[4];
  38. #pragma pack(push)
  39. #pragma pack(1)
  40. typedef struct
  41. {
  42. uint8_t toff:4;
  43. uint8_t hstr:3;
  44. uint8_t hend:4;
  45. uint8_t tbl:2;
  46. uint8_t res:3;
  47. } tmc2130_chopper_config_t;
  48. #pragma pack(pop)
  49. extern tmc2130_chopper_config_t tmc2130_chopper_config[4];
  50. //initialize tmc2130
  51. #ifdef PSU_Delta
  52. extern void tmc2130_init(bool bSupressFlag=false);
  53. #else
  54. extern void tmc2130_init();
  55. #endif
  56. //check diag pins (called from stepper isr)
  57. extern void tmc2130_st_isr();
  58. //update stall guard (called from st_synchronize inside the loop)
  59. extern bool tmc2130_update_sg();
  60. //temperature watching (called from )
  61. extern void tmc2130_check_overtemp();
  62. //enter homing (called from homeaxis before homing starts)
  63. extern void tmc2130_home_enter(uint8_t axes_mask);
  64. //exit homing (called from homeaxis after homing ends)
  65. extern void tmc2130_home_exit();
  66. //start stallguard meassuring for single axis
  67. extern void tmc2130_sg_meassure_start(uint8_t axis);
  68. //stop current stallguard meassuring and report result
  69. extern uint16_t tmc2130_sg_meassure_stop();
  70. extern void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r);
  71. //set holding current for any axis (M911)
  72. extern void tmc2130_set_current_h(uint8_t axis, uint8_t current);
  73. //set running current for any axis (M912)
  74. extern void tmc2130_set_current_r(uint8_t axis, uint8_t current);
  75. //print currents (M913)
  76. extern void tmc2130_print_currents();
  77. //set PWM_AMPL for any axis (M917)
  78. extern void tmc2130_set_pwm_ampl(uint8_t axis, uint8_t pwm_ampl);
  79. //set PWM_GRAD for any axis (M918)
  80. extern void tmc2130_set_pwm_grad(uint8_t axis, uint8_t pwm_ampl);
  81. extern uint16_t tmc2130_rd_MSCNT(uint8_t axis);
  82. extern uint32_t tmc2130_rd_MSCURACT(uint8_t axis);
  83. extern uint8_t tmc2130_usteps2mres(uint16_t usteps);
  84. #define tmc2130_mres2usteps(mres) ((uint16_t)256 >> mres)
  85. extern bool tmc2130_wait_standstill_xy(int timeout);
  86. extern uint16_t tmc2130_get_res(uint8_t axis);
  87. extern void tmc2130_set_res(uint8_t axis, uint16_t res);
  88. extern uint8_t tmc2130_get_pwr(uint8_t axis);
  89. extern void tmc2130_set_pwr(uint8_t axis, uint8_t pwr);
  90. extern uint8_t tmc2130_get_inv(uint8_t axis);
  91. extern uint8_t tmc2130_get_dir(uint8_t axis);
  92. extern void tmc2130_set_dir(uint8_t axis, uint8_t dir);
  93. extern void tmc2130_do_step(uint8_t axis);
  94. extern void tmc2130_do_steps(uint8_t axis, uint16_t steps, uint8_t dir, uint16_t delay_us);
  95. extern void tmc2130_goto_step(uint8_t axis, uint8_t step, uint8_t dir, uint16_t delay_us, uint16_t microstep_resolution);
  96. extern void tmc2130_get_wave(uint8_t axis, uint8_t* data, FILE* stream);
  97. extern void tmc2130_set_wave(uint8_t axis, uint8_t amp, uint8_t fac1000);
  98. extern bool tmc2130_home_calibrate(uint8_t axis);
  99. extern uint8_t tmc2130_cur2val(float cur);
  100. extern float tmc2130_val2cur(uint8_t val);
  101. #endif //TMC2130_H