|
|
@ -62,7 +62,6 @@ void TMC5130::initialize(cfg_t *cfg) { |
|
|
|
writeInt(TMC5130_XACTUAL, 0x00000000); |
|
|
|
writeInt(TMC5130_VACTUAL, 0x00000000); |
|
|
|
|
|
|
|
|
|
|
|
writeInt(TMC5130_VSTART, 100); |
|
|
|
writeInt(TMC5130_A1, 1000); |
|
|
|
writeInt(TMC5130_V1, 0); |
|
|
@ -82,6 +81,33 @@ void TMC5130::initialize(cfg_t *cfg) { |
|
|
|
enableIC(true); |
|
|
|
} |
|
|
|
|
|
|
|
void TMC5130::setMRES(mres_type_t value) { |
|
|
|
PRV_FIELD_WRITE(TMC5130_CHOPCONF, TMC5130_MRES_MASK, TMC5130_MRES_SHIFT, value); |
|
|
|
|
|
|
|
m_MRES = value; |
|
|
|
if (m_MRES == kmres_256) { |
|
|
|
m_onecirclepulse = 51200; |
|
|
|
} else if (m_MRES == kmres_128) { |
|
|
|
m_onecirclepulse = 25600; |
|
|
|
} else if (m_MRES == kmres_64) { |
|
|
|
m_onecirclepulse = 12800; |
|
|
|
} else if (m_MRES == kmres_32) { |
|
|
|
m_onecirclepulse = 6400; |
|
|
|
} else if (m_MRES == kmres_16) { |
|
|
|
m_onecirclepulse = 3200; |
|
|
|
} else if (m_MRES == kmres_8) { |
|
|
|
m_onecirclepulse = 1600; |
|
|
|
} else if (m_MRES == kmres_4) { |
|
|
|
m_onecirclepulse = 800; |
|
|
|
} else if (m_MRES == kmres_2) { |
|
|
|
m_onecirclepulse = 400; |
|
|
|
} else if (m_MRES == kmres_1) { |
|
|
|
m_onecirclepulse = 200; |
|
|
|
} else { |
|
|
|
ZASSERT(false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void TMC5130::setNoAccLimit(bool enable) { |
|
|
|
if (!enable) { |
|
|
|
writeInt(TMC5130_VSTART, 100); |
|
|
@ -227,25 +253,28 @@ int32_t TMC5130::readInt(uint8_t address) { |
|
|
|
return ((uint32_t)data[1] << 24) | ((uint32_t)data[2] << 16) | (data[3] << 8) | data[4]; |
|
|
|
} |
|
|
|
int32_t TMC5130::to_motor_acc(int32_t acc) { //
|
|
|
|
int32_t val = acc / 60.0 * 51200; // 65535
|
|
|
|
// if (val > 65535) val = 65535;
|
|
|
|
int32_t val = acc / 60.0 * m_onecirclepulse; // 65535
|
|
|
|
if (val > 65535) val = 65535; |
|
|
|
return val; |
|
|
|
} |
|
|
|
int32_t TMC5130::to_motor_vel(int32_t vel) { //
|
|
|
|
int32_t val = vel / 60.0 * 51200; |
|
|
|
int32_t val = vel / 60.0 * m_onecirclepulse; |
|
|
|
if (val > 8388095 /*2^23-512*/) { |
|
|
|
val = 8388095; |
|
|
|
} |
|
|
|
return val; |
|
|
|
} // rpm
|
|
|
|
int32_t TMC5130::to_motor_pos(int32_t pos) { //
|
|
|
|
int32_t val = pos * 1.0 / m_scale * m_scale_deceleration * 51200.0; |
|
|
|
int32_t val = pos * 1.0 / m_scale * m_scale_deceleration * m_onecirclepulse; |
|
|
|
return val; |
|
|
|
} //
|
|
|
|
|
|
|
|
int32_t TMC5130::to_user_pos(int32_t pos) { //
|
|
|
|
int32_t val = pos / 51200.0 * m_scale / m_scale_deceleration; |
|
|
|
int32_t val = pos / m_onecirclepulse * m_scale / m_scale_deceleration; |
|
|
|
return val; |
|
|
|
} //
|
|
|
|
int32_t TMC5130::to_user_vel(int32_t vel) { //
|
|
|
|
int32_t val = vel * 60.0 / 51200.0; |
|
|
|
int32_t val = vel * 60.0 / m_onecirclepulse; |
|
|
|
return val; |
|
|
|
} |
|
|
|
#endif
|