Clean-up TMC SG trs setting in COOLCONF register
parent
f0a633b4b6
commit
c4e23b687d
|
|
@ -264,15 +264,22 @@ void TMC2130::SetSGTHRS(const MotorParams ¶ms) {
|
||||||
union SGTHRSU {
|
union SGTHRSU {
|
||||||
struct __attribute__((packed)) S {
|
struct __attribute__((packed)) S {
|
||||||
uint16_t zero;
|
uint16_t zero;
|
||||||
uint16_t sgthrs;
|
int8_t sgthrs : 7;
|
||||||
constexpr S(uint16_t sgthrs)
|
uint8_t reserved : 1;
|
||||||
|
uint8_t sfilt : 1;
|
||||||
|
uint8_t reserved1 : 7;
|
||||||
|
constexpr explicit S(int8_t sgthrs)
|
||||||
: zero(0)
|
: zero(0)
|
||||||
, sgthrs(sgthrs) {}
|
, sgthrs(sgthrs)
|
||||||
|
, reserved(0)
|
||||||
|
, sfilt(0)
|
||||||
|
, reserved1(0) {}
|
||||||
} s;
|
} s;
|
||||||
uint32_t dw;
|
uint32_t dw;
|
||||||
constexpr SGTHRSU(uint16_t sgthrs)
|
constexpr explicit SGTHRSU(int8_t sgthrs)
|
||||||
: s(sgthrs) {}
|
: s(sgthrs) {}
|
||||||
};
|
};
|
||||||
|
static_assert(sizeof(SGTHRSU) == 4);
|
||||||
//uint32_t tmc2130_coolConf = (((uint32_t)params.sg_thrs) << 16U);
|
//uint32_t tmc2130_coolConf = (((uint32_t)params.sg_thrs) << 16U);
|
||||||
WriteRegister(params, Registers::COOLCONF, SGTHRSU(params.sg_thrs).dw);
|
WriteRegister(params, Registers::COOLCONF, SGTHRSU(params.sg_thrs).dw);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,7 @@ void AdaptiveIdlerHoming() {
|
||||||
main_loop();
|
main_loop();
|
||||||
CHECK(mm::motion.CurPosition<mm::Idler>().v == mm::unitToSteps<mm::I_pos_t>(config::IdlerOffsetFromHome) + 1); // magic constant just to tune the motor steps
|
CHECK(mm::motion.CurPosition<mm::Idler>().v == mm::unitToSteps<mm::I_pos_t>(config::IdlerOffsetFromHome) + 1); // magic constant just to tune the motor steps
|
||||||
CHECK(mi::idler.axisStart == config::IdlerOffsetFromHome.v + 2);
|
CHECK(mi::idler.axisStart == config::IdlerOffsetFromHome.v + 2);
|
||||||
CHECK(mm::axes[mm::Idler].sg_thrs == 32767); // @@TODO sg_thrs is int8_t by default
|
CHECK(mm::axes[mm::Idler].sg_thrs == 63);
|
||||||
// do exact number of steps before triggering SG
|
// do exact number of steps before triggering SG
|
||||||
uint32_t idlerSteps = mm::unitToSteps<mm::I_pos_t>(config::idlerLimits.lenght);
|
uint32_t idlerSteps = mm::unitToSteps<mm::I_pos_t>(config::idlerLimits.lenght);
|
||||||
uint32_t sgChange = mm::unitToAxisUnit<mm::I_pos_t>(config::idlerLimits.lenght - 15.0_deg).v;
|
uint32_t sgChange = mm::unitToAxisUnit<mm::I_pos_t>(config::idlerLimits.lenght - 15.0_deg).v;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue