TI中文支持网
TI专业的中文技术问题搜集分享网站

速度环pi

void CTRL_setParams(CTRL_Handle handle,USER_Params *pUserParams)
{
CTRL_Obj *obj = (CTRL_Obj *)handle;

_iq Kp,Ki,Kd;
_iq outMin,outMax;
_iq maxModulation;

MATH_vec2 Iab_out_pu = {_IQ(0.0),_IQ(0.0)};
MATH_vec2 Idq_out_pu = {_IQ(0.0),_IQ(0.0)};
MATH_vec2 Idq_ref_pu = {_IQ(0.0),_IQ(0.0)};
MATH_vec2 Vab_in_pu = {_IQ(0.0),_IQ(0.0)};
MATH_vec2 Vab_out_pu = {_IQ(0.0),_IQ(0.0)};
MATH_vec2 Vdq_out_pu = {_IQ(0.0),_IQ(0.0)};

// assign the motor type
CTRL_setMotorParams(handle,pUserParams->motor_type,
pUserParams->motor_numPolePairs,
pUserParams->motor_ratedFlux,
pUserParams->motor_Ls_d,
pUserParams->motor_Ls_q,
pUserParams->motor_Rr,
pUserParams->motor_Rs);

// assign other controller parameters
CTRL_setNumIsrTicksPerCtrlTick(handle,pUserParams->numIsrTicksPerCtrlTick);
CTRL_setNumCtrlTicksPerCurrentTick(handle,pUserParams->numCtrlTicksPerCurrentTick);
CTRL_setNumCtrlTicksPerSpeedTick(handle,pUserParams->numCtrlTicksPerSpeedTick);
CTRL_setNumCtrlTicksPerTrajTick(handle,pUserParams->numCtrlTicksPerTrajTick);

CTRL_setCtrlFreq_Hz(handle,pUserParams->ctrlFreq_Hz);
CTRL_setTrajFreq_Hz(handle,pUserParams->trajFreq_Hz);
CTRL_setTrajPeriod_sec(handle,_IQ(1.0/pUserParams->trajFreq_Hz));

CTRL_setCtrlPeriod_sec(handle,pUserParams->ctrlPeriod_sec);

CTRL_setMaxVsMag_pu(handle,_IQ(pUserParams->maxVsMag_pu));

CTRL_setIab_in_pu(handle,&Iab_out_pu);
CTRL_setIdq_in_pu(handle,&Idq_out_pu);
CTRL_setIdq_ref_pu(handle,&Idq_ref_pu);

CTRL_setIdRated_pu(handle,_IQ(pUserParams->IdRated/pUserParams->iqFullScaleCurrent_A));

CTRL_setVab_in_pu(handle,&Vab_in_pu);
CTRL_setVab_out_pu(handle,&Vab_out_pu);
CTRL_setVdq_out_pu(handle,&Vdq_out_pu);

CTRL_setSpd_out_pu(handle,_IQ(0.0));

CTRL_setRhf(handle,0.0);
CTRL_setLhf(handle,0.0);
CTRL_setRoverL(handle,0.0);

// reset the counters
CTRL_resetCounter_current(handle);
CTRL_resetCounter_isr(handle);
CTRL_resetCounter_speed(handle);
CTRL_resetCounter_state(handle);
CTRL_resetCounter_traj(handle);

// set the wait times for each state
CTRL_setWaitTimes(handle,&pUserParams->ctrlWaitTime[0]);

// set flags
CTRL_setFlag_enablePowerWarp(handle,false);
CTRL_setFlag_enableCtrl(handle,false);
CTRL_setFlag_enableOffset(handle,true);
CTRL_setFlag_enableSpeedCtrl(handle,true);
CTRL_setFlag_enableUserMotorParams(handle,false);
CTRL_setFlag_enableDcBusComp(handle,true);

// initialize the controller error code
CTRL_setErrorCode(handle,CTRL_ErrorCode_NoError);

// set the default controller state
CTRL_setState(handle,CTRL_State_Idle);

// set the number of current sensors
CTRL_setupClarke_I(handle,pUserParams->numCurrentSensors);

// set the number of voltage sensors
CTRL_setupClarke_V(handle,pUserParams->numVoltageSensors);

// set the default Id PID controller parameters
Kp = _IQ(0.1);
Ki = _IQ(pUserParams->ctrlPeriod_sec/0.004);
Kd = _IQ(0.0);
outMin = _IQ(-0.95);
outMax = _IQ(0.95);

PID_setGains(obj->pidHandle_Id,Kp,Ki,Kd);
PID_setUi(obj->pidHandle_Id,_IQ(0.0));
PID_setMinMax(obj->pidHandle_Id,outMin,outMax);
CTRL_setGains(handle,CTRL_Type_PID_Id,Kp,Ki,Kd);

// set the default the Iq PID controller parameters
Kp = _IQ(0.1);
Ki = _IQ(pUserParams->ctrlPeriod_sec/0.004);
Kd = _IQ(0.0);
outMin = _IQ(-0.95);
outMax = _IQ(0.95);

PID_setGains(obj->pidHandle_Iq,Kp,Ki,Kd);
PID_setUi(obj->pidHandle_Iq,_IQ(0.0));
PID_setMinMax(obj->pidHandle_Iq,outMin,outMax);
CTRL_setGains(handle,CTRL_Type_PID_Iq,Kp,Ki,Kd);

// set the default speed PID controller parameters
Kp = _IQ(0.02*pUserParams->maxCurrent*pUserParams->iqFullScaleFreq_Hz/pUserParams->iqFullScaleCurrent_A);
Ki = _IQ(2.0*pUserParams->maxCurrent*pUserParams->iqFullScaleFreq_Hz*pUserParams->ctrlPeriod_sec/pUserParams->iqFullScaleCurrent_A);
Kd = _IQ(0.0);
outMin = _IQ(-1.0);
outMax = _IQ(1.0);

PID_setGains(obj->pidHandle_spd,Kp,Ki,Kd);
PID_setUi(obj->pidHandle_spd,_IQ(0.0));
PID_setMinMax(obj->pidHandle_spd,outMin,outMax);
CTRL_setGains(handle,CTRL_Type_PID_spd,Kp,Ki,Kd);

// PID_setGains(pidHandle_MaxSpeed,Kp,Ki,Kd);
// PID_setUi(pidHandle_MaxSpeed,_IQ(0.0));
//PID_setMinMax(pidHandle_MaxSpeed,outMin,outMax);

PID_setGains(user_ctrl_handle->pidHandle_MaxSpeed,Kp,Ki,Kd);
PID_setUi(user_ctrl_handle->pidHandle_MaxSpeed,_IQ(0.0));
PID_setMinMax(user_ctrl_handle->pidHandle_MaxSpeed,outMin,outMax);

// set the speed reference
CTRL_setSpd_ref_pu(handle,_IQ(0.0));

// set the default Id current trajectory module parameters
TRAJ_setIntValue(obj->trajHandle_Id,_IQ(0.0));
TRAJ_setTargetValue(obj->trajHandle_Id,_IQ(0.0));
TRAJ_setMinValue(obj->trajHandle_Id,_IQ(0.0));
TRAJ_setMaxValue(obj->trajHandle_Id,_IQ(0.0));
TRAJ_setMaxDelta(obj->trajHandle_Id,_IQ(0.0));

// set the default the speed trajectory module parameters
TRAJ_setIntValue(obj->trajHandle_spd,_IQ(0.0));
TRAJ_setTargetValue(obj->trajHandle_spd,_IQ(0.0));
TRAJ_setMinValue(obj->trajHandle_spd,_IQ(0.0));
TRAJ_setMaxValue(obj->trajHandle_spd,_IQ(0.0));
TRAJ_setMaxDelta(obj->trajHandle_spd,_IQ(0.0));

// set the default maximum speed trajectory module parameters
TRAJ_setIntValue(obj->trajHandle_spdMax,_IQ(0.0));
TRAJ_setTargetValue(obj->trajHandle_spdMax,_IQ(0.0));
TRAJ_setMinValue(obj->trajHandle_spdMax,_IQ(0.0)); // not used
TRAJ_setMaxValue(obj->trajHandle_spdMax,_IQ(0.0)); // not used
TRAJ_setMaxDelta(obj->trajHandle_spdMax,_IQ(0.0)); // not used

// set the default estimator parameters
CTRL_setEstParams(obj->estHandle,pUserParams);

// set the maximum modulation for the SVGEN module
maxModulation = _IQ(MATH_TWO_OVER_THREE);
SVGEN_setMaxModulation(obj->svgenHandle,maxModulation);

return;
} // end of CTRL_setParams() function

速度环pi 这样计算,依据是什么?

// set the default speed PID controller parameters
Kp = _IQ(0.02*pUserParams->maxCurrent*pUserParams->iqFullScaleFreq_Hz/pUserParams->iqFullScaleCurrent_A);
Ki = _IQ(2.0*pUserParams->maxCurrent*pUserParams->iqFullScaleFreq_Hz*pUserParams->ctrlPeriod_sec/pUserParams->iqFullScaleCurrent_A);
Kd = _IQ(0.0);
outMin = _IQ(-1.0);
outMax = _IQ(1.0);

ming chen3:

经验值吧,就像电流环的kp参数计算方法一样。

赞(0)
未经允许不得转载:TI中文支持网 » 速度环pi
分享到: 更多 (0)