Browse Source

ztmc5130支持spi_mode select pin

master
zhaohe 2 years ago
parent
commit
853e5868ca
  1. 32
      components/tmc/ic/ztmc5130.cpp
  2. 18
      components/tmc/ic/ztmc5130.hpp

32
components/tmc/ic/ztmc5130.cpp

@ -30,17 +30,21 @@ void TMC5130::initialize(cfg_t *cfg) {
// m_port = config->m_port;
m_registerAccessTable = &tmc5130_defaultRegisterAccess[0];
m_defaultRegisterResetState = &tmc5130_defaultRegisterResetState[0];
if (cfg->csn_pin != PinNull) {
if (cfg->csgpio != PinNull) {
m_csnpin = new ZGPIO();
m_csnpin->initAsOutput(cfg->csn_pin, ZGPIO::kMode_nopull, false, true);
m_csnpin->initAsOutput(cfg->csgpio, ZGPIO::kMode_nopull, false, true);
ZASSERT(m_csnpin);
}
if (cfg->enn_pin != PinNull) {
if (cfg->ennPin != PinNull) {
m_ennpin = new ZGPIO();
m_ennpin->initAsOutput(cfg->enn_pin, ZGPIO::kMode_nopull, false, true);
m_ennpin->initAsOutput(cfg->ennPin, ZGPIO::kMode_nopull, false, true);
ZASSERT(m_ennpin);
}
m_hspi = cfg->hspi;
if (cfg->spi_mode_select != PinNull) {
m_spi_mode_select_gpio = new ZGPIO();
m_spi_mode_select_gpio->initAsOutput(cfg->spi_mode_select, ZGPIO::kMode_nopull, false, false);
}
m_hspi = cfg->spi;
enableIC(false);
// tmc5130_init(&m_TMC5130, channel, &m_tmc_api_config, &tmc5130_defaultRegisterResetState[0]);
@ -93,16 +97,14 @@ uint8_t TMC5130::reset() {
}
return 0;
}
int32_t TMC5130::getXACTUAL() { return readInt(TMC5130_XACTUAL) / m_scale; }
void TMC5130::setXACTUAL(int32_t value) { writeInt(TMC5130_XACTUAL, value * m_scale); }
int32_t TMC5130::getVACTUAL() { return readInt(TMC5130_VACTUAL) / m_scale; }
void TMC5130::setAcceleration(float accelerationpps2) { writeInt(TMC5130_AMAX, (int32_t)(accelerationpps2 * m_scale)); } // 设置最大加速度
void TMC5130::setDeceleration(float accelerationpps2) { writeInt(TMC5130_DMAX, (int32_t)(accelerationpps2 * m_scale)); } // 设置最大减速度
void TMC5130::setMotorShaft(bool reverse) { PRV_FIELD_WRITE(TMC5130_GCONF, TMC5130_SHAFT_MASK, TMC5130_SHAFT_SHIFT, reverse); }
void TMC5130::setIHOLD_IRUN(uint8_t ihold, uint8_t irun, uint16_t iholddelay) {
writeInt(TMC5130_IHOLD_IRUN, (iholddelay << TMC5130_IHOLDDELAY_SHIFT) | (irun << TMC5130_IRUN_SHIFT) | (ihold << TMC5130_IHOLD_SHIFT));
}
uint32_t TMC5130::readChipVERSION() {
int32_t TMC5130::getXACTUAL() { return readInt(TMC5130_XACTUAL) / m_scale; }
void TMC5130::setXACTUAL(int32_t value) { writeInt(TMC5130_XACTUAL, value * m_scale); }
int32_t TMC5130::getVACTUAL() { return readInt(TMC5130_VACTUAL) / m_scale; }
void TMC5130::setAcceleration(float accelerationpps2) { writeInt(TMC5130_AMAX, (int32_t)(accelerationpps2 * m_scale)); } // 设置最大加速度
void TMC5130::setDeceleration(float accelerationpps2) { writeInt(TMC5130_DMAX, (int32_t)(accelerationpps2 * m_scale)); } // 设置最大减速度
void TMC5130::setMotorShaft(bool reverse) { PRV_FIELD_WRITE(TMC5130_GCONF, TMC5130_SHAFT_MASK, TMC5130_SHAFT_SHIFT, reverse); }
void TMC5130::setIHOLD_IRUN(uint8_t ihold, uint8_t irun, uint16_t iholddelay) { writeInt(TMC5130_IHOLD_IRUN, (iholddelay << TMC5130_IHOLDDELAY_SHIFT) | (irun << TMC5130_IRUN_SHIFT) | (ihold << TMC5130_IHOLD_SHIFT)); }
uint32_t TMC5130::readICVersion() {
uint32_t chipID = PRV_FIELD_READ(TMC5130_IOIN, TMC5130_VERSION_MASK, TMC5130_VERSION_SHIFT);
return chipID;
}

18
components/tmc/ic/ztmc5130.hpp

@ -62,9 +62,12 @@ class Tmc5130RampStat {
class TMC5130 : public IStepperMotor {
public:
typedef struct {
SPI_HandleTypeDef *hspi;
Pin_t enn_pin;
Pin_t csn_pin;
SPI_HandleTypeDef *spi;
Pin_t csgpio = PinNull; //
Pin_t resetPin = PinNull; //
Pin_t fREEZEPin = PinNull; //
Pin_t ennPin = PinNull; //
Pin_t spi_mode_select = PinNull; //
} cfg_t;
protected:
@ -73,9 +76,10 @@ class TMC5130 : public IStepperMotor {
cfg_t m_cfg;
ZGPIO *m_csnpin = NULL;
ZGPIO *m_ennpin = NULL;
SPI_HandleTypeDef *m_hspi = NULL;
ZGPIO *m_csnpin = NULL;
ZGPIO *m_ennpin = NULL;
ZGPIO *m_spi_mode_select_gpio = NULL;
SPI_HandleTypeDef *m_hspi = NULL;
// uint8_t m_channel;
uint32_t m_lastCallPeriodicJobTick;
@ -101,7 +105,7 @@ class TMC5130 : public IStepperMotor {
* *
*******************************************************************************/
uint32_t readChipVERSION(); // 5130:0x11
uint32_t readICVersion(); // 5130:0x11 5160:0x30
virtual int32_t getXACTUAL(); // 读取电机当前位置,与编码器的位置值不同,该值是电机在不丢步的情况下的位置
virtual void setXACTUAL(int32_t value); // 设置电机当前位置,与编码器的位置值不同,该值是电机在不丢步的情况下的位置

Loading…
Cancel
Save