if(CTRL_doSpeedCtrl(handle))
{
_iq refValue = TRAJ_getIntValue(obj->trajHandle_spd);
_iq fbackValue = EST_getFm_pu(obj->estHandle);
_iq outMax = TRAJ_getIntValue(obj->trajHandle_spdMax);
_iq outMin = -outMax;
// reset the speed count
CTRL_resetCounter_speed(handle);
PID_setMinMax(obj->pidHandle_spd,outMin,outMax);
PID_run_spd(obj->pidHandle_spd,refValue,fbackValue,CTRL_getSpd_out_addr(handle));
}
疑问1: 速度环 没有做跟踪运算。 但是调试的时候 看到 跟踪值 在向目标接近。
疑问2: 跟踪函数 static inline void TRAJ_run(TRAJ_Handle handle) 的最大最小值 为0, 就是说 TRAJ_run(TRAJ_Handle handle) 计算值为0
那么速度怎跟踪的?在程序中始终没有找到 设定的速度值 赋给 跟踪函数的 目标值 的 语句。 最大最小值 初始化为0,后面没有设定。
整个例程中也没有找到 TRAJ_run(TRAJ_Handle handle) 调用的地方。 那么速度跟踪怎么实现的了?
static inline void TRAJ_run(TRAJ_Handle handle)
{
_iq targetValue = TRAJ_getTargetValue(handle);
_iq intValue = TRAJ_getIntValue(handle);
_iq error = targetValue – intValue;
_iq maxDelta =_IQabs(TRAJ_getMaxDelta(handle));
_iq minValue = TRAJ_getMinValue(handle);
_iq maxValue = TRAJ_getMaxValue(handle);
// increment the value
intValue += _IQsat(error,maxDelta,-maxDelta);
// bound the value
intValue = _IQsat(intValue,maxValue,minValue);
// store the value
TRAJ_setIntValue(handle,intValue);
return;
} // end of TRAJ_run() function