void RVP_setupPosPlan6Step_ModifyPlanVelocity(float Krpm) { _iq VelLim, AccLim, DecLim; _iq20 JrkLim; uint16_t FromState,ToState,AndOr,CondIdx1,CondIdx2; ST_Obj *stObj = (ST_Obj *) RVP_stHandle[5]; STPOSPLAN_getCfgTran(stObj->posPlanHandle, 1, &FromState, &ToState, &AndOr, &CondIdx1, &CondIdx2, &VelLim, &AccLim, &DecLim, &JrkLim); // From StateB to StateC RVP_DisplayPosPlan(VelLim,AccLim,DecLim,JrkLim); VelLim = _IQ24(Krpm * ST_SPEED_PU_PER_KRPM); // ST_SPEED_PU_PER_KRPM =0.1333 STPOSPLAN_setCfgTran(stObj->posPlanHandle, 1, FromState, ToState, (ST_PlanCond_e) AndOr, CondIdx1, CondIdx2, VelLim, AccLim, DecLim, JrkLim); // From StateB to StateC STPOSPLAN_getCfgTran(stObj->posPlanHandle, 1, &FromState, &ToState, &AndOr, &CondIdx1, &CondIdx2, &VelLim, &AccLim, &DecLim, &JrkLim); RVP_DisplayPosPlan(VelLim,AccLim,DecLim,JrkLim); } void RVP_DisplayPosPlan(_iq VelLim, _iq AccLim, _iq DecLim, _iq20 JrkLim) { zprintf("Velim : %Q24\n",VelLim); zprintf("AccLim: %Q24\n",AccLim); zprintf("DecLim: %Q24\n",DecLim); zprintf("JrkLim: %Q20\n",JrkLim); zprintf("---------------------\n"); }
Attached code which modifies the VeLim for different speed parameter before starts. I tried a different speed and it does not comply. Below is the terminal snapshot, the activity period is the time taken to complete the plan should differ (as well as observing the motor spins).... but it does not between 100rpm and 1000rpm
The code below work when I change the VelLim in there for each debug flash and run.
I have read the Instant Spin User Guide but could not find the reason.
void RVP_setupPosPlan_Plan6_ValveZero(ST_Handle sthandle) { _iq velMax, accMax, jrkMax; // DWORD = 32 bit. _iq velLim, accLim, decLim; _iq20 jrkLim; ST_Obj *stObj = (ST_Obj *)sthandle; memset(stPosPlanCfgArray_Plan6,0,sizeof(stPosPlanCfgArray_Plan6)); // Pass the configuration array pointer into SpinTAC Position Plan STPOSPLAN_setCfgArray(stObj->posPlanHandle, &stPosPlanCfgArray_Plan6[0], sizeof(stPosPlanCfgArray_Plan6), 0, 0, 0, 4, 4); //---------------------------------------------------------------------------- // Establish the Velocity, Acceleration, Deceleration, and Jerk Maximums //---------------------------------------------------------------------------- velMax = _IQ24(2.5 * ST_SPEED_PU_PER_KRPM); // 1000 RPM to PU number. = 0.333 // Limit:0.0 to +1.0 accMax = _IQ24(17.0); // Max Accel, should this be 120, not 127? jrkMax = _IQ20(266.0); // Max Jerk //---------------------------------------------------------------------------- velLim = _IQ24(0.05 * ST_SPEED_PU_PER_KRPM); // ST_SPEED_PU_PER_KRPM =0.1333 // Limit:0.0 to 1.0 accLim = _IQ24(17.0); //_IQ24(1.0 * ST_SPEED_PU_PER_KRPM); 17 is very max Accel for Q24 // Limit:0.001 to 120.0 decLim = _IQ24(17.0); //_IQ24(1.0 * ST_SPEED_PU_PER_KRPM); // Limit:0.001 to 120.0 //----------------------------------------------------------------------------Jerk via ST_MOVE_CUR_STCRV jrkLim = _IQ20(266.0); // Max is 266 under ST_MOVE_CUR_STCRV only. // Limit:0.0005, 2000.0 //gMotorVars.SpinTAC.PosMoveCurveType: See pobj->PosMoveCurveType[5] in RVP_MotorPlan.c STPOSPLAN_setCfg(stObj->posPlanHandle, _IQ(ST_SAMPLE_TIME), false); // Do not repeat Loop. STPOSPLAN_setCfgHaltState(stObj->posPlanHandle, 0, 0, velMax, accMax, jrkMax, 1000L); // Configure halt state: PosStep[MRev], PosStepFrac[MRev], VelEnd, AccMax, JrkMax, Timer //Example: STPOSPLAN_addCfgState(handle, PosStep[MRev], PosStepFrac[MRev], StateTimer[ticks]); STPOSPLAN_addCfgState(stObj->posPlanHandle, 0, 0, 1L); // StateIdx0: A STPOSPLAN_addCfgState(stObj->posPlanHandle, +6, 0, 1L); // StateIdx1: B // This does nothing since it now controlled by STEP/FRAC code. STPOSPLAN_addCfgState(stObj->posPlanHandle, 0, 0, 1L); // StateIdx2: C //Example: STPOSPLAN_addCfgTran(handle, FromState, ToState, CondOption, CondIdx1, CondiIdx2, VelLim[pups], AccLim[pups2], DecLim[pups2], JrkLim[pups3]); // NOTE: The deceleration limit must be set between the following bounds [acceleration limit, 10*acceleration limit] STPOSPLAN_addCfgTran(stObj->posPlanHandle, 0, 1, ST_COND_NC, 0, 0, velLim, accLim, decLim, jrkLim); // From StateA to StateB STPOSPLAN_addCfgTran(stObj->posPlanHandle, 1, 2, ST_COND_NC, 0, 0, velLim, accLim, decLim, jrkLim); // From StateB to StateC STPOSPLAN_addCfgTran(stObj->posPlanHandle, 2, 0, ST_COND_NC, 0, 0, velLim, accLim, decLim, jrkLim); // From StateD to StateA }