Skip to content

Commit 6e74903

Browse files
committed
FIx: move the calib data in heap instead of stack, add state to autotune and cogging to react to security in RUN process.
1 parent da28a7d commit 6e74903

2 files changed

Lines changed: 275 additions & 218 deletions

File tree

Firmware/FFBoard/UserExtensions/Inc/TMC4671.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,16 @@ enum class TMC_PwmMode : uint8_t {off = 0,HSlow_LShigh = 1, HShigh_LSlow = 2, re
7373

7474
enum class TMC_StartupType{NONE,coldStart,warmStart};
7575

76-
enum class TMC_GpioMode{DebugSpi,DSAdcClkOut,DSAdcClkIn,Aout_Bin,Ain_Bout,Aout_Bout,Ain_Bin};
76+
enum class CoggingState : uint8_t { Init, ForwardWait, ForwardMeasure, BackwardWait, BackwardMeasure, Compute };
77+
78+
struct CoggingCalibData {
79+
int32_t temp_fw[CALIB_MAP_SIZE] = {0};
80+
int32_t temp_bw[CALIB_MAP_SIZE] = {0};
81+
uint16_t counts_fw[CALIB_MAP_SIZE] = {0};
82+
uint16_t counts_bw[CALIB_MAP_SIZE] = {0};
83+
};
7784

85+
enum class TMC_GpioMode{DebugSpi,DSAdcClkOut,DSAdcClkIn,Aout_Bin,Ain_Bout,Aout_Bout,Ain_Bin};
7886
enum class MotorType : uint8_t {NONE=0,DC=1,STEPPER=2,BLDC=3};
7987
enum class PhiE : uint8_t {ext=1,openloop=2,abn=3,hall=5,aenc=6,aencE=7,NONE,extEncoder};
8088
enum class MotionMode : uint8_t {stop=0,torque=1,velocity=2,position=3,prbsflux=4,prbstorque=5,prbsvelocity=6,uqudext=8,encminimove=9,NONE};
@@ -725,11 +733,27 @@ friend class TMCDebugBridge;
725733
bool cogging_enabled = false;
726734
void saveCoggingTable();
727735
void clearCoggingTable();
736+
737+
CoggingState coggingCalibState = CoggingState::Init;
738+
std::unique_ptr<CoggingCalibData> coggingData = nullptr;
739+
uint32_t calibStartTime = 0;
740+
MotionMode prevCalibMode = MotionMode::stop;
741+
void handleStateCoggingCalibration();
728742
#endif
729743

730744
uint16_t maxSlewRate = MAX_SLEW_RATE; // in mA/ms
731745
void measureMaxSlewRate();
732746

747+
enum class PidTuneState : uint8_t { Init, RampFluxP, TuneFluxI_Pulse, TuneFluxI_Measure, Done };
748+
PidTuneState pidTuneState = PidTuneState::Init;
749+
uint32_t pidTuneStartTime = 0;
750+
uint16_t tuneFluxI = 0, tuneFluxP = 100;
751+
int32_t tuneMeasurePeak = 0;
752+
PhiE lastPidTunePhiE = PhiE::NONE;
753+
MotionMode lastPidTuneMode = MotionMode::stop;
754+
TMC4671PIDConf pidTuneNewPids;
755+
void handleStatePidAutoTune();
756+
733757
void initAdc(uint16_t mdecA, uint16_t mdecB,uint32_t mclkA,uint32_t mclkB);
734758
void setPwm(uint8_t val,uint16_t maxcnt,uint8_t bbmL,uint8_t bbmH);// 100MHz/maxcnt+1
735759
void setPwm(TMC_PwmMode val);// pwm mode

0 commit comments

Comments
 (0)