From f45df89965564db5c5ad518c7a704571726b8a6e Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 1 Sep 2024 10:32:20 +0800 Subject: [PATCH] add getXactualRAW --- tmcdriver/tmc51x0/tmc51x0.cpp | 19 ++++++++++++------- tmcdriver/tmc51x0/tmc51x0.hpp | 26 +++++++++++--------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/tmcdriver/tmc51x0/tmc51x0.cpp b/tmcdriver/tmc51x0/tmc51x0.cpp index fecd50d..126006a 100644 --- a/tmcdriver/tmc51x0/tmc51x0.cpp +++ b/tmcdriver/tmc51x0/tmc51x0.cpp @@ -30,7 +30,7 @@ static const uint8_t tmc5130_defaultRegisterAccess[TMC5130_REGISTER_COUNT] = { #endif /*********************************************************************************************************************** - * 工具宏 * + * 工具? * ***********************************************************************************************************************/ #define FIELD_SET(data, mask, shift, value) (data = (((data) & (~(mask))) | (((value) << (shift)) & (mask)))) @@ -106,7 +106,7 @@ void TMC51X0::writeField(uint8_t add, uint32_t mask, uint32_t shift, uint32_t va int32_t TMC51X0::readInt(uint8_t address) { /** * @WARNING: - * 这里没有判断寄存器是否可读,有些寄存器是不可读所以,所以可能读回来的数值和写入数值是不相等的 + * 这里没有判断寄存器是否可读,有些寄存器是不可读所以,所以可能?回来的数值和写入数值是不相等的 */ address = TMC51x0_ADDRESS(address); @@ -225,6 +225,11 @@ int32_t TMC51X0::getXACTUAL() { return to_user_pos(readInt(TMC5130_XACTUAL)); } +int32_t TMC51X0::getXactualRAW() { + zlock_guard lkg(m_mutex); + return readInt(TMC5130_XACTUAL); +} + int32_t TMC51X0::getVACTUAL() { zlock_guard lkg(m_mutex); return to_user_pos(readInt(TMC5130_VACTUAL)); @@ -259,7 +264,7 @@ bool TMC51X0::isTMC5130() { return chipId == kTMC5130; } -TMC5130DevStatusReg_t TMC51X0::getDevStatus() { // R 读后不清 +TMC5130DevStatusReg_t TMC51X0::getDevStatus() { // R zlock_guard lkg(m_mutex); static_assert(sizeof(TMC5130DevStatusReg_t) == 4); uint32_t value = readInt(TMC5130_DRVSTATUS); @@ -267,7 +272,7 @@ TMC5130DevStatusReg_t TMC51X0::getDevStatus() { // R 读后不清 memcpy(&val, &value, sizeof(TMC5130DevStatusReg_t)); return val; } -TMC5130GState_t TMC51X0::getGState() { // R+C 读后自动清除 +TMC5130GState_t TMC51X0::getGState() { // R+C zlock_guard lkg(m_mutex); static_assert(sizeof(TMC5130GState_t) == 4); uint32_t value = readInt(TMC5130_GSTAT); @@ -365,9 +370,9 @@ bool TMC51X0::setEncResolution(int32_t enc_resolution) { /** * @brief * - * 1.假设电机是256细分 - * 2.假设TMC5130_ENC_CONST是十进制模式 - * 3.只支持指定分辨率的编码器 + * 1.假?电机是256细分 + * 2.假?TMC5130_ENC_CONST?十进制模? + * 3.??持指定分辨率的编码器 */ int32_t enc_resolution_tmp = enc_resolution * 4; diff --git a/tmcdriver/tmc51x0/tmc51x0.hpp b/tmcdriver/tmc51x0/tmc51x0.hpp index bd92870..d9b97ac 100644 --- a/tmcdriver/tmc51x0/tmc51x0.hpp +++ b/tmcdriver/tmc51x0/tmc51x0.hpp @@ -12,10 +12,6 @@ namespace iflytop { /** * @brief - * 注意事项 - * - * 1. 6点加速控制只在位?模式下有效,在速度模式下无? - * 2. 速度模式下只有AMAX有效 * */ class TMC51X0Cfg { @@ -40,18 +36,16 @@ class TMC51X0 { int32_t m_scale_deceleration = 1; mres_type_t m_MRES = kmres_256; double m_onecirclepulse = 51200; - int32_t m_enc_resolution = 0; // 编码器分辨率,默认只有在256细分的情况下有效 + int32_t m_enc_resolution = 0; // - zmutex m_mutex={"TMC51X0"}; + zmutex m_mutex = {"TMC51X0"}; bool m_driErr = false; public: void initialize(TMC51X0Cfg cfg); private: - /******************************************************************************* - * 驱动器寄存器读写方法 * - *******************************************************************************/ + void readWriteArray(uint8_t *data, size_t length); void writeDatagram(uint8_t address, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4); void writeInt(uint8_t address, int32_t value); @@ -76,21 +70,23 @@ class TMC51X0 { /*********************************************************************************************************************** * get state * ***********************************************************************************************************************/ - int32_t getXACTUAL(); // 当前位置 - int32_t getVACTUAL(); // 当前速度 + int32_t getXACTUAL(); // now pos + int32_t getVACTUAL(); // now vel int32_t getEncVal(); // ENCVAL TMC5130RampStat getRampStat(); - TMC5130DevStatusReg_t getDevStatus(); // R 读后不清 - TMC5130GState_t getGState(); // R+C 读后?动清? + TMC5130DevStatusReg_t getDevStatus(); // R + TMC5130GState_t getGState(); // R+C read and clear int32_t readICVersion(); - bool isReachTarget(TMC5130RampStat *state); // ?否到达目标位? + int32_t getXactualRAW();// now pos 51200 + + bool isReachTarget(TMC5130RampStat *state); // is reach target bool isTMC5130(); /*********************************************************************************************************************** * set state * ***********************************************************************************************************************/ - void setXACTUAL(int32_t value); // 设置当前位置 + void setXACTUAL(int32_t value); // set pos void setMotorShaft(bool reverse); void setIHOLD_IRUN(uint8_t ihold, uint8_t irun, uint16_t iholddelay); void setGlobalScale(uint8_t globalscale); // ONLY for 5160