diff --git a/components/tmc/ic/ztmc5130.cpp b/components/tmc/ic/ztmc5130.cpp index ebb775c..ff4541d 100644 --- a/components/tmc/ic/ztmc5130.cpp +++ b/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; } diff --git a/components/tmc/ic/ztmc5130.hpp b/components/tmc/ic/ztmc5130.hpp index c8caebd..a4b0df1 100644 --- a/components/tmc/ic/ztmc5130.hpp +++ b/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); // 设置电机当前位置,与编码器的位置值不同,该值是电机在不丢步的情况下的位置